Skip to content

fix: kbo mutations ecr image should also use lambda deploy target #93

fix: kbo mutations ecr image should also use lambda deploy target

fix: kbo mutations ecr image should also use lambda deploy target #93

Workflow file for this run

name: Main
on:
push:
branches: [ main ]
workflow_dispatch:
concurrency: CI
jobs:
analyze-code:
name: Analyze Code
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Cache NPM
uses: informatievlaanderen/build-pipeline/.github/actions/cache-npm@main
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
shell: bash
- name: Setup NodeJS
uses: informatievlaanderen/build-pipeline/.github/actions/setup-nodejs@main
- name: Setup Python
uses: informatievlaanderen/build-pipeline/.github/actions/setup-python@main
- name: Generate Token
id: generate_token # Add an ID to this step for reference
run: node .github/build-scripts/generate-token.js
env:
APP_ID: ${{ secrets.MYBOT_APP_ID }}
PRIVATE_KEY: ${{ secrets.MYBOT_PRIVATE_KEY }}
- name: Checkout Code
uses: actions/checkout@v4
with:
token: ${{ steps.generate_token.outputs.installationToken }}
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: oracle
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
shell: bash
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
- name: .NET version
shell: bash
run: dotnet --info
- name: Cache SonarCloud packages
uses: actions/cache@v4
with:
path: ~/sonar/cache
key: ${{ runner.os }}-sonar
restore-keys: ${{ runner.os }}-sonar
- name: Restore dotnet tools
shell: bash
run: |
dotnet tool restore
- name: Cache SonarCloud scanner
id: cache-sonar-scanner
uses: actions/cache@v4
with:
path: ./.sonar/scanner
key: ${{ runner.os }}-sonar-scanner
restore-keys: ${{ runner.os }}-sonar-scanner
- name: Install SonarCloud scanner
if: steps.cache-sonar-scanner.outputs.cache-hit != 'true'
shell: bash
run: |
mkdir .sonar
mkdir .sonar/scanner
dotnet tool update dotnet-sonarscanner --tool-path ./.sonar/scanner
- name: Start sonar scanner
env:
GITHUB_TOKEN: ${{ steps.generate_token.outputs.installationToken }}
SONAR_TOKEN: ${{ secrets.VBR_SONAR_TOKEN }}
shell: bash
run: |
./.sonar/scanner/dotnet-sonarscanner begin /k:"Informatievlaanderen_association-registry" /o:"informatievlaanderen" /d:sonar.login="${{ secrets.VBR_SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.dotcover.reportsPaths=dotCover.Output.html
- name: Dotnet restore
shell: bash
run: dotnet restore --runtime linux-x64
- name: Dotnet build
shell: bash
run: dotnet build --no-restore
- name: Analyze with sonar scanner
env:
GITHUB_TOKEN: ${{ secrets.VBR_ACTIONS_TOKEN }} # Needed to get PR information, if any
SONAR_TOKEN: ${{ secrets.VBR_SONAR_TOKEN }}
shell: bash
run: |
./.sonar/scanner/dotnet-sonarscanner end /d:sonar.login="${{ secrets.VBR_SONAR_TOKEN }}"
set-release-version:
if: github.repository_owner == 'Informatievlaanderen'
name: Decide next version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.set-version.outputs.version }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup NodeJS
uses: actions/setup-node@v4
with:
node-version: 20.6.1
- run: npm ci
- name: Run Semantic Release dry-run
shell: bash
run: npx semantic-release --dry-run
env:
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GIT_COMMIT: ${{ github.sha }}
GIT_USERNAME: ${{ secrets.VBR_GIT_USER }}
GIT_AUTHOR_NAME: ${{ secrets.VBR_GIT_USER }}
GIT_COMMITTER_NAME: ${{ secrets.VBR_GIT_USER }}
GIT_EMAIL: ${{ secrets.VBR_GIT_EMAIL }}
GIT_AUTHOR_EMAIL: ${{ secrets.VBR_GIT_EMAIL }}
GIT_COMMITTER_EMAIL: ${{ secrets.VBR_GIT_EMAIL }}
- name: Set Release Version
id: set-version
run: |
[ ! -f semver ] && echo none > semver
echo $(cat semver)
echo ::set-output name=version::$(cat semver)
echo RELEASE_VERSION=$(cat semver) >> $GITHUB_ENV
shell: bash
build-mutation-lambda:
name: Build Mutation Lambda
needs: [ set-release-version ]
runs-on: ubuntu-latest
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
steps:
- name: Check version
shell: bash
run: echo $SEMVER
env:
SEMVER: ${{ needs.set-release-version.outputs.version }}
- name: Checkout Code
uses: actions/checkout@v4
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
shell: bash
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
- name: .NET version
shell: bash
run: dotnet --info
- name: Restore dotnet tools
shell: bash
run: |
dotnet tool restore
- name: Dotnet restore tests
shell: bash
run: dotnet restore test/AssociationRegistry.KboMutations.MutationLambdaContainer.Tests --runtime $RUNTIME
env:
RUNTIME: 'linux-x64'
- name: Dotnet build tests
shell: bash
run: dotnet build --no-restore --runtime $RUNTIME --self-contained test/AssociationRegistry.KboMutations.MutationLambdaContainer.Tests
env:
RUNTIME: 'linux-x64'
- name: Run all tests
run: dotnet test test/AssociationRegistry.KboMutations.MutationLambdaContainer.Tests
- name: Package lambda
if: inputs.semver != 'none'
shell: bash
run: cd src/AssociationRegistry.KboMutations.MutationLambdaContainer && dotnet lambda package --region ${{ secrets.VBR_AWS_REGION }}
- name: Save Image
if: inputs.semver != 'none'
shell: bash
run: docker image save associationregistry.kbomutations.mutationlambdacontainer:latest -o ~/AssociationRegistry.KboMutations.MutationLambdaContainer.tar
- name: Upload Lambda as Artifact
if: inputs.semver != 'none'
uses: actions/upload-artifact@v4
with:
name: lambda-mutation-${{ needs.set-release-version.outputs.version }}
path: ~/AssociationRegistry.KboMutations.MutationLambdaContainer.tar
build-mutationfile-lambda:
name: Build Mutation File Lambda
needs: [ set-release-version ]
runs-on: ubuntu-latest
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
steps:
- name: Check version
shell: bash
run: echo $SEMVER
env:
SEMVER: ${{ needs.set-release-version.outputs.version }}
- name: Checkout Code
uses: actions/checkout@v4
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
shell: bash
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
- name: .NET version
shell: bash
run: dotnet --info
- name: Restore dotnet tools
shell: bash
run: |
dotnet tool restore
- name: Dotnet restore tests
shell: bash
run: dotnet restore test/AssociationRegistry.KboMutations.MutationFileLambda.Tests --runtime $RUNTIME
env:
RUNTIME: 'linux-x64'
- name: Dotnet build tests
shell: bash
run: dotnet build --no-restore --runtime $RUNTIME --self-contained test/AssociationRegistry.KboMutations.MutationFileLambda.Tests
env:
RUNTIME: 'linux-x64'
- name: Run all tests
run: dotnet test test/AssociationRegistry.KboMutations.MutationFileLambda.Tests
- name: Package lambda
if: inputs.semver != 'none'
shell: bash
run: cd src/AssociationRegistry.KboMutations.MutationFileLambda && dotnet lambda package --region ${{ secrets.VBR_AWS_REGION }}
- name: Upload Lambda as Artifact
if: inputs.semver != 'none'
uses: actions/upload-artifact@v4
with:
name: lambda-mutationfile-${{ needs.set-release-version.outputs.version }}
path: src/AssociationRegistry.KboMutations.MutationFileLambda/bin/Release/net8.0/AssociationRegistry.KboMutations.MutationFileLambda.zip
build-sync-lambda:
name: Build Sync Lambda
needs: [ set-release-version ]
runs-on: ubuntu-latest
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
steps:
- name: Check version
shell: bash
run: echo $SEMVER
env:
SEMVER: ${{ needs.set-release-version.outputs.version }}
- name: Checkout Code
uses: actions/checkout@v4
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
shell: bash
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
- name: .NET version
shell: bash
run: dotnet --info
- name: Restore dotnet tools
shell: bash
run: |
dotnet tool restore
- name: Package lambda
if: inputs.semver != 'none'
shell: bash
run: cd src/AssociationRegistry.KboMutations.SyncLambda && dotnet lambda package --region ${{ secrets.VBR_AWS_REGION }}
- name: Upload Lambda as Artifact
if: inputs.semver != 'none'
uses: actions/upload-artifact@v4
with:
name: lambda-sync-${{ needs.set-release-version.outputs.version }}
path: src/AssociationRegistry.KboMutations.SyncLambda/bin/Release/net8.0/AssociationRegistry.KboMutations.SyncLambda.zip
release:
if: needs.set-release-version.outputs.version != 'none'
name: Semantic Release
runs-on: ubuntu-latest
needs:
- build-mutation-lambda
- build-mutationfile-lambda
- build-sync-lambda
outputs:
version: ${{ steps.set-version.outputs.version }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Cache NPM
uses: informatievlaanderen/build-pipeline/.github/actions/cache-npm@main
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
shell: bash
- name: Setup NodeJS
uses: informatievlaanderen/build-pipeline/.github/actions/setup-nodejs@main
- name: Setup Python
uses: informatievlaanderen/build-pipeline/.github/actions/setup-python@main
- name: Generate Token
id: generate_token
run: node .github/build-scripts/generate-token.js
env:
APP_ID: ${{ secrets.MYBOT_APP_ID }}
PRIVATE_KEY: ${{ secrets.MYBOT_PRIVATE_KEY }}
- name: Checkout Code
uses: actions/checkout@v4
with:
token: ${{ steps.generate_token.outputs.installationToken }}
- name: Install NPM dependencies
shell: bash
run: npm install --legacy-peer-deps
- name: Run Semantic Release
shell: bash
run: npx semantic-release
env:
BUILD_DOCKER_REGISTRY: ${{ secrets.BUILD_DOCKER_REGISTRY }}
GITHUB_TOKEN: ${{ steps.generate_token.outputs.installationToken }}
GIT_COMMIT: ${{ github.sha }}
GIT_USERNAME: ${{ steps.generate_token.outputs.installationToken }}
GIT_AUTHOR_NAME: ${{ secrets.VBR_GIT_USER }}
GIT_COMMITTER_NAME: ${{ secrets.VBR_GIT_USER }}
GIT_EMAIL: ${{ secrets.VBR_GIT_EMAIL }}
GIT_AUTHOR_EMAIL: ${{ secrets.VBR_GIT_EMAIL }}
GIT_COMMITTER_EMAIL: ${{ secrets.VBR_GIT_EMAIL }}
- name: Set Release Version
id: set-version
run: |
[ ! -f semver ] && echo none > semver
echo $(cat semver)
echo ::set-output name=version::$(cat semver)
echo RELEASE_VERSION=$(cat semver) >> $GITHUB_ENV
shell: bash
upload-mutation-lambda:
name: Upload & Deploy Mutation Lambda
needs: [ release ]
runs-on: ubuntu-latest
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.release.outputs.version != 'none') }}
steps:
- name: Download Lambda
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: lambda-mutation-${{ needs.release.outputs.version }}
path: ~/
- name: Load artifact
shell: bash
run: |
docker image load -i ~/AssociationRegistry.KboMutations.MutationLambdaContainer.tar
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.VBR_AWS_REGION }}
- name: Login to Amazon ECR
uses: aws-actions/amazon-ecr-login@v2
- name: Push Lambda function to ECR
shell: bash
run: |
docker tag associationregistry.kbomutations.mutationlambdacontainer:latest 460116816372.dkr.ecr.eu-west-1.amazonaws.com/verenigingsregister-kbomutations:$SEMVER
docker push 460116816372.dkr.ecr.eu-west-1.amazonaws.com/verenigingsregister-kbomutations:$SEMVER
env:
SEMVER: ${{ needs.release.outputs.version }}
- name: CD
id: awscurl-polling-action
env:
BUILD_URL: ${{ secrets.VBR_AWS_BUILD_API }}/kbomutations/test/deploy/v4
STATUS_URL: ${{ secrets.VBR_AWS_BUILD_STATUS_API }}/kbomutations/test/deploy/v4/status
uses: informatievlaanderen/awscurl-polling-action/polling-action@deploy-v4
with:
environment: test
version: ${{ needs.release.outputs.version }}
status-url: $STATUS_URL
deploy-url: $BUILD_URL
access-key: ${{ secrets.AWS_BUILD_USER_ACCESS_KEY_ID_IK4 }}
secret-key: ${{ secrets.AWS_BUILD_USER_SECRET_ACCESS_KEY_IK4 }}
deploy-target: 'lambda'
domain: 'verenigingsregister'
project: 'verenigingsregister'
application: 'lambda'
interval: 2
- name: output
shell: bash
if: always()
run: |
echo build-uuid: ${{ steps.awscurl-polling-action.outputs.build-uuid }}
echo Status: ${{ steps.awscurl-polling-action.outputs.status }}
echo ${{ steps.awscurl-polling-action.outputs.final-message }}
upload-mutationfile-lambda:
name: Upload & Deploy MutationFile Lambda
needs: [ release ]
runs-on: ubuntu-latest
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.release.outputs.version != 'none') }}
steps:
- name: Download Lambda
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: lambda-mutationfile-${{ needs.release.outputs.version }}
path: ~/
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.VBR_AWS_REGION }}
- name: Show AWS CLI version
shell: bash
run: aws --version
- name: Upload Lambda function
shell: bash
run: |
aws s3 cp ~/AssociationRegistry.KboMutations.MutationFileLambda.zip s3://$S3_LAMBDA_BUCKETNAME/$S3_LAMBDA/$VERSION/lambda.zip --copy-props none
env:
VERSION: ${{ needs.release.outputs.version }}
S3_LAMBDA_BUCKETNAME: ${{ vars.S3_LAMBDA_BUCKETNAME }}
S3_LAMBDA: 'kbo-mutations-file'
- name: CD
id: awscurl-polling-action
env:
BUILD_URL: ${{ secrets.VBR_AWS_BUILD_API }}/kbomutationsfile/test/deploy/v4
STATUS_URL: ${{ secrets.VBR_AWS_BUILD_STATUS_API }}/kbomutationsfile/test/deploy/v4/status
uses: informatievlaanderen/awscurl-polling-action/polling-action@deploy-v4
with:
environment: test
version: ${{ needs.release.outputs.version }}
status-url: $STATUS_URL
deploy-url: $BUILD_URL
access-key: ${{ secrets.AWS_BUILD_USER_ACCESS_KEY_ID_IK4 }}
secret-key: ${{ secrets.AWS_BUILD_USER_SECRET_ACCESS_KEY_IK4 }}
deploy-target: 'lambda'
domain: 'verenigingsregister'
project: 'verenigingsregister'
application: 'lambda'
interval: 2
- name: output
shell: bash
if: always()
run: |
echo build-uuid: ${{ steps.awscurl-polling-action.outputs.build-uuid }}
echo Status: ${{ steps.awscurl-polling-action.outputs.status }}
echo ${{ steps.awscurl-polling-action.outputs.final-message }}
upload-sync-lambda:
name: Upload & Deploy Sync Lambda
needs: [ release ]
runs-on: ubuntu-latest
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.release.outputs.version != 'none') }}
steps:
- name: Download Lambda
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: lambda-sync-${{ needs.release.outputs.version }}
path: ~/
- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ secrets.VBR_AWS_REGION }}
- name: Show AWS CLI version
shell: bash
run: aws --version
- name: Upload Lambda function
shell: bash
run: |
aws s3 cp ~/AssociationRegistry.KboMutations.SyncLambda.zip s3://$S3_LAMBDA_BUCKETNAME/$S3_LAMBDA/$VERSION/lambda.zip --copy-props none
env:
VERSION: ${{ needs.release.outputs.version }}
S3_LAMBDA_BUCKETNAME: ${{ vars.S3_LAMBDA_BUCKETNAME }}
S3_LAMBDA: 'kbo-sync'
- name: CD
id: awscurl-polling-action
env:
BUILD_URL: ${{ secrets.VBR_AWS_BUILD_API }}/kbosync/test/deploy/v4
STATUS_URL: ${{ secrets.VBR_AWS_BUILD_STATUS_API }}/kbosync/test/deploy/v4/status
uses: informatievlaanderen/awscurl-polling-action/polling-action@deploy-v4
with:
environment: test
version: ${{ needs.release.outputs.version }}
status-url: $STATUS_URL
deploy-url: $BUILD_URL
access-key: ${{ secrets.AWS_BUILD_USER_ACCESS_KEY_ID_IK4 }}
secret-key: ${{ secrets.AWS_BUILD_USER_SECRET_ACCESS_KEY_IK4 }}
deploy-target: 'lambda'
domain: 'verenigingsregister'
project: 'verenigingsregister'
application: 'lambda'
interval: 2
- name: output
shell: bash
if: always()
run: |
echo build-uuid: ${{ steps.awscurl-polling-action.outputs.build-uuid }}
echo Status: ${{ steps.awscurl-polling-action.outputs.status }}
echo ${{ steps.awscurl-polling-action.outputs.final-message }}
publish_to_atlassian:
if: needs.release.outputs.version != 'none'
needs:
- upload-mutation-lambda
- upload-mutationfile-lambda
- upload-sync-lambda
name: Publish to Atlassian
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV
shell: bash
- name: Cache Python
uses: actions/cache@v4
env:
cache-name: cache-pip
with:
path: ~/.cache/pip
key: ${{ runner.os }}-build-${{ env.cache-name }}
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Install Python dependencies
shell: bash
run: |
python -m pip install --upgrade pip
pip install requests markdown argparse
- name: Setup .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: '7.0.408'
- name: .NET version
shell: bash
run: dotnet --info
- name: Restore dotnet restore
shell: bash
run: |
dotnet tool install paket
dotnet paket install
dotnet paket restore
- name: Publish to Confluence
if: needs.set-release-version.outputs.version != 'none'
shell: bash
run: |
./packages/Be.Vlaanderen.Basisregisters.Build.Pipeline/Content/ci-confluence.sh
env:
CONFLUENCE_TITLE: ${{ env.REPOSITORY_NAME }}
CONFLUENCE_USERNAME: ${{ secrets.VBR_CONFLUENCE_USER }}
CONFLUENCE_PASSWORD: ${{ secrets.VBR_CONFLUENCE_PASSWORD }}
- name: Create Jira Release
if: needs.set-release-version.outputs.version != 'none'
shell: bash
run: ./packages/Be.Vlaanderen.Basisregisters.Build.Pipeline/Content/ci-jira.sh
env:
CONFLUENCE_TITLE: ${{ env.REPOSITORY_NAME }}
CONFLUENCE_USERNAME: ${{ secrets.VBR_CONFLUENCE_USER }}
CONFLUENCE_PASSWORD: ${{ secrets.VBR_CONFLUENCE_PASSWORD }}
JIRA_PREFIX: Association-KboMutations
JIRA_PROJECT: OR
JIRA_VERSION: ${{ needs.set-release-version.outputs.version }}