49 lines
1.7 KiB
Bash
Executable File
49 lines
1.7 KiB
Bash
Executable File
#!/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"
|