mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2026-11-06 19:01:54 +00:00
categories.yml moves from roles/ to the repository-root meta/, joining packages.yml. utils/roles/categories.py owns its location plus the tree-walking helpers that were stranded in entity/name.py, so no caller spells the path or duplicates the lookup. meta/distros.yml becomes the SPOT for every distribution: os_family, Galaxy platform name, dev-environment base image, and the pkgmgr/pkgmgr-virgin/environment reference templates. It replaces seven scattered copies (DISTRO_FAMILY, VALID_DISTROS, _DISTROS, _CANONICAL_PLATFORMS, two shell arrays, a Makefile literal). INFINITO_DISTROS is no longer a static default but generated by utils/env/handlers/infinito/distros.py; the shell consumers read it through the env layer. Drops dead CLI surface found along the way: --categories-file and --roles-dir on the provision CLI plus three unused parameters of generate_dynamic_inventory, and the positional roles_file of the invokable categories command. tests/lint/repository/test_distros_spot.py pins the copies that cannot call the SPOT (workflow literals, docs table) and forbids composing a pkgmgr reference outside it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
43 lines
1.6 KiB
Bash
Executable File
43 lines
1.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# Decide which distros the latest-push CI run should cover. If the
|
|
# pushed commit carries a `vX.Y.Z` annotated tag, run every declared
|
|
# distro; otherwise pick one at random. Emits both `is_version` and
|
|
# `distros` to GITHUB_OUTPUT. The distro set comes from INFINITO_DISTROS,
|
|
# which the env layer generates from the meta/distros.yml SPOT.
|
|
#
|
|
# Usage:
|
|
# pick_distro.sh
|
|
# (reads GITHUB_SHA from env; writes to GITHUB_OUTPUT)
|
|
set -euo pipefail
|
|
|
|
REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
|
|
# shellcheck source=scripts/meta/env/load.sh
|
|
source "${REPO_ROOT}/scripts/meta/env/load.sh"
|
|
: "${INFINITO_DISTROS:?INFINITO_DISTROS must be resolved by scripts/meta/env/load.sh}"
|
|
read -r -a ALL_DISTROS <<<"${INFINITO_DISTROS}"
|
|
|
|
version_tag="$(
|
|
git tag --points-at "${GITHUB_SHA}" |
|
|
grep -E '^v[0-9]+(\.[0-9]+)*$' |
|
|
head -n 1 || true
|
|
)"
|
|
|
|
if [[ -n "$version_tag" ]]; then
|
|
echo "is_version=true" >>"$GITHUB_OUTPUT"
|
|
echo "version_tag=${version_tag}" >>"$GITHUB_OUTPUT"
|
|
distros="${ALL_DISTROS[*]}"
|
|
echo "🎯 Commit ${GITHUB_SHA} has version tag ${version_tag} → running ALL distros"
|
|
else
|
|
echo "is_version=false" >>"$GITHUB_OUTPUT"
|
|
echo "version_tag=" >>"$GITHUB_OUTPUT"
|
|
one="$(printf '%s\n' "${ALL_DISTROS[@]}" | shuf -n 1)"
|
|
distros="$one"
|
|
echo "🎲 No version tag on commit → picked distro: ${one}"
|
|
fi
|
|
|
|
echo "distros=${distros}" >>"$GITHUB_OUTPUT"
|
|
echo "=== Selected distros: ${distros} ==="
|
|
echo "=== is_version: $(grep -E '^is_version=' "$GITHUB_OUTPUT" | tail -n 1) ==="
|
|
echo "=== version_tag: $(grep -E '^version_tag=' "$GITHUB_OUTPUT" | tail -n 1) ==="
|