11 breaking releases
0.14.0 | May 31, 2025 |
---|---|
0.12.0 | May 12, 2025 |
0.11.0 | Mar 23, 2025 |
0.10.0 | Sep 24, 2024 |
0.4.0 | Jun 23, 2024 |
#18 in Caching
166 downloads per month
255KB
4.5K
SLoC
cargo-green
Cached & remote-ready Rust projects builder by forwarding rustc
calls to BuildKit builders.
cargo-green
is
- a
cargo
plugin that sets a$RUSTC_WRAPPER
then callscargo
. - a
RUSTC_WRAPPER
that builds Dockerfiles
Configuration
Reads envs (show values with cargo green supergreen env
)
$CARGOGREEN_ADD_APK
:add.apk
TOML setting$CARGOGREEN_ADD_APT_GET
:add.apt-get
TOML setting$CARGOGREEN_ADD_APT
:add.apt
TOML setting$CARGOGREEN_BASE_IMAGE_INLINE
:base-image-inline
TOML setting$CARGOGREEN_BASE_IMAGE
:base-image
TOML setting$CARGOGREEN_BUILDER_IMAGE
: image to use when creating builder container$CARGOGREEN_CACHE_IMAGES
:cache-images
TOML setting$CARGOGREEN_FINAL_PATH
: if set, this file will end up with the final Dockerfile that reproduces the build$CARGOGREEN_INCREMENTAL
:incremental
TOML setting$CARGOGREEN_LOG_PATH
: logfile path$CARGOGREEN_LOG_STYLE
$CARGOGREEN_LOG
: equivalent to$RUST_LOG
(and doesn't conflict withcargo
's)$CARGOGREEN_REMOTE
: reserved for now$CARGOGREEN_RUNNER
: usedocker
orpodman
ornone
as build runner$CARGOGREEN_SET_ENVS
:set-envs
TOML setting$CARGOGREEN_SYNTAX
: use adockerfile:1
-derived BuildKit frontend$CARGOGREEN_WITH_NETWORK
:with-network
TOML setting
Also passes these envs through to the runner:
BUILDKIT_PROGRESS
$BUILDX_BUILDER
DOCKER_API_VERSION
DOCKER_CERT_PATH
DOCKER_CONFIG
DOCKER_CONTENT_TRUST_SERVER
DOCKER_CONTENT_TRUST
DOCKER_CONTEXT
DOCKER_DEFAULT_PLATFORM
DOCKER_HIDE_LEGACY_COMMANDS
$DOCKER_HOST
DOCKER_TLS_VERIFY
DOCKER_TLS
HTTP_PROXY
HTTPS_PROXY
NO_PROXY
Sets
$RUSTC_WRAPPER
$CARGOGREEN=1
Usage
- Ensure at least either a
docker
orpodman
client is installed - Known to work on
Ubuntu 22.04
withgithub.com/docker/buildx v0.11.2 9872040
andrust 1.73
cargo green add
cargo green bench
cargo green build
cargo green check
cargo green clean
cargo green clippy
cargo green doc
cargo green init
cargo green install
cargo green new
cargo green package
cargo green publish
cargo green remove
cargo green run
cargo green search
cargo green test
cargo green uninstall
cargo green update
# or, setting an alias in e.g. ~/.bashrc
alias cargo='cargo green'
# With this, one may also use this set of subcommands: [UNSTABLE API] (refacto into a `cache` cmd)
cargo supergreen config get VAR*
cargo supergreen config set VAR VAL
cargo supergreen config unset VAR
cargo supergreen pull-images Pulls latest versions of images used for the build, no cache (respects $DOCKER_HOST)
cargo supergreen pull-cache Pulls all from `--cache-from`
cargo supergreen push-cache Pushes all to `--cache-to`
Fine tuning settings
cargo-green@0.6.0: Cargo plugin and $RUSTC_WRAPPER to sandbox & cache cargo builds and execute jobs remotely
https://github.com/fenollp/supergreen
Usage:
cargo green supergreen env Show used values
cargo green fetch Pulls images (respects $DOCKER_HOST)
cargo green supergreen push Push cache image (all tags)
cargo green supergreen -h | --help
cargo green supergreen -V | --version
Remote execution
Say you have a bigger machine in your ~/.ssh/config
called extra_oomph
:
export DOCKER_HOST=ssh://extra_oomph
cargo green test ...
Installation
# Installs to ~/.cargo/bin
cargo install --locked --force --git https://github.com/fenollp/supergreen.git cargo-green
# Make sur $CARGO_HOME/bin is in your $PATH
which cargo-green
En vrac
-
Proposal: c8d: expose contentstore API #44369 https://github.com/moby/moby/issues/44369
-
Incremental export transfer #1224 https://github.com/moby/buildkit/issues/1224
-
"sending tarball" takes a long time even when the image already exists #107 https://github.com/docker/buildx/issues/107
-
mount=type=cache more in-depth explanation? #1673 https://github.com/moby/buildkit/issues/1673
-
Build drivers https://docs.docker.com/build/drivers/
-
Race condition when using cache-mounts with multi-arch builds. #549 https://github.com/docker/buildx/issues/549
-
https://docs.docker.com/build/ci/github-actions/configure-builder/#max-parallelism
-
https://docs.docker.com/engine/reference/builder/#buildkit-built-in-build-args
-
tunnel tty into a docker build through http
-
docker build
remote
driver https://docs.docker.com/build/drivers/remote -
rootless
k8s
driver https://docs.docker.com/build/drivers/kubernetes/#rootless-mode -
tune many options https://docs.docker.com/build/drivers/docker-container/
-
https://docs.docker.com/build/attestations/sbom/
- https://github.com/moby/buildkit/blob/647a997b389757068760410053873745acabfc80/docs/attestations/sbom.md?plain=1#L48
BUILDKIT_SBOM_SCAN_CONTEXT and BUILDKIT_SBOM_SCAN_STAGE
-
prune
: filtering outADD --checksum=... https://...
entries #2448 -
-o=.
:open $HOME/.local/share/docker/overlay2/066f6../work/work: permission denied
#2219 -
cargo restrict targets of crate
-
Target configuration for binaries #9208 https://github.com/rust-lang/cargo/issues/9208
-
Unsafe fields #3458 https://github.com/rust-lang/rfcs/pull/3458
-
Warning when large binary files are included into the bundle #9058 https://github.com/rust-lang/cargo/issues/9058
-
Hermetic build mode #9506 https://github.com/rust-lang/cargo/issues/9506
-
Consider making the src cache read-only. #9455 https://github.com/rust-lang/cargo/issues/9455
-
Feature Request static asserts #2790 https://github.com/rust-lang/rfcs/issues/2790
-
greater supply chain attack risk due to large dependency trees? https://www.reddit.com/r/rust/comments/102yz60/greater_supply_chain_attack_risk_due_to_large/
-
https://doc.rust-lang.org/rustc/command-line-arguments.html#option-emit
-
[build] rustflags = ["--remap-path-prefix"
-
/r/Rust scare Serde has started shipping precompiled binaries with no way to opt out
Dependencies
~11–24MB
~316K SLoC