Skip to content

[ci] Publish canary builds from main - #504

Merged
purefunctor merged 1 commit into
mainfrom
ci/publish-canary-builds
Sep 12, 2026
Merged

[ci] Publish canary builds from main#504
purefunctor merged 1 commit into
mainfrom
ci/publish-canary-builds

Conversation

@purefunctor

Copy link
Copy Markdown
Owner

Why

The VS Code extension needs a reproducible Iris build from current main so integration testing does not have to wait for the next stable release. Stable release tags alone leave the extension testing an increasingly old language server.

What changed

  • Embed an optional, validated source revision at compile time while keeping the Cargo package version unchanged.
  • Publish each successful main build as an immutable-style v<version>-dev.<revision> GitHub prerelease.
  • Build and attest the same four archives as stable releases, staging them on a draft before publication.
  • Verify that installers return the exact requested version.
  • Keep canary tags out of the stable tag-triggered release workflow.
  • Make stable release-note ranges ignore automated prereleases.

Packagers can provide IRIS_BUILD_REVISION as a declared build input. Builds without it retain the normal package version.

Verification

  • cargo check -p purescript-iris --tests --locked
  • cargo nextest run -p purescript-iris (74 passed)
  • IRIS_BUILD_REVISION=cd35848e8b91 cargo run -p purescript-iris --bin iris -- --versioniris 0.1.0-dev.cd35848e8b91
  • actionlint .github/workflows/canary.yml .github/workflows/installers.yml .github/workflows/release.yml
  • git diff --check

@coderabbitai

coderabbitai Bot commented Sep 12, 2026

Copy link
Copy Markdown

Review Change StackReview Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Advanced

Run ID: c11661c1-516d-4f25-99b4-9cca81bb9066

📥 Commits

Reviewing files that changed from the base of the PR and between 92d4ffb and 6b257c3.

📒 Files selected for processing (10)
  • .agents/skills/cutting-releases/SKILL.md
  • .github/workflows/canary.yml
  • .github/workflows/installers.yml
  • .github/workflows/release.yml
  • README.md
  • compiler-bin/build.rs
  • compiler-bin/src/cli.rs
  • compiler-bin/src/cli/diagnostic.rs
  • compiler-bin/src/lib.rs
  • compiler-bin/src/lsp.rs

Included review availability: Your plan provides up to 2 included reviews per hour; 0 remain after this review.


Summary

  • Adds a GitHub Actions workflow to publish reproducible main canary builds as v<version>-dev.<revision> prereleases.
  • Builds and attests the four stable-release archives.
  • Adds validated IRIS_BUILD_REVISION support without changing the Cargo package version.
  • Verifies installer version output for canary builds.
  • Excludes canary tags from stable release workflows and release-note ranges.
  • Updates documentation for canary installation and version reporting.

Confidence 4/5 - Strong coverage with workflow complexity

The reported Cargo checks, tests, version validation, workflow linting, and whitespace checks provide good merge confidence. The confidence is not 5/5 because the change adds complex cross-platform GitHub Actions release logic that requires successful integration testing.

Walkthrough

The pull request adds automated canary releases, filters stable release triggers, validates installer versions, and reports package versions with optional build revisions across the compiler, CLI, and language server.

Changes

Release automation and versioning

Layer / File(s) Summary
Revision-aware compiler versioning
compiler-bin/build.rs, compiler-bin/src/lib.rs, compiler-bin/src/cli.rs, compiler-bin/src/cli/diagnostic.rs, compiler-bin/src/lsp.rs
The compiler exports a validated IRIS_VERSION. CLI and language-server version output uses crate-level constants.
Stable release selection and documentation
.agents/skills/cutting-releases/SKILL.md, .github/workflows/release.yml, README.md
Release guidance selects stable GitHub releases. The release workflow excludes -dev tags. Documentation describes canary versions and IRIS_BUILD_REVISION.
Canary release pipeline
.github/workflows/canary.yml
A successful main build creates, builds, attests, publishes, and tests a canary prerelease across supported platforms.
Installer revision and version validation
.github/workflows/installers.yml
The reusable installer workflow checks out a requested revision and validates installed versions on Unix-like systems and Windows.

Sequence Diagram(s)

sequenceDiagram
  participant CargoBuildTest
  participant CanaryRelease
  participant GitHubRelease
  participant BuildMatrix
  participant InstallersWorkflow
  CargoBuildTest->>CanaryRelease: successful main workflow_run
  CanaryRelease->>CanaryRelease: derive stable version and revision
  CanaryRelease->>GitHubRelease: create or reuse draft prerelease
  CanaryRelease->>BuildMatrix: build and upload platform archives
  BuildMatrix->>GitHubRelease: attach attested archives
  CanaryRelease->>GitHubRelease: publish prerelease
  CanaryRelease->>InstallersWorkflow: test installers at canary tag
Loading

Priority: ➖ Normal

Merge Risk: ⚪ Minimal · up to 6b257

The canary version, publication, installer checkout, and version assertions are aligned across the changed workflows and compiler surfaces.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description check ✅ Passed The pull request description clearly matches the changeset. It explains canary builds, revision embedding, release workflows, installer verification, documentation updates, and the reported verificati…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

Copy link
Copy Markdown

Compatibility regression report

Package set 81.0.0 for PureScript 0.15.15.

✅ The candidate introduces no compatibility errors.

Diagnostic class Base Candidate Introduced Fixed
Compiler errors 0 0 0 0
Compiler warnings 36 36 0 0
Verifier errors 0 0 0 0

Introduced errors

None.

Fixed errors (0)

None.

Warning changes (0 introduced, 0 fixed)

Introduced

None.

Fixed

None.

Candidate errors (0)

None.

Candidate warnings (36)
  • deno@0.0.5/src/Deno.purs:37:1CustomWarning (checking): Data.Map's `Semigroup` instance is now unbiased and differs from the left-biased instance defined in PureScript releases <= 0.13.x.
  • deno@0.0.5/src/Deno/Dotenv.purs:38:1CustomWarning (checking) × 2: Data.Map's `Semigroup` instance is now unbiased and differs from the left-biased instance defined in PureScript releases <= 0.13.x.
  • deno@0.0.5/src/Deno/Http/Request.purs:46:1CustomWarning (checking): Data.Map's `Semigroup` instance is now unbiased and differs from the left-biased instance defined in PureScript releases <= 0.13.x.
  • literals@1.0.2/src/Literals/Null.purs:11:1UnparseableFFIModule (javascript): Oxc could not parse the JavaScript FFI module. Fix the invalid or unsupported JavaScript syntax; Iris treated the module as opaque and skipped export-name validation: Unexpected token
  • react-basic-dom-beta@0.1.1/src/Beta/DOM.purs:33:31DuplicateImport (indexing): Import list contains multiple references to 'Proxy'
  • sparse-polynomials@3.0.1/src/Data/Sparse/Polynomial.purs:1048:1MissingPatterns (checking) × 2: Pattern match is not exhaustive. Missing: _
  • text-formatting@0.1.0/src/Data/Text/Format/Dodo/Printer.purs:61:1CustomWarning (checking) × 23: Debug function usage
  • trivial-unfold@0.5.0/src/Data/Unfoldable1/Trivial1.purs:150:17MissingPatterns (checking): Pattern match is not exhaustive. Missing: Right _
  • xterm@1.0.0/src/XTerm/UnicodeHandling.purs:15:1UnparseableFFIModule (javascript) × 2: Oxc could not parse the JavaScript FFI module. Fix the invalid or unsupported JavaScript syntax; Iris treated the module as opaque and skipped export-name validation: Expected a semicolon or an implicit semicolon after a statement, but found none
  • yoga-react-dom@2.0.1/src/Yoga/React/DOM.purs:34:31DuplicateImport (indexing): Import list contains multiple references to 'Proxy'
  • yoga-tree-utils@1.0.0/src/Yoga/Tree/Extended/Path.purs:20:72DuplicateImport (indexing): Import list contains multiple references to 'snoc'

View workflow run

@purefunctor
purefunctor merged commit d479c61 into main Sep 12, 2026
8 checks passed
@purefunctor
purefunctor deleted the ci/publish-canary-builds branch September 12, 2026 06:19
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