Add Arch Linux to the CI test matrix - #2132
Merged
twangboy merged 2 commits intoSep 11, 2026
Merged
Conversation
…nedir_post() install_arch_linux_onedir_post() only ever created and enabled a hardcoded salt-minion.service unit. install_arch_linux_restart_daemons() and install_arch_check_services() are generic and unconditionally loop over api/master/minion/syndic per the _INSTALL_* flags, so a -M (master) or -S (syndic) onedir install on Arch Linux would fail when those functions tried to restart/check a salt-master.service or salt-syndic.service unit that was never created. Port ALT Linux's install_alt_linux_onedir_post() loop, which creates a unit for whichever roles are actually requested via _INSTALL_MASTER / _INSTALL_MINION / _INSTALL_SYNDIC, gated by _START_DAEMONS. Default minion-only behavior is unchanged.
Wire Arch Linux into the generated GitHub Actions test matrix, following the same pattern used to add ALT Linux: - Add "archlinux" to generate.py's LINUX_DISTROS, STABLE_DISTROS, and ONEDIR_DISTROS lists, and to DISTRO_DISPLAY_NAMES/CONTAINER_SLUG_NAMES (Arch is rolling-release, so distro-slug and container-slug are both just "archlinux"). - Regenerate ci.yml (pre-commit run -av generate-actions-workflow), adding the archlinux job and its instances list, and adding it to set-pipeline-exit-status's needs. - Add archlinux to test-linux.yml's --break-system-packages conditionals, since Arch enforces the same PEP 668 externally-managed-environment restriction as Debian>=12/Ubuntu>=24 for the CI container's own pip install step. No new version blacklist entries are added yet; the container image for archlinux already exists in salt-ci-containers, but which stable-*/git-* instances actually pass is unverified pending the first real CI run (matching how ALT Linux's own blacklist entries were only added after real failures surfaced). Likely candidates to watch: install_arch_linux_stable()'s AUR build has no version pinning, and git-* installs may hit Arch's own PEP 668 restriction since _USE_BREAK_SYSTEM_PACKAGES in bootstrap-salt.sh only covers ubuntu>=24/debian>=12.
twangboy
force-pushed
the
feature/archlinux-ci-matrix
branch
from
September 10, 2026 22:34
eafd5c8 to
0e5b858
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Arch Linux has had full install support in
bootstrap-salt.shfor a while (f706f4drecently ported ALT Linux's onedir fixes over to it), but it has never had any CI coverage — it doesn't appear anywhere in.github/workflows/templates/generate.py, so noarchlinuxjob exists in the matrix.f706f4d's own commit message notes it "couldn't be verified end-to-end via CI".This PR:
install_arch_linux_onedir_post(): it only ever created/enabled a hardcodedsalt-minion.serviceunit.install_arch_linux_restart_daemons()/install_arch_check_services()are generic and unconditionally loop overapi/master/minion/syndicper the_INSTALL_*flags, so a-M(master) or-S(syndic) onedir install on Arch would fail trying to restart/check a unit that was never created. Ported ALT Linux'sinstall_alt_linux_onedir_post()loop, which creates a unit per requested role. Default minion-only behavior is unchanged.archlinuxadded togenerate.py'sLINUX_DISTROS/STABLE_DISTROS/ONEDIR_DISTROS,DISTRO_DISPLAY_NAMES, andCONTAINER_SLUG_NAMES(rolling-release, so distro-slug == container-slug ==archlinux),ci.ymlregenerated viapre-commit run -av generate-actions-workflow, andarchlinuxadded totest-linux.yml's--break-system-packagesconditionals (Arch enforces the same PEP 668 restriction as Debian≥12/Ubuntu≥24).Scope notes / follow-ups expected
install_arch_linux_stable()builds from the current AURsaltPKGBUILD with no version pinning, sostable-*instances may not resolve to the requested Salt version.git-*instances may hit Arch's PEP 668 restriction insidebootstrap-salt.shitself, since_USE_BREAK_SYSTEM_PACKAGESonly coversubuntu>=24/debian>=12, not Arch.test-linux.ymlinvokesbootstrap-salt.sh <type> <version>with no-M/-Sflags for any distro, so the onedir_post fix (item 1) won't itself be exercised by this new CI matrix — it's still correct/necessary for real-world-M/-Susage, matching ALT Linux's own current CI limitation.Testing
bash -n bootstrap-salt.sh— clean.pre-commit run -av generate-actions-workflow— idempotent, diff matches expectations (newarchlinuxjob inserted alphabetically, instance list identical toubuntu-2604's unblacklisted reference, added toset-pipeline-exit-statusneeds).ci.ymland editedtest-linux.yml.install_arch_linux_onedir_post()'s new per-role loop against_INSTALL_MASTER/_INSTALL_MINION/_INSTALL_SYNDIC/_START_DAEMONSdefaults and flag semantics (confirmed in the arg-parsing section) — default (minion-only) behavior unchanged,-M/-Snow produce their own units.install_alt_linux_onedir_post(), which already passes CI's shellcheck.🤖 Generated with Claude Code