{% extends "workflow_skeleton.yml.jinja2" %}
{% block steps %}
runs-on: ubuntu-latest
environment:
  internal
steps:
  - name: Checkout repository
    uses: actions/checkout@v4
  - name: Generate config.json for canary workspace (scheduled runs only)
    if: github.event_name == 'schedule'
    run: echo '${{ '{{' }} secrets.TEST_WORKSPACE_CONFIG_JSON_CANARY }}' > ${{ '{{' }} github.workspace }}/examples/config.json
  - name: Generate config.json for production workspace
    if: github.event_name != 'schedule'
    run: echo '${{ '{{' }} secrets.EXAMPLE_WORKSPACE_CONFIG_JSON_PROD }}' > ${{ '{{' }} github.workspace }}/examples/config.json
  - name: Setup Python 3.9 environment
    uses: actions/setup-python@v4
    with:
      python-version: "3.9"
  - name: Prepare requirements
    run: |
      python -m pip install --upgrade pip
      pip install -r ${{ '{{' }} github.workspace }}/examples/requirements.txt
      pip install -r ${{ '{{' }} github.workspace }}/examples/dev_requirements.txt
  - name: Create Aoai Connection
    run: pf connection create -f ${{ '{{' }} github.workspace }}/examples/connections/azure_openai.yml --set api_key="${{ '{{' }} secrets.AOAI_API_KEY_TEST }}" api_base="${{ '{{' }} secrets.AOAI_API_ENDPOINT_TEST }}"
  - name: Random Wait
    uses: AliSajid/random-wait-action@main
    with:
      minimum: 1
      maximum: 99
  - name: Azure Login
    uses: azure/login@v2
    with:
      subscription-id: ${{ '{{' }}secrets.AZURE_SUBSCRIPTION_ID}}
      tenant-id: ${{ '{{' }}secrets.AZURE_TENANT_ID}}
      client-id: ${{ '{{' }}secrets.AZURE_CLIENT_ID}}
  - name: Fetch OID token every 4 mins
    shell: bash
    run: |
      while true; do
        token_request=$ACTIONS_ID_TOKEN_REQUEST_TOKEN
        token_uri=$ACTIONS_ID_TOKEN_REQUEST_URL
        token=$(curl -H "Authorization: bearer $token_request" "${token_uri}&audience=api://AzureADTokenExchange" | jq .value -r)
        az login --service-principal -u ${{ '{{' }}secrets.AZURE_CLIENT_ID}} -t ${{ '{{' }}secrets.AZURE_TENANT_ID}} --federated-token $token --output none
        # Sleep for 4 minutes
        sleep 240
      done &
  - name: Test Notebook
    working-directory: {{ gh_working_dir }}
    run: |
      papermill -k python {{ name }}.ipynb {{ name }}.output.ipynb
  - name: Upload artifact
    if: ${{ '{{' }} always() }}
    uses: actions/upload-artifact@v3
    with:
      name: artifact
      path: {{ gh_working_dir }}
{% endblock steps %}