Skip to content

chore: take over publishing with release-please#5

Merged
luke-speechify merged 2 commits into
masterfrom
chore/release-please-takeover
Jun 19, 2026
Merged

chore: take over publishing with release-please#5
luke-speechify merged 2 commits into
masterfrom
chore/release-please-takeover

Conversation

@luke-speechify

@luke-speechify luke-speechify commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

What

Replace the legacy tag-driven ci.yml publish flow with release-please as the single owner of versioning, changelogs, and npm publishes — matching the pattern being introduced on speechify-api-sdk-python in parallel.

Why

ci.yml ran npm publish on refs/tags/*, which meant publishes were driven by hand-cut git tags. That leaves no changelog, no conventional-commit-driven semver, and no PR-based release approval gate. Moving to release-please gives us:

  • A PR-based release flow (open / merge a chore(master): release <next> PR to ship)
  • Conventional-commit-driven semver bumps
  • Auto-generated CHANGELOG.md
  • One workflow that gates publish on release_created == 'true' rather than tag shape

What changes

New release-please artifacts

  • release-please-config.jsonrelease-type: node, package @speechify/api. extra-files tracks src/version.ts via the x-release-please-version marker. Tag format include-v-in-tag: false / include-component-in-tag: false matches the existing git tag style (1.0.2, not v1.0.2).
  • .release-please-manifest.json pinned to 1.0.2 — the current GitHub Release marked "Latest", matching package.json, src/version.ts, and every X-Fern-SDK-Version literal across src/api/resources/**/Client.ts on master.

Workflow swap

  • Delete .github/workflows/ci.yml.
  • Add .github/workflows/release-please.yml: compile (yarn build) and test (yarn test) on every push to master and every PR; release-please runs on push to master; publish (npm publish --provenance --access public) gated on needs.release-please.outputs.release_created == 'true'.
    • Alpha/beta tag detection lifts straight from the old ci.yml so prerelease handling still works the same way — it now reads needs.release-please.outputs.tag_name instead of GITHUB_REF.
    • Provenance still flows through the existing GitHub OIDC trusted publisher on npm (no NPM_TOKEN needed).

Marker added

  • Add the inline // x-release-please-version comment next to the existing SDK_VERSION literal in src/version.ts. Literal value stays at 1.0.2.

Fern ignore expansion

  • .fernignore now lists the release-please artifacts (config, manifest, workflow, CHANGELOG.md) and the deleted ci.yml so Fern regen doesn't recreate them. src/version.ts is NOT in .fernignore — Fern's regen replay re-applies release-please's commits (the marker + the SDK_VERSION bump) on top of the regenerated file, so the marker and the bumped literal survive regen without needing the file frozen out of Fern entirely.

What does NOT change

No version literal changes anywhere. package.json stays at 1.0.2 (matches the GitHub Release marked Latest), the 93 X-Fern-SDK-Version literals across src/api/resources/**/Client.ts stay at 1.0.2 too.

Side note: npm's latest dist-tag is currently behind at 1.0.1 because the 1.0.2 publish never landed there (1.0.2-alpha.0 exists as the alpha dist-tag). The next release this workflow cuts will pull npm latest forward.

Verification

$ yarn build
\u2026 Done in 1.97s.

$ yarn test
Test Suites: 41 passed, 41 total
Tests:       255 passed, 255 total

Replaces the legacy tag-driven ci.yml publish flow with release-please as
the single owner of versioning, changelogs, and npm publishes — matching
the pattern being introduced on speechify-api-sdk-python in parallel.

What changes:
- Add release-please-config.json (release-type node, package @speechify/api,
  extra-files tracks src/version.ts via the x-release-please-version marker)
- Add .release-please-manifest.json pinned to 1.0.2 — the current GitHub
  Release marked Latest, matching package.json + every X-Fern-SDK-Version
  literal across src/api/resources/**/Client.ts on master
- Add .github/workflows/release-please.yml: compile (yarn build) and test
  (yarn test) on every push to master and every PR; then release-please
  on master; then npm publish --provenance --access public on release.
  Alpha/beta tag detection lifts from the deleted ci.yml unchanged, now
  reading the release-please-emitted tag_name instead of GITHUB_REF.
  Publish still flows through the existing GitHub OIDC trusted publisher
  on npm (no NPM_TOKEN needed)
- Remove .github/workflows/ci.yml — the new workflow covers compile,
  test, and publish
- Add the inline x-release-please-version marker next to the existing
  SDK_VERSION literal in src/version.ts (literal stays at 1.0.2)
- Expand .fernignore to keep Fern regen from wiping the release-please
  artifacts, the new workflow, the deleted ci.yml, and src/version.ts

No version literal changes anywhere. package.json stays at 1.0.2 to
match the GitHub Release. (npm latest dist-tag is currently behind at
1.0.1 because the 1.0.2 publish never landed there; the next release
this workflow cuts will catch npm back up.)

Verified: yarn build passes; yarn test passes 255/255.
Drop src/version.ts from .fernignore. Fern's regen replay re-applies
release-please's commits (the x-release-please-version marker + the
SDK_VERSION bump) on top of the regenerated file, so we don't need to
freeze it out of regen entirely.
@luke-speechify luke-speechify merged commit 2b01eea into master Jun 19, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant