mirror of
https://github.com/got-feedBack/feedBack-desktop.git
synced 2026-07-21 12:22:34 +00:00
Three independent gaps currently break a from-scratch Linux build (and CI):
1. .build-config.json is missing `versions.dotnet`, yet both the devcontainer
Dockerfile (`dotnet-install.sh --channel ${DOTNET_VERSION}`) and the CI
workflows (`require('./.build-config.json').versions.dotnet` → setup-dotnet
`${dotnet}.x`) read it. Empty → the image build / setup-dotnet step fails.
Add `"dotnet": "8.0"` (Velopack's vpk targets .NET 8; "8.0" satisfies both
`--channel 8.0` and setup-dotnet's `8.0.x`). Keeps .NET available for
`vpk pack` on tagged release builds.
2. build-linux-docker.sh never forwards GH_CLONE_TOKEN or SLOPSMITH_REF into
the container, so a local `bash scripts/build-linux-docker.sh` can't clone
the private got-feedback core/plugins or select a core ref. Pass both
through (defaulting SLOPSMITH_REF to main).
3. The ffmpeg libvorbis guard pipes `ffmpeg | grep -wq`, which is racy under
`set -o pipefail`: grep -q closes the pipe on first match, ffmpeg takes
SIGPIPE (141), pipefail returns 141, and the guard false-fails even though
libvorbis is present (reproducible on Docker Desktop). Capture the encoder
list into a variable first, then grep.
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
105 lines
2.9 KiB
Bash
Executable File
105 lines
2.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# Docker-based Linux build wrapper
|
|
# Runs build-linux-ubuntu.sh inside a reproducible container
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_DIR="$(dirname "$SCRIPT_DIR")"
|
|
DEVCONTAINER_DIR="$PROJECT_DIR/.devcontainer"
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
echo "=== Slopsmith Desktop Docker Build ==="
|
|
echo ""
|
|
echo "This script provides reproducible Linux builds by running"
|
|
echo "build-linux-ubuntu.sh inside a Docker container."
|
|
echo ""
|
|
|
|
# Check prerequisites
|
|
echo -e "${BLUE}Checking prerequisites...${NC}"
|
|
|
|
if ! command -v docker &>/dev/null; then
|
|
echo -e "${RED}Error: Docker is not installed${NC}" >&2
|
|
echo "Install: https://docs.docker.com/get-docker/" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if ! docker info &>/dev/null; then
|
|
echo -e "${RED}Error: Docker daemon is not running${NC}" >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}✓${NC} Docker available"
|
|
echo ""
|
|
|
|
# Build container image
|
|
echo -e "${BLUE}Building container image...${NC}"
|
|
echo " (This will take a few minutes on first run)"
|
|
echo ""
|
|
|
|
docker build \
|
|
-f "$DEVCONTAINER_DIR/Dockerfile" \
|
|
-t slopsmith-ubuntu-builder \
|
|
"$PROJECT_DIR"
|
|
# `set -e` at the top of this script already aborts on a failed
|
|
# `docker build` — no manual `$?` check needed (and the check that
|
|
# was here would in practice be unreachable).
|
|
|
|
echo -e "${GREEN}✓${NC} Container image built"
|
|
echo ""
|
|
|
|
# Clear stale CMake build cache. CMakeCache.txt bakes in the build path;
|
|
# when the project is mounted at a different path inside the container the
|
|
# paths don't match and cmake aborts. A clean build/ guarantees consistency.
|
|
if [[ -d "$PROJECT_DIR/build" ]]; then
|
|
echo -e "${BLUE}Clearing stale CMake cache...${NC}"
|
|
rm -rf "$PROJECT_DIR/build"
|
|
fi
|
|
|
|
# Generate unique container name
|
|
CONTAINER_NAME="slopsmith-build-$(date +%s)-$$-$RANDOM"
|
|
|
|
echo -e "${BLUE}Running build in container...${NC}"
|
|
echo -e "${BLUE}Container name:${NC} $CONTAINER_NAME"
|
|
echo ""
|
|
echo "The container will be preserved after the build to allow debugging."
|
|
echo "Clean up when done:"
|
|
echo " docker stop $CONTAINER_NAME && docker rm $CONTAINER_NAME"
|
|
echo ""
|
|
|
|
set +e
|
|
docker run \
|
|
--name "$CONTAINER_NAME" \
|
|
-v "$PROJECT_DIR:/workspace" \
|
|
-w /workspace \
|
|
-e ELECTRON_CACHE=/home/vscode/.cache/electron \
|
|
-e ELECTRON_BUILDER_CACHE=/home/vscode/.cache/electron-builder \
|
|
-e GIT_TERMINAL_PROMPT=0 \
|
|
-e "GH_CLONE_TOKEN=${GH_CLONE_TOKEN:-}" \
|
|
-e "SLOPSMITH_REF=${SLOPSMITH_REF:-main}" \
|
|
-t \
|
|
slopsmith-ubuntu-builder \
|
|
bash -c './scripts/build-linux-ubuntu.sh'
|
|
BUILD_EXIT_CODE=$?
|
|
set -e
|
|
|
|
echo ""
|
|
if [[ $BUILD_EXIT_CODE -eq 0 ]]; then
|
|
echo -e "${GREEN}✓${NC} Build completed successfully!"
|
|
else
|
|
echo -e "${RED}✗${NC} Build failed (exit code: $BUILD_EXIT_CODE)"
|
|
echo ""
|
|
echo "To debug:"
|
|
echo " docker exec -it $CONTAINER_NAME /bin/bash"
|
|
echo " docker logs $CONTAINER_NAME"
|
|
echo ""
|
|
fi
|
|
|
|
exit $BUILD_EXIT_CODE
|