name: Build-und-Deploy on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest # Alle Steps laufen in DIESEM Container (enthΓ€lt Java21/Node20/pnpm/git/bash) container: image: ci-java21-node20:latest steps: - name: πŸ“₯ Repository auschecken uses: actions/checkout@v4 - name: πŸ”Ž Umgebung & Volumes run: | set -e echo "PWD=$(pwd)" java -version node -v pnpm -v echo "Mounts:" ls -ld /shared_jar_data || echo "/shared_jar_data fehlt" ls -ld /shared_trigger_dir || echo "/shared_trigger_dir fehlt" # Gradle auf systemweites JDK 21 festnageln (kein Toolchain-Download) - name: βš™οΈ Gradle konfigurieren run: | rm -rf ~/.gradle/jdks ~/.gradle/.tmp/jdks mkdir -p ~/.gradle { echo "org.gradle.java.installations.auto-detect=true" echo "org.gradle.java.installations.auto-download=false" } > ~/.gradle/gradle.properties - name: πŸ”Ž Gradle-Info run: | set -e ./gradlew -v ./gradlew -q javaToolchains || true ls -la - name: πŸ›  Baue das Projekt (ohne Tests) env: CI: "true" run: | set -e test -f ./gradlew || { echo "❌ gradlew fehlt"; exit 1; } chmod +x ./gradlew || true ./gradlew clean build -x test --no-daemon --info --stacktrace echo "Build-Output (build/libs):" ls -l build/libs || true - name: πŸ“¦ JAR ins Shared Volume kopieren und archivieren run: | set -e JAR="$(ls -1 build/libs/*-SNAPSHOT.jar 2>/dev/null | head -n1)" if [ -z "${JAR:-}" ] || [ ! -f "$JAR" ]; then echo "❌ Kein JAR in build/libs gefunden"; exit 1 fi mkdir -p /shared_jar_data /shared_jar_data/archive timestamp=$(date +"%Y%m%d-%H%M%S") cp "$JAR" /shared_jar_data/MyTimeTracker-0.0.1-SNAPSHOT.jar cp "$JAR" "/shared_jar_data/archive/MyTimeTracker-$timestamp.jar" echo "πŸ“‚ /shared_jar_data:" ls -l /shared_jar_data || true echo "πŸ“‚ /shared_jar_data/archive:" ls -l /shared_jar_data/archive || true - name: 🚦 Neustart der Anwendung triggern run: | set -e mkdir -p /shared_trigger_dir touch /shared_trigger_dir/restart-requested