Skip to content

Epic: Release, distribution, and self-install #453

Open

Description

@David-Noble-at-work

Plans: lkg-tag-workflow.md ·
licensing-readme-plan.md ·
self-command.md ·
version-stamping.md

How the tools reach a machine and say what they are: goreleaser, the LKG tag workflow, licensing and SPDX
headers, self install / self upgrade, shell completions and man pages.

Landed: version stamping — --version and the version command in the docker shape, with the release
path guarded so an unstamped binary cannot ship. Self-install now runs as a real-binary scenario on all
three platforms, which is what caught Windows installs landing without an .exe suffix.

Activity

  1. David-Noble-at-work commented on Sep 22, 2026

    @David-Noble-at-work
    ContributorAuthor

    The owner's model: build once into a drop, and package from it (2026-09-22)

    Discussed during #903, lane 7 of NobleFactor/noblefactor-ops#217, and recorded here because the goreleaser decision is
    this issue's.

    The model. Every CI run builds its binaries once, stamped with that build's version, into a well-known location.
    Anyone can pick up the build for any CI run. Release packaging takes the binaries it needs from that same location and
    never compiles. What ships is then the exact bytes CI tested, and any build is installable, not only tagged ones.

    goreleaser against that model. Open-source goreleaser always builds for itself: builds: compiles. Importing
    prebuilt binaries, builder: prebuilt with prebuilt.path, is a Pro feature: "exclusively available with GoReleaser
    Pro" (Import pre-built binaries). Its stated uses
    match the model: building on other machines, using an existing build tool such as a Makefile, and building in parallel.
    It recommends one config to build and a second to import and release.

    So the choice is:

    • GoReleaser Pro consuming the drop, which also brings nfpms, brews and winget over prebuilt binaries.
    • Open-source goreleaser, which rebuilds at release and breaks build once.
    • No goreleaser. make dist splits into a build that writes the drop and packaging that only archives and checksums
      it.

    Unaffected by the choice. #903 fixes what an archive holds: every product in $(PRODUCTS), and star's extensions at
    share/star/extensions, the layout .goreleaser.yaml already describes. It also fixes what the installers take from
    an archive. Both hold whichever packager this issue picks.

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

Metadata

Metadata

Labels

Epic:ReleaseDistributionRelease, distribution, and self-installepicTop-level initiative

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions