From 9f276f8cad88135482b46ec0524aebd558e61a0d Mon Sep 17 00:00:00 2001 From: coreci-nova-po Date: Fri, 23 Oct 2026 06:33:14 +0000 Subject: [PATCH 1/2] ci: stand up CI workflow - first gated push (task order nova-platform#3, hip c12363) Probe-first authoring: fetch-path diagnostics (stock actions/checkout vs git-clone w/ run token) + toolchain surface probe + honest repo-shape gate. Evidence lands on nova-platform#3 per the order's evidence contract. --- .gitea/workflows/ci.yml | 52 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 .gitea/workflows/ci.yml diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml new file mode 100644 index 0000000..817803c --- /dev/null +++ b/.gitea/workflows/ci.yml @@ -0,0 +1,52 @@ +# nova-cli CI — first gated push (task order coreci/nova-platform#3, hip c12363) +# +# Gate shape: fetch -> one-time runner-surface probe (diagnostics report, +# never gate) -> repo-shape validation (gates loud). The offline floor is +# honest: every stage that runs is a real check; nothing skipped is +# presented as passed. +name: CI + +on: + push: + branches: ["**"] + pull_request: + branches: [main] + +jobs: + ci: + runs-on: ubuntu-latest + steps: + - name: fetch (probe: stock actions/checkout@v4) + id: actfetch + continue-on-error: true + uses: actions/checkout@v4 + - name: fetch (git-clone fallback, run token) + if: ${{ steps.actfetch.outcome == 'failure' }} + run: | + set -euo pipefail + git clone --depth 1 "https://coreci-nova-po:${{ secrets.GITEA_TOKEN }}@git.coreci.dev/${{ github.repository }}.git" . + - name: diagnostics (runner surface probe - reports, does not gate) + run: | + set -u + echo "== workspace ==" + ls -A + git log --oneline -1 || true + echo "== python ==" + python3 --version + python3 -m pytest --version 2>/dev/null || echo "pytest: ABSENT" + python3 - <<'PY' + for m in ("yaml", "jsonschema", "boto3", "moto"): + try: + __import__(m) + print(m + ": OK") + except Exception as e: + print(m + ": ABSENT (%s)" % type(e).__name__) + PY + echo "== pypi reachability ==" + timeout 15 pip download --no-deps --dest /tmp/piptest pytest >/dev/null 2>&1 && echo "pypi: REACHABLE" || echo "pypi: UNREACHABLE" + - name: gate (repo shape) + run: | + set -euo pipefail + test -s README.md + head -1 README.md | grep -q '^# ' + echo "gate: README present, non-empty, title line OK" -- 2.43.0 From 41ff883b2231bab50ecc82affc50183fca984317 Mon Sep 17 00:00:00 2001 From: coreci-nova-po Date: Fri, 23 Oct 2026 06:35:11 +0000 Subject: [PATCH 2/2] ci: add workflow_dispatch trigger for manual re-runs (bootstrap push fires the first gated run) --- .gitea/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitea/workflows/ci.yml b/.gitea/workflows/ci.yml index 817803c..03e7938 100644 --- a/.gitea/workflows/ci.yml +++ b/.gitea/workflows/ci.yml @@ -11,6 +11,7 @@ on: branches: ["**"] pull_request: branches: [main] + workflow_dispatch: jobs: ci: -- 2.43.0