name: Build-und-Deploy on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest container: image: ci-java21-node20:latest volumes: - shared_jar_data:/shared_jar_data - shared_trigger_dir:/shared_trigger_dir steps: - name: 📥 Repository auschecken uses: actions/checkout@v4 - name: 🔎 Umgebung & Volumes shell: bash run: | set -euo pipefail java -version node -v pnpm -v || true ls -ld /shared_jar_data /shared_trigger_dir - name: ⚙️ Gradle konfigurieren shell: bash run: | set -euo pipefail mkdir -p ~/.gradle { echo "org.gradle.daemon=false" echo "org.gradle.warning.mode=all" # Wir benutzen das im Container vorhandene JDK 21 (kein Auto-Download): echo "org.gradle.java.installations.auto-download=false" } > ~/.gradle/gradle.properties - name: 🔎 Gradle-Info shell: bash run: | set -euo pipefail ./gradlew --version || true ./gradlew -q javaToolchains || true - name: 🛠 Baue das Projekt (ohne Tests) shell: bash run: | set -euo pipefail # Für Spring Boot genügt in der Regel bootJar: ./gradlew clean bootJar -x test - name: 📦 Artefakt finden & kopieren shell: bash run: | set -euo pipefail echo "Inhalt von build/libs:" ls -l build/libs || { echo "build/libs existiert nicht"; exit 1; } # Neuestes JAR aus build/libs ermitteln (unabhängig vom exakten Namen/Case) ARTIFACT="$(ls -t build/libs/*.jar 2>/dev/null | head -n1)" test -n "$ARTIFACT" && test -f "$ARTIFACT" || { echo "Kein JAR gefunden!"; exit 1; } echo "Gefundenes Artefakt: $ARTIFACT" mkdir -p /shared_jar_data /shared_jar_data/archive timestamp=$(date +"%Y%m%d-%H%M%S") # Zielname stabil halten (für Ihren Deployment-Prozess) cp "$ARTIFACT" /shared_jar_data/MyTimeTracker.jar cp "$ARTIFACT" "/shared_jar_data/archive/MyTimeTracker-$timestamp.jar" - name: 🚦 Neustart der Anwendung triggern shell: bash run: | set -euo pipefail mkdir -p /shared_trigger_dir touch /shared_trigger_dir/restart-requested