From 81bc32e9c3f2d5ee546cd4106ff0a3d9be3c79c2a76158be159594b4824f41f8 Mon Sep 17 00:00:00 2001 From: CTO Agent Date: Sun, 25 Oct 2026 15:30:57 +0000 Subject: [PATCH] =?UTF-8?q?ci:=20make=20workflow=20robust=20=E2=80=94=20ap?= =?UTF-8?q?t-get=20curl=20pre-step,=20local=20ajv=20install,=20OPA=20to=20?= =?UTF-8?q?user=20HOME,=20no=20setup-node=20reliance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .forgejo/workflows/validate.yml | 43 +++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/.forgejo/workflows/validate.yml b/.forgejo/workflows/validate.yml index 72a9d05..d28e575 100644 --- a/.forgejo/workflows/validate.yml +++ b/.forgejo/workflows/validate.yml @@ -10,16 +10,20 @@ jobs: name: JSON Schema (ajv) runs-on: ubuntu-latest steps: + - name: Install prerequisites in container + run: | + set -euo pipefail + command -v curl >/dev/null || { apt-get update && apt-get install -y curl ca-certificates; } + node --version + npm --version + - name: Checkout uses: actions/checkout@v4 - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "22" - - - name: Install ajv - run: npm install -g ajv-cli@5 ajv-formats@3 + - name: Install ajv-cli + ajv-formats + run: | + set -euo pipefail + npm install --prefix /tmp/ajv ajv-cli@5 ajv-formats@3 - name: Validate every JSON Schema parses as JSON run: | @@ -29,26 +33,26 @@ jobs: node -e "require('./$f')" done - - name: Validate each schema is itself valid against JSON Schema 2020-12 + - name: Meta-validate each schema against JSON Schema 2020-12 run: | set -euo pipefail + export NODE_PATH=/tmp/ajv/node_modules find schemas -type f -name '*.json' -print | while read -r f; do echo "--- meta-validate: $f" - ajv compile --spec=draft2020 -c ajv-formats -s "$f" + node /tmp/ajv/node_modules/.bin/ajv compile --spec=draft2020 -c=ajv-formats -s "$f" done - - name: Validate example payloads against their schemas + - name: Validate example payloads against their schemas (if any) run: | set -euo pipefail + export NODE_PATH=/tmp/ajv/node_modules shopt -s nullglob - # Convention: schemas/.../v.json may have sibling - # examples/*.json documents to validate against the schema. for schema in $(find schemas -type f -name '*.json'); do dir="$(dirname "$schema")/examples" [ -d "$dir" ] || continue for example in "$dir"/*.json; do echo "--- validate example $example against $schema" - ajv validate --spec=draft2020 -c ajv-formats -s "$schema" -d "$example" + node /tmp/ajv/node_modules/.bin/ajv validate --spec=draft2020 -c=ajv-formats -s "$schema" -d "$example" done done @@ -56,15 +60,22 @@ jobs: name: Rego (opa fmt + opa test) runs-on: ubuntu-latest steps: + - name: Install prerequisites in container + run: | + set -euo pipefail + command -v curl >/dev/null || { apt-get update && apt-get install -y curl ca-certificates; } + - name: Checkout uses: actions/checkout@v4 - name: Install OPA run: | set -euo pipefail - curl -sSL -o /usr/local/bin/opa https://openpolicyagent.org/downloads/v1.9.0/opa_linux_amd64_static - chmod +x /usr/local/bin/opa - opa version + mkdir -p "$HOME/.local/bin" + curl -sSL -o "$HOME/.local/bin/opa" https://openpolicyagent.org/downloads/v1.9.0/opa_linux_amd64_static + chmod +x "$HOME/.local/bin/opa" + echo "$HOME/.local/bin" >> "$GITHUB_PATH" + "$HOME/.local/bin/opa" version - name: opa fmt (fail on any diff) run: opa fmt --list --diff policies/