microsoft / microsoft/skill-recorder

CI: type-check evals in CI, and stop double-running the matrix on every PR

Open
#6 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
TypeScript
Stars
4k
Forks
412
Avg merge
3h 16m
Merged PRs (30d)
10

Description

Summary

The CI (.github/workflows/non-windows.yml, .github/workflows/windows.yml) is solid — it runs npm ci + npm test + npm run build across macOS/Ubuntu/Windows, smoke-checks native modules, and packages + verifies the Windows installers. But there are two concrete gaps worth closing. Neither is urgent; the pipeline is correct, it's just missing one guard and doing redundant work.

Gap 1 — evals/ is never type-checked in CI

Root cause. The root tsconfig.json only includes src, common, electron:

"include": ["src", "common", "electron", "vite.config.ts"]

npm run build is tsc --noEmit && vite build, which uses that root config, so evals/ is outside the compiled set. The only thing that type-checks the evals is the separate npm run typecheck:evals (tsc --noEmit -p evals/tsconfig.json), and that script is not run by either workflow. npm test only executes a hand-listed set of *.test.ts files, none under evals/.

Impact. A type error introduced in evals/ (scenarios, harness, scoring, seeding) passes CI green. This is a live risk — the eval scenarios are edited fairly often (e.g. the recent Cowork skill-builder scenarios in evals/skillbuilder/scenarios.ts).

Suggested fix. Add one cheap step to the Linux leg of the non-Windows workflow (a few seconds, no need to run it on every OS):

- run: npm run typecheck:evals

Gap 2 — every PR runs the whole matrix twice

Root cause. Both workflows trigger on push and pull_request:

on:
  push:
  pull_request:

For a PR whose branch lives in this repo, both events fire on each commit, so the entire matrix (macOS, Ubuntu, Windows x64, Windows arm64 — the last two including the slow electron-builder packaging step) runs twice per commit. (Easy to see in a recent PR: two separate workflow runs per job.)

Impact. ~2× CI minutes/wall-clock on every PR push, dominated by the duplicated Windows packaging jobs.

Suggested fix. Either scope the triggers so a branch with an open PR isn't built twice, e.g.:

on:
  push:
    branches: [master]
  pull_request:

and/or add a concurrency group that cancels superseded runs:

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

Notes

  • Evals themselves (npm run eval:*) should not run in CI — they need a model/network and cost money. This issue only asks for the cheap type-check of the evals, not their execution.
  • No linter exists in the repo today, so "no lint in CI" is out of scope here.

Ported from https://github.com/adilei/skill-recorder/issues/36 (originally opened by @adilei on 2026-07-28).

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with .github/workflows/non-windows.yml and .github/workflows/windows.yml, then inspect the root package scripts and evals/tsconfig.json. Run npm run typecheck:evals locally and review the workflow triggers and concurrency settings. Done means evals type-check in the Linux CI leg and pull requests no longer cause redundant matrix runs.

Written by the indexing model from the issue text.

Assessment

Tech stack
github-actions, typescript
Domain
ci-cd
Issue type
Feature
Difficulty
3/5
Estimated time
1-2 days
Activity status
Quiet
Clarity
Clearly specified
Newbie friendliness
72/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.