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: Deploy_To_PROD_Function_On_Published_Release | |
# Runs when a Release is published from GitHub UI | |
on: | |
release: | |
types: [published] | |
env: | |
NAME: iativalidator | |
STAGE: prod # suffix to indicate environment stage | |
TAG: ${{ github.sha }} | |
AZURE_CREDENTIALS: ${{ secrets.PROD_AZURE_CREDENTIALS }} | |
REDIS_HOSTNAME: ${{ secrets.PROD_REDIS_HOSTNAME }} | |
REDIS_PORT: ${{ secrets.REDIS_PORT }} | |
REDIS_KEY: ${{ secrets.PROD_REDIS_KEY }} | |
REDIS_CACHE_SEC: 86400 | |
API_KEY: ${{ secrets.PROD_API_KEY }} | |
VALIDATOR_SERVICES_URL: ${{ secrets.PROD_VALIDATOR_SERVICES_URL }} | |
VALIDATOR_SERVICES_KEY_NAME: ${{ secrets.VALIDATOR_SERVICES_KEY_NAME }} | |
VALIDATOR_SERVICES_KEY_VALUE: ${{ secrets.PROD_VALIDATOR_SERVICES_KEY_VALUE }} | |
ACR_LOGIN_SERVER: ${{ secrets.ACR_LOGIN_SERVER }} | |
ACR_USERNAME: ${{ secrets.ACR_USERNAME }} | |
ACR_PASSWORD: ${{ secrets.ACR_PASSWORD }} | |
KV_URI: ${{ secrets.PROD_KV_URI }} | |
BASIC_GITHUB_TOKEN: ${{ secrets.BASIC_GITHUB_TOKEN }} | |
DATASTORE_SERVICES_URL: ${{ secrets.PROD_DATASTORE_SERVICES_URL }} | |
DATASTORE_SERVICES_AUTH_HTTP_HEADER_NAME: ${{ secrets.PROD_DATASTORE_SERVICES_AUTH_HTTP_HEADER_NAME }} | |
DATASTORE_SERVICES_AUTH_HTTP_HEADER_VALUE: ${{ secrets.PROD_DATASTORE_SERVICES_AUTH_HTTP_HEADER_VALUE }} | |
DATASTORE_SERVICES_IATI_IDENTIFIERS_EXIST_MAX_NUMBER_OF_IDS: ${{ secrets.PROD_DATASTORE_SERVICES_IATI_IDENTIFIERS_EXIST_MAX_NUMBER_OF_IDS }} | |
jobs: | |
build-test-deploy: | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Checkout GitHub Action' | |
uses: actions/checkout@v4 | |
- name: 'Login via Azure CLI' | |
uses: azure/login@v1.4.7 | |
with: | |
creds: ${{ env.AZURE_CREDENTIALS }} # Service Principal credentials saved in GitHub Secrets | |
- name: 'Docker Login' | |
uses: azure/docker-login@v1 | |
with: | |
login-server: ${{ env.ACR_LOGIN_SERVER }} | |
username: ${{ env.ACR_USERNAME }} | |
password: ${{ env.ACR_PASSWORD }} | |
- name: 'Compose Customized Docker Image' | |
run: | | |
docker build . -t ${{ env.ACR_LOGIN_SERVER }}/func-$NAME-$STAGE:$TAG | |
docker push ${{ env.ACR_LOGIN_SERVER }}/func-$NAME-$STAGE:$TAG | |
- name: Set Env variables on app service | |
uses: Azure/appservice-settings@v1.1.1 | |
with: | |
app-name: func-${{env.NAME}}-${{env.STAGE}} | |
app-settings-json: | | |
[ | |
{ | |
"name": "REDIS_HOSTNAME", | |
"value": "${{ env.REDIS_HOSTNAME }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "REDIS_KEY", | |
"value": "${{ env.REDIS_KEY }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "REDIS_PORT", | |
"value": "${{ env.REDIS_PORT }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "REDIS_CACHE_SEC", | |
"value": "${{ env.REDIS_CACHE_SEC }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "VALIDATOR_SERVICES_URL", | |
"value": "${{ env.VALIDATOR_SERVICES_URL }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "VALIDATOR_SERVICES_KEY_NAME", | |
"value": "${{ env.VALIDATOR_SERVICES_KEY_NAME }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "VALIDATOR_SERVICES_KEY_VALUE", | |
"value": "${{ env.VALIDATOR_SERVICES_KEY_VALUE }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "DOCKER_REGISTRY_SERVER_URL", | |
"value": "${{ env.ACR_LOGIN_SERVER }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "DOCKER_REGISTRY_SERVER_PASSWORD", | |
"value": "${{ env.ACR_PASSWORD }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "DOCKER_REGISTRY_SERVER_USERNAME", | |
"value": "${{ env.ACR_USERNAME }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "AzureWebJobsSecretStorageType", | |
"value": "keyvault", | |
"slotSetting": false | |
}, | |
{ | |
"name": "AzureWebJobsSecretStorageKeyVaultUri", | |
"value": "${{ env.KV_URI }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "BASIC_GITHUB_TOKEN", | |
"value": "${{ env.BASIC_GITHUB_TOKEN }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "languageWorkers__node__arguments", | |
"value": "--max-old-space-size=6656", | |
"slotSetting": false | |
}, | |
{ | |
"name": "DATASTORE_SERVICES_URL", | |
"value": "${{ env.DATASTORE_SERVICES_URL }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "DATASTORE_SERVICES_AUTH_HTTP_HEADER_NAME", | |
"value": "${{ env.DATASTORE_SERVICES_AUTH_HTTP_HEADER_NAME }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "DATASTORE_SERVICES_AUTH_HTTP_HEADER_VALUE", | |
"value": "${{ env.DATASTORE_SERVICES_AUTH_HTTP_HEADER_VALUE }}", | |
"slotSetting": false | |
}, | |
{ | |
"name": "DATASTORE_SERVICES_IATI_IDENTIFIERS_EXIST_MAX_NUMBER_OF_IDS", | |
"value": "${{ env.DATASTORE_SERVICES_IATI_IDENTIFIERS_EXIST_MAX_NUMBER_OF_IDS }}", | |
"slotSetting": false | |
} | |
] | |
- name: 'Run Azure Functions Container Action' | |
uses: Azure/functions-container-action@v1 | |
with: | |
app-name: func-${{ env.NAME }}-${{ env.STAGE }} | |
image: ${{ env.ACR_LOGIN_SERVER }}/func-${{ env.NAME}}-${{ env.STAGE }}:${{ env.TAG }} | |
- name: 'Tag resource for Tech Climate Impact' | |
uses: 'azure/CLI@v1.0.8' | |
with: | |
azcliversion: 2.30.0 | |
inlineScript: | | |
az resource tag \ | |
--tags env=$STAGE avgCPU=true ACU=true ACUvalue=420 \ | |
--resource-group "rg-${{ env.NAME }}-${{ env.STAGE }}" \ | |
--name "func-${{ env.NAME }}-${{ env.STAGE }}" \ | |
--resource-type "Microsoft.Web/sites" | |
integration-test: | |
needs: build-test-deploy | |
runs-on: ubuntu-latest | |
steps: | |
- name: 'Wait for 5 minutes' | |
run: sleep 300 | |
- name: 'Checkout GitHub Action' | |
uses: actions/checkout@v4 | |
- name: 'Install newman' | |
run: | | |
sudo npm i -g newman | |
- name: 'Run integration tests' | |
run: | | |
newman run integration-tests/js-validator-api-tests.postman_collection.json \ | |
-e integration-tests/envs/func-iativalidator-PROD.postman_environment.json \ | |
--working-dir integration-tests/test-files \ | |
--env-var keyValue=$API_KEY \ | |
--delay-request 50 |