Release #677
This file contains hidden or 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.NPM_WEBCOMP_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: '22.x' | |
| - name: Node version | |
| shell: bash | |
| run: node --version | |
| - name: Install NPM dependencies | |
| shell: bash | |
| run: npm ci | |
| env: | |
| NPM_TOKEN: ${{ secrets.NPM_WEBCOMP_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 "version=$(cat semver)" >> "$GITHUB_OUTPUT" | |
| echo SA_PASSWORD=${{ secrets.SA_PASSWORD }} >> $GITHUB_ENV | |
| shell: bash | |
| build-backoffice-api: | |
| name: Build BackOffice Api | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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-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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| 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: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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-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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-backoffice-extracthost: | |
| name: Build BackOffice Extract Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-backoffice-commandhost: | |
| name: Build BackOffice Command Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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-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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-adminhost: | |
| name: Build Admin Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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.Empty.Tests | |
| build-project: RoadRegistry.AdminHost | |
| semver: ${{ needs.set-release-version.outputs.version }} | |
| dotnet-version: ${{ vars.VBR_DOTNET_VERSION_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-jobs-processor: | |
| name: Build Jobs Processor | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-projector: | |
| name: Build Projector | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-projectionhost-editor: | |
| name: Build Editor Projection Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-projectionhost-integration: | |
| name: Build Integration Projection Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-projectionhost-product: | |
| name: Build Product Projection Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-publishhost-product: | |
| name: Build Product Publish Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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-publishhost-image.tar | |
| image-name: product-publishhost | |
| test-project: RoadRegistry.Empty.Tests | |
| build-project: RoadRegistry.Product.PublishHost | |
| semver: ${{ needs.set-release-version.outputs.version }} | |
| dotnet-version: ${{ vars.VBR_DOTNET_VERSION_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-projectionhost-producersnapshot: | |
| name: Build Producer Snapshot Projection Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-synchost: | |
| name: Build Sync Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-projectionhost-wms: | |
| name: Build WMS Projection Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-projectionhost-wfs: | |
| name: Build WFS Projection Host | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-image-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| pack-backoffice-api: | |
| name: Pack BackOffice Api | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/pack-v2.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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-lambda-backoffice: | |
| name: Build Lambda BackOffice | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-lambda-arm64.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-lambda-sqsbackofficefunction-image.tar | |
| image-name: lambda-sqsbackofficefunction | |
| 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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| secrets: inherit | |
| build-lambda-snapshot: | |
| name: Build Lambda Snapshot | |
| uses: Informatievlaanderen/build-pipeline/.github/workflows/build-lambda-arm64.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-lambda-sqssnapshotfunction-image.tar | |
| image-name: lambda-sqssnapshotfunction | |
| 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_9 }} | |
| prerestore-script: ./pre-restore.sh | |
| use-packages-lock: false | |
| 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-api, | |
| 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: Setup .NET Core | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: ${{ vars.VBR_DOTNET_VERSION_9 }} | |
| - name: .NET version | |
| shell: bash | |
| run: dotnet --info | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22.x' | |
| - name: Setup Python | |
| uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.x' | |
| - name: Node version | |
| shell: bash | |
| run: node --version | |
| - 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 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: 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 "version=$(cat semver)" >> "$GITHUB_OUTPUT" | |
| 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_9 }} | |
| - name: .NET version | |
| shell: bash | |
| run: dotnet --info | |
| - 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: Publish packages to NuGet | |
| shell: bash | |
| run: | | |
| dotnet nuget push ~/Be.Vlaanderen.Basisregisters.RoadRegistry.BackOffice.Api.$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 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: Restore build-pipeline | |
| shell: bash | |
| run: ./pre-restore.sh | |
| - name: Publish to Confluence | |
| shell: bash | |
| run: bash ./.build/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', | |
| 'product-publishhost', | |
| 'projector', | |
| 'synchost', | |
| 'wfs-projectionhost', | |
| 'wms-projectionhost', | |
| 'lambda-sqsbackofficefunction', | |
| 'lambda-sqssnapshotfunction' | |
| ] | |
| 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 ] | |
| 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 ] | |
| name: Deploy tasks to test | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| services: [ | |
| 'road-adminhost', | |
| 'road-jobs-processor', | |
| 'road-product-publishhost' | |
| ] | |
| 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-v4@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: Notify deployment started | |
| uses: slackapi/slack-github-action@v2 | |
| with: | |
| method: chat.postMessage | |
| token: ${{ secrets.VBR_SLACK_BOT_TOKEN }} | |
| payload: | | |
| channel: '#team-dinosaur-dev' | |
| text: '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 }}' | |
| 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: Notify deployment succeeded | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Notify deployment succeeded | |
| uses: slackapi/slack-github-action@v2 | |
| with: | |
| method: chat.postMessage | |
| token: ${{ secrets.VBR_SLACK_BOT_TOKEN }} | |
| payload: | | |
| channel: '#team-dinosaur-dev' | |
| text: ':white_check_mark: Deployment of road-registry ${{ needs.release.outputs.version }} to tst has finished.' | |
| build_notify_skipped: | |
| if: ${{ (github.repository_owner == 'Informatievlaanderen') && (needs.set-release-version.outputs.version == 'none') }} | |
| name: Notify build skipped | |
| needs: [ set-release-version ] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Notify build skipped | |
| id: slack | |
| uses: slackapi/slack-github-action@v2 | |
| with: | |
| method: chat.postMessage | |
| token: ${{ secrets.VBR_SLACK_BOT_TOKEN }} | |
| payload: | | |
| channel: '#team-dinosaur-dev' | |
| text: ':x: Build of road-registry has been skipped. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' | |
| - 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/slack-github-action@v2 | |
| with: | |
| method: chat.postMessage | |
| token: ${{ secrets.VBR_SLACK_BOT_TOKEN }} | |
| payload: | | |
| channel: '#team-dinosaur-dev' | |
| text: ':x: Release of road-registry has been skipped. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' | |
| - 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/slack-github-action@v2 | |
| with: | |
| method: chat.postMessage | |
| token: ${{ secrets.VBR_SLACK_BOT_TOKEN }} | |
| payload: | | |
| channel: '#team-dinosaur-dev' | |
| text: ':x: Release of road-registry has failed. View run at ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}' | |
| 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/slack-github-action@v2 | |
| with: | |
| method: chat.postMessage | |
| token: ${{ secrets.VBR_SLACK_BOT_TOKEN }} | |
| payload: | | |
| channel: '#team-dinosaur-dev' | |
| text: ':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 }}' |