Skip to content

Commit 9fae1ae

Browse files
committed
Release 1.0.0: public API SemVer-stable; ESLint + coverage gate + GR-8 benchmark
1 parent 480d3af commit 9fae1ae

6 files changed

Lines changed: 1795 additions & 101 deletions

File tree

.github/workflows/ci.yml

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,32 @@ jobs:
3434
- name: Test
3535
run: npm test
3636

37+
lint:
38+
name: Static analysis (ESLint)
39+
runs-on: ubuntu-latest
40+
steps:
41+
- uses: actions/checkout@v5
42+
- uses: actions/setup-node@v4
43+
with:
44+
node-version: "22"
45+
cache: npm
46+
- run: npm ci
47+
- name: ESLint
48+
run: npm run lint
49+
50+
coverage:
51+
name: Coverage gate (>=90%)
52+
runs-on: ubuntu-latest
53+
steps:
54+
- uses: actions/checkout@v5
55+
- uses: actions/setup-node@v4
56+
with:
57+
node-version: "22"
58+
cache: npm
59+
- run: npm ci
60+
- name: Coverage
61+
run: npm run coverage
62+
3763
conformance:
3864
name: Conformance suite in sync
3965
runs-on: ubuntu-latest
@@ -46,3 +72,16 @@ jobs:
4672
diff -ru "$RUNNER_TEMP/conformance/fixtures" "test/conformance/fixtures"
4773
diff -ru "$RUNNER_TEMP/conformance/schema" "test/conformance/schema"
4874
echo "Vendored conformance is in sync with the canonical suite."
75+
76+
ci-green:
77+
name: CI green
78+
runs-on: ubuntu-latest
79+
needs: [test, lint, coverage, conformance]
80+
if: ${{ always() }}
81+
steps:
82+
- name: Fail if any required job did not pass
83+
run: |
84+
if ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }}; then
85+
echo "A required job failed or was cancelled."
86+
exit 1
87+
fi

CHANGELOG.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,20 @@ The envelope wire format is versioned separately by `meta.schema_version`
99

1010
## [Unreleased]
1111

12+
## [1.0.0] - 2026-06-07
13+
14+
**1.0.0 — the public API is now SemVer-stable**: breaking changes require a MAJOR,
15+
following the deprecation policy. The wire envelope is unchanged
16+
(`schema_version: 1`). Full reference at [babelqueue.com](https://babelqueue.com).
17+
18+
### Internal
19+
- CI adds **ESLint** (`@eslint/js` + `typescript-eslint`) and a **c8 coverage gate**
20+
(`npm run coverage`, ≥90% lines/functions, ≥85% branches) as separate jobs;
21+
`tsc --strict` typecheck already ran. `npm run lint` for local use.
22+
- **GR-8 latency benchmark** (`test/overhead.test.ts`) — asserts the envelope
23+
encode/decode path adds **≤2%** over plain-JSON serialization vs a conservative
24+
750µs broker round-trip.
25+
1226
## [0.1.0] - 2026-06-06
1327

1428
### Added
@@ -34,5 +48,6 @@ The envelope wire format is versioned separately by `meta.schema_version`
3448
- Pre-1.0: the public API may change before the `1.0.0` tag.
3549
- **Zero runtime dependencies**; Node `>=18`.
3650

37-
[Unreleased]: https://github.com/BabelQueue/babelqueue-node/compare/v0.1.0...HEAD
51+
[Unreleased]: https://github.com/BabelQueue/babelqueue-node/compare/v1.0.0...HEAD
52+
[1.0.0]: https://github.com/BabelQueue/babelqueue-node/compare/v0.1.0...v1.0.0
3853
[0.1.0]: https://github.com/BabelQueue/babelqueue-node/releases/tag/v0.1.0

eslint.config.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import js from '@eslint/js';
2+
import tseslint from 'typescript-eslint';
3+
4+
export default tseslint.config(
5+
{ ignores: ['dist/**', 'coverage/**'] },
6+
js.configs.recommended,
7+
...tseslint.configs.recommended,
8+
);

0 commit comments

Comments
 (0)