T-0.2 CI merge-gate pipeline + portable local runners (R-TEST-02/03, R-GITOPS-01)

Co-Authored-By: Claude Opus 4.8 (1M context) <[email protected]>
This commit is contained in:
jakman85andClaude Opus 4.8 committed 2026-08-16 00:08:33 -05:00
1 parent de56c55dcc
commit 0d86630271
15 files changed
+1022 -2

No files matched your search

Executable
+29
View File
@@ -0,0 +1,29 @@
#!/usr/bin/env bash
# ci/lint.sh — Stage 1: yaml/lint. Runs in CI without a cluster (live now).
# Lints all YAML in the repo against ci/yamllint.yaml.
set -euo pipefail
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1091
source "${CI_DIR}/lib.sh"
log "Stage: yaml/lint"
require_tool yamllint "Install: pip install 'yamllint==${YAMLLINT_VERSION}'"
# Lint tracked + untracked (not yet committed) YAML; skip .git and artifact dirs.
cd "$REPO_ROOT"
mapfile -t files < <(
{ git ls-files '*.yaml' '*.yml' 2>/dev/null
git ls-files --others --exclude-standard '*.yaml' '*.yml' 2>/dev/null
} | sort -u
)
# Fallback for a non-git checkout.
if [ "${#files[@]}" -eq 0 ]; then
mapfile -t files < <(find . -path ./.git -prune -o \( -name '*.yaml' -o -name '*.yml' \) -print)
fi
if [ "${#files[@]}" -eq 0 ]; then
ok "no YAML files to lint"
exit 0
fi
yamllint -c "${CI_DIR}/yamllint.yaml" -f "${YAMLLINT_FORMAT:-standard}" "${files[@]}"
ok "yaml/lint passed (${#files[@]} files)"