Skip to content

dist-workspace.toml has no create-release = false, so a ship release loses the host job after the tag #91

Description

@anderix

dist-workspace.toml does not set create-release = false. Eight cargo-dist repos in the fleet do — aski, xray, xled, xshape, paxc, waddle, ved and ship-test-rust — and their config is otherwise the same shape as this one: cargo-dist-version = "0.31.0", hosting = "github", publish-jobs = ["homebrew"].

What happens without it

ship creates the GitHub release itself, with a person's token, because a token-created release fires the release: published that the other workflows wait on. The tag push then starts dist's release.yml, whose host job ends in the line dist generates when create-release is absent — .github/workflows/release.yml:279:

gh release create "${{ needs.plan.outputs.tag }}" --target "$RELEASE_COMMIT" ... artifacts/*

That fails on a tag that already has a release, and its failure skips publish-homebrew-formula and announce. The five platform archives, their checksums, the source tarball, the manifest and the generated formula are all built and none of them reaches the release.

This happened for real releasing excelano/slipql 0.1.0 on 2026-09-18, which had the identical config. slipql now carries the line.

Why it is worth fixing before the next release rather than after

dist generates release.yml with pull_request and tag-push triggers and no workflow_dispatch, and a workflow is read from the commit its tag names. So a repo that hits this cannot re-run the fixed workflow against the tag it spent. Recovering slipql meant downloading the failed run's artifacts, verifying each checksum by hand, gh release upload, and pushing the formula to the tap.

The fix

One line at the end of the [dist] block, with the comment aski carries:

# ship creates the release; dist attaches to it.
create-release = false

Then dist generate to rewrite release.yml, which swaps the gh release create for the upload-and-edit pair.

Until then

anderix/ship#84 landed a pre-flight row, so ship anderix/lux now refuses at the status screen — before the tag — rather than losing the host job after it. Nothing is at risk; the release just will not start.

🤖 Generated with Claude Code

Activity

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions