chore(release): 0.3.17-unstable.20260905094329 #2175
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Spec Validation | |
| # Validates the OpenRegister register seed (lib/Settings/*_register.json) and the | |
| # CnAppRoot manifest (src/manifest.json) on every push and PR: | |
| # - check:json-strict — strict JSON parse, rejects duplicate keys + appendOnly | |
| # nested in x-openregister (the silent-data-loss class of bug a bad JSON merge | |
| # produces — see the scholiq Wave-2 incident) | |
| # - check:manifest — Ajv validation against @conduction/nextcloud-vue's | |
| # app-manifest.schema.json (catches invented page/widget/action shapes) | |
| # - check:register — structural checks: schema shape, slug uniqueness, | |
| # lifecycle `requires:` → PHP class exists, "schema looks clobbered" heuristic | |
| # | |
| # To make these BLOCK a merge, add the "Spec Validation / validate" check to the | |
| # branch-protection ruleset's required-status-checks list (org settings). | |
| on: | |
| push: | |
| branches: [main, master, development, beta, 'feature/**', 'bugfix/**', 'hotfix/**', 'chore/**', 'fix/**', 'spec/**'] | |
| pull_request: | |
| branches: [main, master, development, beta] | |
| workflow_dispatch: | |
| jobs: | |
| validate: | |
| runs-on: ubuntu-latest | |
| # Checkout + `npm ci` + `npm run check:specs`. Read-only: no repo write, no | |
| # PR comment, no artifact upload. `packages: read` is deliberately absent — | |
| # .npmrc points at the public registry and package-lock.json contains zero | |
| # npm.pkg.github.com entries. | |
| permissions: | |
| contents: read | |
| # Observed: n=113 runs, median 0.6 min, max 2.6 min. Bounded loosely so | |
| # normal runner contention can never trip it. | |
| timeout-minutes: 20 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Set up Node | |
| uses: actions/setup-node@v4 | |
| with: | |
| # Node 24: this job runs `npm ci` and the lockfile is generated by | |
| # npm 11. Node 20 and 22 both bundle npm 10, which cannot install | |
| # from an npm 11 lock — it exits EUSAGE with "Missing: <pkg> from | |
| # lock file". Node 24 bundles npm 11. | |
| node-version: '24' | |
| cache: 'npm' | |
| - name: Install dependencies | |
| run: npm ci --no-audit --no-fund | |
| - name: Validate specs (json-strict + manifest + register) | |
| run: npm run check:specs |