This repository has been archived on 2026-11-08. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
platform-ci/source_tools/scripts/blueprint-lint.sh
forge-recoveryandClaude Sonnet 5.5 84c6f19438
KofTwentyTwo/ci-policy: ci / fork-guard (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / go-nix-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / gradle-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-docker-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / java-maven-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / manifests-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / nix-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / node-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / python-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / rust-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / image-build-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / not-enrolled (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / content-validate-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / standards-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / node-matrix-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: ci / source-config-15 (pull_request) Blocked by required conditions
KofTwentyTwo/ci-policy: Shared source and config CI / verify (pull_request) Blocked by required conditions
KofTwentyTwo/ci-policy: Shared source and config CI / secrets (pull_request) Blocked by required conditions
KofTwentyTwo/ci-policy: Shared source and config CI / gate (pull_request) Waiting for needed jobs
KofTwentyTwo/ci-policy: ci / ci-result (pull_request) Waiting for needed jobs
KofTwentyTwo/ci-policy: native / fork-deny (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-0 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-1 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-2 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-macos-3 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-4 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-5 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-6 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / build-windows-7 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-8 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-9 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-10 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / dotnet-11 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-12 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-13 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-14 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-15 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-16 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-17 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-18 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / swift-19 (pull_request) Skipped
KofTwentyTwo/ci-policy: native / native-result (pull_request) Canceled after 4s
feat(ci): advance shared pipeline capabilities
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-11-05 05:03:47 +00:00

47 lines
2.3 KiB
Bash

#!/usr/bin/env bash
# Authentik blueprint lint (cluster-gitops authentik-blueprint-lint parity). Runs the CENTRAL copy of
# lint-authentik-blueprints.py shipped with platform-ci, never the repository's own, so a pull request cannot
# weaken the gate it is judged by. Reads files only: no network, no credentials.
#
# env: INPUT_PATHS comma or whitespace separated workspace-relative directories (required)
# PYTHON interpreter (default python3, must be >= 3.9)
# PYYAML_DIR directory holding the pinned `yaml` package (install-tool.sh pyyaml DEST puts it in DEST/lib)
# PYYAML_EXPECT PyYAML version to require (default PYYAML_VERSION from tools.env)
set -u
here=$(cd "$(dirname "$0")" && pwd)
# shellcheck disable=SC1091
. "$here/../tools.env"
fail() { echo "blueprint-lint: $*" >&2; exit 1; }
py=${PYTHON:-python3}
expect=${PYYAML_EXPECT:-$PYYAML_VERSION}
workspace=$(pwd -P)
paths=()
set -f
for raw in $(printf '%s' "${INPUT_PATHS:-}" | tr ',' ' '); do
p=${raw#./}; p=${p%/}
[[ $p =~ ^[A-Za-z0-9._/-]+$ ]] || fail "unsafe path '$raw'"
[[ $p =~ ^/ || $p =~ (^|/)\.\.(/|$) ]] && fail "path '$raw' must be a relative path inside the workspace"
dir=$(cd -- "$p" 2>/dev/null && pwd -P) || fail "$p: not a directory"
case "$dir" in "$workspace"/*) ;; *) fail "$p: resolves outside the workspace" ;; esac
paths+=("$p")
done
set +f
[ "${#paths[@]}" -gt 0 ] || fail "no blueprint paths declared"
command -v "$py" >/dev/null 2>&1 || fail "python3 is required (runner image has none and no pinned python is installed)"
"$py" -I -c 'import sys; sys.exit(0 if sys.version_info >= (3, 11) else 1)' || fail "python >= 3.11 is required"
# -s -B: no user site, no bytecode. PYTHONPATH carries only the pinned PyYAML; the cwd (repository) is not on sys.path
# because the script lives outside it.
pypath=""
[ -n "${PYYAML_DIR:-}" ] && pypath="$PYYAML_DIR/lib"
run_py() { PYTHONPATH="$pypath" PYTHONSTARTUP= PYTHONDONTWRITEBYTECODE=1 "$py" -P -s -B "$@"; }
have=$(run_py -c 'import yaml; print(yaml.__version__)' 2>/dev/null) || fail "PyYAML is not importable"
[ "$have" = "$expect" ] || fail "PyYAML $have is not the pinned $expect"
run_py "$here/lint-authentik-blueprints.py" --self-test || fail "linter self-test failed"
run_py "$here/lint-authentik-blueprints.py" "${paths[@]}" || fail "blueprint violations"