ci: publish furrow binaries for linux and macOS - #6
Merged
Conversation
furrow had no CI and no releases, so every caller had to build it from Rust source — which in practice meant the binary was unavailable and anything depending on it silently degraded. Build x86_64 linux plus both macOS slices on tag push, smoke-test the natively-built ones, and attach them with checksums. Windows is deliberately absent: 13 source files use std::os::unix with no cfg(windows) guards, so it needs a source port rather than a build target. Windows callers reach furrow through WSL and use the linux asset. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
|
6 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
furrow has no CI and no releases, so the only way to obtain the binary is
cargo build --releasefrom source. That makes it effectively unavailable to callers: AgentField's workspace-sync feature (Agent-Field/SWE-AF#130) hands out a handle that needsfurrowon the caller's machine, and today the documentation has to tell people to compile Rust before they can use it.This adds a release workflow so tagging cuts downloadable binaries.
Changes Made
x86_64-unknown-linux-gnu,aarch64-apple-darwin, andx86_64-apple-darwinon tag push (v*) or manual dispatch against an existing tag.furrow-<os>-<arch>, matching the convention AgentField already uses for vendored binaries.--versionsmoke test; the cross-compiledx86_64-apple-darwinslice cannot run on the arm64 runner, so it is built but not executed.--lockedbuilds,SHA256SUMSattached, release creation is idempotent (re-running uploads with--clobberinstead of failing).actions/checkout,upload-artifact, anddownload-artifact; the release itself is cut with the preinstalledghCLI.Windows is intentionally omitted. It is not a missing build target — 13 source files use
std::os::unix(OsStrExt,MetadataExt,PermissionsExt,symlink) with zerocfg(windows)guards, sox86_64-pc-windows-msvccannot compile. That is a source port with real semantic decisions (extended attributes, uid/gid, symlink handling) and belongs in its own change. Windows users reach furrow through WSL, which uses the linux asset.Test Plan
run:block executed locally under CI's exact shell (bash --noprofile --norc -e -o pipefail) — checksum globbing, the idempotent create/upload branch, and theinstall -m 755staging step all behavecargo metadata --lockedsucceeds, so--lockedbuilds will not fail on a stale lockfile🤖 Generated with Claude Code