fix: or-2282 add source and destination docker registry to main workflow #816
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: CI/CD | |
on: | |
push: | |
branches: [ main ] | |
workflow_dispatch: | |
concurrency: CI | |
jobs: | |
set-release-version: | |
if: github.repository_owner == 'Informatievlaanderen' | |
name: Decide next version | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.set-version.outputs.version }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v3 | |
- name: Setup Node.js | |
uses: ./.github/actions/setup-nodejs | |
- name: Run Semantic Release dry-run | |
shell: bash | |
run: npx semantic-release --dry-run | |
env: | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_BUILD_DOCKER_REGISTRY }} | |
GITHUB_TOKEN: ${{ secrets.VBR_ACTIONS_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 | |
test: | |
if: github.repository_owner == 'Informatievlaanderen' | |
name: Test | |
runs-on: ubuntu-latest | |
needs: [ set-release-version ] | |
services: | |
sqlserver: | |
image: mcr.microsoft.com/mssql/server:latest | |
env: | |
ACCEPT_EULA: Y | |
SA_PASSWORD: E@syP@ssw0rd | |
MSSQL_TCP_PORT: 21433 | |
ports: | |
- 21433:21433 | |
acm: | |
image: ghcr.io/informatievlaanderen/acmidm:1.253.0 | |
ports: | |
- 5050:80 | |
wiremock: | |
image: ghcr.io/informatievlaanderen/wiremock:main | |
ports: | |
- 8080:8080 | |
opensearch: | |
image: opensearchproject/opensearch:1.1.0 | |
env: | |
discovery.type: single-node | |
DISABLE_SECURITY_PLUGIN: true | |
ports: | |
- 9200:9200 | |
- 9600:9600 | |
outputs: | |
version: ${{ steps.set-version.outputs.version }} | |
test: "test" | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v3 | |
- name: Setup .NET Core | |
uses: ./.github/actions/setup-dotnet | |
- name: Parse repository name | |
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV | |
shell: bash | |
- name: Test Solution | |
shell: bash | |
run: ./build.sh Test_Solution | |
build-api: | |
name: Build api | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_Api | |
build-project: OrganisationRegistry.Api | |
image-file: api.tar | |
image-name: api | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-agentschapzorgengezondheidftpdump: | |
name: Build batch-agentschapzorgengezondheidftpdump | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_AgentschapZorgEnGezondheid | |
build-project: OrganisationRegistry.AgentschapZorgEnGezondheid.FtpDump | |
image-file: batch-agentschapzorgengezondheidftpdump.tar | |
image-name: batch-agentschapzorgengezondheidftpdump | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-vlaanderenbe: | |
name: Build batch-vlaanderenbe | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_VlaanderenBeNotifier | |
build-project: OrganisationRegistry.VlaanderenBeNotifier | |
image-file: batch-vlaanderenbe.tar | |
image-name: batch-vlaanderenbe | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-projections-elasticsearch: | |
name: Build elasticsearch projections | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_ElasticSearch | |
build-project: OrganisationRegistry.ElasticSearch.Projections | |
image-file: projections-elasticsearch.tar | |
image-name: projections-elasticsearch | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-projections-delegations: | |
name: Build delegations | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_Delegations | |
build-project: OrganisationRegistry.Projections.Delegations | |
image-file: projections-delegations.tar | |
image-name: projections-delegations | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-projections-reporting: | |
name: Build reporting | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_Reporting | |
build-project: OrganisationRegistry.Projections.Reporting | |
image-file: projections-reporting.tar | |
image-name: projections-reporting | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-kbo-mutations: | |
name: Build kbo-mutations | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_KboMutations | |
build-project: OrganisationRegistry.KboMutations | |
image-file: kbo-mutations.tar | |
image-name: kbo-mutations | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-rebuilder: | |
name: Build rebuilder | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ test, set-release-version ] | |
with: | |
build-target: Containerize_Rebuilder | |
build-project: OrganisationRegistry.Rebuilder | |
image-file: rebuilder.tar | |
image-name: rebuilder | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-ui: | |
name: Build site | |
uses: ./.github/workflows/build-site-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ set-release-version ] | |
with: | |
build-target: Containerize_Site | |
image-file: ui.tar | |
image-name: ui | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
build-acm-idm: | |
name: Build acm idm | |
uses: ./.github/workflows/build-image.yml | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
needs: [ set-release-version ] | |
with: | |
build-target: Containerize_AcmIdm | |
build-project: IdentityServer | |
image-file: acmidm.tar | |
image-name: acmidm | |
semver: ${{ needs.set-release-version.outputs.version }} | |
secrets: inherit | |
release: | |
if: github.repository_owner == 'Informatievlaanderen' && needs.set-release-version.outputs.version != 'none' | |
name: Release | |
runs-on: ubuntu-latest | |
needs: | |
- build-api | |
- build-agentschapzorgengezondheidftpdump | |
- build-vlaanderenbe | |
- build-projections-elasticsearch | |
- build-projections-delegations | |
- build-projections-reporting | |
- build-kbo-mutations | |
- build-rebuilder | |
- build-ui | |
- set-release-version | |
outputs: | |
version: ${{ steps.set-version.outputs.version }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
- name: Setup nodejs | |
uses: ./.github/actions/setup-nodejs | |
- name: Generate Token | |
id: generate-token # Add an ID to this step for reference | |
run: node .github/generate-token.js | |
env: | |
APP_ID: ${{ secrets.MYBOT_APP_ID }} | |
PRIVATE_KEY: ${{ secrets.MYBOT_PRIVATE_KEY }} | |
- name: Delete huge unnecessary tools folder | |
run: rm -rf /opt/hostedtoolcache | |
- name: Checkout Code | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ env.installationToken }} | |
- name: Parse repository name | |
run: echo REPOSITORY_NAME=$(echo "$GITHUB_REPOSITORY" | awk -F / '{print $2}' | sed -e "s/:refs//") >> $GITHUB_ENV | |
shell: bash | |
- name: Install NPM dependencies | |
shell: bash | |
run: npm install --legacy-peer-deps | |
- name: Run Semantic Release | |
shell: bash | |
run: npx semantic-release | |
env: | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_BUILD_DOCKER_REGISTRY }} | |
GITHUB_TOKEN: ${{ env.installationToken }} | |
GIT_COMMIT: ${{ github.sha }} | |
GIT_USERNAME: ${{ env.installationToken }} | |
GIT_AUTHOR_NAME: ${{ secrets.VBR_GIT_USER }} | |
GIT_COMMITTER_NAME: ${{ secrets.VBR_GIT_USER }} | |
GIT_EMAIL: ${{ secrets.VBR_GIT_EMAIL }} | |
GIT_AUTHOR_EMAIL: ${{ secrets.VBR_GIT_EMAIL }} | |
GIT_COMMITTER_EMAIL: ${{ secrets.VBR_GIT_EMAIL }} | |
IGNORE_ES_TESTS: FALSE | |
- 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 | |
- name: Debug Output | |
shell: bash | |
run: | | |
echo 'BEGIN VERSION' | |
echo ${{ steps.set-version.outputs.version }} | |
echo 'END VERSION' | |
publish_to_atlassian: | |
if: needs.release.outputs.version != 'none' | |
needs: [ release ] | |
name: Publish to Atlassian | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v3 | |
- 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 Python | |
uses: ./.github/actions/setup-python | |
- name: Cache Paket | |
uses: ./.github/actions/cache-paket | |
- name: Publish to Confluence | |
if: needs.release.outputs.version != 'none' | |
shell: bash | |
run: ./packages/Be.Vlaanderen.Basisregisters.Build.Pipeline/Content/ci-confluence.sh | |
env: | |
CONFLUENCE_TITLE: ${{ env.REPOSITORY_NAME }} | |
CONFLUENCE_USERNAME: ${{ secrets.VBR_CONFLUENCE_USER }} | |
CONFLUENCE_PASSWORD: ${{ secrets.VBR_CONFLUENCE_PASSWORD }} | |
- name: Create Jira Release | |
if: needs.release.outputs.version != 'none' | |
shell: bash | |
run: ./packages/Be.Vlaanderen.Basisregisters.Build.Pipeline/Content/ci-jira.sh | |
env: | |
CONFLUENCE_TITLE: ${{ env.REPOSITORY_NAME }} | |
CONFLUENCE_USERNAME: ${{ secrets.VBR_CONFLUENCE_USER }} | |
CONFLUENCE_PASSWORD: ${{ secrets.VBR_CONFLUENCE_PASSWORD }} | |
JIRA_PREFIX: Association | |
JIRA_PROJECT: OR | |
JIRA_VERSION: ${{ needs.release.outputs.version }} | |
push_images_to_staging: | |
if: needs.release.outputs.version != 'none' | |
needs: [ release ] | |
name: Push images to Staging | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
image: [ | |
'api', | |
'batch-agentschapzorgengezondheidftpdump', | |
'batch-vlaanderenbe', | |
'projections-elasticsearch', | |
'projections-delegations', | |
'projections-reporting', | |
'kbo-mutations', | |
'ui' | |
] | |
steps: | |
- name: Configure AWS credentials (Staging) | |
if: needs.release.outputs.version != 'none' | |
uses: aws-actions/[email protected] | |
with: | |
aws-access-key-id: ${{ secrets.VBR_AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{ secrets.VBR_AWS_REGION }} | |
- name: Login to Amazon ECR | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
continue-on-error: false | |
with: | |
name: ${{ matrix.image }} | |
path: ~/artifacts | |
- name: Show images | |
shell: bash | |
run: docker images | |
- name: Load artifact | |
shell: bash | |
run: | | |
docker image load -i ~/artifacts/$IMAGE.tar | |
env: | |
IMAGE: ${{ matrix.image }} | |
- name: Show images | |
shell: bash | |
run: docker images | |
- name: Push artifacts to ECR | |
shell: bash | |
run: | | |
echo $IMAGE:$SEMVER | |
docker push $BUILD_DOCKER_REGISTRY/organisation-registry/$IMAGE:$SEMVER | |
env: | |
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_BUILD_DOCKER_REGISTRY }} | |
IMAGE: ${{ matrix.image }} | |
SEMVER: ${{ needs.release.outputs.version }} | |
WORKSPACE: ${{ github.workspace }} | |
push_images_to_production: | |
if: needs.release.outputs.version != 'none' | |
needs: [ release ] | |
name: Push images to Production | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
image: [ | |
'api', | |
'batch-agentschapzorgengezondheidftpdump', | |
'batch-vlaanderenbe', | |
'projections-elasticsearch', | |
'projections-delegations', | |
'projections-reporting', | |
'kbo-mutations', | |
'ui' | |
] | |
steps: | |
- name: Configure AWS credentials (Production) | |
if: needs.release.outputs.version != 'none' | |
uses: aws-actions/[email protected] | |
with: | |
aws-access-key-id: ${{ secrets.VBR_AWS_ACCESS_KEY_ID_PRD }} | |
aws-secret-access-key: ${{ secrets.VBR_AWS_SECRET_ACCESS_KEY_PRD }} | |
aws-region: ${{ secrets.VBR_AWS_REGION_PRD }} | |
- name: Login to Amazon ECR | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
continue-on-error: false | |
with: | |
name: ${{ matrix.image }} | |
path: ~/artifacts | |
- name: Show images | |
shell: bash | |
run: docker images | |
- name: Load artifact | |
shell: bash | |
run: | | |
docker image load -i ~/artifacts/$IMAGE.tar | |
env: | |
IMAGE: ${{ matrix.image }} | |
- name: Show images | |
shell: bash | |
run: docker images | |
- name: Push artifacts to ECR | |
shell: bash | |
run: | | |
echo $IMAGE:$SEMVER | |
docker push $BUILD_DOCKER_REGISTRY/organisation-registry/$IMAGE:$SEMVER | |
env: | |
BUILD_DOCKER_REGISTRY: ${{ secrets.VBR_BUILD_DOCKER_REGISTRY_PRD }} | |
IMAGE: ${{ matrix.image }} | |
SEMVER: ${{ needs.release.outputs.version }} | |
WORKSPACE: ${{ github.workspace }} | |
push_images_to_devops: | |
if: needs.release.outputs.version != 'none' | |
needs: [ release ] | |
name: Push images to DevOps | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
image: [ | |
'api', | |
'batch-agentschapzorgengezondheidftpdump', | |
'batch-vlaanderenbe', | |
'projections-elasticsearch', | |
'projections-delegations', | |
'projections-reporting', | |
'kbo-mutations', | |
'ui' | |
] | |
steps: | |
- 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: Login to Amazon ECR | |
uses: aws-actions/amazon-ecr-login@v2 | |
- name: Download artifact | |
uses: actions/download-artifact@v4 | |
continue-on-error: false | |
with: | |
name: ${{ matrix.image }} | |
path: ~/artifacts | |
- name: Show images | |
shell: bash | |
run: docker images | |
- name: Load artifact | |
shell: bash | |
run: | | |
docker image load -i ~/artifacts/$IMAGE.tar | |
env: | |
IMAGE: ${{ matrix.image }} | |
- name: Show images | |
shell: bash | |
run: docker images | |
- name: Push artifacts to ECR | |
shell: bash | |
run: | | |
echo $IMAGE:$SEMVER | |
docker image tag $SOURCE_DOCKER_REGISTRY/organisation-registry/$IMAGE:$SEMVER $DESTINATION_DOCKER_REGISTRY/organisation-registry/$IMAGE:$SEMVER | |
docker push $DESTINATION_DOCKER_REGISTRY/organisation-registry/$IMAGE:$SEMVER | |
env: | |
SOURCE_DOCKER_REGISTRY: ${{ secrets.VBR_BUILD_DOCKER_REGISTRY }} | |
DESTINATION_DOCKER_REGISTRY: ${{ secrets.VBR_DEVOPS_DOCKER_REGISTRY }} | |
IMAGE: ${{ matrix.image }} | |
SEMVER: ${{ needs.release.outputs.version }} | |
WORKSPACE: ${{ github.workspace }} | |
deploy_staging: | |
if: needs.release.outputs.version != 'none' | |
needs: [ release, push_images_to_staging ] | |
name: Deploy to Staging | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
image: [ | |
'organisation-registry-api', | |
'organisation-registry-delegations', | |
'organisation-registry-elasticsearch', | |
'organisation-registry-kbomutations', | |
'organisation-registry-reporting', | |
'organisation-registry-ui', | |
'organisation-registry-vlaanderenbe', | |
'organisation-registry-zorgengezondheid', | |
'organisation-registry-rebuilder' | |
] | |
steps: | |
- name: CD | |
id: awscurl-polling-action | |
env: | |
BUILD_URL: ${{ secrets.VBR_AWS_BUILD_API }}/${{matrix.services}} | |
STATUS_URL: ${{ secrets.VBR_AWS_BUILD_STATUS_API }}/${{matrix.services}} | |
uses: informatievlaanderen/awscurl-polling-action/polling-action@main | |
with: | |
environment: stg | |
version: ${{ github.event.inputs.version }} | |
status-url: $STATUS_URL | |
deploy-url: $BUILD_URL | |
access-key: ${{ secrets.VBR_AWS_BUILD_USER_ACCESS_KEY_ID }} | |
secret-key: ${{ secrets.VBR_AWS_BUILD_USER_SECRET_ACCESS_KEY }} | |
interval: 2 | |
- name: output | |
shell: bash | |
run: | | |
echo build-uuid: ${{ steps.awscurl-polling-action.outputs.build-uuid }} | |
echo Status: ${{ steps.awscurl-polling-action.outputs.status }} | |
echo ${{ steps.awscurl-polling-action.outputs.final-message }} | |
deploy_staging_new: | |
if: needs.release.outputs.version != 'none' | |
needs: [ release, push_images_to_devops ] | |
name: Deploy to Staging NEW | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
services: | |
[ | |
'organisation-api', | |
'organisation-elasticsearch', | |
'organisation-rebuilder', | |
'organisation-ui', | |
] | |
steps: | |
- name: CD | |
id: awscurl-polling-action | |
env: | |
BUILD_URL: ${{ vars.VBR_AWS_BUILD_API_DEVOPS }}/${{matrix.services}} | |
STATUS_URL: ${{ vars.VBR_AWS_BUILD_STATUS_API_DEVOPS }}/${{matrix.services}} | |
uses: informatievlaanderen/awscurl-polling-action/polling-action@main | |
with: | |
environment: stg | |
version: ${{ github.event.inputs.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 | |
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 }} | |
# - name: Publish to NuGet | |
# shell: bash | |
# run: | | |
# node packages/Be.Vlaanderen.Basisregisters.Build.Pipeline/Content/ci-nuget.js dist/nuget/$LIBNAME.Api.$SEMVER.nupkg | |
# env: | |
# LIBNAME: Be.Vlaanderen.Basisregisters.OrganisationRegistry | |
# SEMVER: ${{ needs.release.outputs.version }} | |
# NUGET_HOST: ${{ secrets.NUGET_HOST }} | |
# NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} |