name: Build-und-Deploy on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest # >>> Alle Steps laufen in DIESEM Container (mit Java21/Node20/Git/Bash/pnpm) container: image: java21-node20-bash:latest steps: - name: ๐Ÿ“ฅ Repository auschecken uses: actions/checkout@v4 - name: ๐Ÿ”Ž Volumes & Umgebung prรผfen run: | set -e echo "PWD=$(pwd)" java -version node -v pnpm -v which bash || true # Volumes (vom Runner per config.yaml in den Job gemountet) ls -ld /shared_jar_data || true ls -ld /shared_trigger_dir || true # Gradle auf vorhandenes JDK 21 festnageln (kein Foojay-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: ๐Ÿ”Ž Umgebung prรผfen 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