name: ubuntu_build
on: [pull_request, push]

permissions:
  contents: read  #  to fetch code (actions/checkout)

jobs:
  ubuntu_build:
    strategy:
      fail-fast: false
      matrix:
        python-version:
          - "3.9"
          - "3.10"
          - "3.11"
          - "3.12"
          - "3.13"
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
      # Normally, we would use the superbly maintained...
      # - uses: actions/setup-python@v2
      #   with:
      #    python-version: ${{ matrix.python-version }}
      # ... but in the repo, we want to test pyenv builds on Ubuntu
      - run: |
          sudo apt-get update -q; sudo apt install -yq make build-essential libssl-dev zlib1g-dev \
          libbz2-dev libreadline-dev libsqlite3-dev curl \
          libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
      # https://github.com/pyenv/pyenv#installation
      - run: pwd
      - env:
          PYENV_ROOT: /home/runner/work/pyenv/pyenv
        run: |
          echo $PYENV_ROOT
          echo "$PYENV_ROOT/shims:$PYENV_ROOT/bin" >> $GITHUB_PATH
          bin/pyenv --debug install ${{ matrix.python-version }}
          bin/pyenv global ${{ matrix.python-version }}
          bin/pyenv rehash
      - run: python --version
      - run: python -m pip --version
      - shell: python  # Prove that actual Python == expected Python
        env:
          EXPECTED_PYTHON: ${{ matrix.python-version }}
        run: import os, sys ; assert sys.version.startswith(os.getenv("EXPECTED_PYTHON"))
