d5f4381169
build / build (push) Failing after 0s
- build-image/: Dockerfile bundling JDK 17, the Android SDK, and Node.js (needed by Gitea's JS-based actions) - the app has no native code, so no NDK - build-image.sh/upload-image.sh: extended to also build/push this image alongside the existing OCR pipeline tools image - run-image.sh: runs `make android` inside the image against a live checkout, for a CI-equivalent local build - Makefile: `make android` builds and versions a release APK into dist/, from the current git tag - .gitea/workflows/build.yml: now pulls the custom image and just runs `make android`, replacing the ad-hoc Node/SDK install steps - README.md: describes the pipeline, server, app, and build tooling - registry.env.example: fix REGISTRY_IMAGE to be fully-qualified (an unqualified name was silently resolving pushes to Docker Hub instead of the configured registry)
70 lines
2.7 KiB
Bash
Executable File
70 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Runs `make android` inside the local android-builder image, mirroring
|
|
# what the Gitea Actions build workflow does - useful for testing
|
|
# build-image/ changes locally before pushing anything to a registry.
|
|
#
|
|
# Usage: ./run-image.sh [VERSION]
|
|
# VERSION is passed through to `make android` (see the Makefile's
|
|
# `android` target); omit it for its 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"
|
|
|
|
IMAGE="${REGISTRY_ANDROID_IMAGE:-cr.ladkau.de/fuelish/android-builder}"
|
|
if [ -f "$ROOT/registry.env" ]; then
|
|
# shellcheck disable=SC1091
|
|
source "$ROOT/registry.env"
|
|
IMAGE="${REGISTRY_ANDROID_IMAGE:-$IMAGE}"
|
|
fi
|
|
|
|
IMAGE_TAG="$(<"$ROOT/build-image/VERSION")"
|
|
[ -n "$IMAGE_TAG" ] || fail "build-image/VERSION is empty"
|
|
IMAGE="$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
|
|
# (dist/, android/build, the generated app icon/splash resources) 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/dist" "$ROOT/android/build" "$ROOT/android/app/build" \
|
|
"$ROOT/android/app/src/main/res/drawable-nodpi" \
|
|
"$ROOT/android/app/src/main/res"/mipmap-mdpi "$ROOT/android/app/src/main/res"/mipmap-hdpi \
|
|
"$ROOT/android/app/src/main/res"/mipmap-xhdpi "$ROOT/android/app/src/main/res"/mipmap-xxhdpi \
|
|
"$ROOT/android/app/src/main/res"/mipmap-xxxhdpi
|
|
|
|
echo "== Running make android inside $IMAGE =="
|
|
# The container runs as root (needed for the SDK/Gradle caches baked into
|
|
# the image), so anything it writes into this bind mount - dist/,
|
|
# android/build, android/.gradle, 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 android
|
|
'
|
|
|
|
echo "== Done - artifact in dist/ =="
|
|
ls -la "$ROOT/dist"
|