Skip to content

Release And Deploy #291

Release And Deploy

Release And Deploy #291

name: Release And Deploy
# Controls when the workflow will run
on:
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
inputs:
environment:
required: true
type: choice
description: Select the Environment
options:
- dev
- uat
- prod
- all
domain:
required: true
type: choice
description: Select the domain
options:
- weu-shared
- itn-printit
semver:
required: true
type: choice
description: Select the new Semantic Version
options:
- major
- minor
- patch
- buildNumber
- skip
default: skip
beta:
required: false
type: boolean
description: deploy beta version on AKS
default: false
permissions:
packages: write
contents: write
issues: write
id-token: write
actions: read
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
setup:
name: Setup
runs-on: ubuntu-latest
outputs:
semver: ${{ steps.get_semver.outputs.semver }}
environment: ${{ steps.output.outputs.environment }}
steps:
- name: Get semver
id: get_semver
uses: pagopa/github-actions-template/semver-setup@0018ad6b766a082c35ec88cd9f18de6b54fd59d1 # v1.4.2
- if: ${{ github.event.inputs.environment == null || github.event.inputs.environment == 'dev' }}
run: echo "ENVIRNOMENT=dev" >> $GITHUB_ENV
- if: ${{ github.event.inputs.environment == 'uat' }}
run: echo "ENVIRNOMENT=uat" >> $GITHUB_ENV
- if: ${{ github.event.inputs.environment == 'prod' }}
run: echo "ENVIRNOMENT=prod" >> $GITHUB_ENV
- if: ${{ github.event.inputs.environment == 'all' }}
run: echo "ENVIRNOMENT=all" >> $GITHUB_ENV
- id: output
name: Set Output
run: |
echo "environment=${{env.ENVIRNOMENT}}" >> $GITHUB_OUTPUT
release:
name: Create a New Release
runs-on: ubuntu-latest
needs: [ setup ]
outputs:
version: ${{ steps.release.outputs.version }}
steps:
- name: Make Release
id: release
uses: pagopa/github-actions-template/maven-release@d63ef91b9b1f0021276f0d63dadf42067d0b49f6 # v1.5.2
with:
semver: ${{ needs.setup.outputs.semver }}
github_token: ${{ secrets.BOT_TOKEN_GITHUB }}
beta: ${{ inputs.beta }}
skip_ci: ${{ inputs.beta }}
# image:
# needs: [ setup, release ]
# name: Build and Push Docker Image
# runs-on: ubuntu-latest
# if: ${{ inputs.semver != 'skip' }}
# steps:
# - name: Build and Push
# id: semver
# uses: pagopa/github-actions-template/ghcr-build-push@v1.5.4
# with:
# branch: ${{ github.ref_name}}
# github_token: ${{ secrets.GITHUB_TOKEN }}
# tag: ${{ needs.release.outputs.version }}
deploy_app_service_node:
# needs: [ setup, release, image ]
needs: [ setup, release ]
if: ${{ always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
name: Deploy on App Service Node
runs-on: ubuntu-latest
steps:
- if: ${{ github.event.inputs.environment == null || github.event.inputs.environment == 'dev' }}
run: echo "SHORT_ENV=d" >> $GITHUB_ENV
- if: ${{ github.event.inputs.environment == 'uat' }}
run: echo "SHORT_ENV=u" >> $GITHUB_ENV
- if: ${{ github.event.inputs.environment == 'prod' }}
run: echo "SHORT_ENV=p" >> $GITHUB_ENV
- name: Azure Pipelines Action
uses: jacopocarlini/azure-pipelines@b9721743a54e862597395b4a70727cfdc03028fb # v1.3
with:
azure-devops-project-url: https://dev.azure.com/pagopaspa/pagoPA-projects
azure-pipeline-name: 'pagopa-pdf-engine.deploy'
azure-devops-token: ${{ secrets.AZURE_DEVOPS_TOKEN }}
azure-template-parameters: |
{
"ENV": "${{inputs.environment}}",
"SEMVER": "${{inputs.semver}}",
"DOCKERFILE": "node/Dockerfile",
"BUILD_CONTEXT": "./node",
"IMAGE_NAME": "pagopapdfengine",
"TYPE": "node",
"APP_SERVICE_NAME": "pagopa-${{ env.SHORT_ENV }}-${{inputs.domain}}-app-pdf-engine${{ env.SHORT_ENV == 'prod' && '-ha' || '' }}",
"APP_SERVICE_RESOURCE_GROUP": "pagopa-${{ env.SHORT_ENV }}-${{inputs.domain}}-pdf-engine-rg",
"DOMAIN": "${{inputs.domain}}"
}
azure-pipeline-variables: '{"system.debug": "true"}'
deploy_app_service_java:
# needs: [ setup, release, image, deploy_app_service_node ]
needs: [ setup, release, deploy_app_service_node ]
if: ${{ always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
name: Deploy on App Service Java
runs-on: ubuntu-latest
steps:
- if: ${{ github.event.inputs.environment == null || github.event.inputs.environment == 'dev' }}
run: echo "SHORT_ENV=d" >> $GITHUB_ENV
- if: ${{ github.event.inputs.environment == 'uat' }}
run: echo "SHORT_ENV=u" >> $GITHUB_ENV
- if: ${{ github.event.inputs.environment == 'prod' }}
run: echo "SHORT_ENV=p" >> $GITHUB_ENV
- name: Azure Pipelines Action
uses: jacopocarlini/azure-pipelines@b9721743a54e862597395b4a70727cfdc03028fb # v1.3
with:
azure-devops-project-url: https://dev.azure.com/pagopaspa/pagoPA-projects
azure-pipeline-name: 'pagopa-pdf-engine.deploy'
azure-devops-token: ${{ secrets.AZURE_DEVOPS_TOKEN }}
azure-template-parameters: |
{
"ENV": "${{inputs.environment}}",
"SEMVER": "${{inputs.semver}}",
"DOCKERFILE": "Dockerfile",
"BUILD_CONTEXT": ".",
"IMAGE_NAME": "pagopapdfenginejava",
"TYPE": "java",
"APP_SERVICE_NAME": "pagopa-${{ env.SHORT_ENV }}-${{inputs.domain}}-app-pdf-engine-java${{ env.SHORT_ENV == 'prod' && '-ha' || '' }}",
"APP_SERVICE_RESOURCE_GROUP": "pagopa-${{ env.SHORT_ENV }}-${{inputs.domain}}-pdf-engine-rg",
"DOMAIN": "${{inputs.domain}}"
}
azure-pipeline-variables: '{"system.debug": "true"}'
notify:
needs: [ deploy_app_service_node, deploy_app_service_java ]
runs-on: ubuntu-latest
name: Notify
if: always()
steps:
- name: Report Status
if: always()
uses: ravsamhq/notify-slack-action@be814b201e233b2dc673608aa46e5447c8ab13f2 # v2
with:
status: ${{ needs.deploy_aks.result }}
token: ${{ secrets.GITHUB_TOKEN }}
notify_when: 'failure,skipped'
notification_title: '{workflow} has {status_message}'
message_format: '{emoji} <{workflow_url}|{workflow}> {status_message} in <{repo_url}|{repo}>'
footer: 'Linked to Repo <{repo_url}|{repo}>'
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}