From 117bcbd5b95eff7fdbdd6def274c2b67d07ef6b6 Mon Sep 17 00:00:00 2001 From: Boris Capitanu Date: Sun, 12 May 2024 23:38:38 -0500 Subject: [PATCH] Update GitHub Actions CI workflow The GitHub Actions CI workflow has been expanded with additional steps for Docker image building and pushing. Environmental variables and branch filters have been updated for better control over the CI process. This change also includes an option for manual triggering of the workflow with given inputs. --- .github/workflows/ci.yml | 104 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 98 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f32a097..8dd9d7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,19 +1,30 @@ -name: Scala CI +name: CI on: + workflow_dispatch: + inputs: + environment: + description: 'Deployment environment (dev|stage|prod)' + required: true + default: 'dev' + push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] + branches: + - develop + - release permissions: contents: read env: + JAVA_VERSION: 21 + DOCKER_REGISTRY: ghcr.io + DOCKER_IMAGE_NAME: ${{ github.repository }} HTRC_NEXUS_DRHTRC_PWD: ${{ secrets.HTRC_NEXUS_DRHTRC_PWD }} jobs: - test: + ci: + name: Build & test runs-on: ubuntu-latest steps: - name: Checkout code @@ -23,7 +34,7 @@ jobs: - name: Set up Java uses: actions/setup-java@v4 with: - java-version: '21' + java-version: '${{ env.JAVA_VERSION }}' distribution: 'temurin' cache: 'sbt' - name: Run tests with coverage @@ -33,3 +44,84 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} fail_ci_if_error: false + + docker-build: + name: Build and push Docker image + runs-on: ubuntu-latest + permissions: + packages: write + needs: ci + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Generate Dockerfile + run: sbt "Docker/stage" + - name: Show GitHub context + env: + GITHUB_CONTEXT: ${{ toJson(github) }} + run: echo "$GITHUB_CONTEXT" + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE_NAME }} + tags: | + type=sha,prefix={{branch}}-,priority=750,enable=${{ startsWith(github.ref, 'refs/heads/') }} + type=ref,event=branch + type=ref,event=pr + type=pep440,pattern={{version}} + type=pep440,pattern={{major}}.{{minor}} + type=raw,value=latest,enable={{is_default_branch}} + labels: | + org.opencontainers.image.vendor=HathiTrust Research Center + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ${{ env.DOCKER_REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Build and push Docker images + uses: docker/build-push-action@v5 + with: + context: target/docker/stage/ + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + cache-from: type=gha + cache-to: type=gha,mode=max + - name: Repository Dispatch + if: github.event.inputs.environment == '' + uses: peter-evans/repository-dispatch@v3 + env: + HEAD_COMMIT_MESSAGE: ${{ toJSON(github.event.head_commit.message) }} + with: + token: ${{ secrets.PAT }} + repository: htrc/torchlite-argocd + event-type: argocd + client-payload: >- + { + "image": "${{ fromJSON(steps.meta.outputs.json).tags[0] }}", + "commit_msg": "[${{ github.head_ref || github.ref_name }}]: ${{ env.HEAD_COMMIT_MESSAGE }}", + "repository": "${{ github.event.repository.name }}", + "environment": "${{ github.event.inputs.environment }}", + "ref": "${{ github.head_ref || github.ref_name }}" + } + - name: Manual Repository Dispatch + if: github.event.inputs.environment != '' + uses: peter-evans/repository-dispatch@v3 + env: + HEAD_COMMIT_MESSAGE: ${{ toJSON(github.event.head_commit.message) }} + with: + token: ${{ secrets.PAT }} + repository: htrc/torchlite-argocd + event-type: argocd-manual + client-payload: >- + { + "image": "${{ fromJSON(steps.meta.outputs.json).tags[0] }}", + "commit_msg": "[${{ github.head_ref || github.ref_name }}]: Manual deployment by ${{ github.triggering_actor }}", + "repository": "${{ github.event.repository.name }}", + "environment": "${{ github.event.inputs.environment }}", + "ref": "${{ github.head_ref || github.ref_name }}" + }