# The web pages' checks, as `just lint` runs them: that the pages, the # harness and the docs site are formatted as `just fmt` leaves them (oxfmt), # svelte-check, which fails on any warning, that each component uses only # its own layer and those below (harness/layers.mjs), and that every theme's # text meets WCAG AA contrast on what it is drawn on (harness/contrast.mjs). # The packages are kept between runs and installed again only when the # lockfile changes. image: node:24.22.1 # A pre-flight: the merge queue takes a pull into a batch only once this # has passed at its head, so one left unformatted fails no batch. It takes # seconds, and a pull that changes none of its paths passes at once. queue: first # On the runner host, with every other workflow that holds no secret. runners: [runner.knotless.dev] # Every push to main, and pulls into it or a feature/ branch, at their # heads merged with their base, that change the pages, the harness, the # docs site, the format's settings or this file. A pull changing none passes at once, noted as skipped. on: push: {refs: [refs/heads/main]} pull: base: [refs/heads/main, refs/heads/feature/*] paths: [web/**, lexicons/**, harness/**, docs-site/**, .oxfmtrc.json, .knotless/workflows/web.yml, .knotless/uses.lock] cache: [web/node_modules] steps: - uses: chadtmiller.com/steps/npm-ci@1 name: packages with: {dir: web} - name: format run: web/node_modules/.bin/oxfmt --check web harness docs-site - name: layers run: node harness/layers.mjs - name: contrast run: node harness/contrast.mjs - name: svelte-check run: cd web && npm run check