Skip to content

Latest commit

 

History

History
83 lines (65 loc) · 3.59 KB

File metadata and controls

83 lines (65 loc) · 3.59 KB

AffineScript Packaging & Distribution (INT-04)

INT-04 (#181). This documents what is publish-ready, the order, and the one open design question. Nothing here publishes anything: the workflow is manual-only and the owner dispatches it after review.

JSR-publishable units (Deno/JSR-first)

The JS runtime packages are JSR-publishable today. deno publish --dry-run succeeds for both (verified during INT-04 prep):

Package Spec Notes

packages/affine-js

@hyperpolymath/affine-js

Loader + marshal
runtime + ownership accessor. Tests excluded via publish.exclude.

affinescript-tea

@hyperpolymath/affinescript-tea

TEA runtime. Depends on @hyperpolymath/affine-js/loader (import map) — see order.

Publish order is load-bearing: affine-js must publish before affinescript-tea (the latter resolves @hyperpolymath/affine-js/loader).

affinescript-dom is AffineScript source (.affine), not a JS package — it is consumed by the compiler, not JSR; out of scope for JSR.

Slow types

The JS entrypoints emit JSR’s unsupported-javascript-entrypoint (slow-types) warning — expected for a JS-with-JSDoc package; it publishes, only @hyperpolymath/affine-js’s fast-check is skipped. `types.d.ts already provides the consumer-facing contract. Converting entrypoints is out of scope for INT-04 (tracked separately if desired).

How to publish (owner, manual)

  1. Review deno publish --dry-run (CI: Publish to JSR (manual) with dry_run: true, or locally cd <pkg> && deno publish --dry-run).

  2. Dispatch .github/workflows/publish-jsr.yml for affine-js with dry_run: false (JSR OIDC via id-token: write — no token secret).

  3. Then dispatch it for affinescript-tea.

npm tail

"then npm" (#181) is a separate, later step and is not wired by this prep. If/when needed it follows the existing owner-sanctioned npm pattern (.github/workflows/affine-vscode-publish.yml, NPM_TOKEN scoped automation token) — a deliberate exception to Deno-first.

The compiler itself — decided (ADR-019 / #260)

#181 says "publish compiler + runtime". The runtime is the JS packages above. The compiler is a native OCaml binary — not a JSR/npm package. The one-way-door fork (#260) was decided (ADR-019): Releases-canonical, dual-channel.

  • Canonical artifact. .github/workflows/release.yml (#260 S2), on a v* tag, builds affinescript-{linux-x64,macos-x64,macos-arm64} raw binaries + a SHA256SUMS manifest attached to the GitHub Release. (windows-x64 is a tracked follow-up.) Asset names are the ADR-019 contract — do not rename without amending the ADR + the shim.

  • Ergonomic front door. packages/affinescript-cli (@hyperpolymath/affinescript, #260 S3) — a thin Deno shim that downloads the host-triple binary from the Release pinned in pins.js, verifies it against the embedded SHA-256 (fail-closed: an unpinned/mismatched binary is never executed), caches it under $AFFINESCRIPT_CACHE/XDG, and execs it with the caller’s argv. One compiler version + checksum per shim release (no floating fetch). Publish is owner-gated via publish-jsr.yml (the INT-04 manual workflow; choice affinescript-cli).

  • Later, additive over the same Release artifact (not separate producers): Guix/Nix fetch-derivations; an npm tail only if an npm-native consumer needs it.

affinescript-lsp distribution (INT-10, #282) consumes the shim; unblocked once a v* Release is cut and pins.js is finalised.