Skip to content

Release

Release #481

Workflow file for this run

name: 2. Release
run-name: Release
on:
workflow_dispatch:
concurrency: Release
env:
SA_PASSWORD: ${{ secrets.SA_PASSWORD }}
NPM_TOKEN: ${{ secrets.VBR_WEBCOMP_NPM_TOKEN }}
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: Delete huge unnecessary tools folder
run: rm -rf /opt/hostedtoolcache
- 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
env:
NPM_TOKEN: ${{ secrets.VBR_WEBCOMP_NPM_TOKEN }}
- name: Run Semantic Release Dry-Run
shell: bash
run: npx semantic-release --dry-run
env:
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_BUILD_DOCKER_REGISTRY_TST }}
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
echo SA_PASSWORD=${{ secrets.SA_PASSWORD }} >> $GITHUB_ENV
shell: bash
build-backoffice-api:
name: Build BackOffice Api
uses: ./.github/workflows/build-image-sql.yml
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/road-registry
image-file: rr-backoffice-api-image.tar
image-name: backoffice-api
test-project: RoadRegistry.BackOffice.Api.Tests
build-project: RoadRegistry.BackOffice.Api
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-backoffice-ui:
name: Build BackOffice UI
uses: ./.github/workflows/build-image-nodejs.yml
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/road-registry
image-file: rr-backoffice-ui-image.tar
image-name: backoffice-ui
build-project: RoadRegistry.BackOffice.UI
semver: ${{ needs.set-release-version.outputs.version }}
secrets: inherit
build-backoffice-eventhost:
name: Build BackOffice Event Host
uses: ./.github/workflows/build-image-sql.yml
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/road-registry
image-file: rr-backoffice-eventhost-image.tar
image-name: backoffice-eventhost
test-project: RoadRegistry.BackOffice.EventHost.Tests
build-project: RoadRegistry.BackOffice.EventHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-backoffice-extracthost:
name: Build BackOffice Extract Host
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 }}/road-registry
image-file: rr-backoffice-extracthost-image.tar
image-name: backoffice-extracthost
test-project: RoadRegistry.BackOffice.ExtractHost.Tests
build-project: RoadRegistry.BackOffice.ExtractHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-backoffice-commandhost:
name: Build BackOffice Command Host
uses: ./.github/workflows/build-image-sql.yml
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
registry: ${{ vars.VBR_DEVOPS_DOCKER_REGISTRY }}/road-registry
image-file: rr-backoffice-commandhost-image.tar
image-name: backoffice-commandhost
test-project: RoadRegistry.BackOffice.CommandHost.Tests
build-project: RoadRegistry.BackOffice.CommandHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-adminhost:
name: Build Admin Host
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 }}/road-registry
image-file: rr-adminhost-image.tar
image-name: adminhost
test-project: RoadRegistry.AdminHost.Tests
build-project: RoadRegistry.AdminHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-jobs-processor:
name: Build Jobs Processor
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 }}/road-registry
image-file: rr-jobs-processor-image.tar
image-name: jobs-processor
test-project: RoadRegistry.Jobs.Processor.Tests
build-project: RoadRegistry.Jobs.Processor
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-projector:
name: Build Projector
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 }}/road-registry
image-file: rr-projector-image.tar
image-name: projector
test-project: RoadRegistry.Projector.Tests
build-project: RoadRegistry.Projector
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-projectionhost-editor:
name: Build Editor Projection Host
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 }}/road-registry
image-file: rr-editor-projectionhost-image.tar
image-name: editor-projectionhost
test-project: RoadRegistry.Editor.ProjectionHost.Tests
build-project: RoadRegistry.Editor.ProjectionHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-projectionhost-integration:
name: Build Integration Projection Host
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 }}/road-registry
image-file: rr-integration-projectionhost-image.tar
image-name: integration-projectionhost
test-project: RoadRegistry.Integration.ProjectionHost.Tests
build-project: RoadRegistry.Integration.ProjectionHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-projectionhost-product:
name: Build Product Projection Host
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 }}/road-registry
image-file: rr-product-projectionhost-image.tar
image-name: product-projectionhost
test-project: RoadRegistry.Product.ProjectionHost.Tests
build-project: RoadRegistry.Product.ProjectionHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-projectionhost-producersnapshot:
name: Build Producer Snapshot Projection Host
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 }}/road-registry
image-file: rr-producer-snapshot-projectionhost-image.tar
image-name: producer-snapshot-projectionhost
test-project: RoadRegistry.Producer.Snapshot.ProjectionHost.Tests
build-project: RoadRegistry.Producer.Snapshot.ProjectionHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-synchost:
name: Build Sync Host
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 }}/road-registry
image-file: rr-synchost-image.tar
image-name: synchost
test-project: RoadRegistry.SyncHost.Tests
build-project: RoadRegistry.SyncHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-projectionhost-wms:
name: Build WMS Projection Host
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 }}/road-registry
image-file: rr-wms-projectionhost-image.tar
image-name: wms-projectionhost
test-project: RoadRegistry.Wms.ProjectionHost.Tests
build-project: RoadRegistry.Wms.ProjectionHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-projectionhost-wfs:
name: Build WFS Projection Host
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 }}/road-registry
image-file: rr-wfs-projectionhost-image.tar
image-name: wfs-projectionhost
test-project: RoadRegistry.Wfs.ProjectionHost.Tests
build-project: RoadRegistry.Wfs.ProjectionHost
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
pack-backoffice:
name: Pack BackOffice
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.RoadRegistry.BackOffice
test-project: RoadRegistry.Empty.Tests
build-project: RoadRegistry.BackOffice
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
pack-backoffice-abstractions:
name: Pack BackOffice 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.RoadRegistry.BackOffice.Abstractions
test-project: RoadRegistry.Empty.Tests
build-project: RoadRegistry.BackOffice.Abstractions
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
pack-backoffice-api:
name: Pack BackOffice Api
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.RoadRegistry.BackOffice.Api
test-project: RoadRegistry.Empty.Tests
build-project: RoadRegistry.BackOffice.Api
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
pack-backoffice-ziparchivewriters:
name: Pack BackOffice ZipArchive Writers
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.RoadRegistry.BackOffice.ZipArchiveWriters
test-project: RoadRegistry.Empty.Tests
build-project: RoadRegistry.BackOffice.ZipArchiveWriters
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
pack-projector:
name: Pack Projector
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.RoadRegistry.Projector
test-project: RoadRegistry.Empty.Tests
build-project: RoadRegistry.Projector
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-lambda-backoffice:
name: Build Lambda BackOffice
uses: Informatievlaanderen/build-pipeline/.github/workflows/build-lambda.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
lambda-name: lambda-backoffice
test-project: RoadRegistry.BackOffice.Handlers.Sqs.Lambda.Tests
build-project: RoadRegistry.BackOffice.Handlers.Sqs.Lambda
semver: ${{ needs.set-release-version.outputs.version }}
dotnet-version: ${{ vars.VBR_DOTNET_VERSION_8 }}
secrets: inherit
build-lambda-snapshot:
name: Build Lambda Snapshot
uses: Informatievlaanderen/build-pipeline/.github/workflows/build-lambda.yml@main
needs: [ set-release-version ]
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version != 'none') }}
with:
lambda-name: lambda-snapshot
test-project: RoadRegistry.Snapshot.Handlers.Sqs.Lambda.Tests
build-project: RoadRegistry.Snapshot.Handlers.Sqs.Lambda
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,
pack-backoffice,
pack-backoffice-abstractions,
pack-backoffice-api,
pack-backoffice-ziparchivewriters,
pack-projector,
build-adminhost,
build-jobs-processor,
build-backoffice-api,
build-backoffice-commandhost,
build-backoffice-eventhost,
build-backoffice-extracthost,
build-backoffice-ui,
build-projector,
build-projectionhost-editor,
build-projectionhost-integration,
build-projectionhost-product,
build-projectionhost-producersnapshot,
build-synchost,
build-projectionhost-wfs,
build-projectionhost-wms,
build-lambda-backoffice,
build-lambda-snapshot
]
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 .NET Core
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
8.0.202
${{ vars.VBR_DOTNET_VERSION_8 }}
- 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 BackOffice
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice-${{ needs.set-release-version.outputs.version }}
path: dist/nuget/
- name: Download NuGet BackOffice Abstractions
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.Abstractions-${{ needs.set-release-version.outputs.version }}
path: dist/nuget/
- name: Download NuGet BackOffice Api
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.Api-${{ needs.set-release-version.outputs.version }}
path: dist/nuget/
- name: Download NuGet BackOffice ZipArchiveWriters
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.ZipArchiveWriters-${{ needs.set-release-version.outputs.version }}
path: dist/nuget/
- name: Download NuGet Projector
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.Projector-${{ needs.set-release-version.outputs.version }}
path: dist/nuget/
- name: Run Semantic Release
shell: bash
run: npx semantic-release
env:
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_BUILD_DOCKER_REGISTRY_TST }}
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
upload-lambda:
name: Upload Lambda
needs: [ release ]
runs-on: ubuntu-latest
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.release.outputs.version != 'none') }}
steps:
- name: Download Lambda Backoffice
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: lambda-backoffice-${{ needs.release.outputs.version }}
path: ~/backoffice/
- name: Download Lambda Snapshot
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: lambda-snapshot-${{ needs.release.outputs.version }}
path: ~/snapshot/
- name: Configure AWS credentials (DevOps)
uses: aws-actions/[email protected]
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: Push Lambda functions to S3 DevOps
shell: bash
run: |
echo Push Lambda functions to S3 DevOps
aws s3 cp ~/backoffice/lambda.zip s3://s3-vbr-lam-rr-sqsbackofficefunction-362233117987/$SEMVER/lambda.zip
aws s3 cp ~/snapshot/lambda.zip s3://s3-vbr-lam-rr-sqssnapshotfunction-362233117987/$SEMVER/lambda.zip
env:
SEMVER: ${{ needs.release.outputs.version }}
- name: Configure AWS credentials (Production)
uses: aws-actions/[email protected]
with:
aws-access-key-id: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_NEWPRD }}
aws-secret-access-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_NEWPRD }}
aws-region: ${{ secrets.VBR_AWS_REGION_PRD }}
- name: Login to Amazon ECR (Production)
uses: aws-actions/amazon-ecr-login@v2
- name: Push Lambda functions to S3 (Production)
shell: bash
run: |
aws s3 cp ~/backoffice/lambda.zip s3://077849980894-vbr-prd-lam-rr-sqsbackoffice/$SEMVER/lambda.zip
aws s3 cp ~/snapshot/lambda.zip s3://077849980894-vbr-prd-lam-rr-sqssnapshot/$SEMVER/lambda.zip
env:
SEMVER: ${{ needs.release.outputs.version }}
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 'backoffice'
uses: actions/download-artifact@v4
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice-${{ needs.release.outputs.version }}
path: ~/
- name: Download NuGet package 'backoffice-abstractions'
uses: actions/download-artifact@v4
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.Abstractions-${{ needs.release.outputs.version }}
path: ~/
- name: Download NuGet package 'backoffice-api'
uses: actions/download-artifact@v4
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.Api-${{ needs.release.outputs.version }}
path: ~/
- name: Download NuGet package 'backoffice-ziparchivewriters'
uses: actions/download-artifact@v4
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.ZipArchiveWriters-${{ needs.release.outputs.version }}
path: ~/
- name: Download NuGet package 'projector'
uses: actions/download-artifact@v4
with:
name: nuget-Be.Vlaanderen.Basisregisters.RoadRegistry.Projector-${{ needs.release.outputs.version }}
path: ~/
- name: Publish packages to NuGet
shell: bash
run: |
dotnet nuget push ~/Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.$SEMVER.nupkg --source nuget.org --api-key $NUGET_API_KEY
dotnet nuget push ~/Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.Abstractions.$SEMVER.nupkg --source nuget.org --api-key $NUGET_API_KEY
dotnet nuget push ~/Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.Api.$SEMVER.nupkg --source nuget.org --api-key $NUGET_API_KEY
dotnet nuget push ~/Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.ZipArchiveWriters.$SEMVER.nupkg --source nuget.org --api-key $NUGET_API_KEY
dotnet nuget push ~/Be.Vlaanderen.Basisregisters.RoadRegistry.Projector.$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 }}
# - name: Create Jira Release
# 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: Road
# JIRA_PROJECT: WR
# JIRA_VERSION: ${{ needs.release.outputs.version }}
push_images:
if: needs.release.outputs.version != 'none'
needs: [ release ]
name: Push images
runs-on: ubuntu-latest
strategy:
matrix:
image: [
'adminhost',
'jobs-processor',
'backoffice-api',
'backoffice-commandhost',
'backoffice-eventhost',
'backoffice-extracthost',
'backoffice-ui',
'editor-projectionhost',
'integration-projectionhost',
'producer-snapshot-projectionhost',
'product-projectionhost',
'projector',
'synchost',
'wfs-projectionhost',
'wms-projectionhost'
]
steps:
- name: Configure AWS credentials
uses: aws-actions/[email protected]
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
uses: aws-actions/amazon-ecr-login@v2
# Download artifact
- name: Download artifact
uses: actions/download-artifact@v4
continue-on-error: false
with:
name: ${{ matrix.image }}-${{ needs.release.outputs.version }}
path: ~/
# Load artifact
- name: Load artifact
shell: bash
run: |
echo rr-$IMAGE-image.tar
docker image load -i ~/rr-$IMAGE-image.tar
env:
IMAGE: ${{ matrix.image }}
- name: Push artifacts to ECR
shell: bash
run: |
echo $IMAGE:$SEMVER
docker push $BUILD_DOCKER_REGISTRY/road-registry/$IMAGE:$SEMVER
env:
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_DEVOPS_DOCKER_REGISTRY }}
IMAGE: ${{ matrix.image }}
SEMVER: ${{ needs.release.outputs.version }}
WORKSPACE: ${{ github.workspace }}
deploy_services_to_test:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ push_images, release, upload-lambda ]
name: Deploy services to test
runs-on: ubuntu-latest
strategy:
matrix:
services: [
'road-backoffice-api',
'road-backoffice-commandhost',
'road-backoffice-eventhost',
'road-backoffice-extracthost',
'road-backoffice-ui',
'road-editor-projectionhost',
'road-producer-snapshot-projectionhost',
'road-product-projectionhost',
'road-projector',
'road-synchost',
'road-wfs-projectionhost',
'road-wms-projectionhost'
]
steps:
- name: CD 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 }}
interval: 2
deploy-target: 'agb_ecs_service'
domain: 'basisregisters'
project: 'basisregisters'
- name: Output CD services
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: [ push_images, release, upload-lambda ]
name: Deploy tasks to test
runs-on: ubuntu-latest
strategy:
matrix:
services: [
'road-adminhost',
'road-jobs-processor'
]
steps:
- name: CD 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 }}
interval: 2
deploy-target: 'ecs_scheduled_task'
domain: 'basisregisters'
project: 'basisregisters'
- name: Output CD tasks
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_lambda_to_test:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_services_to_test, deploy_tasks_to_test, release ]
name: Deploy lambda(s) to test
runs-on: ubuntu-latest
strategy:
matrix:
functions: [
'rr-sqsbackofficefunction',
'rr-sqssnapshotfunction'
]
steps:
- name: Promote Lambda(s)
uses: Informatievlaanderen/build-pipeline/.github/actions/deploy-lambda@main
with:
function-name: ${{ matrix.functions }}
deploy-url: ${{ vars.VBR_AWS_DEPLOY_LAMBDA_DEVOPS_BASEURL }}
access-key-id: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_DEVOPS }}
secret-access-key-id: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_DEVOPS }}
region: ${{ secrets.VBR_AWS_REGION_PRD }}
version: ${{ needs.release.outputs.version }}
environment: tst
deploy_to_test_start_slack:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ release, push_images ]
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/[email protected]
with:
channel-id: '#team-wegenregister-dev'
slack-message: Deployment of road-registry ${{ needs.release.outputs.version }} to tst has started. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
REPOSITORY_NAME: ${{ env.REPOSITORY_NAME }}
system_healthcheck:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ deploy_lambda_to_test ]
name: System healthcheck
runs-on: ubuntu-latest
steps:
- name: Run
run: |
URL=$BACKOFFICE_API_URL/v1/system/healthcheck
aws configure set default.aws_access_key_id $ACCESS_KEY_ID
aws configure set default.aws_secret_access_key $SECRET_ACCESS_KEY_ID
aws configure set default.region $REGION
aws configure set default.role_session_name "Pipeline"
aws configure set region $REGION --profile cross-account
aws configure set role_arn arn:aws:iam::$ACCOUNT_ID:role/bastion-ssm-send-command --profile cross-account
aws configure set source_profile default --profile cross-account
echo $URL
COMMAND_ID=$(aws ssm send-command --profile cross-account --instance-id $INSTANCE_ID --document-name AWS-RunShellScript --parameters "{\"commands\":[\"#!/bin/bash\",\"curl -X POST $URL -H 'x-api-key: $ROAD_API_KEY' --fail\"]}" --query 'Command.CommandId' --output text)
for i in {1..120}
do
status=$(aws ssm get-command-invocation --profile cross-account --instance-id $INSTANCE_ID --command-id $COMMAND_ID --query 'Status' --output text)
if [[ "$status" == "Failed" ]]; then
exit 1
fi
echo $status
if [[ "$status" == "Success" ]]; then
break
fi
sleep 1
done
if [[ "$status" == "InProgress" ]]; then
echo "Timed out"
exit 1
fi
response=$(aws ssm get-command-invocation --profile cross-account --instance-id $INSTANCE_ID --command-id $COMMAND_ID --query 'StandardOutputContent' --output text)
echo "$response"
if echo "$response" | grep -q "unhealthy"; then
echo "System is unhealthy"
exit 1
fi
if echo "$response" | grep -q "healthy"; then
echo "System is healthy"
exit 0
fi
exit 1
shell: bash
env:
ACCESS_KEY_ID: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_DEVOPS }}
SECRET_ACCESS_KEY_ID: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_DEVOPS }}
REGION: ${{ secrets.VBR_AWS_REGION_PRD }}
INSTANCE_ID: ${{ secrets.AWS_BASTION_ID_TST }}
ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID_TST }}
BACKOFFICE_API_URL: ${{ vars.BACKOFFICE_API_URL_TST }}
ROAD_API_KEY: ${{ secrets.HEALTHCHECK_APIKEY }}
deploy_to_test_finish_slack:
if: github.repository_owner == 'Informatievlaanderen'
needs: [ release, system_healthcheck ]
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/[email protected]
with:
channel-id: '#team-wegenregister-dev'
slack-message: ":white_check_mark: Deployment of road-registry ${{ needs.release.outputs.version }} to tst has finished."
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
REPOSITORY_NAME: ${{ env.REPOSITORY_NAME }}
build_notify_skipped:
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version == 'none') }}
name: Notify release skipped
needs: [ set-release-version ]
runs-on: ubuntu-latest
steps:
- name: Notify release skipped
id: slack
uses: slackapi/[email protected]
with:
channel-id: '#team-wegenregister-dev'
slack-message: ":x: Release of road-registry has been skipped. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
- name: Fail release
run: exit 1
release_notify_skipped:
if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.release.outputs.version == 'none') }}
name: Notify release skipped
needs: [ release ]
runs-on: ubuntu-latest
steps:
- name: Notify release skipped
id: slack
uses: slackapi/[email protected]
with:
channel-id: '#team-wegenregister-dev'
slack-message: ":x: Release of road-registry has been skipped. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
- name: Fail release
run: exit 1
release_notify_failure:
if: ${{ github.repository_owner == 'Informatievlaanderen' && failure() }}
name: Notify release failed
runs-on: ubuntu-latest
needs: [ release ]
steps:
- name: Notify release failed
id: slack
uses: slackapi/[email protected]
with:
channel-id: '#team-wegenregister-dev'
slack-message: ":x: Release of road-registry has failed. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}
deployment_test_notify_failure:
if: ${{ github.repository_owner == 'Informatievlaanderen' && failure() && needs.release.outputs.version && needs.release.outputs.version != 'none' }}
name: Notify deployment failed
runs-on: ubuntu-latest
needs: [ release, system_healthcheck ]
steps:
- name: Notify deployment failed
id: slack
uses: slackapi/[email protected]
with:
channel-id: '#team-wegenregister-dev'
slack-message: ":x: Deployment of road-registry ${{ needs.release.outputs.version }} to tst has failed. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
env:
SLACK_BOT_TOKEN: ${{ secrets.VBR_SLACK_BOT_TOKEN }}
SLACK_CHANNEL: ${{ secrets.VBR_NOTIFIER_CHANNEL_NAME }}