diff --git a/.github/workflows/aam-backend-service-release.yml b/.github/workflows/aam-backend-service-release.yml new file mode 100644 index 0000000..0afef9c --- /dev/null +++ b/.github/workflows/aam-backend-service-release.yml @@ -0,0 +1,112 @@ +name: aam-backend-service-release + +on: + push: + branches: + - main + paths: + - '.github/workflows/aam-backend-service-release.yml' + - 'application/aam-backend-service/**' + +jobs: + verify: + name: Verify aam-backend-service + runs-on: ubuntu-latest + defaults: + run: + working-directory: application/aam-backend-service + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Set up Java + uses: actions/setup-java@v4 + with: + distribution: 'corretto' + java-version: 17 + cache: 'gradle' + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GHCR_PULL_SECRET }} + + - name: Run Tests and generate Jacoco Test Report + env: + JACOCO_SOURCE_PATH: application/aam-backend-service/src/main/kotlin + run: | + ./gradlew jacocoTestReport --no-daemon + + - name: Publish code coverage to code climate + uses: paambaati/codeclimate-action@v5.0.0 + env: + CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }} + JACOCO_SOURCE_PATH: application/aam-backend-service/src/main/kotlin + with: + coverageLocations: application/aam-backend-service/build/reports/jacoco/test/jacocoTestReport.xml:jacoco + + publish: + name: Publish aam-backend-service Release + runs-on: ubuntu-latest + needs: + - verify + permissions: + contents: write # to be able to publish a GitHub release + issues: write # to be able to comment on released issues + pull-requests: write # to be able to comment on released pull requests + defaults: + run: + working-directory: application/aam-backend-service + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true + + - name: Install Rust toolchain + run: rustup update --no-self-update + + - name: Install conventional_commits_next_version + run: cargo install conventional_commits_next_version --version ^6 + + - name: Set current tag and version + run: | + CURRENT_TAG=$(git describe --abbrev=0 --tags --match 'aam-backend-service/v*') + CURRENT_VERSION=$(echo $CURRENT_TAG | cut -d'/' -f2) + echo "CURRENT_TAG=$CURRENT_TAG" >> $GITHUB_ENV + echo "CURRENT_VERSION=$CURRENT_VERSION" >> $GITHUB_ENV + + - name: Set from commit hash + run: | + FROM_COMMIT_HASH=$(git rev-list -n 1 ${{ env.CURRENT_TAG }}) + echo "FROM_COMMIT_HASH=$FROM_COMMIT_HASH" >> $GITHUB_ENV + + - name: Calculate next version + run: | + NEXT_VERSION=v$(conventional_commits_next_version \ + --calculation-mode "Batch" \ + --from-commit-hash ${{ env.FROM_COMMIT_HASH }} \ + --from-version ${{ env.CURRENT_VERSION }} \ + --monorepo application/aam-backend-service) + echo "NEXT_VERSION=$NEXT_VERSION" >> $GITHUB_ENV + + - name: Create Release + if: env.CURRENT_VERSION != env.NEXT_VERSION + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + run: | + TAG_NAME=aam-backend-service/${{ env.NEXT_VERSION }} + gh api \ + --method POST \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + /repos/Aam-Digital/aam-services/releases \ + -f "tag_name=$TAG_NAME" \ + -f "target_commitish=main" \ + -f "name=$TAG_NAME" \ + -F "draft=false" \ + -F "prerelease=false" \ + -F "generate_release_notes=true"