Commit Graph

777 Commits

Author SHA1 Message Date
Jordan Ritter 4bf09a1eb0 fix: docs sync Slack notifications fire even when PR step fails 2026-04-12 13:14:50 -07:00
Jordan Ritter c3bb61c10e fix: docs sync PR step — stage and commit review items before creating PR 2026-04-12 13:04:11 -07:00
Jordan Ritter c1877db0d5 fix: set human_input_mode=NEVER on ag2 showcase agent (#3777)
## Summary

Two fixes:

### 1. AG2 showcase agent blocks on human feedback
The `ConversableAgent` defaults to `human_input_mode="TERMINATE"`, which
prompts for user feedback when the conversation terminates. In the AG-UI
streaming context via `AGUIStream`, this blocks with:
> "Please give feedback to the sender. Press enter to skip and use
auto-reply, or type 'exit' to stop the conversation:"

This was broken from day one (showcase deployed April 8, first L4 test
ran April 9 and failed). The ag2 image was never rebuilt since — the
unpinned `ag2>=0.9.0` dep resolved to 0.11.5 at build time.

Fix: set `human_input_mode="NEVER"`.

### 2. Showcase E2E Slack alerts lack detail
The Slack notification only said "Showcase E2E suite failed" with a
link. Now captures playwright output and includes failed test names +
error messages:

```
❌ Showcase E2E suite failed
View run

  1) [L4: tools] ag2 renders tool results @tools
    Error: ag2 response doesn't contain weather info: "Please give feedback..."
```

Test names now carry their level prefix (`[L1: health]`, `[L2: agent]`,
`[L3: chat]`, `[L4: tools]`) so you can tell what broke from the Slack
message alone.

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-04-12 12:27:47 -07:00
Jordan Ritter 734d552e37 fix: include failure details in Showcase E2E Slack alerts
The Slack notification for E2E failures only said "Showcase E2E suite
failed" with a link. Now captures playwright output, extracts failed
test names and error messages, and includes them in the Slack message
as a code block so the team can see what broke without clicking through.
2026-04-11 18:21:24 -07:00
Jordan Ritter 69d46e0b00 fix: Fix drift detection: run only integration-smoke tests (#3776)
## Summary

The drift detection workflow runs `npx playwright test --grep
"@health|@agent|@chat"` which matches BOTH `integration-smoke.spec.ts`
(deployed Railway backends) and `starter-smoke.spec.ts` (Docker-built
starters). The starter-smoke tests try to connect to `localhost:3000`
which doesn't exist in CI, causing all runs to fail.

Fix: scope to `npx playwright test integration-smoke --grep ...` so only
the showcase integration tests run.

## Test plan

- [x] Verified locally: 13 integration-smoke tests pass, 0 starter-smoke
tests included

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-04-11 08:30:03 -07:00
Jordan Ritter 466361f8a1 fix: scope drift detection to integration-smoke only (exclude starter-smoke) 2026-04-11 08:27:43 -07:00
Tyler Slaton beff7a859e test: add bumpPackages tests, wire release tests into CI
- Add tests for bumpPackages: verifies workspace:* protocol is
  preserved and exact version deps are updated
- Add vitest config for scripts/release/
- Add release script test step to test_unit.yml so these run on
  every PR and push to main
2026-04-10 23:08:12 -07:00
Tyler Slaton 2a880fb09c ci: add scope dropdown (monorepo, cli, angular) to release workflows
Each release scope has its own packages, version source, and
independent version track:
- monorepo: 12 core @copilotkit/* packages (shared version)
- cli: copilotkit CLI (independent version)
- angular: @copilotkitnext/angular (independent version)

Branch pattern is now release/publish/<scope>/v<version> and git
tags use <scope>/v<version> for non-monorepo scopes.
2026-04-10 23:04:48 -07:00
Tyler Slaton dacc21ea35 ci: restrict release workflows to main branch only
Add if: github.ref == 'refs/heads/main' to both release / create-pr
and release / pre jobs. Running from a feature branch will skip
immediately.
2026-04-10 22:51:27 -07:00
Tyler Slaton 5b84c16b55 ci: fix Node 20 compat, rename workflows, add unit tests
- Replace import.meta.dirname (Node 21.2+) with fileURLToPath
  workaround for Node 20 compatibility
- Rename workflows to release / pre, release / publish, release /
  create-pr so they group together in the Actions UI
- Fix semver regex to allow hyphens in prerelease identifiers
- Add unit tests for parseSemver, computeNextStableVersion,
  computePrereleaseVersion
2026-04-10 22:43:53 -07:00
Tyler Slaton 387784c7bd ci: add bespoke stateless release system
Replace changesets with a simple, stateless release system:

Stable release (PR-gated):
  Actions → "create release PR" → pick patch/minor/major → CI runs →
  merge → publishes to npm, creates git tag + GitHub Release

Prerelease (ad-hoc):
  Actions → "publish / prerelease" → publishes current version with
  -canary.<suffix|timestamp> to npm under "canary" tag

Key features:
- All 12 core @copilotkit/* packages share a single version
- AI-generated release notes via Anthropic API
- Notion draft for team editing before merge
- Notion link commented on the release PR
- Guards: concurrent release PR check, version > npm check, clean
  semver check, canary-only prerelease tag
- release/publish/v* branch pattern (hard to accidentally match)
- TypeScript throughout (tsx runner)
- release.config.json with versionedTogether/versionedIndependently
2026-04-10 22:20:43 -07:00
Tyler Slaton ab74b737f0 ci: remove changesets infrastructure
Remove the entire changesets-based release system:
- .changeset/ config directory
- .github/actions/changesets-action/ custom fork (34 files)
- @changesets/assemble-release-plan patch
- @changesets/cli dependency
- Old release and prerelease workflows
- Legacy release scripts (check-allowed, generate-changelog, publish-snapshot)
- Stale paths-ignore entries in CI workflows
2026-04-10 22:20:32 -07:00
Jordan Ritter 80ea96fefe feat: Switch preview captures from GIF to MP4 with GitHub Release storage 2026-04-10 13:30:24 -07:00
Jordan Ritter b41fc64e2e fix: showcase drift detection compares against showcase-affecting commits, not HEAD (#3758)
## Summary

The showcase image drift detection compared image tags against `main`
HEAD SHA, but deploys only trigger when `showcase/` or
`examples/integrations/` paths change. Any non-showcase commit to main
(package bumps, workflow changes, docs, etc.) made ALL images appear
stale, triggering unnecessary rebuild workflows and Slack alerts.

## Root Cause

```bash
# Before: always stale after non-showcase commits
MAIN_SHA=$(git ls-remote ... main | cut -f1)
```

## Fix

Query the GitHub API for the last commit that actually touched
showcase-related paths, then check image tags against those SHAs:

```bash
SHOWCASE_SHA=$(gh api "repos/.../commits?path=showcase&per_page=1" --jq '.[0].sha')
EXAMPLES_SHA=$(gh api "repos/.../commits?path=examples/integrations&per_page=1" --jq '.[0].sha')
# Image is up-to-date if it matches EITHER SHA
```

## Impact

- No more false-positive drift alerts flooding #oss-alerts
- No more unnecessary rebuild triggers for every non-showcase commit
- Drift detection now only fires when showcase code actually changed but
images weren't rebuilt

🤖 Generated with [Claude Code](https://claude.com/claude-code)
2026-04-10 13:19:55 -07:00
Jordan Ritter aafcfccb35 fix: showcase drift detection compares against showcase-affecting commits, not HEAD
The drift check compared image tags against main HEAD SHA, but deploys
only trigger when showcase/ or examples/integrations/ paths change. Any
non-showcase commit to main made ALL images appear stale, triggering
unnecessary rebuild workflows and Slack alerts.

Fix: query the GitHub API for the last commit that touched each path
and check image tags against those SHAs instead.
2026-04-10 13:17:28 -07:00
Jordan Ritter 82aaaefbae fix: use npm ci instead of pnpm install for showcase drift detection tests 2026-04-10 11:30:34 -07:00
Jordan Ritter 5cc3e04033 fix: debounce image drift alerts — only alert when stale set changes, not every 15min 2026-04-10 11:15:37 -07:00
Jordan Ritter e5b323902e fix: disable LFS in showcase drift detection checkout (fixes LFS fetch failures) 2026-04-10 11:13:35 -07:00
Alem Tuzlak 1bae2fc899 Merge branch 'main' into chore/oxlint-new-rules 2026-04-10 19:43:20 +02:00
Jordan Ritter 49861ae3b4 ci: refactor showcase_deploy from 23 duplicate jobs to dynamic matrix
Replaced 23 identical build jobs with one parameterized matrix job.
1200 lines to ~250. Service config as JSON, matrix generated from
path-filter results. Shell special cases (LFS, build-args, custom
Dockerfile) handled via matrix properties and dedicated prep step.
2026-04-10 10:37:51 -07:00
Jordan Ritter d55870c499 ci: consolidate commitlint into static_quality, add auto-fix on PRs
Merged standalone commitlint into static_quality as 4th parallel job.
Upgraded all actions to v4, added concurrency group. Format job now
auto-fixes and commits back to same-repo PR branches. Commitlint
posts helpful PR comment with valid prefixes on failure.
2026-04-10 10:37:51 -07:00
Jordan Ritter 189e20424b ci: add concurrency groups to test workflows
Added cancel-in-progress concurrency to e2e_dojo, e2e_examples,
test_runtime-servers, and test_unit. Added pnpm cache to test_unit.
2026-04-10 10:37:51 -07:00
Jordan Ritter d3e0e2d8db ci: add path filters to publish-commit, upgrade actions and caching
publish-commit had no path/branch filters — fired on every push.
Restricted to packages/**, upgraded checkout to v4, added pnpm
cache and --frozen-lockfile to both publish workflows.
2026-04-10 10:37:50 -07:00
Jordan Ritter f5462915c3 ci: fix static_danger matrix bug, python-sdk concurrency and dep pin
- static_danger: removed undefined matrix.node-version, upgraded to
  v4, added concurrency and timeout
- python-sdk: added concurrency and timeout, pinned ag-ui-langgraph
  <0.0.32 (0.0.32 imports non-existent ImageInputContent from ag_ui.core)
2026-04-10 10:37:42 -07:00
Alem Tuzlak ff2093102c chore(lint): add new oxlint rules and auto-fix violations
Enable stricter oxlint rules for better code health:
- typescript/consistent-type-imports: enforce `import type` for type-only imports
- typescript/no-import-type-side-effects: prefer top-level type imports
- import/consistent-type-specifier-style: consistent type specifier placement
- typescript/no-unnecessary-type-assertion: bump to error
- react/self-closing-comp: enforce self-closing JSX components
- unicorn/prefer-optional-catch-binding: drop unused catch params
- eslint/no-useless-computed-key: simplify object keys
- unicorn/prefer-string-slice: prefer .slice() over .substring()
- unicorn/prefer-array-flat-map: prefer .flatMap() over .map().flat()

All existing violations auto-fixed via oxlint --fix.
2026-04-10 19:29:32 +02:00
Jordan Ritter 38d22f5b6f fix: skip drift check if main commit <20min old, fix literal newline in Slack message 2026-04-09 20:59:01 -07:00
Jordan Ritter 6f3b52f1ef fix: remove || true from E2E install, add DOCKER_CLI_EXPERIMENTAL for image drift 2026-04-09 20:02:44 -07:00
Jordan Ritter 1d725e04da fix: format shell-dojolike files and add binary check exclusion 2026-04-09 16:45:33 -07:00
Jordan Ritter ac698e03c2 feat: add Dockerfile and deploy pipeline for shell-dojolike 2026-04-09 16:43:01 -07:00
Jordan Ritter c4460d9610 feat: add image drift detection to showcase drift checks (#3732)
## Summary

Adds an image drift check to the 6-hourly drift detection workflow. For
each showcase service, compares the GHCR `:latest` image digest against
the image tagged with the current main HEAD SHA. If they don't match,
the service's image is stale (main has code that hasn't been
built/deployed).

Posts to #oss-alerts when stale images are detected:
```
📦 Image Drift Detected
⚠️ ms-agent-dotnet — GHCR image not built for current main
```

This catches the scenario where a merge to main changes showcase code
but the deploy workflow misses it due to timing/cancellation.
2026-04-09 16:09:02 -07:00
Jordan Ritter 3821e95b01 fix: guard redirect report to only run on schedule/dispatch (#3731)
Same fix as #3730 for the smoke monitor — push events trigger ghost runs
with no jobs. Stops the noisy GitHub notifications.
2026-04-09 16:06:54 -07:00
Jordan Ritter 5579cfd6aa feat: add image drift detection to showcase drift checks 2026-04-09 15:54:10 -07:00
Jordan Ritter 1622186728 revert: restore NPM_TOKEN auth in release workflow (changesets doesn't support OIDC) 2026-04-09 15:54:01 -07:00
Jordan Ritter 28ef0856fb ci: switch npm publish to OIDC trusted publishing (remove NPM_TOKEN) 2026-04-09 15:46:12 -07:00
Jordan Ritter 627009d3e1 fix(ci): remove empty with: block from showcase redirect-report workflow 2026-04-09 15:35:49 -07:00
Jordan Ritter 5ce8cd9a09 fix: guard redirect report to only run on schedule/dispatch 2026-04-09 15:30:21 -07:00
Jordan Ritter 93bca3d8ac fix: guard smoke monitor job to only run on schedule/dispatch, not push 2026-04-09 15:20:20 -07:00
Jordan Ritter 168297fbda feat: add Slack notifications for docs sync (auto-push and review PR) 2026-04-09 15:06:04 -07:00
Jordan Ritter 8ce19c5f6a fix: remove hardcoded pnpm version 9, use packageManager from package.json 2026-04-09 14:50:20 -07:00
Jordan Ritter a38a0747ab fix: add per-service smoke/health links to Slack alerts 2026-04-09 14:37:54 -07:00
Jordan Ritter 0e53a48c19 feat: add aimock proxy for showcase smoke checks 2026-04-09 13:53:58 -07:00
Tyler Slaton b3aa8ea18c Merge branch 'main' into claude/debug-github-actions-ehR2n 2026-04-09 13:22:39 -07:00
Jordan Ritter b97f03d111 fix(ci): use block scalar for jq in smoke-monitor workflow 2026-04-09 13:20:28 -07:00
Tyler Slaton 551f85db21 Merge branch 'main' into claude/debug-github-actions-ehR2n 2026-04-09 13:14:48 -07:00
Jordan Ritter 7eed375cfd fix(ci): use block scalar for jq command in showcase redirect workflow 2026-04-09 13:11:05 -07:00
Claude 27625a9afd fix(ci): write npm auth to correct config file for publish
The changesets/action@v1 writes auth to ~/.npmrc but
actions/setup-node sets NPM_CONFIG_USERCONFIG to a temp path,
causing pnpm to read a different .npmrc during publish. All packages
fail with E404 on PUT because the auth token isn't picked up.

This adds an explicit `npm config set` step that writes the literal
token to whichever file NPM_CONFIG_USERCONFIG points at.

https://claude.ai/code/session_01KnUcvcGEthP64SKk98HzJ6
2026-04-09 20:09:57 +00:00
Jordan Ritter a3a0cae762 fix: use toJSON for safe Slack payload escaping 2026-04-09 12:48:23 -07:00
Jordan Ritter edfc48585e fix: use GitHub API for blame context instead of deep clone (repo is 750MB) 2026-04-09 12:46:00 -07:00
Jordan Ritter 1fc8b00128 fix: use full clone for git log blame context on all triggers 2026-04-09 12:45:08 -07:00
Jordan Ritter 8194630f45 fix: move capture before teardown, fix fetch-depth, safe env injection 2026-04-09 12:43:50 -07:00