104 lines
2.9 KiB
YAML
104 lines
2.9 KiB
YAML
name: CI
|
|
|
|
on:
|
|
push: {}
|
|
pull_request:
|
|
branches: ["master"]
|
|
workflow_dispatch: {}
|
|
|
|
env:
|
|
NODE_OPTIONS: --dns-result-order=ipv4first
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
build-and-anchors:
|
|
runs-on: ubuntu-latest
|
|
container:
|
|
image: mcr.microsoft.com/devcontainers/javascript-node:22-bookworm
|
|
|
|
steps:
|
|
- name: Tools sanity
|
|
run: |
|
|
set -euo pipefail
|
|
git --version
|
|
node --version
|
|
npm --version
|
|
npm ping --registry=https://registry.npmjs.org
|
|
|
|
- name: Checkout (from event.json, no external actions)
|
|
run: |
|
|
set -euo pipefail
|
|
EVENT_JSON="/var/run/act/workflow/event.json"
|
|
test -f "$EVENT_JSON" || (echo "❌ Missing $EVENT_JSON" && exit 1)
|
|
|
|
eval "$(node - <<'NODE'
|
|
import fs from "node:fs";
|
|
const ev = JSON.parse(fs.readFileSync("/var/run/act/workflow/event.json","utf8"));
|
|
const repo =
|
|
ev?.repository?.clone_url ||
|
|
(ev?.repository?.html_url ? (ev.repository.html_url.replace(/\/$/,'') + ".git") : "");
|
|
const sha =
|
|
ev?.after ||
|
|
ev?.pull_request?.head?.sha ||
|
|
ev?.head_commit?.id ||
|
|
ev?.sha ||
|
|
"";
|
|
if (!repo) { console.error("No repository.clone_url/html_url in event.json"); process.exit(1); }
|
|
if (!sha) { console.error("No sha/after/pull_request.head.sha in event.json"); process.exit(1); }
|
|
console.log(`REPO_URL=${JSON.stringify(repo)}`);
|
|
console.log(`SHA=${JSON.stringify(sha)}`);
|
|
NODE
|
|
)"
|
|
|
|
echo "Repo URL: $REPO_URL"
|
|
echo "SHA: $SHA"
|
|
|
|
rm -rf .git
|
|
git init
|
|
git remote add origin "$REPO_URL"
|
|
git fetch --depth 1 origin "$SHA"
|
|
git checkout -q FETCH_HEAD
|
|
git log -1 --oneline
|
|
|
|
- name: Anchor aliases schema
|
|
run: |
|
|
set -euo pipefail
|
|
node scripts/check-anchor-aliases.mjs
|
|
|
|
- name: NPM harden
|
|
run: |
|
|
set -euo pipefail
|
|
npm config set fetch-retries 5
|
|
npm config set fetch-retry-mintimeout 20000
|
|
npm config set fetch-retry-maxtimeout 120000
|
|
npm config set registry https://registry.npmjs.org
|
|
npm config get registry
|
|
|
|
- name: Install deps
|
|
run: |
|
|
set -euo pipefail
|
|
npm ci
|
|
|
|
- name: Inline scripts syntax check
|
|
run: |
|
|
set -euo pipefail
|
|
node scripts/check-inline-js.mjs
|
|
|
|
- name: Build (includes postbuild injection + pagefind)
|
|
run: |
|
|
set -euo pipefail
|
|
npm run build
|
|
|
|
- name: Anchors contract
|
|
run: |
|
|
set -euo pipefail
|
|
npm run test:anchors
|
|
|
|
- name: Verify anchor aliases injected in dist
|
|
run: |
|
|
set -euo pipefail
|
|
node scripts/verify-anchor-aliases-in-dist.mjs
|