name: Build and Push API Docker Image on: workflow_dispatch: push: branches: - main paths: - 'server/**/*.java' - 'server/**/*.xml' - 'server/pom.xml' jobs: build-and-push: runs-on: ubuntu-latest permissions: contents: write packages: write steps: - name: Checkout code uses: actions/checkout@v6 with: fetch-depth: 0 - name: Set lowercase repo name id: repo run: echo "name=${GITHUB_REPOSITORY,,}" >> $GITHUB_OUTPUT - name: Set up Java uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' cache: 'maven' - name: Increment version in pom.xml id: version working-directory: ./server run: | # Extract current version from pom.xml CURRENT_VERSION=$(./mvnw help:evaluate -Dexpression=project.version -q -DforceStdout) echo "Current version: ${CURRENT_VERSION}" # Increment version NEW_VERSION=$((CURRENT_VERSION + 1)) echo "New version: ${NEW_VERSION}" # Update pom.xml with new version ./mvnw versions:set -DnewVersion=${NEW_VERSION} -DgenerateBackupFiles=false -q # Output for later steps echo "version=${NEW_VERSION}" >> $GITHUB_OUTPUT - name: Commit version bump run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git add server/pom.xml git commit -m "chore: bump api version to ${{ steps.version.outputs.version }} [skip ci]" git push - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build Docker image with Spring Boot working-directory: ./server run: | ./mvnw -Pnative -DskipTests spring-boot:build-image \ -Dspring-boot.build-image.imageName=ghcr.io/${{ steps.repo.outputs.name }}/api:latest - name: Tag and push Docker image run: | docker tag ghcr.io/${{ steps.repo.outputs.name }}/api:latest ghcr.io/${{ steps.repo.outputs.name }}/api:${{ steps.version.outputs.version }} docker push ghcr.io/${{ steps.repo.outputs.name }}/api:latest docker push ghcr.io/${{ steps.repo.outputs.name }}/api:${{ steps.version.outputs.version }} - name: Create and push Git tag run: | git config user.name "github-actions[bot]" git config user.email "github-actions[bot]@users.noreply.github.com" git tag -a api-v${{ steps.version.outputs.version }} -m "Release API v${{ steps.version.outputs.version }}" git push origin api-v${{ steps.version.outputs.version }} - name: Trigger Dokploy deployment run: curl -X POST "${{ vars.DOKPLOY_WEBHOOK_API }}"