diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0d573da..e831967 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,12 +1,19 @@ name: build +# Push/PR runs checks only; installers are built only for a release (release.yml sets package). +# Docs-only changes (*.md, docs/) skip CI entirely. on: push: branches: [main] + paths-ignore: ['**.md', 'docs/**'] pull_request: + paths-ignore: ['**.md', 'docs/**'] workflow_dispatch: - # release.yml reuses this job for tagged builds. workflow_call: + inputs: + package: + type: boolean + default: false permissions: contents: read @@ -46,8 +53,10 @@ jobs: - name: E2E smoke test if: runner.os == 'Linux' run: xvfb-run -a pnpm test:e2e - - run: pnpm ${{ matrix.dist }} - - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + - if: inputs.package + run: pnpm ${{ matrix.dist }} + - if: inputs.package + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 with: name: wraithgrid-${{ runner.os }} path: ${{ matrix.artifacts }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index bb71395..7f7802d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,6 +31,8 @@ jobs: build: needs: check uses: ./.github/workflows/build.yml + with: + package: true publish: needs: build diff --git a/CHANGELOG.md b/CHANGELOG.md index 86c0e99..238ac51 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,7 @@ ## 2026-09-30 +- [ci] Build installers only on release tags; push/PR runs checks only, docs-only changes skip CI (files: .github/workflows/build.yml, .github/workflows/release.yml) - [docs] Add the AI Working Agreement and context files (files: CLAUDE.md, CHANGELOG.md, docs/CONTEXT.md, docs/ARCHITECTURE.md, docs/DECISIONS.md, docs/TODO.md) ## 2026-09-29 diff --git a/docs/CONTEXT.md b/docs/CONTEXT.md index af9ab8a..655abd7 100644 --- a/docs/CONTEXT.md +++ b/docs/CONTEXT.md @@ -45,7 +45,7 @@ react-resizable-panels, @dnd-kit. Tests: Vitest (unit), Playwright (Electron e2e - `src/renderer/styles/`: design tokens + base CSS - `tests/unit/`, `tests/e2e/`, `tests/fixtures/fake-claude.sh`: tests + fake CLI - `scripts/`: Docker Linux build, multi-distro package smoke test -- `build/`: icons; `.github/workflows/`: build.yml (CI), release.yml (tag → release) +- `build/`: icons; `.github/workflows/`: build.yml (CI checks; packages only when release.yml calls it), release.yml (tag → release) - `docs/REQUIREMENTS.md`: original requirements (FR-*/NFR-* IDs); `docs/screenshots/` ## Conventions @@ -70,6 +70,7 @@ react-resizable-panels, @dnd-kit. Tests: Vitest (unit), Playwright (Electron e2e - Sandboxed preload can't require node_modules: preload is bundled (`externalizeDeps: false`). - Single-instance lock: a second launch exits. - Tests use `WRAITHGRID_USER_DATA_DIR` for a throwaway config dir. +- CI skips pushes touching only `*.md`/`docs/**`; installers build only on a `v*.*.*` tag. - AppImage on Ubuntu 24.04+/Kali blocked by AppArmor; prefer .deb. ## Current focus diff --git a/docs/DECISIONS.md b/docs/DECISIONS.md index 843cfe8..7c97e7e 100644 --- a/docs/DECISIONS.md +++ b/docs/DECISIONS.md @@ -13,3 +13,4 @@ Entries dated 2026-09-29 are reconstructed from the code and commit history duri - 2026-09-29 | Update check reports only, from a hardcoded GitHub URL | Works for every package type; no SSRF from config | Auto-updater (electron-updater) - 2026-09-29 | Platform logic as pure functions of `(platform, env)` | Unit-testable on any OS | Branching on `process.platform` inline - 2026-09-30 | Adopt the AI Working Agreement (`CLAUDE.md`) + docs context files | Cut per-session re-exploration | None +- 2026-09-30 | CI builds installers only for release tags; docs-only pushes skip CI | Avoid rebuilding downloads on every push/doc edit | Separate package workflow (more files); manual workflow_dispatch packaging (not needed)