# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt

name: "Python Nightly Tests"

on:
  push:
    branches:
      - "**/*nightly*"
  schedule:
    # Run at 2:22am early every morning Eastern time (6/7:22 UTC)
    # so that we get tips of CPython development tested.
    # https://crontab.guru/#22_7_%2a_%2a_%2a
    - cron: "22 7 * * *"
  workflow_dispatch:

defaults:
  run:
    shell: bash

env:
  PIP_DISABLE_PIP_VERSION_CHECK: 1
  COVERAGE_IGOR_VERBOSE: 2

permissions:
  contents: read

concurrency:
  group: "${{ github.workflow }}-${{ github.ref }}"
  cancel-in-progress: true

jobs:
  tests:
    name: "${{ matrix.python-version }}"
    runs-on: "${{ matrix.os }}"
    # If it doesn't finish in an hour, it's not going to. Don't spin for six
    # hours needlessly.
    timeout-minutes: 60

    env:
      TOX_GH_MAJOR_MINOR: "${{ matrix.python-version }}"

    strategy:
      matrix:
        os:
          - "ubuntu-latest"
        python-version:
          # When changing this list, be sure to check the [gh] list in
          # tox.ini so that tox will run properly. PYVERSIONS
          - "3.13"
          - "3.13t"
          - "3.14"
          - "3.14t"
          - "3.15"
          - "3.15t"
      fail-fast: false

    steps:
      - name: "Check out the repo"
        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
        with:
          persist-credentials: false

      - name: "Install system dependencies"
        run: |
          sudo sed -i.bak 's/^Types: deb$/Types: deb deb-src/' /etc/apt/sources.list.d/ubuntu.sources
          sudo apt-get update
          sudo apt-get build-dep -y python3

      - name: "Install pyenv"
        run: |
          curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

      - name: "Build Python ${{ matrix.python-version }}-dev"
        env:
          PYVER: "${{ matrix.python-version }}-dev"
        run: |
          set -xe
          export PYENV_ROOT="$HOME/.pyenv"
          export PATH="$PYENV_ROOT/bin:$PATH"
          echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
          pyenv install $PYVER -v
          pyenv global $PYVER

      - name: "Show diagnostic info"
        run: |
          set -xe
          python -VV
          python -m site
          python -m sysconfig
          python -c "import sys; print('GIL:', getattr(sys, '_is_gil_enabled', lambda: True)())"
          python -m coverage debug sys
          python -m coverage debug sqlite
          python -m coverage debug pybehave
          env | sort

      - name: "Check the Python version"
        env:
          EXPECTED: "${{ matrix.python-version }}"
        run: |
          python -c "
          import sys
          print(f'{sys.version = }')
          assert sys.version.startswith('$EXPECTED'.strip('t'))
          assert getattr(sys, '_is_gil_enabled', lambda: True)() == (not '$EXPECTED'.endswith('t'))
          "

      - name: "Install dependencies"
        run: |
          python -m pip install -r requirements/tox.pip

      - name: "Run tox"
        run: |
          python -m tox -v -- -rfsEX
