name: Auto Publish on Version Change on: push: branches: - master jobs: check-and-publish: runs-on: java26 env: MAVEN_REPO_URL: ${{ secrets.MAVEN_REPO_URL }} MAVEN_REPO_USER: ${{ secrets.MAVEN_REPO_USER }} MAVEN_REPO_PASS: ${{ secrets.MAVEN_REPO_PASS }} steps: # 1. GIT UND BASH INSTALLIEREN (Löst Fehler 127) - name: Install Dependencies (Git) run: | if ! command -v git &> /dev/null; then echo "Git nicht gefunden. Installiere..." sudo apt-get update && sudo apt-get install -y git fi - name: Checkout Code uses: actions/checkout@v4 - name: Version aus Gradle auslesen id: get_version run: | # Extrahiert die Version sauber aus der build.gradle VERSION=$(./gradlew properties | grep "^version:" | awk '{print $2}') echo "Gefundene lokale Projektversion: $VERSION" echo "version=$VERSION" >> $GITHUB_OUTPUT - name: Prüfen ob Version bereits im Maven Repo existiert id: check_repo run: | # Wir bauen den Pfad zur metadata.xml oder zur POM im Maven Repo nach ( group id Punkte durch Slashes ersetzen ) # Beispiel für Group "de.deinefirma" und Artifact "mein-projekt" GROUP_PATH="de/deinefirma" ARTIFACT_ID="mein-projekt" LOCAL_VERSION="${{ steps.get_version.outputs.version }}" # URL zur spezifischen POM-Datei dieser Version im Repo CHECK_URL="${{ env.MAVEN_REPO_URL }}/${GROUP_PATH}/${ARTIFACT_ID}/${LOCAL_VERSION}/${ARTIFACT_ID}-${LOCAL_VERSION}.pom" echo "Prüfe URL: $CHECK_URL" # HTTP-Statuscode abfragen (mit den Credentials falls das Repo privat ist) STATUS=$(curl -o /dev/null -s -w "%{http_code}" -u "${{ env.MAVEN_REPO_USER }}:${{ env.MAVEN_REPO_PASS }}" "$CHECK_URL") if [ "$STATUS" = "200" ]; then echo "Version $LOCAL_VERSION existiert bereits im Repository. Überspringe Publish." echo "is_new=false" >> $GITHUB_OUTPUT else echo "Version $LOCAL_VERSION wurde nicht gefunden (Status $STATUS). Starte Deployment..." echo "is_new=true" >> $GITHUB_OUTPUT fi - name: Auf Maven Repository pushen if: steps.check_repo.outputs.is_new == 'true' run: | echo "Pushe Version ${{ steps.get_version.outputs.version }} zu Maven..." ./gradlew publish