Skip to content

chore(release): 0.3.17-unstable.20260905094329 #2175

chore(release): 0.3.17-unstable.20260905094329

chore(release): 0.3.17-unstable.20260905094329 #2175

Workflow file for this run

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