bpo-39041: Add GitHub Actions support (GH-17594)

This commit is contained in:
Steve Dower 2019-12-16 10:35:22 -08:00 committed by GitHub
parent 814d687c7d
commit a76ba362c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 239 additions and 4 deletions

85
.github/workflows/build.yml vendored Normal file
View File

@ -0,0 +1,85 @@
name: Tests
on:
#push:
# branches:
# - master
# - 3.8
# - 3.7
# paths-ignore:
# - 'Doc/**'
# - 'Misc/**'
pull_request:
branches:
- master
- 3.8
- 3.7
paths-ignore:
- 'Doc/**'
- 'Misc/**'
jobs:
build_win32:
name: 'Windows (x86)'
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
- 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 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
build_win_amd64:
name: 'Windows (x64)'
runs-on: windows-latest
steps:
- uses: actions/checkout@v1
- 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 -x64 -q -uall -u-cpu -rwW --slowest --timeout=1200 -j0
build_macos:
name: 'macOS'
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- name: Configure CPython
run: ./configure --with-pydebug --with-openssl=/usr/local/opt/openssl --prefix=/opt/python-dev
- name: Build CPython
run: make -s -j4
- name: Display build info
run: make pythoninfo
- name: Tests
run: make buildbottest TESTOPTS="-j4 -uall,-cpu"
build_ubuntu:
name: 'Ubuntu'
runs-on: ubuntu-latest
env:
OPENSSL_VER: 1.1.1d
steps:
- uses: actions/checkout@v1
- name: Install Dependencies
run: sudo ./.github/workflows/posix-deps-apt.sh
- name: 'Restore OpenSSL build'
id: cache-openssl
uses: actions/cache@v1
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 $PWD/multissl --openssl $OPENSSL_VER --system Linux
- name: Configure CPython
run: ./configure --with-pydebug --with-openssl=$PWD/multissl/openssl/$OPENSSL_VER
- name: Build CPython
run: make -s -j4
- name: Display build info
run: make pythoninfo
- name: Tests
run: xvfb-run make buildbottest TESTOPTS="-j4 -uall,-cpu"

89
.github/workflows/coverage.yml vendored Normal file
View File

@ -0,0 +1,89 @@
name: Coverage
on:
push:
branches:
- master
- 3.8
- 3.7
paths-ignore:
- 'Doc/**'
- 'Misc/**'
#pull_request:
# branches:
# - master
# - 3.8
# - 3.7
# paths-ignore:
# - 'Doc/**'
# - 'Misc/**'
jobs:
coverage_ubuntu:
name: 'Ubuntu (Coverage)'
runs-on: ubuntu-latest
env:
OPENSSL_VER: 1.1.1d
steps:
- uses: actions/checkout@v1
- name: Install Dependencies
run: sudo ./.github/workflows/posix-deps-apt.sh
- name: 'Restore OpenSSL build'
id: cache-openssl
uses: actions/cache@v1
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 $PWD/multissl --openssl $OPENSSL_VER --system Linux
- name: Configure CPython
run: ./configure --with-openssl=$PWD/multissl/openssl/$OPENSSL_VER
- name: Build CPython
run: make -s -j4
- name: Display build info
run: make pythoninfo
- name: 'Coverage Preparation'
run: |
./python -m venv .venv
source ./.venv/bin/activate
python -m pip install -U coverage
python -m test.pythoninfo
- name: 'Tests with coverage'
run: >
source ./.venv/bin/activate &&
xvfb-run python -m coverage
run --branch --pylib
-m test
--fail-env-changed
-uall,-cpu
-x test_multiprocessing_fork
-x test_multiprocessing_forkserver
-x test_multiprocessing_spawn
-x test_concurrent_futures
|| true
- name: 'Publish code coverage results'
run: |
./.venv/bin/python -m coverage xml
bash <(curl -s https://codecov.io/bash)
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
c_coverage_ubuntu:
name: 'Ubuntu (C Coverage)'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Install Dependencies
run: sudo ./.github/workflows/posix-deps-apt.sh
- name: Configure CPython
run: ./configure
- name: 'Build CPython and measure coverage'
run: xvfb-run make -j4 coverage-report
- name: 'Publish code coverage results'
if: always()
run: |
make pythoninfo
bash <(curl -s https://codecov.io/bash)
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}

40
.github/workflows/doc.yml vendored Normal file
View File

@ -0,0 +1,40 @@
name: Docs
on:
#push:
# branches:
# - master
# - 3.8
# - 3.7
# paths:
# - 'Doc/**'
pull_request:
branches:
- master
- 3.8
- 3.7
paths:
- 'Doc/**'
- 'Misc/**'
jobs:
build_doc:
name: 'Docs'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- uses: actions/setup-python@v1
with:
python-version: '3.7'
architecture: 'x64'
- name: 'Install build dependencies'
run: python -m pip install sphinx==2.2.0 blurb python-docs-theme
- name: 'Build documentation'
run: |
cd Doc
make check suspicious html PYTHON=python
- name: Upload
uses: actions/upload-artifact@v1
with:
name: doc-html
path: Doc/build/html

21
.github/workflows/posix-deps-apt.sh vendored Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
apt-get update
apt-get -yq install \
build-essential \
zlib1g-dev \
libbz2-dev \
liblzma-dev \
libncurses5-dev \
libreadline6-dev \
libsqlite3-dev \
libssl-dev \
libgdbm-dev \
tk-dev \
lzma \
lzma-dev \
liblzma-dev \
libffi-dev \
uuid-dev \
xvfb \
lcov

View File

@ -54,9 +54,9 @@ if not exist "%HTMLHELP%" (
)
:skiphhcsearch
if "%DISTVERSION%" EQU "" for /f "usebackq" %%v in (`%PYTHON% tools/extensions/patchlevel.py`) do set DISTVERSION=%%v
if not defined DISTVERSION for /f "usebackq" %%v in (`%PYTHON% tools/extensions/patchlevel.py`) do set DISTVERSION=%%v
if "%BUILDDIR%" EQU "" set BUILDDIR=build
if not defined BUILDDIR set BUILDDIR=build
rem Targets that don't require sphinx-build
if "%1" EQU "" goto help
@ -131,7 +131,7 @@ if exist ..\Misc\NEWS (
)
)
if NOT "%PAPER%" == "" (
if defined PAPER (
set SPHINXOPTS=-D latex_elements.papersize=%PAPER% %SPHINXOPTS%
)
if "%1" EQU "htmlhelp" (

View File

@ -51,7 +51,7 @@ class SourceDateEpochTestMeta(type(unittest.TestCase)):
class PyCompileTestsBase:
def setUp(self):
self.directory = tempfile.mkdtemp()
self.directory = tempfile.mkdtemp(dir=os.getcwd())
self.source_path = os.path.join(self.directory, '_test.py')
self.pyc_path = self.source_path + 'c'
self.cache_path = importlib.util.cache_from_source(self.source_path)