Release #481
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 }} |