Skip to content

S11: packaging and release — jlink, AppCDS, man pages, Homebrew and Scoop #15

Closed

Description

@david-Darkcollective

Part of #17. Design: docs/design.md §7.3.

Scope

  • A jlink image per platform (macOS arm64 and x86_64, Linux x86_64 and arm64, Windows x86_64). It includes relix-solver-ojalgo and relix-docs. Picocli and the H2 driver are force-merged in.
  • AppCDS archive. The image carries one generated at build time, and the launcher passes -XX:SharedArchiveFile, because each stage of a pipeline pays JVM start-up.
  • Man pages and completion scripts, generated from the picocli model and shipped in the archive.
  • A release workflow that attaches the archives and their SHA-256 checksums to this repository's GitHub Releases.
  • Homebrew and Scoop. The release workflow pushes the new version and checksums to the tap DarkCollective/homebrew-relix and the bucket DarkCollective/scoop-relix.
    • The formula installs the man pages and completions, and its test do block runs a pipeline.
    • The Scoop manifest registers the PowerShell completion.
  • Before the first public release:
    • make the tap and the bucket public
    • set their license to Apache-2.0 and their homepage to this repository or the site
    • add the HOMEBREW_TAP_PAT/SCOOP_BUCKET_PAT secrets here

Dependencies

Acceptance

  • Smoke tests run the packaged launcher in a pipe: script on stdin, a catalog in a temp tree, TSV out.
  • A test shows the CDS archive is used, by running with -Xshare:on, which fails without it. No wall-clock assertion.
  • The man pages render (man -l).
  • A dry-run release produces a formula and a manifest whose checksums match the archives.

Activity

  1. david-Darkcollective commented on Oct 9, 2026

    @david-Darkcollective
    MemberAuthor

    Shipped in #41, merged into develop as 340496a (with d7baa5d for the zsh completion).

    One acceptance item is checked after promotion, since a workflow can only be dispatched from the default branch: run Release from the Actions tab on main (any version, e.g. 0.0.0-dryrun). It builds and tests the five archives and fails unless the formula's and the manifest's checksums match them. It publishes nothing.

    The tap and the bucket are public and both secrets are set, so a vX.Y.Z tag on main publishes, once build.gradle pins a released engine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:buildGradle, CI, packaging, releasebacklogNot yet scheduledenhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions