From 17b2e93e41690d9706dd342b5cb8156d3853aa5b Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 14 Jun 2026 03:23:13 +0000 Subject: [PATCH 1/3] feat(cargo-lambda): add cookbook and enable for bamboo, hercules, belle, pc137 Add a cargo-lambda cookbook that installs the AWS Lambda Rust toolchain via the shared cargo_package helper (works identically on macOS and Debian/Ubuntu and depends on the rust cookbook). Register it in the bamboo, hercules, belle, and pc137 roles, along with the goss health check. pine inherits it through bamboo. https://claude.ai/code/session_01MABXzYX1YCzosNEyX4fS4X --- mitamae/cookbooks/cargo-lambda/default.rb | 8 ++++++++ mitamae/cookbooks/cargo-lambda/goss.yaml | 4 ++++ mitamae/roles/bamboo/default.rb | 1 + mitamae/roles/bamboo/goss.yaml | 1 + mitamae/roles/belle/default.rb | 1 + mitamae/roles/belle/goss.yaml | 1 + mitamae/roles/hercules/default.rb | 1 + mitamae/roles/hercules/goss.yaml | 1 + mitamae/roles/pc137/default.rb | 1 + mitamae/roles/pc137/goss.yaml | 1 + 10 files changed, 20 insertions(+) create mode 100644 mitamae/cookbooks/cargo-lambda/default.rb create mode 100644 mitamae/cookbooks/cargo-lambda/goss.yaml diff --git a/mitamae/cookbooks/cargo-lambda/default.rb b/mitamae/cookbooks/cargo-lambda/default.rb new file mode 100644 index 0000000..f3891e4 --- /dev/null +++ b/mitamae/cookbooks/cargo-lambda/default.rb @@ -0,0 +1,8 @@ +# cargo-lambda: build, test, and deploy AWS Lambda functions written in Rust. +# +# It ships as a Cargo subcommand (invoked as `cargo lambda`) and is published on +# crates.io, so the shared cargo_package helper installs it identically on macOS +# and Debian/Ubuntu and pulls in the rust cookbook as a dependency. The crate +# name matches the resulting binary (`cargo-lambda`), so no bin_name override is +# needed. +cargo_package 'cargo-lambda' diff --git a/mitamae/cookbooks/cargo-lambda/goss.yaml b/mitamae/cookbooks/cargo-lambda/goss.yaml new file mode 100644 index 0000000..009a26b --- /dev/null +++ b/mitamae/cookbooks/cargo-lambda/goss.yaml @@ -0,0 +1,4 @@ +command: + cargo lambda --version: + exit-status: 0 + timeout: 10000 diff --git a/mitamae/roles/bamboo/default.rb b/mitamae/roles/bamboo/default.rb index a24bef1..6e3ee3c 100644 --- a/mitamae/roles/bamboo/default.rb +++ b/mitamae/roles/bamboo/default.rb @@ -28,6 +28,7 @@ # Cloud & DevOps include_recipe '../../cookbooks/awscli' +include_recipe '../../cookbooks/cargo-lambda' include_recipe '../../cookbooks/gh' include_recipe '../../cookbooks/docker' include_recipe '../../cookbooks/devcontainer-cli' diff --git a/mitamae/roles/bamboo/goss.yaml b/mitamae/roles/bamboo/goss.yaml index aae35f1..1cdb43b 100644 --- a/mitamae/roles/bamboo/goss.yaml +++ b/mitamae/roles/bamboo/goss.yaml @@ -8,6 +8,7 @@ gossfile: ../../cookbooks/starship/goss.yaml: {} ../../cookbooks/lazygit/goss.yaml: {} ../../cookbooks/awscli/goss.yaml: {} + ../../cookbooks/cargo-lambda/goss.yaml: {} ../../cookbooks/gh/goss.yaml: {} ../../cookbooks/docker/goss.yaml: {} ../../cookbooks/devcontainer-cli/goss.yaml: {} diff --git a/mitamae/roles/belle/default.rb b/mitamae/roles/belle/default.rb index 70207f3..be97482 100644 --- a/mitamae/roles/belle/default.rb +++ b/mitamae/roles/belle/default.rb @@ -43,6 +43,7 @@ # Cloud & DevOps include_recipe '../../cookbooks/awscli' +include_recipe '../../cookbooks/cargo-lambda' include_recipe '../../cookbooks/cfn-lint' include_recipe '../../cookbooks/gh' include_recipe '../../cookbooks/docker' diff --git a/mitamae/roles/belle/goss.yaml b/mitamae/roles/belle/goss.yaml index 4bf5ba2..a5c970d 100644 --- a/mitamae/roles/belle/goss.yaml +++ b/mitamae/roles/belle/goss.yaml @@ -21,6 +21,7 @@ gossfile: ../../cookbooks/nmap/goss.yaml: {} ../../cookbooks/nikto/goss.yaml: {} ../../cookbooks/awscli/goss.yaml: {} + ../../cookbooks/cargo-lambda/goss.yaml: {} ../../cookbooks/cfn-lint/goss.yaml: {} ../../cookbooks/gh/goss.yaml: {} ../../cookbooks/docker/goss.yaml: {} diff --git a/mitamae/roles/hercules/default.rb b/mitamae/roles/hercules/default.rb index d9f750f..978c544 100644 --- a/mitamae/roles/hercules/default.rb +++ b/mitamae/roles/hercules/default.rb @@ -41,6 +41,7 @@ # Cloud & DevOps include_recipe '../../cookbooks/awscli' +include_recipe '../../cookbooks/cargo-lambda' include_recipe '../../cookbooks/cfn-lint' include_recipe '../../cookbooks/gh' include_recipe '../../cookbooks/docker' diff --git a/mitamae/roles/hercules/goss.yaml b/mitamae/roles/hercules/goss.yaml index 09980ba..96b8009 100644 --- a/mitamae/roles/hercules/goss.yaml +++ b/mitamae/roles/hercules/goss.yaml @@ -18,6 +18,7 @@ gossfile: ../../cookbooks/cloudflared/goss.yaml: {} ../../cookbooks/nmap/goss.yaml: {} ../../cookbooks/awscli/goss.yaml: {} + ../../cookbooks/cargo-lambda/goss.yaml: {} ../../cookbooks/cfn-lint/goss.yaml: {} ../../cookbooks/gh/goss.yaml: {} ../../cookbooks/docker/goss.yaml: {} diff --git a/mitamae/roles/pc137/default.rb b/mitamae/roles/pc137/default.rb index 28f2825..118052c 100644 --- a/mitamae/roles/pc137/default.rb +++ b/mitamae/roles/pc137/default.rb @@ -40,6 +40,7 @@ # Cloud & DevOps include_recipe '../../cookbooks/awscli' +include_recipe '../../cookbooks/cargo-lambda' include_recipe '../../cookbooks/google-cloud-sdk' include_recipe '../../cookbooks/cfn-lint' include_recipe '../../cookbooks/gh' diff --git a/mitamae/roles/pc137/goss.yaml b/mitamae/roles/pc137/goss.yaml index aa17769..13a8e31 100644 --- a/mitamae/roles/pc137/goss.yaml +++ b/mitamae/roles/pc137/goss.yaml @@ -17,6 +17,7 @@ gossfile: ../../cookbooks/fastfetch/goss.yaml: {} ../../cookbooks/cloudflared/goss.yaml: {} ../../cookbooks/awscli/goss.yaml: {} + ../../cookbooks/cargo-lambda/goss.yaml: {} ../../cookbooks/google-cloud-sdk/goss.yaml: {} ../../cookbooks/cfn-lint/goss.yaml: {} ../../cookbooks/gh/goss.yaml: {} From 4ee779bfb9830b680dc3a0a0c2e3f4abd912a150 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 14 Jun 2026 03:26:47 +0000 Subject: [PATCH 2/3] feat(cargo-lambda): enable for palm role https://claude.ai/code/session_01MABXzYX1YCzosNEyX4fS4X --- mitamae/roles/palm/default.rb | 1 + mitamae/roles/palm/goss.yaml | 1 + 2 files changed, 2 insertions(+) diff --git a/mitamae/roles/palm/default.rb b/mitamae/roles/palm/default.rb index 548c2ef..1d8060e 100644 --- a/mitamae/roles/palm/default.rb +++ b/mitamae/roles/palm/default.rb @@ -53,6 +53,7 @@ # Cloud & DevOps include_recipe '../../cookbooks/docker' include_recipe '../../cookbooks/awscli' +include_recipe '../../cookbooks/cargo-lambda' include_recipe '../../cookbooks/gh' include_recipe '../../cookbooks/google-cloud-sdk' include_recipe '../../cookbooks/cfn-lint' diff --git a/mitamae/roles/palm/goss.yaml b/mitamae/roles/palm/goss.yaml index 2297c21..bc3000a 100644 --- a/mitamae/roles/palm/goss.yaml +++ b/mitamae/roles/palm/goss.yaml @@ -27,6 +27,7 @@ gossfile: ../../cookbooks/kotlin-lsp/goss.yaml: {} ../../cookbooks/docker/goss.yaml: {} ../../cookbooks/awscli/goss.yaml: {} + ../../cookbooks/cargo-lambda/goss.yaml: {} ../../cookbooks/gh/goss.yaml: {} ../../cookbooks/google-cloud-sdk/goss.yaml: {} ../../cookbooks/cfn-lint/goss.yaml: {} From 0b3bc3e92f7a0f1814d6f3915bd655ffd929bcb1 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 14 Jun 2026 03:54:50 +0000 Subject: [PATCH 3/3] fix(cargo-lambda): install prebuilt release binary instead of compiling `cargo install cargo-lambda` compiles a large dependency tree (aws-sdk, gix, watchexec, ...) from source, which exhausted the disk on the constrained CI containers ("No space left on device"). Download the prebuilt release binary for the host platform/arch into ~/.cargo/bin instead. The rust cookbook stays a dependency since cargo-lambda runs as the `cargo lambda` subcommand. https://claude.ai/code/session_01MABXzYX1YCzosNEyX4fS4X --- mitamae/cookbooks/cargo-lambda/default.rb | 45 ++++++++++++++++++++--- 1 file changed, 39 insertions(+), 6 deletions(-) diff --git a/mitamae/cookbooks/cargo-lambda/default.rb b/mitamae/cookbooks/cargo-lambda/default.rb index f3891e4..668c0b8 100644 --- a/mitamae/cookbooks/cargo-lambda/default.rb +++ b/mitamae/cookbooks/cargo-lambda/default.rb @@ -1,8 +1,41 @@ # cargo-lambda: build, test, and deploy AWS Lambda functions written in Rust. # -# It ships as a Cargo subcommand (invoked as `cargo lambda`) and is published on -# crates.io, so the shared cargo_package helper installs it identically on macOS -# and Debian/Ubuntu and pulls in the rust cookbook as a dependency. The crate -# name matches the resulting binary (`cargo-lambda`), so no bin_name override is -# needed. -cargo_package 'cargo-lambda' +# cargo-lambda is a Rust crate, but `cargo install cargo-lambda` compiles a huge +# dependency tree (aws-sdk, gix, watchexec, ...) from source and runs the CI +# containers out of disk ("No space left on device"). Install the prebuilt +# release binary instead -- it is small and fast on every platform. +# +# It runs as a Cargo subcommand (`cargo lambda`), so it still needs cargo on +# PATH: depend on the rust cookbook and drop the binary into ~/.cargo/bin, which +# rust already creates, exports on PATH, and goss validation picks up. +include_recipe File.expand_path('../rust', File.dirname(__FILE__)) + +version = '1.9.1' # Latest release -- verify against github.com/cargo-lambda/cargo-lambda/releases +home = ENV['HOME'] +arch = node[:os_arch] == 'arm64' ? 'aarch64' : 'x86_64' + +target = + if node[:platform] == 'darwin' + "#{arch}-apple-darwin" + elsif %w[ubuntu debian].include?(node[:platform]) + # musl builds are statically linked, so they run on any glibc version. + "#{arch}-unknown-linux-musl" + else + unsupported_platform! node[:platform] + end + +archive = "cargo-lambda-v#{version}.#{target}.tar.gz" +url = "https://github.com/cargo-lambda/cargo-lambda/releases/download/v#{version}/#{archive}" + +execute "install cargo-lambda #{version}" do + command <<~INSTALL + set -e + tmp="$(mktemp -d)" + curl -fsSL "#{url}" -o "$tmp/#{archive}" + tar xzf "$tmp/#{archive}" -C "$tmp" + bin="$(find "$tmp" -type f -name cargo-lambda | head -n 1)" + install -m 0755 "$bin" "#{home}/.cargo/bin/cargo-lambda" + rm -rf "$tmp" + INSTALL + not_if "cargo lambda --version 2>/dev/null | grep -q '#{version}'" +end