The git-cross project currently has three implementations:
- Go: A native implementation (Primary focus).
- Shell/Justfile: The original functional version.
- Rust: A native implementation (WIP).
To streamline distribution and maintenance, we are formalizing the preference for the Go implementation while maintaining the others for reference or future development.
Decision: Prioritize Go as the primary native implementation for git-cross.
- Ecosystem: Go has mature, high-level wrappers for both Git (
git-module) and Rsync (grsync) that align well with our "wrapper" philosophy. - Distribution: Go's static linking and cross-compilation simplicity make it ideal for a developer tool that needs to run in various environments (Mac, Linux, CI).
- Maintenance: The Go implementation is currently more complete and matches the behavioral requirements of the PoC with less boilerplate than the current Rust approach.
- Rust Implementation: Will be marked as Work In Progress (WIP) and experimental. Future feature development will land in Go first.
- Builds & Releases: Focus on providing pre-built binaries for Go across platforms (Linux amd64/arm64, Darwin amd64/arm64). Rust binaries will be built but marked as experimental.
README.md: Update the "Implementation Note" to clearly state Go is the primary version and Rust is WIP.src-rust/src/main.rs: Add a WIP warning to the CLI help description.src-rust/Cargo.toml: Update metadata if needed.
- Update
.github/workflows/release.ymlto:- Build Go binaries using
goreleaser(or a similar action). - Build Rust binaries for standard platforms.
- Attach all binaries to the GitHub Release.
- Use
softprops/action-gh-releaseinstead of the deprecatedactions/create-release.
- Build Go binaries using
Create a .goreleaser.yaml in src-go/ (or root) to handle:
- Binaries:
git-cross(from Go). - Platforms:
linux/amd64,linux/arm64,darwin/amd64,darwin/arm64.
- Use
cross-rsor simplecargo build --releasein a matrix for Rust.
- Update
README.mdstatus section. - Add WIP warning to Rust CLI.
- Create
.goreleaser.yaml. - Rewrite
.github/workflows/release.yml. - Update
TODO.mdto reflect these documentation and release tasks.