#!/usr/bin/env bash set -Eeuo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)" CONFIG="$SCRIPT_DIR/repository/gree-controller/config.yaml" LOCKFILE="$PROJECT_ROOT/Cargo.lock" REGISTRY="${REGISTRY:-oci.linuxiarz.pl}" IMAGE_NAME="${IMAGE_NAME:-gree-controller}" VERSION="$(awk -F '"' '/^version = "/ {print $2; exit}' "$PROJECT_ROOT/Cargo.toml")" [[ -n "$VERSION" ]] || { echo "Cannot determine version from Cargo.toml" >&2; exit 1; } IMAGE_REPO="${REGISTRY%/}/${IMAGE_NAME#/}" python3 - "$CONFIG" "$LOCKFILE" "$VERSION" "$IMAGE_REPO" <<'PY2' from pathlib import Path import re import sys config = Path(sys.argv[1]) lockfile = Path(sys.argv[2]) version = sys.argv[3] image = sys.argv[4] # Home Assistant metadata is generated from the single version source: Cargo.toml. lines = config.read_text(encoding="utf-8").splitlines() out = [] for line in lines: if line.startswith("version:"): out.append(f'version: "{version}"') elif line.startswith("image:"): out.append(f'image: "{image}"') else: out.append(line) config.write_text("\n".join(out) + "\n", encoding="utf-8") # Keep Cargo.lock in sync so `cargo build --locked` remains usable after a version bump. lock = lockfile.read_text(encoding="utf-8") pattern = r'(\[\[package\]\]\nname = "gree-controller"\nversion = ")[^"]+("\n)' updated, count = re.subn(pattern, rf'\g<1>{version}\g<2>', lock, count=1) if count != 1: raise SystemExit("Could not find gree-controller package version in Cargo.lock") lockfile.write_text(updated, encoding="utf-8") PY2 printf 'Synced version %s -> Cargo.lock + Home Assistant metadata; image %s:%s\n' \ "$VERSION" "$IMAGE_REPO" "$VERSION"