name: Python Testgen

permissions:
  contents: read

on:
  pull_request:
  push:
  merge_group:
  schedule:
    - cron: '0 18 * * *'

env:
  PYTHON_VERSION: "3.11"

jobs:
  linting:
    runs-on: ubuntu-latest
    name: Lint
    steps:
      - name: Check out source repository
        uses: actions/checkout@v5
        with:
          persist-credentials: false

      - name: Set up Python environment
        uses: actions/setup-python@v6
        with:
          python-version: ${{ env.PYTHON_VERSION }}
          cache: 'pip' # caching pip dependencies

      - name: Install Python requirements.
        run: pip install -r requirements.txt

      - name: flake8 Lint
        uses: py-actions/flake8@v2

      - name: mypy Typecheck
        run: mypy ./tests

      - name: Black Format
        uses: psf/black@stable
        with:
          src: "./tests"

  testgen:
    runs-on: ubuntu-latest
    name: Generate Tests
    steps:
      - name: Check out source repository
        uses: actions/checkout@v5
        with:
          persist-credentials: false

      - name: Set up Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Set up Python environment
        uses: actions/setup-python@v6
        with:
          python-version: ${{ env.PYTHON_VERSION }}
          cache: 'pip' # caching pip dependencies

      - name: Install Python requirements.
        run: pip install -r requirements.txt

      - name: Generate integration test files
        working-directory: ./tests
        # Generate but don't run the test suite - we already do that in the
        # other CI tasks that run `cargo test`.
        run: python3 generate.py --no-test

      - name: Generate CRL distribution point test files
        working-directory: ./tests/crl_distrib_point/
        run: python3 make_testcerts.py

      - name: Generate CRL test files
        working-directory: ./tests/crls/
        run: python3 make_testcrls.py

      - name: Enforce no diff
        run: git diff --exit-code
