Skip to content

chore: simplify and tighten release scripts - #2124

Merged
BlankParticle merged 4 commits into
blank/website-preview-install-urlsfrom
blank/simplify-release
Oct 7, 2026
Merged

BlankParticle merged 4 commits into
blank/website-preview-install-urlsfrom
blank/simplify-release

Conversation

@BlankParticle

@BlankParticle BlankParticle commented Oct 7, 2026 •

Copy link
Copy Markdown
Member

Releases always publish under npm's latest dist-tag, and CI fails when package versions drift apart.

  • Version sync: validate:publish-packages now also requires every distilled package to share one version (alongside the existing alchemy check). Check runs it; prepare.ts already does on release.

  • Always latest: the force-latest input and the per-channel dist-tags are gone. The version input still selects the version (beta, beta.N, rc/alpha, patch|minor|major, x.y.z, or a custom 0.0.0-<name>).

  • No NPM_TOKEN: publish.sh and its token-based dist-tag moves are replaced by scripts/release/publish.ts (Effect). It publishes each tarball to latest over OIDC, skips versions already on npm so a partial release can be re-run, and reports every package:

    Publishing 7 tarball(s) from release-packages:
    - alchemy@2.0.0-beta.82: publishing
    - alchemy@2.0.0-beta.82: published to latest
    - @alchemy.run/floci@2.0.0-beta.82: already on npm, skipped
    ...
    6 published, 1 skipped, 0 failed
    

    The same results are written to the job summary as a table.

  • Effect scripts: prepare.ts, validate-publish-packages.ts and the new publish.ts are Effect CLI scripts run with node, decoding package.json and npm responses with Schema (shared scripts/package-manifest.ts) and failing with named errors (VersionMismatch, InvalidReleaseSpec, PublishFailed, …). prepare.ts keeps stdout for the version= / channel= lines.

  • Type-check scripts/: tsconfig.scripts.json is composite and back in the root solution, so pnpm typecheck covers it.

- validate-publish-packages also fails when distilled's packages drift apart;
  Check runs it, and prepare.ts already does on release
- prepare.ts only computes the next 2.0.0-beta.N; drop the version/
  force-latest inputs, channel tags and the custom-tag branch in commit.sh
- replace publish.sh (NPM_TOKEN dist-tag moves) with a pnpm publish loop to
  the default latest tag that skips already-published versions
@BlankParticle
BlankParticle added this pull request to stack #2122 October 7, 2026 15:04
- restore the version input and prepare.ts's release specs (beta[.N],
  rc/alpha[.N], patch|minor|major, x.y.z, custom tags); only force-latest and
  the dist-tag output stay removed
- scripts/release/publish.ts publishes each tarball to latest, skips versions
  already on npm, logs every package and writes a job summary table
- drop the comments added in the previous commit
@BlankParticle
BlankParticle marked this pull request as ready for review October 7, 2026 15:18
@BlankParticle BlankParticle changed the title ci(release): always publish the next beta under latest chore: simplify and tighten release workflow Oct 7, 2026
@BlankParticle BlankParticle changed the title chore: simplify and tighten release workflow ci(release): always publish to latest, publish via an Effect script Oct 7, 2026
@BlankParticle BlankParticle changed the title ci(release): always publish to latest, publish via an Effect script chore: simplify and tighten release workflow Oct 7, 2026
Both run under node as Effect CLI scripts, like publish.ts: FileSystem for
manifests, HttpClient for npm, ChildProcess for git/pnpm. prepare.ts keeps
stdout for the version=/channel= lines and reports failures on stderr.
@alchemy-version-bot

alchemy-version-bot Bot commented Oct 7, 2026 •

Copy link
Copy Markdown
Contributor

Install the packages built from this commit:

alchemy

pnpm install https://pkg.alchemy.run/alchemy/pr:2124:ac95173
@alchemy.run (6)
pnpm install https://pkg.alchemy.run/@alchemy.run/better-auth/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@alchemy.run/cloudflare-runtime/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@alchemy.run/frontend-frameworks/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@alchemy.run/node-utils/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@alchemy.run/floci/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@alchemy.run/pkg/pr:2124:ac95173
Transitive Dependencies (18)
pnpm install https://pkg.alchemy.run/@distilled.cloud/acme/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/aws/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/axiom/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/cloudflare/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/core/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/doppler/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/fly-io/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/gcp/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/hetzner/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/iceberg/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/infisical/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/neon/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/planetscale/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/prisma/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/railway/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/stripe/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/zerossl/pr:2124:ac95173
pnpm install https://pkg.alchemy.run/@distilled.cloud/github/pr:2124:ac95173

Published Oct 7, 2026, 3:40 PM UTC. Expires Oct 14, 2026, 3:40 PM UTC, extended while this pull request is open.

…ripts/

- scripts/package-manifest.ts: Schema for package.json, shared by prepare,
  publish and validate-publish-packages
- named Data.TaggedError failures (VersionMismatch, InvalidReleaseSpec,
  PublishFailed, ...) instead of plain Error; npm responses decoded with Schema
- tsconfig.scripts.json is composite and part of the root solution, so
  pnpm typecheck covers scripts/; cross-package imports use package names
@BlankParticle BlankParticle changed the title chore: simplify and tighten release workflow chore: simplify and tighten release scripts Oct 7, 2026
@BlankParticle
BlankParticle merged commit a5ef336 into main Oct 7, 2026
7 checks passed
@BlankParticle
BlankParticle deleted the blank/simplify-release branch October 7, 2026 16:06
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