fix(agent): derive @version from BUILD_ID so Burrito re-extracts per build
Burrito keys its on-host install directory on `{release}_erts-{ertsver}_{appver}`
and skips extraction when `_metadata.json` is already present for that version.
With a static `@version "0.1.0"` in mix.exs, every new build landed in the same
cached dir on the target host — silently running stale code.
Now @version resolves to `0.1.0+<BUILD_ID>` where BUILD_ID is the git short SHA
(or `dev-<timestamp>` fallback). scripts/build-linux.sh computes it on the host
and passes it through Dockerfile.build's ARG/ENV, so every commit produces a
distinct Burrito install dir and fresh extraction is guaranteed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
3367b95b91
commit
64dda9cb04
3 changed files with 24 additions and 3 deletions
|
|
@ -28,6 +28,11 @@ COPY lib lib
|
||||||
COPY config config
|
COPY config config
|
||||||
|
|
||||||
RUN mix deps.compile
|
RUN mix deps.compile
|
||||||
|
|
||||||
|
# BUILD_ID is injected by scripts/build-linux.sh (typically the git short SHA).
|
||||||
|
# Declared here — not earlier — so deps.compile stays cacheable across builds.
|
||||||
|
ARG BUILD_ID=dev
|
||||||
|
ENV BUILD_ID=${BUILD_ID}
|
||||||
RUN mix release
|
RUN mix release
|
||||||
|
|
||||||
# Default: print the produced artifacts
|
# Default: print the produced artifacts
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,12 @@
|
||||||
defmodule ProxmoxAgent.MixProject do
|
defmodule ProxmoxAgent.MixProject do
|
||||||
use Mix.Project
|
use Mix.Project
|
||||||
|
|
||||||
@version "0.1.0"
|
@version_base "0.1.0"
|
||||||
|
|
||||||
def project do
|
def project do
|
||||||
[
|
[
|
||||||
app: :agent,
|
app: :agent,
|
||||||
version: @version,
|
version: version(),
|
||||||
elixir: "~> 1.17",
|
elixir: "~> 1.17",
|
||||||
start_permanent: Mix.env() == :prod,
|
start_permanent: Mix.env() == :prod,
|
||||||
deps: deps(),
|
deps: deps(),
|
||||||
|
|
@ -22,6 +22,15 @@ defmodule ProxmoxAgent.MixProject do
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
# Version is built per-invocation so every commit produces a distinct Burrito
|
||||||
|
# install directory on the target host (`<release>_erts-<ertsver>_<version>`).
|
||||||
|
# Without this, Burrito sees an existing `_metadata.json` for the same version
|
||||||
|
# and skips extraction, silently running stale cached code.
|
||||||
|
defp version do
|
||||||
|
build_id = System.get_env("BUILD_ID") || "dev"
|
||||||
|
"#{@version_base}+#{build_id}"
|
||||||
|
end
|
||||||
|
|
||||||
defp deps do
|
defp deps do
|
||||||
[
|
[
|
||||||
{:slipstream, "~> 1.1"},
|
{:slipstream, "~> 1.1"},
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,14 @@ mkdir -p "$OUT"
|
||||||
|
|
||||||
IMG="proxmox-monitor-agent-build:latest"
|
IMG="proxmox-monitor-agent-build:latest"
|
||||||
|
|
||||||
docker build -f Dockerfile.build -t "$IMG" .
|
# Unique per-build identifier. Git short SHA when available; otherwise a
|
||||||
|
# timestamp fallback. Passed to Docker so @version in mix.exs expands to
|
||||||
|
# `0.1.0+<BUILD_ID>` — this keys Burrito's on-host install dir so new builds
|
||||||
|
# always re-extract instead of running stale cached code.
|
||||||
|
BUILD_ID="$(git rev-parse --short=10 HEAD 2>/dev/null || echo "dev-$(date +%s)")"
|
||||||
|
echo "Build ID: $BUILD_ID"
|
||||||
|
|
||||||
|
docker build -f Dockerfile.build --build-arg BUILD_ID="$BUILD_ID" -t "$IMG" .
|
||||||
docker run --rm -v "$OUT":/out "$IMG" sh -c 'cp -v burrito_out/* /out/'
|
docker run --rm -v "$OUT":/out "$IMG" sh -c 'cp -v burrito_out/* /out/'
|
||||||
|
|
||||||
echo
|
echo
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue