From c0fe57cd44aed0267f30e539f4e41760b39d07d4 Mon Sep 17 00:00:00 2001 From: Graham McIntire Date: Mon, 19 Jan 2026 15:31:26 -0600 Subject: [PATCH] fix: properly inject version into Docker image builds The agent version was always showing 0.1.0 because build.rs tried to run 'git describe' inside the Docker build, but .git directory wasn't copied into the image. Changes: - Add VERSION build arg to Dockerfile - Pass VERSION as env var to cargo build commands - Update GitLab CI to pass --build-arg VERSION - Modify build.rs to prefer BUILD_VERSION env var over git commands This ensures the version displayed by the agent matches the Docker image tag it was built with. --- .gitlab-ci.yml | 2 ++ Cargo.lock | 82 +------------------------------------------------- Dockerfile | 5 +-- build.rs | 9 +++++- 4 files changed, 14 insertions(+), 84 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8b8e1df..3971a86 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -77,6 +77,7 @@ build:main: - | docker buildx build \ --platform linux/amd64 \ + --build-arg VERSION=$VERSION \ --cache-from type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache \ --cache-to type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache,mode=max \ --tag $REGISTRY/$IMAGE_NAME:latest \ @@ -116,6 +117,7 @@ release:multiarch: docker buildx build \ --platform linux/amd64,linux/arm64 \ + --build-arg VERSION=$VERSION \ --cache-from type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache \ --cache-to type=registry,ref=$REGISTRY/$IMAGE_NAME:buildcache,mode=max \ --tag $REGISTRY/$IMAGE_NAME:$VERSION \ diff --git a/Cargo.lock b/Cargo.lock index be044d5..be0b0b1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8,18 +8,6 @@ version = "2.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa" -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.4" @@ -315,18 +303,6 @@ dependencies = [ "windows-sys 0.61.2", ] -[[package]] -name = "fallible-iterator" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2acce4a10f12dc2fb14a218589d4f1f62ef011b2d0cc4b3cb1bba8e94da14649" - -[[package]] -name = "fallible-streaming-iterator" -version = "0.1.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a" - [[package]] name = "fastrand" version = "2.3.0" @@ -486,30 +462,12 @@ dependencies = [ "wasip2", ] -[[package]] -name = "hashbrown" -version = "0.14.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash", -] - [[package]] name = "hashbrown" version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -[[package]] -name = "hashlink" -version = "0.9.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" -dependencies = [ - "hashbrown 0.14.5", -] - [[package]] name = "heck" version = "0.5.0" @@ -682,7 +640,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017" dependencies = [ "equivalent", - "hashbrown 0.16.1", + "hashbrown", ] [[package]] @@ -722,17 +680,6 @@ version = "0.2.180" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc" -[[package]] -name = "libsqlite3-sys" -version = "0.30.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" -dependencies = [ - "cc", - "pkg-config", - "vcpkg", -] - [[package]] name = "linux-raw-sys" version = "0.11.0" @@ -838,12 +785,6 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "pkg-config" -version = "0.3.32" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" - [[package]] name = "potential_utf" version = "0.1.4" @@ -1021,20 +962,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "rusqlite" -version = "0.32.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7753b721174eb8ff87a9a0e799e2d7bc3749323e773db92e0984debb00019d6e" -dependencies = [ - "bitflags", - "fallible-iterator", - "fallible-streaming-iterator", - "hashlink", - "libsqlite3-sys", - "smallvec", -] - [[package]] name = "rustix" version = "1.1.3" @@ -1375,7 +1302,6 @@ dependencies = [ "prost-build", "prost-types", "rand", - "rusqlite", "serde", "serde_json", "snmp", @@ -1474,12 +1400,6 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" -[[package]] -name = "vcpkg" -version = "0.2.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" - [[package]] name = "version_check" version = "0.9.5" diff --git a/Dockerfile b/Dockerfile index dd5f92a..aa7e777 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,6 +3,7 @@ FROM rust:1.83-alpine AS builder # Build arguments provided by Docker buildx ARG TARGETPLATFORM +ARG VERSION=0.1.0-unknown WORKDIR /app @@ -27,7 +28,7 @@ RUN mkdir src && echo "fn main() {}" > src/main.rs # Build dependencies (cached layer) RUN RUST_TARGET=$(cat /tmp/rust-target) && \ - cargo build --release --target "$RUST_TARGET" + BUILD_VERSION="$VERSION" cargo build --release --target "$RUST_TARGET" # Remove dummy src RUN rm -rf src @@ -38,7 +39,7 @@ COPY src ./src # Build the actual application RUN RUST_TARGET=$(cat /tmp/rust-target) && \ touch src/main.rs && \ - cargo build --release --target "$RUST_TARGET" && \ + BUILD_VERSION="$VERSION" cargo build --release --target "$RUST_TARGET" && \ cp "target/$RUST_TARGET/release/towerops-agent" /tmp/towerops-agent # Runtime stage diff --git a/build.rs b/build.rs index a6ccb99..3d17602 100644 --- a/build.rs +++ b/build.rs @@ -11,7 +11,14 @@ fn main() { } fn get_version() -> String { - // Try git describe first - gives us the most descriptive version + // First check if BUILD_VERSION is already set (e.g., from Docker build arg) + if let Ok(version) = std::env::var("BUILD_VERSION") { + if !version.is_empty() && version != "0.1.0-unknown" { + return version; + } + } + + // Try git describe - gives us the most descriptive version // Examples: // v0.2.0 -> "0.2.0" (exact tag) // v0.2.0-5-g831588e -> "0.2.0.5.831588e" (5 commits after v0.2.0)