Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
f00a030
feat(release): count the version from 0.0.0 over every commit since t…
jbrjake Nov 2, 2026
a72dc9d
chore(meshwork): record the counting rule and the no-dependency rulin…
jbrjake Nov 2, 2026
84a4936
fix(release): let the lockfile update read the crates.io index, which…
jbrjake Nov 2, 2026
1887f18
chore(meshwork): close the counting task on the runner's release branch
jbrjake Nov 2, 2026
0e81d36
ci(release): run no ci on a push to dev and open the release PR on th…
jbrjake Nov 2, 2026
bfa0173
chore(meshwork): drop the push-time ci filter on the owner's ruling a…
jbrjake Nov 2, 2026
4bec2d5
ci(workflows): fold five workflows into three, the suite nightly on d…
jbrjake Nov 2, 2026
c8bebb3
ci(actions): bump actions/checkout from 4.4.0 to 7.0.1
dependabot[bot] Nov 2, 2026
d24af00
ci(actions): bump rust-lang/crates-io-auth-action from 1.0.5 to 1.0.6
dependabot[bot] Nov 2, 2026
13b8de1
ci(actions): bump actions/cache from 4.3.0 to 6.1.0
dependabot[bot] Nov 2, 2026
dca52bd
chore(meshwork): file the workflow harmonization, close the read-only…
jbrjake Nov 2, 2026
c7e7ed1
ci(actions): bump actions/upload-artifact from 4.6.2 to 7.0.2
dependabot[bot] Nov 2, 2026
70334ee
chore(meshwork): close the workflow harmonization on the green dispatch
jbrjake Nov 2, 2026
bfaa5e6
Merge pull request #1 from jbrjake/dependabot/github_actions/actions/…
jbrjake Nov 2, 2026
c88cca3
Merge pull request #3 from jbrjake/dependabot/github_actions/actions/…
jbrjake Nov 2, 2026
f3019de
Merge pull request #2 from jbrjake/dependabot/github_actions/actions/…
jbrjake Nov 2, 2026
510de5e
Merge pull request #4 from jbrjake/dependabot/github_actions/rust-lan…
jbrjake Nov 2, 2026
b2f3ef7
chore(meshwork): close the dependabot merge task and refresh the umbr…
jbrjake Nov 2, 2026
57fdeea
chore(meshwork): file the dead zstd skips in deny-dbsp.toml
jbrjake Nov 2, 2026
3ff77e1
chore(meshwork): file the clone-side release PR, its one-PR ruling an…
jbrjake Nov 2, 2026
c9aaa03
ci(release): cut the release PR from a clone with scripts/release-pr.…
jbrjake Nov 2, 2026
329fa23
ci(gates): run the release scripts' self-tests in the commit and push…
jbrjake Nov 2, 2026
7d78a7a
chore(meshwork): close the clone-side release PR and the gates' self-…
jbrjake Nov 2, 2026
30626fe
ci(release): cut the release as one pull request, dev into main
jbrjake Nov 2, 2026
729362e
chore(meshwork): close the flip, the one-PR ruling and its change; re…
jbrjake Nov 2, 2026
f888f10
chore(meshwork): record the one-PR dry run against origin
jbrjake Nov 2, 2026
be5d978
chore(meshwork): record the owner's deletion of release/next
jbrjake Nov 2, 2026
ff61591
chore(meshwork): file the include-glob nit under the release task
jbrjake Nov 2, 2026
21f46c1
fix(release): anchor the include globs to the crate root
jbrjake Nov 2, 2026
530c71d
chore(meshwork): close the include-glob task
jbrjake Nov 2, 2026
249fdad
chore(release): v0.30.2
jbrjake Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Every `uses:` in the workflows names a commit hash (CLAUDE.md § Standing decisions), and a hash
# does not move: dependabot opens a PR per upstream release that rewrites the hash and the version
# comment together, and scripts/check-actions-pinned.sh holds that PR to the hash-only form like
# any other. Nothing merges on its own. The tarball digests in golden.yml are not actions and stay
# by hand.
# any other. Nothing merges on its own. The tarball digests in ci.yml's golden jobs are not actions
# and stay by hand.
version: 2
updates:
- package-ecosystem: github-actions
Expand Down
269 changes: 252 additions & 17 deletions .github/workflows/ci.yml

Large diffs are not rendered by default.

57 changes: 0 additions & 57 deletions .github/workflows/fuzz.yml

This file was deleted.

129 changes: 0 additions & 129 deletions .github/workflows/golden.yml

This file was deleted.

110 changes: 110 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# The crates.io publish, on the owner's manual trigger alone (CLAUDE.md § Standing decisions: "make
# it a ci publish on my manual trigger"): never on a tag push, so a tag on its own publishes nothing.
#
# a dispatch names the tag release.yml cut and the authentication
#
# `token` reads the repository secret CARGO_REGISTRY_TOKEN, the first publish's route, because
# crates.io grants Trusted Publishing only to a crate that already exists; `trusted` exchanges the
# job's OIDC token for a thirty-minute crates.io token through rust-lang/crates-io-auth-action, every
# later release's route once the owner configures it on the crate (owner jbrjake, repository
# float-abel, workflow publish.yml, environment release). The .crate is built with --locked, attested
# with actions/attest-build-provenance, which needs the repository public, and uploaded onto the
# GitHub Release release.yml made for the tag. This workflow is outside the release process until the
# owner brings crates.io in.
name: publish

on:
workflow_dispatch:
inputs:
tag:
description: "The tag to publish, vX.Y.Z, naming Cargo.toml's version"
required: true
type: string
auth:
description: "trusted: crates.io Trusted Publishing; token: the CARGO_REGISTRY_TOKEN secret, the first publish's route"
required: true
type: choice
options: [trusted, token]
default: trusted

# One publish at a time, and a running one is never cancelled under a second dispatch.
concurrency:
group: publish
cancel-in-progress: false

env:
CARGO_TERM_COLOR: always

permissions: {}

jobs:
publish:
name: cargo publish ${{ inputs.tag }} by ${{ inputs.auth }}
runs-on: ubuntu-latest
timeout-minutes: 30
environment: release
permissions:
contents: write # the GitHub release and its asset
id-token: write # the OIDC token, for crates.io's exchange and the attestation's signing
attestations: write # the provenance attestation
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
ref: refs/tags/${{ inputs.tag }}
# The inputs reach the shell through env, never by interpolation into a script.
- name: The tag names Cargo.toml's version
env:
TAG: ${{ inputs.tag }}
run: |
version=$(cargo metadata --no-deps --format-version 1 | jq -r '.packages[] | select(.name == "float-abel") | .version')
if [ "$TAG" != "v$version" ]; then
echo "release: tag $TAG does not name Cargo.toml's version $version" >&2
exit 1
fi
echo "release: $TAG is version $version"
- name: Install the toolchain
run: |
rustup toolchain install stable --profile minimal
rustup default stable
cargo --version && rustc --version
- name: Authenticate with crates.io by Trusted Publishing
if: inputs.auth == 'trusted'
id: auth
uses: rust-lang/crates-io-auth-action@3268eb413133e2960fa4ae0e963ca76380c54cd9 # v1.0.6
# cargo package builds the archive from the tag's tree and lockfile, builds it once more from
# the archive to verify it, and leaves it at target/package/. The attestation is of that file.
- name: Package with the lockfile
run: |
cargo package --locked
sha256sum target/package/float-abel-*.crate | tee target/package/sha256
- name: Attest the .crate's provenance
uses: actions/attest-build-provenance@4d101475d8b20a2381f78447822ac1eab6504dd8 # v4.2.2
with:
subject-path: target/package/float-abel-*.crate
# cargo publish re-packages the same tree with the same cargo, byte for byte, and uploads it;
# --no-verify skips the second verify build, not the packaging. A missing token fails before
# anything is uploaded, and the digest is re-asserted on whatever cargo leaves behind.
- name: Publish
env:
AUTH: ${{ inputs.auth }}
TRUSTED_TOKEN: ${{ steps.auth.outputs.token }}
SECRET_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
run: |
case "$AUTH" in
trusted) token="$TRUSTED_TOKEN" ;;
token) token="$SECRET_TOKEN" ;;
*) token="" ;;
esac
if [ -z "$token" ]; then
echo "release: no crates.io token for auth=$AUTH" >&2
exit 1
fi
CARGO_REGISTRY_TOKEN="$token" cargo publish --locked --no-verify
if ls target/package/float-abel-*.crate >/dev/null 2>&1; then
sha256sum --check target/package/sha256
fi
- name: Upload the published .crate onto the tag's GitHub release
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ inputs.tag }}
run: gh release upload "$TAG" target/package/float-abel-*.crate --clobber
Loading
Loading