CI: Enable GitHub Actions testing workflow
This replicate the existing Azure DevOps workflow, and adds a couple of new jobs (Python 2.7 on macOS, Python + vanilla Ansible on Linux). The GitHub Actions use container images hosted on GitHub Container Registry (GHCR, ghcr.io/mitogen-hq). These images have been copied straight from the existing Amazon Elastic Cloud Registry (AWS ECR, public.ecr.aws/n5z0e8q9). A short period of parallel running is planned. Then a second PR will remove the Azure DevOps workflow.pull/1128/head
parent
27214517a7
commit
4f60d01f09
@ -0,0 +1,326 @@
|
|||||||
|
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
|
||||||
|
|
||||||
|
name: Tests
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches-ignore:
|
||||||
|
- docs-master
|
||||||
|
|
||||||
|
env:
|
||||||
|
#ANSIBLE_VERBOSITY: 3
|
||||||
|
#MITOGEN_LOG_LEVEL: DEBUG
|
||||||
|
MITOGEN_TEST_IMAGE_TEMPLATE: "ghcr.io/mitogen-hq/%(distro)s-test"
|
||||||
|
|
||||||
|
# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners/about-github-hosted-runners
|
||||||
|
# https://github.com/actions/runner-images/blob/main/README.md#software-and-image-support
|
||||||
|
jobs:
|
||||||
|
linux:
|
||||||
|
# https://github.com/actions/runner-images/blob/main/images/ubuntu/Ubuntu2004-Readme.md
|
||||||
|
runs-on: ubuntu-20.04
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Ans_27_210
|
||||||
|
tox_env: py27-mode_ansible-ansible2.10
|
||||||
|
- name: Ans_27_4
|
||||||
|
tox_env: py27-mode_ansible-ansible4
|
||||||
|
|
||||||
|
- name: Ans_36_210
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_ansible-ansible2.10
|
||||||
|
- name: Ans_36_4
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_ansible-ansible4
|
||||||
|
|
||||||
|
- name: Ans_311_210
|
||||||
|
python_version: '3.11'
|
||||||
|
tox_env: py311-mode_ansible-ansible2.10
|
||||||
|
- name: Ans_311_3
|
||||||
|
python_version: '3.11'
|
||||||
|
tox_env: py311-mode_ansible-ansible3
|
||||||
|
- name: Ans_311_4
|
||||||
|
python_version: '3.11'
|
||||||
|
tox_env: py311-mode_ansible-ansible4
|
||||||
|
- name: Ans_311_5
|
||||||
|
python_version: '3.11'
|
||||||
|
tox_env: py311-mode_ansible-ansible5
|
||||||
|
- name: Ans_312_6
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_ansible-ansible6
|
||||||
|
- name: Ans_312_7
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_ansible-ansible7
|
||||||
|
- name: Ans_312_8
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_ansible-ansible8
|
||||||
|
- name: Ans_312_9
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_ansible-ansible9
|
||||||
|
- name: Ans_312_10
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_ansible-ansible10
|
||||||
|
- name: Van_312_10
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_ansible-ansible10-strategy_linear
|
||||||
|
|
||||||
|
- name: Mito_27_centos6
|
||||||
|
tox_env: py27-mode_mitogen-distro_centos6
|
||||||
|
- name: Mito_27_centos7
|
||||||
|
tox_env: py27-mode_mitogen-distro_centos7
|
||||||
|
- name: Mito_27_centos8
|
||||||
|
tox_env: py27-mode_mitogen-distro_centos8
|
||||||
|
- name: Mito_27_debian9
|
||||||
|
tox_env: py27-mode_mitogen-distro_debian9
|
||||||
|
- name: Mito_27_debian10
|
||||||
|
tox_env: py27-mode_mitogen-distro_debian10
|
||||||
|
- name: Mito_27_debian11
|
||||||
|
tox_env: py27-mode_mitogen-distro_debian11
|
||||||
|
- name: Mito_27_ubuntu1604
|
||||||
|
tox_env: py27-mode_mitogen-distro_ubuntu1604
|
||||||
|
- name: Mito_27_ubuntu1804
|
||||||
|
tox_env: py27-mode_mitogen-distro_ubuntu1804
|
||||||
|
- name: Mito_27_ubuntu2004
|
||||||
|
tox_env: py27-mode_mitogen-distro_ubuntu2004
|
||||||
|
|
||||||
|
- name: Mito_36_centos6
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_centos6
|
||||||
|
- name: Mito_36_centos7
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_centos7
|
||||||
|
- name: Mito_36_centos8
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_centos8
|
||||||
|
- name: Mito_36_debian9
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_debian9
|
||||||
|
- name: Mito_36_debian10
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_debian10
|
||||||
|
- name: Mito_36_debian11
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_debian11
|
||||||
|
- name: Mito_36_ubuntu1604
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_ubuntu1604
|
||||||
|
- name: Mito_36_ubuntu1804
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_ubuntu1804
|
||||||
|
- name: Mito_36_ubuntu2004
|
||||||
|
python_version: '3.6'
|
||||||
|
tox_env: py36-mode_mitogen-distro_ubuntu2004
|
||||||
|
|
||||||
|
- name: Mito_312_centos6
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_centos6
|
||||||
|
- name: Mito_312_centos7
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_centos7
|
||||||
|
- name: Mito_312_centos8
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_centos8
|
||||||
|
- name: Mito_312_debian9
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_debian9
|
||||||
|
- name: Mito_312_debian10
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_debian10
|
||||||
|
- name: Mito_312_debian11
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_debian11
|
||||||
|
- name: Mito_312_ubuntu1604
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_ubuntu1604
|
||||||
|
- name: Mito_312_ubuntu1804
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_ubuntu1804
|
||||||
|
- name: Mito_312_ubuntu2004
|
||||||
|
python_version: '3.12'
|
||||||
|
tox_env: py312-mode_mitogen-distro_ubuntu2004
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python_version }}
|
||||||
|
if: ${{ matrix.python_version }}
|
||||||
|
- uses: docker/login-action@v3
|
||||||
|
with:
|
||||||
|
registry: ghcr.io
|
||||||
|
username: ${{ github.actor }}
|
||||||
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
- name: Install build deps
|
||||||
|
run: |
|
||||||
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y python2-dev python3-pip virtualenv
|
||||||
|
- name: Show Python versions
|
||||||
|
run: |
|
||||||
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
# macOS builders lack a realpath command
|
||||||
|
type python && python -c"import os.path;print(os.path.realpath('$(type -p python)'))" && python --version
|
||||||
|
type python2 && python2 -c"import os.path;print(os.path.realpath('$(type -p python2)'))" && python2 --version
|
||||||
|
type python3 && python3 -c"import os.path;print(os.path.realpath('$(type -p python3)'))" && python3 --version
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ -e /usr/bin/python ]; then
|
||||||
|
echo "/usr/bin/python: sys.executable: $(/usr/bin/python -c 'import sys; print(sys.executable)')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e /usr/bin/python2 ]; then
|
||||||
|
echo "/usr/bin/python2: sys.executable: $(/usr/bin/python2 -c 'import sys; print(sys.executable)')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e /usr/bin/python2.7 ]; then
|
||||||
|
echo "/usr/bin/python2.7: sys.executable: $(/usr/bin/python2.7 -c 'import sys; print(sys.executable)')"
|
||||||
|
fi
|
||||||
|
- name: Install tooling
|
||||||
|
run: |
|
||||||
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
# Tox environment name (e.g. py312-mode_mitogen) -> Python executable name (e.g. python3.12)
|
||||||
|
PYTHON=$(python -c 'import re; print(re.sub(r"^py([23])([0-9]{1,2}).*", r"python\1.\2", "${{ matrix.tox_env }}"))')
|
||||||
|
|
||||||
|
if [[ -z $PYTHON ]]; then
|
||||||
|
echo 1>&2 "Python interpreter could not be determined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $PYTHON == "python2.7" && $(uname) == "Darwin" ]]; then
|
||||||
|
"$PYTHON" -m ensurepip --user --altinstall --no-default-pip
|
||||||
|
"$PYTHON" -m pip install --user -r "tests/requirements-tox.txt"
|
||||||
|
elif [[ $PYTHON == "python2.7" ]]; then
|
||||||
|
curl "https://bootstrap.pypa.io/pip/2.7/get-pip.py" --output "get-pip.py"
|
||||||
|
"$PYTHON" get-pip.py --user --no-python-version-warning
|
||||||
|
# Avoid Python 2.x pip masking system pip
|
||||||
|
rm -f ~/.local/bin/{easy_install,pip,wheel}
|
||||||
|
"$PYTHON" -m pip install --user -r "tests/requirements-tox.txt"
|
||||||
|
else
|
||||||
|
"$PYTHON" -m pip install -r "tests/requirements-tox.txt"
|
||||||
|
fi
|
||||||
|
- name: Run tests
|
||||||
|
env:
|
||||||
|
GITHUB_ACTOR: ${{ github.actor }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
# Tox environment name (e.g. py312-mode_mitogen) -> Python executable name (e.g. python3.12)
|
||||||
|
PYTHON=$(python -c 'import re; print(re.sub(r"^py([23])([0-9]{1,2}).*", r"python\1.\2", "${{ matrix.tox_env }}"))')
|
||||||
|
|
||||||
|
if [[ -z $PYTHON ]]; then
|
||||||
|
echo 1>&2 "Python interpreter could not be determined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$PYTHON" -m tox -e "${{ matrix.tox_env }}"
|
||||||
|
|
||||||
|
macos:
|
||||||
|
# https://github.com/actions/runner-images/blob/main/images/macos/macos-12-Readme.md
|
||||||
|
runs-on: macos-12
|
||||||
|
timeout-minutes: 120
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
- name: Mito_27
|
||||||
|
tox_env: py27-mode_mitogen
|
||||||
|
- name: Mito_312
|
||||||
|
tox_env: py312-mode_mitogen
|
||||||
|
|
||||||
|
- name: Loc_27_210
|
||||||
|
tox_env: py27-mode_localhost-ansible2.10
|
||||||
|
- name: Loc_312_10
|
||||||
|
tox_env: py312-mode_localhost-ansible10
|
||||||
|
|
||||||
|
- name: Van_27_210
|
||||||
|
tox_env: py27-mode_localhost-ansible2.10-strategy_linear
|
||||||
|
- name: Van_312_10
|
||||||
|
tox_env: py312-mode_localhost-ansible10-strategy_linear
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-python@v5
|
||||||
|
with:
|
||||||
|
python-version: ${{ matrix.python_version }}
|
||||||
|
if: ${{ matrix.python_version }}
|
||||||
|
- name: Show Python versions
|
||||||
|
run: |
|
||||||
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
# macOS builders lack a realpath command
|
||||||
|
type python && python -c"import os.path;print(os.path.realpath('$(type -p python)'))" && python --version
|
||||||
|
type python2 && python2 -c"import os.path;print(os.path.realpath('$(type -p python2)'))" && python2 --version
|
||||||
|
type python3 && python3 -c"import os.path;print(os.path.realpath('$(type -p python3)'))" && python3 --version
|
||||||
|
echo
|
||||||
|
|
||||||
|
if [ -e /usr/bin/python ]; then
|
||||||
|
echo "/usr/bin/python: sys.executable: $(/usr/bin/python -c 'import sys; print(sys.executable)')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e /usr/bin/python2 ]; then
|
||||||
|
echo "/usr/bin/python2: sys.executable: $(/usr/bin/python2 -c 'import sys; print(sys.executable)')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e /usr/bin/python2.7 ]; then
|
||||||
|
echo "/usr/bin/python2.7: sys.executable: $(/usr/bin/python2.7 -c 'import sys; print(sys.executable)')"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e /Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 ]; then
|
||||||
|
# GitHub macOS 12 images: python2.7 is installed, but not on $PATH
|
||||||
|
echo "/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7: sys.executable: $(/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7 -c 'import sys; print(sys.executable)')"
|
||||||
|
fi
|
||||||
|
- name: Install tooling
|
||||||
|
run: |
|
||||||
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
# Tox environment name (e.g. py312-mode_mitogen) -> Python executable name (e.g. python3.12)
|
||||||
|
PYTHON=$(python -c 'import re; print(re.sub(r"^py([23])([0-9]{1,2}).*", r"python\1.\2", "${{ matrix.tox_env }}"))')
|
||||||
|
|
||||||
|
if [[ -z $PYTHON ]]; then
|
||||||
|
echo 1>&2 "Python interpreter could not be determined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $PYTHON == "python2.7" && $(uname) == "Darwin" ]]; then
|
||||||
|
# GitHub macOS 12 images: python2.7 is installed, but not on $PATH
|
||||||
|
PYTHON="/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7"
|
||||||
|
"$PYTHON" -m ensurepip --user --altinstall --no-default-pip
|
||||||
|
"$PYTHON" -m pip install --user -r "tests/requirements-tox.txt"
|
||||||
|
elif [[ $PYTHON == "python2.7" ]]; then
|
||||||
|
curl "https://bootstrap.pypa.io/pip/2.7/get-pip.py" --output "get-pip.py"
|
||||||
|
"$PYTHON" get-pip.py --user --no-python-version-warning
|
||||||
|
# Avoid Python 2.x pip masking system pip
|
||||||
|
rm -f ~/.local/bin/{easy_install,pip,wheel}
|
||||||
|
"$PYTHON" -m pip install --user -r "tests/requirements-tox.txt"
|
||||||
|
else
|
||||||
|
"$PYTHON" -m pip install -r "tests/requirements-tox.txt"
|
||||||
|
fi
|
||||||
|
- name: Run tests
|
||||||
|
env:
|
||||||
|
GITHUB_ACTOR: ${{ github.actor }}
|
||||||
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
run: |
|
||||||
|
set -o errexit -o nounset -o pipefail
|
||||||
|
|
||||||
|
# Tox environment name (e.g. py312-mode_mitogen) -> Python executable name (e.g. python3.12)
|
||||||
|
PYTHON=$(python -c 'import re; print(re.sub(r"^py([23])([0-9]{1,2}).*", r"python\1.\2", "${{ matrix.tox_env }}"))')
|
||||||
|
|
||||||
|
if [[ -z $PYTHON ]]; then
|
||||||
|
echo 1>&2 "Python interpreter could not be determined"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $PYTHON == "python2.7" && $(uname) == "Darwin" ]]; then
|
||||||
|
# GitHub macOS 12 images: python2.7 is installed, but not on $PATH
|
||||||
|
PYTHON="/Library/Frameworks/Python.framework/Versions/2.7/bin/python2.7"
|
||||||
|
fi
|
||||||
|
|
||||||
|
"$PYTHON" -m tox -e "${{ matrix.tox_env }}"
|
Loading…
Reference in New Issue