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: - name: Checkout Code run: | SERVER_DOMAIN=$(echo "${{ github.server_url }}" | sed 's/https:\/\///') rm -rf "$GITHUB_WORKSPACE"/* git clone "https://${{ github.actor }}:${{ secrets.GITHUB_TOKEN }}@${SERVER_DOMAIN}/${{ github.repository }}.git" "$GITHUB_WORKSPACE" cd "$GITHUB_WORKSPACE" git checkout ${{ github.sha }} - name: Read version from Gradle id: get_version run: | cd "$GITHUB_WORKSPACE" chmod +x ./gradlew VERSION=$(./gradlew properties | grep "^version:" | awk '{print $2}') echo "Found local project version: $VERSION" echo "version=$VERSION" >> $GITHUB_OUTPUT - name: Check if version exists on repository id: check_repo run: | cd "$GITHUB_WORKSPACE" RAW_GROUP=$(./gradlew properties | grep "^group:" | awk '{print $2}') GROUP_PATH=$(echo "$RAW_GROUP" | tr '.' '/') ARTIFACT_ID=$(./gradlew properties | grep "^name:" | awk '{print $2}') LOCAL_VERSION="${{ steps.get_version.outputs.version }}" echo "Detected project: $RAW_GROUP:$ARTIFACT_ID:$LOCAL_VERSION" CHECK_URL="${{ env.MAVEN_REPO_URL }}/${GROUP_PATH}/${ARTIFACT_ID}/${LOCAL_VERSION}/${ARTIFACT_ID}-${LOCAL_VERSION}.pom" echo "Check url: $CHECK_URL" 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 already exists in repository. Skipping publishing." echo "is_new=false" >> $GITHUB_OUTPUT else echo "Version $LOCAL_VERSION not found (Status $STATUS). Start deployment..." echo "is_new=true" >> $GITHUB_OUTPUT fi - name: Push to Maven Repository if: steps.check_repo.outputs.is_new == 'true' run: | echo "Publishing version ${{ steps.get_version.outputs.version }} zu Repository..." ./gradlew publish