mirror of
https://github.com/python/cpython.git
synced 2025-12-23 09:19:18 +00:00
The new checks are only executed when one or more OpenSSL-related files are modified. The checks run a handful of networking and hashing test suites. All SSL checks are optional. This PR also introduces ccache to speed up compilation. In common cases it speeds up configure and compile time from about 90 seconds to less than 30 seconds.
Signed-off-by: Christian Heimes <christian@python.org>
(cherry picked from commit 8fa1489365)
Co-authored-by: Christian Heimes <christian@python.org>
Automerge-Triggered-By: GH:tiran
230 lines
8.2 KiB
YAML
230 lines
8.2 KiB
YAML
name: Tests
|
|
|
|
# bpo-40548: "paths-ignore" is not used to skip documentation-only PRs, because
|
|
# it prevents to mark a job as mandatory. A PR cannot be merged if a job is
|
|
# mandatory but not scheduled because of "paths-ignore".
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
- 3.9
|
|
- 3.8
|
|
- 3.7
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
- 3.9
|
|
- 3.8
|
|
- 3.7
|
|
|
|
jobs:
|
|
check_source:
|
|
name: 'Check for source changes'
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
run_tests: ${{ steps.check.outputs.run_tests }}
|
|
run_ssl_tests: ${{ steps.check.outputs.run_ssl_tests }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Check for source changes
|
|
id: check
|
|
run: |
|
|
if [ -z "$GITHUB_BASE_REF" ]; then
|
|
echo '::set-output name=run_tests::true'
|
|
echo '::set-output name=run_ssl_tests::true'
|
|
else
|
|
git fetch origin $GITHUB_BASE_REF --depth=1
|
|
# git diff "origin/$GITHUB_BASE_REF..." (3 dots) may be more
|
|
# reliable than git diff "origin/$GITHUB_BASE_REF.." (2 dots),
|
|
# but it requires to download more commits (this job uses
|
|
# "git fetch --depth=1").
|
|
#
|
|
# git diff "origin/$GITHUB_BASE_REF..." (3 dots) works with Git
|
|
# 2.26, but Git 2.28 is stricter and fails with "no merge base".
|
|
#
|
|
# git diff "origin/$GITHUB_BASE_REF.." (2 dots) should be enough on
|
|
# GitHub, since GitHub starts by merging origin/$GITHUB_BASE_REF
|
|
# into the PR branch anyway.
|
|
#
|
|
# https://github.com/python/core-workflow/issues/373
|
|
git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qvE '(\.rst$|^Doc|^Misc)' && echo '::set-output name=run_tests::true' || true
|
|
git diff --name-only origin/$GITHUB_BASE_REF.. | grep -qE '(ssl|hashlib|hmac|^.github)' && echo '::set-output name=run_ssl_tests::true' || true
|
|
fi
|
|
|
|
check_abi:
|
|
name: 'Check if the ABI has changed'
|
|
runs-on: ubuntu-20.04
|
|
needs: check_source
|
|
if: needs.check_source.outputs.run_tests == 'true'
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-python@v2
|
|
- name: Install Dependencies
|
|
run: |
|
|
sudo ./.github/workflows/posix-deps-apt.sh
|
|
sudo apt-get install -yq abigail-tools
|
|
- name: Build CPython
|
|
env:
|
|
CFLAGS: -g3 -O0
|
|
run: |
|
|
# Build Python with the libpython dynamic library
|
|
./configure --enable-shared
|
|
make -j4
|
|
- name: Check for changes in the ABI
|
|
run: make check-abidump
|
|
|
|
check_generated_files:
|
|
name: 'Check if generated files are up to date'
|
|
runs-on: ubuntu-latest
|
|
needs: check_source
|
|
if: needs.check_source.outputs.run_tests == 'true'
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- uses: actions/setup-python@v2
|
|
- name: Install Dependencies
|
|
run: sudo ./.github/workflows/posix-deps-apt.sh
|
|
- name: Build CPython
|
|
run: |
|
|
./configure --with-pydebug
|
|
make -j4 regen-all
|
|
- name: Check for changes
|
|
run: |
|
|
changes=$(git status --porcelain)
|
|
# Check for changes in regenerated files
|
|
if ! test -z "$changes"
|
|
then
|
|
echo "Generated files not up to date. Perhaps you forgot to run make regen-all ;)"
|
|
echo "$changes"
|
|
exit 1
|
|
fi
|
|
- name: Check exported libpython symbols
|
|
run: make smelly
|
|
|
|
build_win32:
|
|
name: 'Windows (x86)'
|
|
runs-on: windows-latest
|
|
needs: check_source
|
|
if: needs.check_source.outputs.run_tests == 'true'
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Build CPython
|
|
run: .\PCbuild\build.bat -e -p Win32
|
|
- name: Display build info
|
|
run: .\python.bat -m test.pythoninfo
|
|
- name: Tests
|
|
run: .\PCbuild\rt.bat -p Win32 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
|
|
|
|
build_win_amd64:
|
|
name: 'Windows (x64)'
|
|
runs-on: windows-latest
|
|
needs: check_source
|
|
if: needs.check_source.outputs.run_tests == 'true'
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Build CPython
|
|
run: .\PCbuild\build.bat -e -p x64
|
|
- name: Display build info
|
|
run: .\python.bat -m test.pythoninfo
|
|
- name: Tests
|
|
run: .\PCbuild\rt.bat -p x64 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
|
|
|
|
build_macos:
|
|
name: 'macOS'
|
|
runs-on: macos-latest
|
|
needs: check_source
|
|
if: needs.check_source.outputs.run_tests == 'true'
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Configure CPython
|
|
run: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl --prefix=/opt/python-dev
|
|
- name: Build CPython
|
|
run: make -j4
|
|
- name: Display build info
|
|
run: make pythoninfo
|
|
- name: Tests
|
|
run: make buildbottest TESTOPTS="-j4 -uall,-cpu"
|
|
|
|
build_ubuntu:
|
|
name: 'Ubuntu'
|
|
runs-on: ubuntu-20.04
|
|
needs: check_source
|
|
if: needs.check_source.outputs.run_tests == 'true'
|
|
env:
|
|
OPENSSL_VER: 1.1.1k
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Dependencies
|
|
run: sudo ./.github/workflows/posix-deps-apt.sh
|
|
- name: Configure OpenSSL env vars
|
|
run: |
|
|
echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV
|
|
echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV
|
|
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV
|
|
- name: 'Restore OpenSSL build'
|
|
id: cache-openssl
|
|
uses: actions/cache@v2.1.3
|
|
with:
|
|
path: ./multissl/openssl/${{ env.OPENSSL_VER }}
|
|
key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
|
|
- name: Install OpenSSL
|
|
if: steps.cache-openssl.outputs.cache-hit != 'true'
|
|
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux
|
|
- name: Add ccache to PATH
|
|
run: |
|
|
echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
|
|
- name: Configure ccache action
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
- name: Configure CPython
|
|
run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR
|
|
- name: Build CPython
|
|
run: make -j4
|
|
- name: Display build info
|
|
run: make pythoninfo
|
|
- name: Tests
|
|
run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu"
|
|
|
|
build_ubuntu_ssltests:
|
|
name: 'Ubuntu SSL tests with OpenSSL ${{ matrix.openssl_ver }}'
|
|
runs-on: ubuntu-20.04
|
|
needs: check_source
|
|
if: needs.check_source.outputs.run_tests == 'true' && needs.check_source.outputs.run_ssl_tests == 'true'
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
openssl_ver: [1.0.2u, 1.1.0l, 1.1.1k, 3.0.0-alpha14]
|
|
env:
|
|
OPENSSL_VER: ${{ matrix.openssl_ver }}
|
|
MULTISSL_DIR: ${{ github.workspace }}/multissl
|
|
OPENSSL_DIR: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}
|
|
LD_LIBRARY_PATH: ${{ github.workspace }}/multissl/openssl/${{ matrix.openssl_ver }}/lib
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Install Dependencies
|
|
run: sudo ./.github/workflows/posix-deps-apt.sh
|
|
- name: Configure OpenSSL env vars
|
|
run: |
|
|
echo "MULTISSL_DIR=${GITHUB_WORKSPACE}/multissl" >> $GITHUB_ENV
|
|
echo "OPENSSL_DIR=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}" >> $GITHUB_ENV
|
|
echo "LD_LIBRARY_PATH=${GITHUB_WORKSPACE}/multissl/openssl/${OPENSSL_VER}/lib" >> $GITHUB_ENV
|
|
- name: 'Restore OpenSSL build'
|
|
id: cache-openssl
|
|
uses: actions/cache@v2.1.4
|
|
with:
|
|
path: ./multissl/openssl/${{ env.OPENSSL_VER }}
|
|
key: ${{ runner.os }}-multissl-openssl-${{ env.OPENSSL_VER }}
|
|
- name: Install OpenSSL
|
|
if: steps.cache-openssl.outputs.cache-hit != 'true'
|
|
run: python3 Tools/ssl/multissltests.py --steps=library --base-directory $MULTISSL_DIR --openssl $OPENSSL_VER --system Linux
|
|
- name: Add ccache to PATH
|
|
run: |
|
|
echo "PATH=/usr/lib/ccache:$PATH" >> $GITHUB_ENV
|
|
- name: Configure ccache action
|
|
uses: hendrikmuhs/ccache-action@v1
|
|
- name: Configure CPython
|
|
run: ./configure --with-pydebug --with-openssl=$OPENSSL_DIR
|
|
- name: Build CPython
|
|
run: make -j4
|
|
- name: Display build info
|
|
run: make pythoninfo
|
|
- name: SSL tests
|
|
run: ./python Lib/test/ssltests.py
|