name: integration_test

on:
  workflow_dispatch:
    inputs:
      working-directory:
        required: true
        type: string
        default: '.'
        description: "From which folder this pipeline executes"

env:
  POETRY_VERSION: "1.8.2"

jobs:
  build:
    if: github.ref == 'refs/heads/main'
    runs-on: ubuntu-latest

    environment: Scheduled testing publish
    outputs:
      pkg-name: ${{ steps.check-version.outputs.pkg-name }}
      version: ${{ steps.check-version.outputs.version }}
    strategy:
      matrix:
        python-version:
          - "3.8"
          - "3.9"
          - "3.10"
          - "3.11"
          - "3.12"
    name: "make integration_test #${{ matrix.python-version }}"
    steps:
        - uses: actions/checkout@v4

        - name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }}
          uses: "./.github/actions/poetry_setup"
          with:
            python-version: ${{ matrix.python-version }}
            poetry-version: ${{ env.POETRY_VERSION }}
            working-directory: ${{ inputs.working-directory }}
            cache-key: core

        - name: Import test dependencies
          run: poetry install --with test
          working-directory: ${{ inputs.working-directory }}

        - name: Run integration tests
          shell: bash
          env:
            ZAI_API_KEY: ${{ secrets.ZAI_API_KEY }}
            ZAI_BASE_URL: ${{ secrets.ZAI_BASE_URL }}
          run: |
            make integration_tests

        - name: Ensure the tests did not create any additional files
          shell: bash
          run: |
            set -eu
            
            STATUS="$(git status)"
            echo "$STATUS"
            
            # grep will exit non-zero if the target message isn't found,
            # and `set -e` above will cause the step to fail.
            echo "$STATUS" | grep 'nothing to commit, working tree clean'
