70 lines
2.6 KiB
Bash
Executable File
70 lines
2.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Runs `make test package watchapp` inside the local build-image
|
|
# container, mirroring what the Gitea Actions build workflow does -
|
|
# useful for testing build-image changes locally before pushing
|
|
# anything to cr.ladkau.de.
|
|
#
|
|
# Usage: ./run-image.sh [VERSION]
|
|
# VERSION is passed through to `make` (see the Makefile's `package`/
|
|
# `watchapp` targets); omit it for their own git-tag-based default.
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "${BASH_SOURCE[0]}")"
|
|
ROOT="$(pwd)"
|
|
|
|
fail() { echo "PREFLIGHT FAIL: $*" >&2; exit 1; }
|
|
|
|
command -v docker >/dev/null 2>&1 \
|
|
|| fail "docker not found in PATH"
|
|
|
|
[ -f "$ROOT/registry.env" ] \
|
|
|| fail "registry.env not found — copy registry.env.example to registry.env and fill in your cr.ladkau.de credentials"
|
|
|
|
# shellcheck disable=SC1091
|
|
source "$ROOT/registry.env"
|
|
|
|
: "${REGISTRY_IMAGE:?registry.env must set REGISTRY_IMAGE}"
|
|
|
|
IMAGE_TAG="$(<"$ROOT/build-image/VERSION")"
|
|
[ -n "$IMAGE_TAG" ] || fail "build-image/VERSION is empty"
|
|
IMAGE="$REGISTRY_IMAGE:$IMAGE_TAG"
|
|
|
|
docker image inspect "$IMAGE" >/dev/null 2>&1 \
|
|
|| fail "$IMAGE not found locally — run ./build-image.sh first"
|
|
|
|
VERSION="${1:-${VERSION:-}}"
|
|
|
|
# CI always starts from a fresh checkout, but this script bind-mounts the
|
|
# live host repo — so build output left over from a previous local run
|
|
# (build/, dist/, watch/build, and the generated watch resources below)
|
|
# would make this run skip work a real fresh checkout wouldn't, silently
|
|
# hiding bugs that only show up in CI. Wipe them first so every run
|
|
# exercises a true from-scratch build, same as CI.
|
|
echo "== Cleaning generated build artifacts for a fresh build =="
|
|
rm -rf \
|
|
"$ROOT/build" "$ROOT/dist" "$ROOT/watch/build" \
|
|
"$ROOT/watch/resources/img" "$ROOT/watch/resources/app_icon.png" \
|
|
"$ROOT/watch/src/c/i18n_tables.auto.c"
|
|
|
|
echo "== Running make test package watchapp inside $IMAGE =="
|
|
# The container runs as root (needed for the toolchain baked into the
|
|
# image), so anything it writes into this bind mount — dist/, build/,
|
|
# watch/build, etc. — would otherwise come back owned by root, leaving
|
|
# the host repo unusable without sudo. Chown everything back to the host
|
|
# user on exit, whether the build succeeds or fails.
|
|
docker run --rm \
|
|
-v "$ROOT:/workspace" \
|
|
-w /workspace \
|
|
-e VERSION="$VERSION" \
|
|
-e HOST_UID="$(id -u)" \
|
|
-e HOST_GID="$(id -g)" \
|
|
"$IMAGE" \
|
|
bash -c '
|
|
git config --global --add safe.directory /workspace
|
|
trap "chown -R \"$HOST_UID:$HOST_GID\" /workspace" EXIT
|
|
make test package watchapp
|
|
'
|
|
|
|
echo "== Done — artifacts in dist/ =="
|
|
ls -la "$ROOT/dist"
|