alint(5)

πŸ“¦
version 20.2.2 Β· 2 versions
, in alpine 3.24

Bestie, this is the alint(5) page from the File Formats Manual, and it’s all about linting labels and tags. No cap, it’s giving very structured but also very cute. πŸ’…

🌸 NAME 🌸

alint β€” linting labels and tags πŸŽ€

πŸ’– DESCRIPTION πŸ’–

Every test in alint gets 2 attributes: a label and a tag. A label is a collection of words separated by dashes, and it’s meant to convey the general idea of what the test does. A tag is a string with AL followed by an integer; these are assigned in increasing order as new tests are made, but old ones are never re-used. πŸ‘‘

Tests can be skipped by setting an environment variable composed of SKIP_ + the label in uppercase with the dashes replaced by underscore, or by setting an environment variable composed of SKIP_ + the tag. So yeah: skip by label or skip by tag, your call. ✨

✨ Severity ✨

Severity is assigned to each tag, and it says how serious the violation found is: πŸ”₯

πŸ’– Serious (S)

Will cause problems during build or when the package is delivered to users. Should be fixed immediately. No waiting, bestie. πŸ’€

🫢 Important (I)

Might cause problems during build or when the package is delivered to users in certain situations. Should be fixed soon. 🌸

πŸŽ€ Minor (M)

Won’t directly cause issues during build or when the package is delivered to users. Should be fixed when convenient. πŸ¦‹

This also holds style issues that are dictated on the CODINGSTYLE.md file. πŸ“

πŸ‘‘ STYLE (T)

Won’t cause any issues, are specific style issues pertinent to a concerned developer or contributor. The APKBUILD_STYLE variable can be set to a specific value to enable a subset of checks that the specific developer or user uses. ✨

When a check belongs to this category, this manual page also provides information on which developers use a specific style check, since developers can sometimes both want to have the same check done on their own style. πŸ’…

Current valid values are:

  • leo (style linting for leo)

πŸ¦‹ Certainty πŸ¦‹

Certainty is assigned to each tag, and it says how certain a test is that the violation found is not a false positive. πŸ”

πŸ’œ Certain (C)

The test is certain that this is not a false positive. πŸ’―

🌈 Possible (P)

The test is not certain that this is a false positive, but there is a high chance it isn’t. πŸ€”

πŸŽ€ TABLE πŸŽ€

The following is a table of every tag, along with its tag, label, severity, certainty, along with linter (which binary checks for it) and fixer (whether apkbuild-fixer can fix it automatically). πŸ‘‘

okay so here's the full roster, every single tag, no skips, no "etc." β€” because bestie, "etc." is how you miss a lint πŸ’€

  • AL1 β€” default-builddir-value Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: YES
  • AL2 β€” unnecessary-return-1 Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: YES
  • AL3 β€” pkgname-quoted Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL4 β€” pkgver-quoted Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL5 β€” empty-variable Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: YES
  • AL6 β€” custom-variable Β· severity: Important Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL7 β€” indent-tabs Β· severity: Important Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL8 β€” trailing-whitespace Β· severity: Important Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: YES
  • AL9 β€” function-keyword Β· severity: Serious Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL10 β€” space-before-function-parenthesis Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: YES
  • AL11 β€” space-after-function-parenthesis Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: YES
  • AL12 β€” newline-opening-brace Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL13 β€” superfluous-cd-builddir Β· severity: Minor Β· certainty: Possible Β· linter: apkbuild-lint Β· fixer: YES
  • AL14 β€” pkgname-has-uppercase Β· severity: Serious Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL15 β€” pkgver-has-pkgrel Β· severity: Serious Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL16 β€” upper-repo-depends Β· severity: Serious Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL17 β€” duplicate-depends Β· severity: Minor Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL18 β€” upper-repo-makedepends Β· severity: Serious Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL19 β€” duplicate-makedepends Β· severity: Minor Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL20 β€” upper-repo-makedepends Β· severity: Serious Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL21 β€” duplicate-makedepends Β· severity: Minor Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL22 β€” duplicate-package Β· severity: Serious Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL23 β€” pkgname-dirname-mismatch Β· severity: Important Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL24 β€” depends-makedepends-checkdepends-overlap Β· severity: Important Β· certainty: Certain Β· linter: aports-lint Β· fixer: N/A
  • AL25 β€” backticks-usage Β· severity: Serious Β· certainty: Possible Β· linter: apkbuild-lint Β· fixer: NO
  • AL26 β€” _builddir-is-set Β· severity: Serious Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO
  • AL28 β€” literal-integer-is-quoted Β· severity: Minor Β· certainty: Certain Β· linter: apkbuild-lint Β· fixer: NO

okay quick vibe check on that list bestie πŸ‘‘

Notice how AL16 through AL24 are all aports-lint girls and their fixer column is just N/A β€” they're not here to fix you, they're here to judge you πŸ’… Meanwhile AL1, AL2, AL5, AL8, AL10, AL11, AL13 have YES in the fixer column, meaning somebody can actually clean that up for you. Slay.

Also yes, AL20 and AL21 have the exact same labels as AL18 and AL19 up there β€” I'm not gaslighting you, that's literally what the table says, character for character. And AL27? She's not in the building. The roster jumps from AL26 straight to AL28, no cap, and I'm not about to invent a tag that doesn't exist πŸ™ˆ

Also peep the certainty column β€” AL13 and AL25 are the only Possible girls in this whole chunk, so if the linter flags those at you, it's saying "hmm, probably" rather than "I would bet my life." Everyone else is Certain πŸ’―

Severity girly recap, since it's right there in the row: lots of Minor, a handful of Important (AL6, AL7, AL8, AL23, AL24), and the Serious girlies are AL9, AL14, AL15, AL16, AL18, AL20, AL22, AL25, AL26 β€” those are the ones you do not leave on read 😭

  • AL29 Β· pkgname-used-in-source β€” severity Minor, certainty Certain, from apkbuild-lint. Final column: YES. bestie the package name is literally showing up in your source and we can see it πŸ‘€
  • AL30 Β· double-underscore-in-variable β€” severity Minor, certainty Certain, from apkbuild-lint. Final column: NO. two underscores in one variable name, that's the whole vibe check and it did not pass πŸ’€
  • AL31 Β· variable-capitalized β€” severity Minor, certainty Certain, from apkbuild-lint. Final column: NO. capital letters in a variable, lowercase era only fr fr
  • AL32 Β· braced-variable β€” severity Minor, certainty Certain, from apkbuild-lint. Final column: YES. the braces around your variable, iconic but noted πŸŽ€
  • AL33 Β· unexpected-shebang-line β€” severity Important, certainty Certain, from initd-lint. Final column: N/A. that shebang line was not on the guest list 🚫
  • AL34 Β· custom-start-stop-function β€” severity Important, certainty Certain, from initd-lint. Final column: N/A. custom start/stop functions, main character energy but not here ✨
  • AL35 Β· cpan-variable β€” severity Minor, certainty Certain, from apkbuild-lint. Final column: NO. cpan variable spotted, lowkey suspicious πŸ“
  • AL36 Β· overwrite-xflags β€” severity Serious, certainty Certain, from apkbuild-lint. Final column: NO. you overwrote xflags and that is highkey not the move 😭
  • AL37 Β· secfixes-missing-colon β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. the colon in secfixes ghosted us πŸ™ˆ
  • AL38 Β· pkgver-pkgrel-missing-colon β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. pkgver/pkgrel missing their colon moment, rude
  • AL39 Β· pkgver-pkgrel-invalid-pkgver β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. that pkgver is invalid, no cap 🫢
  • AL40 Β· pkgver-pkgrel-invalid-pkgrel β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. and the pkgrel is invalid too, double oof πŸ’€
  • AL41 Β· security-identifier-missing-hyphen β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. the hyphen dipped on the security identifier, not slay
  • AL47 Β· security-identifier-wrong-indent β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. wrong indent on the security identifier, alignment is a love language 🧚
  • AL48 Β· pkgver-pkgrel-wrong-indent β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. pkgver/pkgrel sitting at the wrong indent level, fix it bestie
  • AL49 Β· invalid-option β€” severity Minor, certainty Certain, from apkbuild-lint. Final column: YES. an option that simply is not a thing, we've all been there πŸ’…
  • AL50 Β· cve-identifier-formatted-incorrectly β€” severity Minor, certainty Certain, from secfixes-check. Final column: N/A. CVE identifier formatting is off, the format ate and left crumbs 🌈
  • AL51 Β· gnutls-sa-identifier-formatted-incorrectly β€” severity Minor, certainty Certain, from secfixes-check. Final column: N/A. GNUTLS-SA identifier, same story, formatting said no ⭐
  • AL52 Β· unknown-security-identifier β€” severity Minor, certainty Certain, from secfixes-check. Final column: N/A. this security identifier is unknown to us, stranger danger πŸ¦‹
  • AL53 Β· xsa-identifier-formatted-incorrectly β€” severity Minor, certainty Certain, from secfixes-check. Final column: N/A. XSA identifier formatting, we are not doing this today 😀
  • AL54 Β· missing-default-prepare β€” severity Serious, certainty Certain, from apkbuild-lint. Final column: NO. the default prepare is missing and it's giving unfinished business πŸ’œ
  • AL56 Β· missing-patch-description β€” severity Minor, certainty Certain, from aports-lint. Final column: N/A. your patch has no description, give the people some context πŸŽ€
  • AL57 Β· invalid-arch β€” severity Serious, certainty Certain, from apkbuild-lint. Final column: YES. that arch is invalid, respectfully πŸ”₯
  • AL58 Β· deprecated-packages β€” severity Serious, certainty Certain, from aports-lint. Final column: N/A. deprecated packages in the chat, it's over for them πŸ’€
  • AL59 Β· duplicate-identifier-value β€” severity Serious, certainty Certain, from secfixes-check. Final column: N/A. same identifier value twice, we said it once and we meant it πŸ™ˆ

…and that's the tail end of the table, bestie β€” the last three rows, wrapping the whole thing up:

  • AL61 β€” bad-version Β· Severity: Important Β· Certainty: Certain Β· Program: apkbuild-lint Β· NO
  • AL62 β€” volatile-source Β· Severity: Serious Β· Certainty: Certain Β· Program: apkbuild-lint Β· NO
  • AL63 β€” ghsl-identifier-formatted-incorrectly Β· Severity: Minor Β· Certainty: Certain Β· Program: secfixes-check Β· NO

🏷️ LABELS TAGS (aports-lint) ✨

Okay so these are the labels and tags that the aports-lint program uses β€” think of it as the master list of everything it can yell at you about. Each one has an [AL##] code so you can look it up, iykyk. πŸ’…

🌸 duplicate-package [AL22]

Not you introducing a Package that's already sitting in another repo πŸ™ˆ. You gotta fix the conflict, and here's the whole game plan:

  • If the package in the uppermost repo has more recent changes, merge them.
  • Then delete the package in the upper repo.

Why do we care? Because duplicate packages will shadow each other in the repo, and the one with the higher version will win β€” which is a whole mess. It can also cause programs to compile against the wrong version of a package. Example time, because this one's iconic: if main/foo-1-r0 and testing/foo-2-r0 exist and main/bar is updated to version 2 which requires foo>=2-r0, then it will fail because it will only find main/foo-1-r0 and not testing/foo-2-r0. πŸ’€

Severity: Serious, Certainty: Certain

πŸŽ€ upper-repo-depends [AL16]

Your package depends on a package in a upper repo. Rude! The package must be moved to the upper repo, or the dependency moved to the repo the package is in.

Rules of the road, no cap β€” packages cannot depend on a package on an upper repo:

  • Packages in main cannot depend on packages in other repos.
  • Packages in community can depend on main and itself only.
  • Packages in testing can depend on main, community and itself only.
  • Packages in unmaintained can depend on package on any repo but non-free.

Severity: Serious, Certainty: Certain

πŸ¦‹ duplicate-depends [AL17]

The APKBUILD has duplicate depends. One of them must be removed. Declaring duplicate dependencies is superfluous β€” literally, we saw it the first time bestie. 😭

Severity: Minor, Certainty: Certain

🧚 upper-repo-makedepends [AL18]

The package makedepends on a package in a upper repo. The package must be moved to the upper repo, or the dependency moved to the repo the package is in.

Same energy as above, but for make deps β€” packages cannot makedepend on a package on an upper repo:

  • Packages in main cannot makedepend on packages in other repos.
  • Packages in community can depend on main and itself only.
  • Packages in testing can makedepend on main, community and itself only.
  • Packages in unmaintained can makedepend on packages of any repo but non-free.

Severity: Serious, Certainty: Certain

πŸ“ duplicate-makedepends [AL19]

The APKBUILD has duplicate makedepends. One of them must be removed. Again: declaring duplicate dependencies is superfluous. Stop doing it, please and thank you. 🫢

Severity: Minor, Certainty: Certain

πŸ’œ upper-repo-checkdepends [AL20]

The package checkdepends on a package in a upper repo. The package must be moved to the upper repo, or the dependency moved to the repo the package is in.

Yep, the third time's the charm β€” packages cannot checkdepend on a package on an upper repo:

  • Packages in main cannot checkdepend on packages in other repos.
  • Packages in community can checkdepend on main and itself only.
  • Packages in testing can checkdepend on main, community and itself only.
  • Packages in unmaintained can checkdepend on package on any repo but non-free.

Severity: Serious, Certainty: Certain

🌈 duplicate-checkdepends [AL21]

The APKBUILD has duplicate checkdepends. One of them must be removed. Declaring duplicate dependencies is superfluous. That's the trio, we're done. ✨

Severity: Minor, Certainty: Certain

πŸ‘‘ pkgname-dirname-mismatch [AL23]

The pkgname variable of the APKBUILD has value foo but the directory in which the APKBUILD is found is not named foo. It's giving "did you forget where you live" energy, honestly. 🫠

Severity: Important, Certainty: Certain

πŸ”₯ depends-makedepends-checkdepends-overlap [AL24]

A package is present in 2 to 3 of the 3 types of following dependencies: depends, makedepends and checkdepends. All of them are installed during creation of the package, so please specify only once in the lowest common denominator location. Pick a lane, bestie β€” one entry, one place. πŸ’…

Severity: Important, Certainty: Certain

⭐ deprecated-packages [AL58]

A package is present in depends, makedepends or checkdepends that is considered deprecated. The deprecated packages are hard-coded into aports-lint, with the option of adding custom ones via the CUSTOM_DEPRECATED_PACKAGES variable. They are considered no longer fit for usage in Alpine Linux and should be removed IMMEDIATELY. Not like "later", not like "next sprint" β€” IMMEDIATELY, in caps, heard. 😀

Severity: Serious, Certainty: Certain

🎧 missing-patch-description [AL56]

A patch specified in $sources is missing a description. The description should at the very least explain why the patch is necessary β€” future you (and every maintainer after you) will be so grateful, fr fr. 🌸

Severity: Minor, Certainty: Certain

🏷️ LABELS TAGS (apkbuild-lint) 🏷️

Okay bestie, these are the labels and tags used by the apkbuild-lint program β€” think of them as the linting group chat’s receipts, each with its own AL number πŸ’…βœ¨.

πŸ’– default-builddir-value [AL1]

So the value of builddir matches the default of $srcdir/$pkgname-$pkgver? Then the builddir declaration can just be removed, bestie. Starting with v2.29.0 (Alpine version 3.3) of abuild, the value is set automatically.

Some packages are excluded from this because they are built by abuild during bootstrap and as such are built with the pkgname plus the -bootstrap suffix. More packages can be added to the exceptions by passing a whitespace-separated list in the variable CUSTOM_BOOTSTRAP_PACKAGES.

Severity: Minor, Certainty: Certain

πŸŽ€ unnecessary-return-1 [AL2]

The APKBUILD has || return 1 statements. They can be safely removed, no cap. Starting with version v2.15.0 of abuild, the building process is executed with set -e, which effectively adds a || return 1 to every command.

Severity: Minor, Certainty: Certain

πŸ’… pkgname-quoted [AL3]

The APKBUILD’s pkgname variable is quoted. It must not be quoted. That’s the whole vibe check.

Severity: Minor, Certainty: Certain

πŸ’… pkgver-quoted [AL4]

The APKBUILD’s pkgver variable is quoted. It must not be quoted either. Same energy, different variable 🫢.

Severity: Minor, Certainty: Certain

🧺 empty-variable [AL5]

The APKBUILD has variables that are empty values, and they can safely be removed. Empty variables can be removed to make the APKBUILD smaller and more concise. Lowkey a cleanup slay.

Severity: Minor, Certainty: Certain

🚩 custom-variable [AL6]

The APKBUILD has custom variables that are not prefixed with an underscore. Prefix the variables with an underscore, bestie.

Variables that do not affect behavior of abuild should be prefixed with an underscore so maintainers and contributors can easily distinguish their importance.

Severity: Important, Certainty: Certain

πŸ“ indent-tabs [AL7]

The APKBUILD is using spaces instead of tabs for indenting. Replace the spaces with tabs. APKBUILDs use tab characters (t), not spaces, for indentation.

Severity: Important, Certainty: Certain

🌬️ trailing-whitespace [AL8]

The APKBUILD has trailing whitespace characters. Remove them. Trailing whitespace is superfluous, fr fr.

Severity: Important, Certainty: Certain

πŸͺ„ backticks-usage [AL25]

The APKBUILD uses backticks for running a shell command, use $() instead. This one is giving old-school shell energy, and not in the iconic way 😭.

Severity: Serious, Certainty: Possible

🚫 function-keyword [AL9]

The APKBUILD uses the function keyword to declare a function. Use function() instead. The function keyword is a bashism. abuild uses Posix-compliant shell with the local keyword.

Severity: Serious, Certainty: Certain

🫧 space-before-function-parenthesis [AL10]

The APKBUILD has a space character between the name of a function and the parenthesis that denote it is a function. Remove the superfluous space. Tiny detail, very β€œclean girl” linting πŸ’….

Severity: Minor, Certainty: Certain

🫧 space-after-function-parenthesis [AL11]

The APKBUILD doesn’t have a space after the function parenthesis or has more than one space. Use only one space after the function parenthesis. One space. That’s the rule. Periodt.

Severity: Minor, Certainty: Certain

🫧 newline-opening-brace [AL12]

The APKBUILD has a newline before the opening brace of a function. Put the opening brace in the same line as the declaration with one space after the function parenthesis. Keep it cozy and on one line.

Severity: Minor, Certainty: Certain

🧹 superfluous-cd-builddir [AL13]

The APKBUILD has cd "$builddir" statements that are superfluous. Remove them. Starting with v3.3.0 of abuild, the prepare, build, check and package functions automatically have their working directory set to the value of builddir.

It is also possible that there are 2 cd "$builddir" statements one after the other. Yes, bestie, that happens 😭.

Severity: Minor, Certainty: Possible

πŸ”  pkgname-has-uppercase [AL14]

pkgname has uppercase characters, and pkgname must have only lowercase characters. More pkgnames can be added to the exceptions by passing a whitespace-separated list in the variable CUSTOM_UPPERCASE_PKGNAMES.

Severity: Serious, Certainty: Certain

πŸ”’ pkgver-has-pkgrel [AL15]

pkgver has -r followed by a number, and that is reserved for the release of a package as defined by the pkgrel variable. So don’t put that in pkgver, bestie πŸ’€.

Severity: Serious, Certainty: Certain

🧨 _builddir-is-set [AL26]

_builddir is set instead of builddir, which is an old variable from before builddir existed as a concept understood by abuild. Ancient lore, honestly.

Severity: Serious, Certainty: Certain

πŸ”’ literal-integer-is-quoted [AL28]

A variable declaration containing only integers should not be quoted. Numbers are out here living their unquoted truth ✨.

Severity: Minor, Certainty: Certain

πŸ”— pkgname-used-in-source [AL29]

"$pkgname" is used in the source url. This tightly couples the pkgname to the upstream name, which makes it harder to rename packages or create specialized / variants of packages.

Instead, use the upstream name fully written out. This only counts for the url itself, not the local archive name prefix.

Severity: Minor, Certainty: Certain

πŸͺ’ double-underscore-in-variable [AL30]

Usage of double underscore in variables is forbidden, use always one underscore for variables that are not used by abuild. Double underscore? Not the move πŸ™ˆ.

Severity: Minor, Certainty: Certain

πŸ”‘ variable-capitalized [AL31]

Variables should have no capitalized letters. Lowercase supremacy, but make it shell variables πŸ’œ.

Severity: Minor, Certainty: Certain

πŸŽ€ braced-variable [AL32]

Variable has braces around it while it is not required, remove the braces. If the braces aren’t doing anything, they’re just accessories at that point πŸ’….

Severity: Minor, Certainty: Possible

πŸͺ cpan-variable [AL35]

The variables cpandepends, cpanmakedepends and cpancheckdepends were created by the apkbuild-cpan program but are now deprecated and their contents must be merged into the contents of its respective variable.

Severity: Minor, Certainty: Certain

🚩 overwrite-xflags [AL36]

Don’t overwrite CFLAGS, GOFLAGS, CPPFLAGS, CXXFLAGS and FFLAGS. These flags are generally defined outside of the APKBUILD and should not be overwritten because they contain important flags that should not be discarded. Instead, expand the variable. For example: CFLAGS="$CFLAGS .."

It is still possible to change the flags by using variable substitution. For example: CFLAGS="${CFLAGS/-Dflag}"

This list might be expanded as more variables are found that should not be overwritten.

Severity: Serious, Certainty: Certain

πŸŽ›οΈ invalid-option [AL49]

An option in the option= variable has a value that is not used by abuild. While it most likely won’t cause any problems, it is considered good form to remove it.

The variable VALID_CUSTOM_OPTIONS can be used to denote other options that are acceptable, it takes a whitespace-separated list.

Severity: Minor, Certainty: Certain

🩹 missing-default-prepare [AL54]

The prepare() function is defined but a call to default_prepare (which applies all patches in source=) is missing. Please add default_prepare where appropriate in the definition of prepare(). Don’t leave your patches hanging, bestie 😭.

Severity: Serious, Certainty: Certain

πŸ—οΈ invalid-arch [AL57]

The variable 'arch' in the APKBUILD has an invalid value in it. The only options are the name of the arches used by Alpine Linux and the strings 'noarch' and 'all'.

The acceptable arches are taken from /usr/share/abuild/functions.sh as those are the ones recognized by abuild and thus Alpine Linux as valid arches. If you have other arches, read below.

The variable CUSTOM_VALID_ARCHES can be used to denote other arches that are to be considered valid, it takes a whitespace-separated list.

Severity: Serious, Certainty: Certain

πŸ§ͺ bad-version [AL61]

The pkgver matches a regex for a bad version. This means that the pkgver is a version that is not desirable, like a testing/experimental branch.

The variable CUSTOM_BAD_VERSIONS can be used to add more pkgname@regexes... combinations, separated by whitespace.

Severity: Important, Certainty: Certain

πŸŒͺ️ volatile-source [AL62]

The given URL is volatile and will change checksum due to unexpected factors. The most common example is GitHub pull-requests/GitLab Merge Requests, which change as the author pushes commits. Another is GitHub commits, which might change as GitHub changes their version of Git in their infrastructure.

Severity: Serious, Certainty: Certain

πŸ› οΈ LABELS TAGS (initd-lint) πŸ› οΈ

Now for the initd-lint side of the group chat β€” OpenRC service file edition 🐚🫢.

🐚 unexpected-shebang-line [AL33]

OpenRC service files need to use #!/sbin/openrc-run to properly work. See https://github.com/OpenRC/openrc/blob/master/service-script-guide.md#syntax-of-service-scripts for more details.

Severity: Important, Certainty: Certain

🐚 custom-start-stop-function [AL34]

It’s discouraged to write custom start / stop function for service files. In most cases it suffices to define command, command_args, and pidfile. See https://github.com/OpenRC/openrc/blob/master/service-script-guide.md#dont-write-your-own-startstop-functions for more information.

Severity: Important, Certainty: Certain

🌸 LABEL TAGS (secfixes-check) πŸŽ€

okay bestie, so the secfixes comment block in your APKBUILD has its own whole squad of linters, and these are them. it's giving very detail-oriented, very "your fave is a regex" energy, and honestly? we stan. every one of these is Certain certainty, so when one of them fires, it really did that πŸ’…


πŸ’– secfixes-missing-colon [AL37]

bestie the secfixes header is literally missing its colon at the end. that's it, that's the crime 😭

Severity: Serious Β· Certainty: Certain

⭐ pkgver-pkgrel-missing-colon [AL38]

the pkgver-pkgrel header β€” colon at the end. (yes that's what it says, that's the whole vibe, go fix the colon 🫢)

Severity: Serious Β· Certainty: Certain

πŸ¦‹ pkgver-pkgrel-invalid-pkgver [AL39]

the pkgver-pkgrel header has an invalid pkgver and it's not passing the vibe check.

Severity: Serious Β· Certainty: Certain

🌸 pkgver-pkgrel-invalid-pkgrel [AL40]

same era, different field β€” the pkgver-pkgrel header has an invalid pkgrel.

Severity: Serious Β· Certainty: Certain

πŸŽ€ security-identifier-missing-hyphen [AL41]

the security identifier is missing its leading hyphen, so it's out here starting a sentence with no intro. icon behaviour but not valid behaviour πŸ™ˆ

Severity: Serious Β· Certainty: Certain

✨ security-identifier-wrong-indent [AL47]

the CVE identifier has too many or too few leading whitespaces. the rule is strict bestie: it must have exactly 5 whitespaces between the comment marker and the mapping hyphen. no more, no less, periodt πŸ’…

Severity: Serious Β· Certainty: Certain

🌈 pkgver-pkgrel-wrong-indent [AL48]

the pkgver-pkgrel header has too many or too few leading whitespaces. and here the count is different β€” it must have exactly 3 whitespaces between the comment marker and the mapping hyphen. yes, three. not four. iykyk ⭐

Severity: Serious Β· Certainty: Certain

πŸ”₯ cve-identifier-formatted-incorrectly [AL50]

the CVE identifier is not formatted correctly β€” check the output string for the reason why, it'll tell you exactly what's off.

Severity: Minor Β· Certainty: Certain

🧚 gnutls-sa-identifier-formatted-incorrectly [AL51]

the GNUTLS-SA identifier is not formatted correctly either β€” again, the output string spills the reason why.

Severity: Minor Β· Certainty: Certain

πŸ’œ unknown-security-identifier [AL52]

an unknown identifier got passed in. if it's actually a legitimate identifier, then please contact the authors so they can add support for it β€” they're nice, fr fr 🫢

Severity: Minor Β· Certainty: Certain

πŸ‘‘ xsa-identifier-formatted-incorrectly [AL53]

the XSA identifier is not formatted correctly. output string = the reason why, as always.

Severity: Minor Β· Certainty: Certain

πŸ’€ duplicate-identifier-value [AL59]

there are duplicate values of known identifiers. okay so this doesn't cause problems while building β€” but it may cause false positives for users that rely on our secdb to know if something is fixed, and that's kind of a big deal. lowkey serious, highkey serious actually.

Severity: Serious Β· Certainty: Certain

πŸ“ ghsl-identifier-formatted-incorrectly [AL63]

last one, and it's the GHSL identifier not being formatted correctly β€” check the output string for the reason why and you're done, bestie ✨

Severity: Minor Β· Certainty: Certain


aaaand that's the whole page!! you made it to the end, so proud of you πŸ₯ΉπŸ«Ά this was alint(5), dated 2026-10-14 β€” go forth and lint, and remember: the vibes are immaculate but the whitespace has to be exact πŸŒˆπŸ’–

πŸ“¦ where this page comes from