From 048d72dc18b7db4406dcce0b646321ff70e2deca Mon Sep 17 00:00:00 2001 From: Paul Eipper Date: Tue, 2 Jun 2026 16:50:05 -0300 Subject: [PATCH] ci: derive release binary version from tag (#224) Set the CLI build version from OBSCURA_VERSION, GitHub tag refs, or Cargo.toml fallback. Use that same build version for both --version and the startup banner, and pass the Docker tag version into Docker builds. --- .github/workflows/docker.yml | 2 ++ Dockerfile | 5 ++++- crates/obscura-cli/build.rs | 36 ++++++++++++++++++++++++++++++++++ crates/obscura-cli/src/main.rs | 6 +++--- 4 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 crates/obscura-cli/build.rs diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 32b9402..3d60e23 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -32,6 +32,8 @@ jobs: with: context: . push: true + build-args: | + OBSCURA_VERSION=${{ steps.version.outputs.version }} tags: | ${{ secrets.DOCKERHUB_USERNAME }}/obscura:${{ steps.version.outputs.version }} ${{ secrets.DOCKERHUB_USERNAME }}/obscura:latest diff --git a/Dockerfile b/Dockerfile index 40c7098..cbb8ca3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -29,9 +29,12 @@ RUN for crate in obscura-dom obscura-net obscura-browser obscura-cdp obscura-js RUN cargo build --release --bin obscura --bin obscura-worker 2>/dev/null || true +ARG OBSCURA_VERSION + # Copy real sources and build COPY crates/ crates/ -RUN touch crates/*/src/*.rs && cargo build --release --bin obscura --bin obscura-worker +RUN echo "Building Obscura version ${OBSCURA_VERSION:-from Cargo.toml}" && \ + touch crates/*/src/*.rs && cargo build --release --bin obscura --bin obscura-worker # --- diff --git a/crates/obscura-cli/build.rs b/crates/obscura-cli/build.rs new file mode 100644 index 0000000..89b864d --- /dev/null +++ b/crates/obscura-cli/build.rs @@ -0,0 +1,36 @@ +use std::env; + +fn env_value(name: &str) -> Option { + env::var(name) + .ok() + .map(|value| value.trim().to_string()) + .filter(|value| !value.is_empty()) +} + +fn normalize_version(version: String) -> String { + version.strip_prefix('v').unwrap_or(&version).to_string() +} + +fn github_tag_version() -> Option { + if env_value("GITHUB_REF_TYPE").as_deref() == Some("tag") { + return env_value("GITHUB_REF_NAME").map(normalize_version); + } + + env_value("GITHUB_REF") + .and_then(|value| value.strip_prefix("refs/tags/").map(str::to_owned)) + .map(normalize_version) +} + +fn main() { + println!("cargo:rerun-if-env-changed=OBSCURA_VERSION"); + println!("cargo:rerun-if-env-changed=GITHUB_REF_TYPE"); + println!("cargo:rerun-if-env-changed=GITHUB_REF_NAME"); + println!("cargo:rerun-if-env-changed=GITHUB_REF"); + + let version = env_value("OBSCURA_VERSION") + .map(normalize_version) + .or_else(github_tag_version) + .unwrap_or_else(|| env::var("CARGO_PKG_VERSION").expect("Cargo sets CARGO_PKG_VERSION")); + + println!("cargo:rustc-env=OBSCURA_BUILD_VERSION={version}"); +} diff --git a/crates/obscura-cli/src/main.rs b/crates/obscura-cli/src/main.rs index c55a5a5..c2fca92 100644 --- a/crates/obscura-cli/src/main.rs +++ b/crates/obscura-cli/src/main.rs @@ -10,7 +10,7 @@ use tokio::time::{timeout, Duration}; #[derive(Parser)] #[command( name = "obscura", - version = env!("CARGO_PKG_VERSION"), + version = env!("OBSCURA_BUILD_VERSION"), about = "Obscura - A lightweight headless browser for web scraping and automation", )] struct Args { @@ -189,9 +189,9 @@ fn print_banner(port: u16) { | |__| | |_) \__ \ (__| |_| | | | (_| | \____/|_.__/|___/\___|\__,_|_| \__,_| - Headless Browser v0.1.6 + Headless Browser v{} CDP server: ws://127.0.0.1:{}/devtools/browser -"#, port); +"#, env!("OBSCURA_BUILD_VERSION"), port); } fn select_log_filter(verbose: bool, quiet: bool) -> &'static str {