# This workflow will build a container and deploy it to an Azure Functions App on Linux when a commit is pushed to your default branch.
#
# This workflow assumes you have already created the target Azure Functions app.
# For instructions see https://learn.microsoft.com/en-us/azure/azure-functions/functions-create-function-linux-custom-image?tabs=in-process%2Cbash%2Cazure-cli&pivots=programming-language-csharp
#
# To configure this workflow:
# 1. Set up the following secrets in your repository:
#   - AZURE_RBAC_CREDENTIALS
#   - REGISTRY_USERNAME
#   - REGISTRY_PASSWORD
# 2. Change env variables for your configuration.
#
# For more information on:
#   - GitHub Actions for Azure: https://github.com/Azure/Actions
#   - Azure Functions Container Action: https://github.com/Azure/functions-container-action
#   - Azure Service Principal for RBAC: https://github.com/Azure/functions-action#using-azure-service-principal-for-rbac-as-deployment-credential
#
# For more samples to get started with GitHub Action workflows to deploy to Azure: https://github.com/Azure/actions-workflow-samples/tree/master/FunctionApp

name: Deploy container to Azure Functions App

on:
  push:
    branches:
    - [$default-branch]

permissions:
  contents: read

env:
  AZURE_FUNCTIONAPP_NAME: 'your-app-name'   # set this to your function app name on Azure
  LOGIN_SERVER: 'login-server'              # set this to login server for your private container registry (e.g. 'contoso.azurecr.io', 'index.docker.io' )
  REGISTRY: 'your-registry'                 # set this to proper value for REGISTRY
  NAMESPACE: 'your-namespace'               # set this to proper value for NAMESPACE
  IMAGE: 'your-image'                       # set this to proper value for IMAGE
  TAG: 'your-tag'                           # set this to proper value for TAG

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest
    environment: dev
    steps:
    - name: 'Checkout GitHub Action'
      uses: actions/checkout@v3

    - name: 'Login via Azure CLI'
      uses: azure/login@v1
      with:
        creds: ${{ secrets.AZURE_RBAC_CREDENTIALS }}

    - name: 'Docker Login'
      uses: azure/docker-login@v1
      with:
        login-server: ${{ env.LOGIN_SERVER }}
        username: ${{ secrets.REGISTRY_USERNAME }}
        password: ${{ secrets.REGISTRY_PASSWORD }}

    - name: 'Compose Customized Docker Image'
      shell: bash
      run: |
        # If your function app project is not located in your repository's root
        # Please change the path to your directory for docker build
        docker build . -t ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE }}:${{ env.TAG }}
        docker push ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE }}:${{ env.TAG }}

    - name: 'Run Azure Functions Container Action'
      uses: Azure/functions-container-action@v1
      id: fa
      with:
        app-name: ${{ env.AZURE_FUNCTIONAPP_NAME }}
        image: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/${{ env.IMAGE }}:${{ env.TAG }}

    # If you want to display or use the functionapp url, then uncomment the task below
    #- name: 'Published functionapp url'
    #  run: |
    #    echo "${{ steps.fa.outputs.app-url }}"

    - name: Azure logout
      run: |
        az logout
