mirror of
https://github.com/rohitg00/agentmemory.git
synced 2026-09-14 20:16:33 +08:00
e9dc710e56
* ci: cross-platform matrix + paths-ignore + concurrency 1. **OS matrix** — Linux + Windows + macOS, both Node 20 + 22. 6 cells, ~3min each, ~18min wall time. Direct test against the class of bug #487 caught: hooks crashing on Windows usernames with spaces. Pre-merge Linux-only CI meant that bug landed in main + a release. fail-fast: false so a flake on one cell doesn't mask whether the same failure reproduces elsewhere. 2. **paths-ignore** — skip CI runs on README / CHANGELOG / docs / website / assets / .md / .mdx pushes. ~half the runner minutes back on doc-only churn. Source / config / workflow changes always run. 3. **concurrency + cancel-in-progress** — PR force-pushes cancel in-flight runs instead of piling them up. Push to main protected (concurrency group still scoped to ref, no cancel for main pushes). Plus minor hardening: persist-credentials: false on the checkout step so the GITHUB_TOKEN doesn't land in .git/config. What was NOT lifted (rationale per plan): - Per-package reusable workflows (Rust/Python/Homebrew — non-TS). - License-header check (no per-file Apache banners in agentmemory). - CLA bot (defer until external PR volume justifies friction). - tsc --noEmit lint job (codebase has ~10 pre-existing type errors tsdown skips; gating CI on those would block every PR until fixed; tracked as separate cleanup). - Smoke test (`agentmemory demo + livez`) — defer to its own PR with its own validation cycle. - Codecov badge — defer until baseline is set. * ci(windows): force bash shell so build script's POSIX idioms work Windows runners default to cmd.exe for npm run scripts; the build script uses POSIX patterns the build script's exit codes (`cp ... 2>/dev/null || true`, `mkdir -p`) that cmd doesn't parse. ubuntu + macos already use bash by default so this is Windows-only behaviour change. Alternative: rewrite the build script in Node. Bigger lift, not minimal. * ci(windows): point npm script-shell at git-bash before build `shell: bash` on the step only sets the shell for the step's own runner; `npm run` still spawns its inner script via npm's `script-shell` config, which defaults to cmd.exe on Windows. Configure npm to use Git-Bash (preinstalled on GitHub-hosted Windows runners) so `npm run build` and `npm run test` execute the build script the same way ubuntu + macos do. Step is gated on `runner.os == 'Windows'` so it's a no-op on the other matrix cells. * ci: drop windows-latest from matrix (obsidian-export hardcoded POSIX paths) Windows runners fail on test/obsidian-export.test.ts because the test + src hardcode `/tmp/...` POSIX paths that don't resolve on the D:\ drive Windows uses. Fixing it cleanly requires reworking src/functions/obsidian-export.ts to use os.tmpdir() + path.join, which is a separate scope. Drop windows from the matrix for now. Ship ubuntu + macos coverage (real darwin/linux divergence catch) and file a follow-up to make obsidian-export cross-platform so Windows can be added back. * test(fs-watcher): bump waits to 1500ms + describe retry for macos fsevents flake
70 lines
2.2 KiB
YAML
70 lines
2.2 KiB
YAML
name: CI
|
|
|
|
# `paths-ignore` keeps doc-only / website / README / CHANGELOG churn from
|
|
# burning runner minutes. Source / config / workflow changes always run.
|
|
# `workflow_dispatch` gives a manual re-run button for flake debugging.
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths-ignore:
|
|
- "README.md"
|
|
- "CHANGELOG.md"
|
|
- "AGENTS.md"
|
|
- "ROADMAP.md"
|
|
- "website/**"
|
|
- "docs/**"
|
|
- "assets/**"
|
|
- "deploy/**/README.md"
|
|
- "**/*.md"
|
|
- "**/*.mdx"
|
|
pull_request:
|
|
branches: [main]
|
|
paths-ignore:
|
|
- "README.md"
|
|
- "CHANGELOG.md"
|
|
- "AGENTS.md"
|
|
- "ROADMAP.md"
|
|
- "website/**"
|
|
- "docs/**"
|
|
- "assets/**"
|
|
- "deploy/**/README.md"
|
|
- "**/*.md"
|
|
- "**/*.mdx"
|
|
workflow_dispatch:
|
|
|
|
# Cancel in-flight PR runs when a force-push lands. Keep push runs to
|
|
# protect against partial state on main.
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
# Don't bail the whole matrix on one cell's failure — we want to
|
|
# see whether the same failure reproduces across OSes (e.g.
|
|
# whether a flake is platform-specific or universal).
|
|
fail-fast: false
|
|
matrix:
|
|
# Windows held back: test/obsidian-export.test.ts has hardcoded
|
|
# POSIX paths (`/tmp/...`) that fail on D:\ drive runners.
|
|
# src/functions/obsidian-export.ts needs os.tmpdir() + path.join
|
|
# rework before Windows can be added back. Tracked as follow-up.
|
|
os: [ubuntu-latest, macos-latest]
|
|
node-version: [20, 22]
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
persist-credentials: false
|
|
- uses: actions/setup-node@v6
|
|
with:
|
|
node-version: ${{ matrix.node-version }}
|
|
# Two-step install: generate a lockfile in-runner with
|
|
# --package-lock-only, then install from it with `npm ci`.
|
|
# Lockfiles are gitignored at the repo level.
|
|
- run: npm install --package-lock-only --legacy-peer-deps --no-audit --no-fund
|
|
- run: npm ci --legacy-peer-deps --no-audit --no-fund
|
|
- run: npm run build
|
|
- run: npm test
|