fix: or-2282 optimized github workflow #796
Workflow file for this run
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 | ||
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: ~/ | ||
- name: Load artifact | ||
shell: bash | ||
run: | | ||
docker image load -i ~/$IMAGE.tar | ||
env: | ||
IMAGE: ${{ matrix.image }} | ||
- 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 | ||
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: ~/ | ||
- name: Load artifact | ||
shell: bash | ||
run: | | ||
docker image load -i ~/$IMAGE.tar | ||
env: | ||
IMAGE: ${{ matrix.image }} | ||
- 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 | ||
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: ~/ | ||
- name: Load artifact | ||
shell: bash | ||
run: | | ||
docker image load -i ~/$IMAGE.tar | ||
env: | ||
IMAGE: ${{ matrix.image }} | ||
- 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_DEVOPS_DOCKER_REGISTRY }} | ||
IMAGE: ${{ matrix.image }} | ||
SEMVER: ${{ needs.release.outputs.version }} | ||
WORKSPACE: ${{ github.workspace }} | ||
deploy_staging: | ||
name: Deploy to Staging | ||
uses: ./.github/workflows/staging-manual.yml | ||
needs: | ||
- set-release-version | ||
- release | ||
- push_images_to_staging | ||
with: | ||
version: ${{ needs.set-release-version.outputs.version }} | ||
secrets: inherit | ||
deploy_staging_new: | ||
name: Deploy to Staging NEW | ||
uses: ./.github/workflows/staging-new-manual.yml | ||
needs: | ||
- set-release-version | ||
- release | ||
- push_images_to_devops | ||
with: | ||
version: ${{ needs.set-release-version.outputs.version }} | ||
secrets: inherit | ||
# - 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 }} |