ref:7d93289c6a038e660376202dc204e1e878e8eb94

feat: artifact upload after job execution

- Parse artifact_specs from claim response JSON - Glob-expand artifact paths relative to workspace - Upload via multipart POST to server artifact endpoint - Skip files over 100MB with warning - Log upload progress to build output Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
SHA: 7d93289c6a038e660376202dc204e1e878e8eb94
Author: Cole Christensen <cole.christensen@macmillan.com>
Date: 2026-03-14 14:28
Parents: 4f407be
5 files changed +217 -1
Type
Cargo.lock +31 −0
@@ -71,6 +71,7 @@
"dialoguer",
"dirs",
"futures",
"glob",
"hostname",
"libc",
"reqwest",
@@ -469,6 +470,12 @@
]
[[package]]
name = "glob"
version = "0.3.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280"
[[package]]
name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -849,6 +856,22 @@
checksum = "f8ca58f447f06ed17d5fc4043ce1b10dd205e060fb3ce5b979b8ed8e59ff3f79"
[[package]]
name = "mime"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "mime_guess"
version = "2.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e"
dependencies = [
"mime",
"unicase",
]
[[package]]
name = "mio"
version = "1.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -1131,6 +1154,7 @@
"base64",
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"http-body-util",
@@ -1139,6 +1163,7 @@
"hyper-util",
"js-sys",
"log",
"mime_guess",
"percent-encoding",
"pin-project-lite",
"quinn",
@@ -1619,6 +1644,12 @@
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
[[package]]
name = "unicase"
version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dbc4bc3a9f746d862c45cb89d705aa10f187bb96c76001afab07a0d35ce60142"
[[package]]
name = "unicode-ident"
Cargo.toml +2 −1
@@ -11,7 +11,7 @@
[dependencies]
clap = { version = "4", features = ["derive"] }
reqwest = { version = "0.12", features = ["json", "rustls-tls"], default-features = false }
reqwest = { version = "0.12", features = ["json", "rustls-tls", "multipart"], default-features = false }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
tokio = { version = "1", features = ["full"] }
@@ -25,3 +25,4 @@
hostname = "0.4"
libc = "0.2"
futures = "0.3"
glob = "0.3"