From bfde739ac33d9069c16adfca509d0a4c30ed7f98 Mon Sep 17 00:00:00 2001 From: Mauricio Generoso Date: Sat, 29 Jun 2024 14:57:25 +0100 Subject: [PATCH] refs #109: Update the workflows (for PRs, main branch and release test versions) --- .github/workflows/{sd-ci.yml => pr-build.yml} | 13 +- .github/workflows/sd-ci-cd.yml | 143 ++++++++++++++++++ 2 files changed, 145 insertions(+), 11 deletions(-) rename .github/workflows/{sd-ci.yml => pr-build.yml} (91%) create mode 100644 .github/workflows/sd-ci-cd.yml diff --git a/.github/workflows/sd-ci.yml b/.github/workflows/pr-build.yml similarity index 91% rename from .github/workflows/sd-ci.yml rename to .github/workflows/pr-build.yml index 2ccaa1d..53415c8 100644 --- a/.github/workflows/sd-ci.yml +++ b/.github/workflows/pr-build.yml @@ -1,15 +1,6 @@ -name: CI Workflow +name: PR Build on: - push: - branches: [ main ] - paths: - - 'gradle/**' - - '**.gradle' - - 'gradle.properties' - - 'sd-app/**' - - 'sd-ft/**' - - '.github/workflows/sd-ci.yml' pull_request: branches: [ main ] paths: @@ -18,7 +9,7 @@ on: - 'gradle.properties' - 'sd-app/**' - 'sd-ft/**' - - '.github/workflows/sd-ci.yml' + - '.github/workflows/pr-build.yml' workflow_dispatch: inputs: logLevel: diff --git a/.github/workflows/sd-ci-cd.yml b/.github/workflows/sd-ci-cd.yml new file mode 100644 index 0000000..1b1c1ea --- /dev/null +++ b/.github/workflows/sd-ci-cd.yml @@ -0,0 +1,143 @@ +name: CI Workflow + +on: + push: + branches: [ main ] + paths: + - 'gradle/**' + - '**.gradle' + - 'gradle.properties' + - 'sd-app/**' + - 'sd-ft/**' + - '.github/workflows/sd-ci-cd.yml' + + workflow_dispatch: + inputs: + logLevel: + description: 'Log level' + required: true + default: 'debug' + type: choice + options: + - info + - warning + - debug + +env: + REGISTRY: ghcr.io + IMAGE_NAME: 'groot-mg/test/service-discovery' + +jobs: + build-and-unit-tests: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + - name: Build + unit tests + run: ./gradlew :sd-app:build + + - name: Upload unit tests report + if: always() + uses: actions/upload-artifact@v4 + with: + name: unit-tests-report + path: | + sd-app/build/reports/tests/test/**/* + + - name: Upload JAR + uses: actions/upload-artifact@v4 + with: + name: app-jar + path: sd-app/build/libs/service-discovery.jar + + docker-image: + needs: build-and-unit-tests + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download JAR + uses: actions/download-artifact@v4 + with: + name: app-jar + path: sd-app/build/libs/ + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + tags: | + type=sha + + - name: Build and push Docker image + id: push + uses: docker/build-push-action@v6 + with: + context: sd-app/ + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + functional-tests: + needs: docker-image + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up JDK 21 + uses: actions/setup-java@v4 + with: + java-version: '21' + distribution: 'temurin' + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Run App as Docker container + run: | + SHORT_SHA=$(echo ${{ github.sha }} | cut -c1-7) + IMAGE_NAME=$(echo ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:sha-${SHORT_SHA}) + docker pull ${IMAGE_NAME} + docker run -d -p 8081:8081 --name service-discovery ${IMAGE_NAME} + + - name: Wait for Container to start + run: | + echo "Waiting for Container to start..." + sleep 3 + + - name: Run functional tests + run: ./gradlew --no-daemon :sd-ft:cucumber + + - name: Archive Cucumber test reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: cucumber-tests-report + path: | + sd-ft/reports/cucumber-report.html + + - name: Stop and remove Docker container + run: | + docker stop service-discovery + docker rm service-discovery