Skip to content

Release

Release #71

Workflow file for this run

name: Release
on:
workflow_dispatch:
concurrency: Release
jobs:
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
with:
persist-credentials: false
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Node version
shell: bash
run: node --version
- name: Install NPM dependencies
shell: bash
run: npm ci
- name: Run Semantic Release Dry-Run
shell: bash
run: npx semantic-release --dry-run
env:
GITHUB_TOKEN: ${{ secrets.VBR_GIT_RELEASE_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-api-suspicious-cases:
name: Build Api Suspicious Cases
uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/integration-db
image-file: suspicious-cases-api-image.tar
image-name: suspicious-cases-api
test-project: Basisregisters.IntegrationDb.SuspiciousCases.Api.Tests
build-project: Basisregisters.IntegrationDb.SuspiciousCases.Api
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-integration-veka:
name: Build Integration VEKA
uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/integration-db
image-file: integration-veka-image.tar
image-name: integration-veka
build-project: Basisregisters.Integration.Veka
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-bosa-full-download:
name: Build Bosa Full Download
uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/integration-db
image-file: bosa-full-download-image.tar
image-name: bosa-full-download
test-project: Basisregisters.IntegrationDb.Bosa.Tests
build-project: Basisregisters.IntegrationDb.Bosa
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-data-integrity:
name: Build Data Integrity
uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/integration-db
image-file: data-integrity-image.tar
image-name: data-integrity
build-project: Basisregisters.IntegrationDb.DataIntegrity
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-gtmf-meldingen:
name: Build Gtmf Meldingen
uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/integration-db
image-file: gtmf-meldingen-image.tar
image-name: gtmf-meldingen
build-project: Basisregisters.IntegrationDb.Gtmf.Meldingen
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
pack-api-suspicious-cases:
name: Pack Api Suspicious Cases Abstractions
uses: Informatievlaanderen/build-pipeline/.github/workflows/pack.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
pack-file: Be.Vlaanderen.Basisregisters.IntegrationDb.SuspiciousCases.Api.Abstractions
test-project: Basisregisters.IntegrationDb.SuspiciousCases.Api.Tests
build-project: Basisregisters.IntegrationDb.SuspiciousCases.Api.Abstractions
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
release:
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
name: Semantic Release
runs-on: ubuntu-latest
needs: [
set-release-version,
build-api-suspicious-cases,
build-integration-veka,
build-bosa-full-download,
pack-api-suspicious-cases,
build-data-integrity,
build-gtmf-meldingen ]
outputs:
version: ${{ steps.set-version.outputs.version }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Cache NPM
uses: actions/cache@v4
env:
cache-name: cache-npm
with:
path: ~/.npm
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
- 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 Node.js
uses: actions/setup-node@v4
with:
node-version: '20.x'
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.x'
- name: Node version
shell: bash
run: node --version
- name: .NET version
shell: bash
run: dotnet --info
- name: Python version
shell: bash
run: python --version
- name: Install NPM dependencies
shell: bash
run: npm ci
- name: Install Python dependencies
shell: bash
run: |
python -m pip install --upgrade pip
pip install requests markdown argparse
- name: Download NuGet Api Suspicious Cases
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: nuget-Be.Vlaanderen.Basisregisters.IntegrationDb.SuspiciousCases.Api.Abstractions-${{ needs.set-release-version.outputs.version }}
path: dist/nuget/
- name: Run Semantic Release
shell: bash
run: npx semantic-release
env:
GITHUB_TOKEN: ${{ secrets.VBR_GIT_RELEASE_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
publish_to_nuget:
needs: [ release ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.release.outputs.version != 'none') }}
name: Publish to NuGet
runs-on: ubuntu-latest
steps:
- name: Checkout Code
uses: actions/checkout@v4
- 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: Download NuGet package api-suspicious-cases
uses: actions/download-artifact@v4
with:
name: nuget-Be.Vlaanderen.Basisregisters.IntegrationDb.SuspiciousCases.Api.Abstractions-${{ needs.release.outputs.version }}
path: ~/
- name: Publish packages to NuGet
shell: bash
run: |
dotnet nuget push ~/Be.Vlaanderen.Basisregisters.IntegrationDb.SuspiciousCases.Api.Abstractions.$SEMVER.nupkg --source nuget.org --api-key $NUGET_API_KEY
env:
SEMVER: ${{ needs.release.outputs.version }}
WORKSPACE: ${{ github.workspace }}
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}
# publish_to_atlassian:
# needs: [ release ]
# if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.release.outputs.version != 'none') }}
# 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 Paket
# uses: actions/cache@v4
# env:
# cache-name: cache-paket
# with:
# path: packages
# key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('paket.lock') }}
# restore-keys: |
# ${{ runner.os }}-build-${{ env.cache-name }}-
# - name: Cache Python
# uses: actions/cache@v4
# env:
# cache-name: cache-pip
# with:
# path: ~/.cache/pip
# key: ${{ runner.os }}-build-${{ env.cache-name }}
# - name: Setup 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: Publish to Confluence
# 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 }}
push_images:
if: needs.release.outputs.version != 'none'
needs: [ release ]
name: Push images
runs-on: ubuntu-latest
strategy:
matrix:
image: [
'suspicious-cases-api',
'integration-veka',
'bosa-full-download',
'data-integrity',
'gtmf-meldingen'
]
steps:
- name: Configure AWS credentials
if: needs.release.outputs.version != 'none'
uses: aws-actions/configure-aws-credentials@v4
with:
aws-access-key-id: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_DEVOPS }}
aws-secret-access-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_DEVOPS }}
aws-region: ${{ secrets.VBR_AWS_REGION_PRD }}
- name: Login to Amazon ECR
if: needs.release.outputs.version != 'none'
uses: aws-actions/amazon-ecr-login@v2
- name: Download artifact
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: ${{ matrix.image }}-${{ needs.release.outputs.version }}
path: ~/
- name: Load artifact
shell: bash
run: |
echo $IMAGE-image.tar
docker image load -i ~/$IMAGE-image.tar
env:
IMAGE: ${{ matrix.image }}
- name: Push artifacts to ECR
if: needs.release.outputs.version != 'none'
shell: bash
run: |
echo $IMAGE:$SEMVER
docker push $BUILD_DOCKER_REGISTRY/integration-db/$IMAGE:$SEMVER
env:
BUILD_DOCKER_REGISTRY_TST: ${{ secrets.VBR_DEVOPS_DOCKER_REGISTRY }}
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_DEVOPS_DOCKER_REGISTRY }}
IMAGE: ${{ matrix.image }}
SEMVER: ${{ needs.release.outputs.version }}
WORKSPACE: ${{ github.workspace }}
deploy_to_test_start_slack:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ push_images, release ]
name: Deploy to test started
environment: test
runs-on: ubuntu-latest
steps:
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo ""$GITHUB_REPOSITORY"" | awk -F / '{print $2}' | sed -e ""s/:refs//"") >> $GITHUB_ENV
shell: bash
- name: Notify deployment started
uses: slackapi/slack-github-action@v1.26.0
with:
channel-id: '#team-dinosaur-dev'
slack-message: Deployment of basisregisters-integration to test has started
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
REPOSITORY_NAME: ${{ env.REPOSITORY_NAME }}
deploy_services_to_test:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_to_test_start_slack, release ]
name: Deploy to services test
runs-on: ubuntu-latest
strategy:
matrix:
services: [
'integration-suspicious-cases-api'
]
steps:
- name: Deploy services
env:
BUILD_URL: ${{ vars.VBR_AWS_BUILD_API_DEVOPS }}/${{matrix.services}}
STATUS_URL: ${{ vars.VBR_AWS_BUILD_STATUS_API_DEVOPS }}/${{matrix.services}}
uses: informatievlaanderen/awscurl-polling-action/polling-action@main
with:
environment: tst
version: ${{ needs.release.outputs.version }}
status-url: $STATUS_URL
deploy-url: $BUILD_URL
access-key: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_DEVOPS }}
secret-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_DEVOPS }}
deploy-target: 'agb_ecs_service'
interval: 2
domain: 'basisregisters'
project: 'basisregisters'
- name: Deploy services output
shell: bash
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 }}
deploy_tasks_to_test:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_to_test_start_slack, release ]
name: Deploy to test
runs-on: ubuntu-latest
strategy:
matrix:
services: [
'integration-veka',
'integration-bosa-full-download',
'integration-data-integrity',
'integration-gtmf-meldingen'
]
steps:
- name: Deploy tasks
env:
BUILD_URL: ${{ vars.VBR_AWS_BUILD_API_DEVOPS }}/${{matrix.services}}
STATUS_URL: ${{ vars.VBR_AWS_BUILD_STATUS_API_DEVOPS }}/${{matrix.services}}
uses: informatievlaanderen/awscurl-polling-action/polling-action@main
with:
environment: tst
version: ${{ needs.release.outputs.version }}
status-url: $STATUS_URL
deploy-url: $BUILD_URL
access-key: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_DEVOPS }}
secret-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_DEVOPS }}
interval: 2
deploy-target: 'ecs_scheduled_task'
domain: 'basisregisters'
project: 'basisregisters'
- name: Deploy tasks output
shell: bash
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 }}
deploy_to_test_finish_slack:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_services_to_test, deploy_tasks_to_test ]
name: Deploy to test finished
runs-on: ubuntu-latest
steps:
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo ""$GITHUB_REPOSITORY"" | awk -F / '{print $2}' | sed -e ""s/:refs//"") >> $GITHUB_ENV
shell: bash
- name: Notify deployment finished
uses: slackapi/slack-github-action@v1.26.0
with:
channel-id: '#team-dinosaur-dev'
slack-message: Deployment of basisregisters-integration to test has finished
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
REPOSITORY_NAME: ${{ env.REPOSITORY_NAME }}
deploy_to_staging_start_slack:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_to_test_finish_slack, release ]
name: Deploy to staging started
environment: stg
runs-on: ubuntu-latest
steps:
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo ""$GITHUB_REPOSITORY"" | awk -F / '{print $2}' | sed -e ""s/:refs//"") >> $GITHUB_ENV
shell: bash
- name: Notify deployment started
uses: slackapi/slack-github-action@v1.26.0
with:
channel-id: '#team-dinosaur-dev'
slack-message: Deployment of basisregisters-integration to staging has started
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
REPOSITORY_NAME: ${{ env.REPOSITORY_NAME }}
deploy_services_to_staging:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_to_staging_start_slack, release ]
name: Deploy to services staging
runs-on: ubuntu-latest
strategy:
matrix:
services: [
'integration-suspicious-cases-api'
]
steps:
- name: Deploy services
env:
BUILD_URL: ${{ vars.VBR_AWS_BUILD_API_DEVOPS }}/${{matrix.services}}
STATUS_URL: ${{ vars.VBR_AWS_BUILD_STATUS_API_DEVOPS }}/${{matrix.services}}
uses: informatievlaanderen/awscurl-polling-action/polling-action@main
with:
environment: stg
version: ${{ needs.release.outputs.version }}
status-url: $STATUS_URL
deploy-url: $BUILD_URL
access-key: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_DEVOPS }}
secret-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_DEVOPS }}
deploy-target: 'agb_ecs_service'
interval: 2
domain: 'basisregisters'
project: 'basisregisters'
- name: Deploy services output
shell: bash
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 }}
deploy_tasks_to_staging:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_to_staging_start_slack, release ]
name: Deploy tasks to staging
runs-on: ubuntu-latest
strategy:
matrix:
services: [
'integration-veka',
'integration-bosa-full-download',
'integration-data-integrity',
'integration-gtmf-meldingen'
]
steps:
- name: Deploy tasks
env:
BUILD_URL: ${{ vars.VBR_AWS_BUILD_API_DEVOPS }}/${{matrix.services}}
STATUS_URL: ${{ vars.VBR_AWS_BUILD_STATUS_API_DEVOPS }}/${{matrix.services}}
uses: informatievlaanderen/awscurl-polling-action/polling-action@main
with:
environment: stg
version: ${{ needs.release.outputs.version }}
status-url: $STATUS_URL
deploy-url: $BUILD_URL
access-key: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_DEVOPS }}
secret-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_DEVOPS }}
interval: 2
deploy-target: 'ecs_scheduled_task'
domain: 'basisregisters'
project: 'basisregisters'
- name: Deploy tasks output
shell: bash
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 }}
deploy_to_staging_finish_slack:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_services_to_staging, deploy_tasks_to_staging ]
name: Deploy to staging finished
runs-on: ubuntu-latest
steps:
- name: Parse repository name
run: echo REPOSITORY_NAME=$(echo ""$GITHUB_REPOSITORY"" | awk -F / '{print $2}' | sed -e ""s/:refs//"") >> $GITHUB_ENV
shell: bash
- name: Notify deployment finished
uses: slackapi/slack-github-action@v1.26.0
with:
channel-id: '#team-dinosaur-dev'
slack-message: Deployment of basisregisters-integration to staging has finished
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
REPOSITORY_NAME: ${{ env.REPOSITORY_NAME }}