ci: build on the shared ci-workflows node.yaml, remove CircleCI #14

Merged
james.maes merged 2 commits from ci/ci-workflows into main 2026-11-07 22:15:02 +00:00
11 changed files with 40 additions and 73 deletions

No files matched your search

-14
View File
@@ -1,14 +0,0 @@
version: 2.1
setup: true
orbs:
qqq-orb: kingsrook/qqq-orb@0.8
workflows:
setup:
jobs:
- qqq-orb/generate_pipeline:
orb_version: '0.8'
filters:
branches:
ignore: automation/qbit-rc-pending
tags:
only: /.*/
+16
View File
@@ -0,0 +1,16 @@
name: build
on:
push:
jobs:
node:
uses: self:KofTwentyTwo/ci-workflows/.gitea/workflows/node.yaml@v1
with:
node-version: '22'
# The TUI (packages/tui) is not an npm workspace and needs Bun; build and test cover the four
# Node workspaces only, as the old CI did.
commands: |
npm run generate
git diff --exit-code -- packages/ui-api-client/src/schema.ts packages/core/src/api/operations.ts
npm run build
npm test
npm run lint
-8
View File
@@ -1,8 +0,0 @@
profile: cli
orb_version: '0.8'
default_branch: main
publish:
release: true
publish_context: qqq-maven-registry-credentials
# Native target notes; separate binary entrypoints do not read this CI manifest.
# platforms: [macos-arm64, windows-x64]
+2 -2
View File
@@ -324,8 +324,8 @@ scripts/verify-binary.sh dist/qqq-darwin-arm64 --server http://localhost:8077
```
The CLI runs on Node 20 and later and uses no Bun-only API; Bun is needed only for the TUI and the
binaries. CI is the qqq-orb `cli` profile (`.qqq-ci.yml`); a tag `v<client version>` publishes the
packages to GitHub Packages ([`docs/ci-lanes.md`](docs/ci-lanes.md) says what it does and does not cover).
binaries. CI is the shared Gitea `node.yaml` workflow (`.gitea/workflows/build.yaml`): build, test, lint and
a generated-code drift check on every push; it publishes nothing ([`docs/ci-lanes.md`](docs/ci-lanes.md)).
## Contributing, security, license
+2 -2
View File
@@ -23,9 +23,9 @@ Everything under `docs/`:
| [release-notes/1.0.0.md](release-notes/1.0.0.md) | the GitHub release body for `cli-v1.0.0` (the release commands are in an HTML comment at the top) |
| [release-notes/1.0.0-rc.1.md](release-notes/1.0.0-rc.1.md) | the GitHub release body for the release candidate `cli-v1.0.0-rc.1`, kept for history |
| [packaging/README.md](packaging/README.md) | the install paths (curl installer, Homebrew, Scoop, npm), where the formula and manifest live, platform notes (Gatekeeper, SmartScreen, musl), and how the terminal UI is bundled |
| [packaging/homebrew-tap/](packaging/homebrew-tap/README.md) | the complete `QRun-IO/homebrew-tap` repository, ready to copy: `Formula/qqq.rb`, README, LICENSE and its qqq-orb CI files |
| [packaging/homebrew-tap/](packaging/homebrew-tap/README.md) | the complete `QRun-IO/homebrew-tap` repository, ready to copy: `Formula/qqq.rb`, README, LICENSE (its old qqq-orb CI files were removed with CircleCI) |
| [packaging/qqq.json](packaging/qqq.json) | the Scoop manifest, copied to `bucket/qqq.json` in `QRun-IO/scoop-bucket` |
| [ci-lanes.md](ci-lanes.md) | what CircleCI (the qqq-orb `cli` profile) runs: the Linux verify-and-publish job and the macOS arm64 and Windows x64 lanes, what is still outside CI, and the history of the orb changes |
| [ci-lanes.md](ci-lanes.md) | what CI runs (the shared Gitea `node.yaml` workflow), what is outside CI, and the history of the retired CircleCI orb lanes |
`scripts/update-packaging.mjs` fills the version and checksums of the formula and manifest from a
release's `SHA256SUMS`.
+10 -21
View File
@@ -2,30 +2,19 @@
## What runs today
`.circleci/config.yml` is the qqq-orb setup stub on the `0.8` track (it picks up every 0.8.x release by
itself); `.qqq-ci.yml` selects the orb's `cli` profile and, since qqq-orb **0.8.33**, turns on the
platform lanes with `platforms: [macos-arm64, windows-x64]`. The profile generates three jobs:
CircleCI and the qqq-orb were retired on 2026-11-07. CI is the shared Gitea workflow
[`KofTwentyTwo/ci-workflows` `node.yaml`](https://git.kof22.com/KofTwentyTwo/ci-workflows), called from
`.gitea/workflows/build.yaml` on every push, Linux only (`node:22-bookworm`):
| Job | Executor | What it runs |
|---|---|---|
| `cli-macos-arm64` (`qqq-orb/cli_platform`) | macOS, Xcode 16.4, `m4pro.medium` | Node 20.20.2 (the `engines` floor) with nvm, `npm ci`, `npm run build && npm test && npm run lint` |
| `cli-windows-x64` (`qqq-orb/cli_platform`) | Windows Server 2022, `windows.medium`, steps in Git Bash | the same, on Windows (keyring DPAPI path, Windows paths) |
| `qqq-orb/cli_verify_publish` | Linux, `cimg/node:22.23` | `npm ci`; `npm run generate` then `git diff --exit-code` on `schema.ts` and `operations.ts`; build, test, lint; a Prism smoke (`GET /qqq/v1/version`, `/metaData/authentication`); on a tag `v<client version>` with `publish.release: true`, publishing (below) |
1. `npm ci`
2. `npm run generate`, then `git diff --exit-code` on `schema.ts` and `operations.ts` (generated-code drift)
3. `npm run build`, `npm test`, `npm run lint`
On branches and pull requests the three jobs run side by side. On a release tag `cli_verify_publish`
**requires both platform lanes**, so nothing is published unless macOS and Windows are green. Publishing
puts all four packages on GitHub Packages (client, core, conformance, CLI, in that order) with the dist-tag
`latest` when all four versions are final and `rc` when any of them has a prerelease part. The CircleCI
plan must include the `m4pro.medium` and `windows.medium` resource classes.
Not in CI: publishing (packages, binaries, Homebrew/Scoop updates are release-machine steps in
`docs/release-runbook.md` until a release workflow is decided), the macOS arm64 and Windows x64 lanes,
the Prism smoke, the TUI (`npm run test:tui`, `typecheck:tui`, which need Bun) and the platform binaries.
The orb's generator accepts this manifest: rendered with `src/scripts/generate_pipeline.py` from qqq-orb
v0.8.33, a push to `main` gives `cli-macos-arm64`, `cli-windows-x64` and `cli_verify_publish` in
`test_only`, and the tag `v1.8.0` gives the same in `publish_release` with `cli_verify_publish` requiring
both lanes and bound to the `qqq-maven-registry-credentials` context.
Still not in CI: the TUI (`npm run test:tui`, `typecheck:tui`, which need Bun), and building and smoking
the platform binaries (`scripts/build-binaries.mjs --host`, `scripts/verify-binary.sh` / `.ps1`); the
lanes run the Node packages only. Those stay release-machine steps in `docs/release-runbook.md`.
Everything below describes the retired CircleCI setup and is kept for the record.
### History
+2 -4
View File
@@ -36,10 +36,8 @@ checkpoint the sums here first, not there.
## Where the formula and manifest live
- **`QRun-IO/homebrew-tap`** is laid out under `homebrew-tap/` here (the repository is created by copying
that directory). Its CI is the qqq-orb `homebrew-tap` profile (`.qqq-ci.yml`, with the same setup
`.circleci/config.yml` as `QRun-IO/homebrew-qctl`). That CI fetches and checksums every platform's
download, but it installs the formula and runs `brew test` with the **Linux x64 binary only**; the
macOS (and Linux arm64) binaries are not executed there. qctl stays in `QRun-IO/homebrew-qctl` until it
that directory). Its old CI (the qqq-orb `homebrew-tap` profile on CircleCI) was retired on
2026-11-07 and the seed no longer carries CI files; tap CI on Gitea is not decided yet. qctl stays in `QRun-IO/homebrew-qctl` until it
moves over.
- **`QRun-IO/scoop-bucket`** is created from
[ScoopInstaller/BucketTemplate](https://github.com/ScoopInstaller/BucketTemplate), with `qqq.json` as
@@ -1,14 +0,0 @@
version: 2.1
setup: true
orbs:
qqq-orb: kingsrook/qqq-orb@0.8
workflows:
setup:
jobs:
- qqq-orb/generate_pipeline:
orb_version: '0.8'
filters:
branches:
ignore: automation/qbit-rc-pending
tags:
ignore: /.*/
-5
View File
@@ -1,5 +0,0 @@
profile: homebrew-tap
orb_version: '0.8'
default_branch: main
tap: qrun-io/tap
formula: qqq
+3 -3
View File
@@ -20,9 +20,9 @@ here (`Formula/qctl.rb`) once this tap exists, with `homebrew-qctl` kept as a po
The formula is generated in qqq-cli: after a `cli-v<version>` GitHub release, run
`node scripts/update-packaging.mjs <release SHA256SUMS>` there and copy
`docs/packaging/homebrew-tap/Formula/qqq.rb` here. CI (qqq-orb `homebrew-tap` profile) fetches every
platform's download, installs the formula and runs its test, which fails on a wrong or all-zero sum, but
only once the pull request here is opened and its checks are read. The script refuses to write missing or
`docs/packaging/homebrew-tap/Formula/qqq.rb` here. The tap's old CI (qqq-orb `homebrew-tap` profile,
which installed the formula and ran its test) was retired on 2026-11-07; Gitea CI for the tap is not
decided yet, so check the formula by hand (`brew install --build-from-source ./Formula/qqq.rb && brew test qqq`). The script refuses to write missing or
malformed sums; still compare the sums in the diff with the release's `SHA256SUMS` before opening the PR.
Apache-2.0
+5
View File
@@ -4,6 +4,11 @@ From "the branch is green" to "1.0.0 is published and installable everywhere". I
1.0.0 but holds for any release; replace the versions. Nothing in the repository tags, pushes or
publishes by itself: `scripts/release.mjs` checks and prints, people run the commands.
> **2026-11-07:** CircleCI and the qqq-orb are retired. Gitea CI (`.gitea/workflows/build.yaml`) verifies
> only; the orb publish steps below (npm packages on a `v<client version>` tag, the platform lanes) have
> no replacement yet. How packages, binaries and the Homebrew/Scoop updates are released is an open
> decision; until then this runbook is the record of the old process.
What ships:
| Artifact | Version for 1.0 | Where | Made by |