blob: 751a9161b27e2d5685e71adb6a7d2090a9caf2ea (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
#!/usr/bin/env bash
set -euo pipefail
# Build Fluorine Manager using Docker.
#
# Usage:
# ./build.sh # Build AppImage + staging dir
# ./build.sh shell # Drop into the build container for debugging
#
# Prerequisites: Docker or Podman
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
# Auto-detect container runtime
if command -v podman >/dev/null 2>&1; then
DOCKER=podman
elif command -v docker >/dev/null 2>&1; then
DOCKER=docker
else
echo "ERROR: Neither podman nor docker found in PATH"
exit 1
fi
IMAGE_NAME="fluorine-builder"
CONTAINER_NAME="fluorine-build-$$"
cd "${SCRIPT_DIR}"
# Build the Docker image if it doesn't exist or Dockerfile changed
echo "=== Ensuring build image is up to date ==="
${DOCKER} build -t "${IMAGE_NAME}" docker/
# Persistent ccache directory for faster rebuilds.
CCACHE_DIR="${HOME}/.cache/fluorine-ccache"
mkdir -p "${CCACHE_DIR}"
if [ "${1:-}" = "shell" ]; then
echo "=== Dropping into build container shell ==="
exec ${DOCKER} run --rm -it \
-v "${SCRIPT_DIR}:/src:rw" \
-v "${CCACHE_DIR}:/ccache:rw" \
-e CCACHE_DIR=/ccache \
-w /src \
--device /dev/fuse \
--cap-add SYS_ADMIN \
"${IMAGE_NAME}" \
bash
fi
echo "=== Starting build ==="
${DOCKER} run --rm \
-v "${SCRIPT_DIR}:/src:rw" \
-v "${CCACHE_DIR}:/ccache:rw" \
-e CCACHE_DIR=/ccache \
-w /src \
--device /dev/fuse \
--cap-add SYS_ADMIN \
--name "${CONTAINER_NAME}" \
"${IMAGE_NAME}" \
bash /src/docker/build-inner.sh
echo ""
echo "=== Done ==="
if ls build/*.AppImage >/dev/null 2>&1; then
echo "AppImage: $(ls build/*.AppImage)"
fi
echo "Staging: build/staging/"
|