summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorscoder <stefan_ml@behnel.de>2021-07-16 18:06:02 +0200
committerGitHub <noreply@github.com>2021-07-16 18:06:02 +0200
commit0240d0587a8f83dcd6a2e4f35026b056660e51c8 (patch)
treed159c05b98a0b589b33a5bf20787d5c5e549b80d /.github
parent6660ff2de00c884c9ce82c4833e39553835ce780 (diff)
downloadpython-lxml-0240d0587a8f83dcd6a2e4f35026b056660e51c8.tar.gz
Switch to GitHub actions (GH-319)
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/ci.yml138
1 files changed, 138 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 00000000..dfa301a6
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,138 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+ ci:
+ strategy:
+ # Allows for matrix sub-jobs to fail without canceling the rest
+ fail-fast: false
+
+ # MATRIX:
+ # =======
+ # Required parameters:
+ # os the os to run on
+ # python-version the python version to use
+ # backend the backend to use
+ # env any additional env variables. Set to '{}' for none
+ # Optional parameters:
+ # allowed_failure whether the job is allowed to fail
+ # extra_hash extra hash str to differentiate from other caches with similar name (must always start with '-')
+ matrix:
+ # Tests [amd64]
+ #
+ os: [ubuntu-18.04, macos-10.15]
+ python-version: [2.7, 3.5, 3.6, 3.7, 3.8, 3.9, 3.10-dev]
+ env: [{ STATIC_DEPS: true }, { STATIC_DEPS: false }]
+
+ include:
+ # Temporary - Allow failure on all 3.10-dev jobs until beta comes out
+ - os: ubuntu-18.04
+ python-version: 3.10-dev
+ allowed_failure: true
+ # Coverage setup
+ - os: ubuntu-18.04
+ python-version: 3.9
+ env: { COVERAGE: true }
+ extra_hash: "-coverage"
+ allowed_failure: true # shouldn't fail but currently does...
+ - os: ubuntu-18.04
+ python-version: 3.9
+ env: { STATIC_DEPS: false, EXTRA_DEPS: "docutils pygments sphinx sphinx-rtd-theme" }
+ extra_hash: "-docs"
+ allowed_failure: true # shouldn't fail but currently does...
+ # Old library setup with minimum version requirements
+ - os: ubuntu-18.04
+ python-version: 3.9
+ env: {
+ STATIC_DEPS: true,
+ LIBXML2_VERSION: 2.9.2,
+ LIBXSLT_VERSION: 1.1.27,
+ }
+ extra_hash: "-oldlibs"
+ allowed_failure: true # shouldn't fail but currently does...
+ # Ubuntu sub-jobs:
+ # ================
+ # Pypy
+ - os: ubuntu-18.04
+ python-version: pypy-2.7
+ env: { STATIC_DEPS: false }
+ allowed_failure: true
+ - os: ubuntu-18.04
+ python-version: pypy-3.7
+ env: { STATIC_DEPS: false }
+ allowed_failure: true
+
+ # MacOS sub-jobs
+ # ==============
+ - os: macos-10.15
+ allowed_failure: true # Unicode parsing fails in Py3
+
+ # This defaults to 360 minutes (6h) which is way too long and if a test gets stuck, it can block other pipelines.
+ # From testing, the runs tend to take ~3 minutes, so a limit of 20 minutes should be enough. This can always be
+ # changed in the future if needed.
+ timeout-minutes: 20
+ runs-on: ${{ matrix.os }}
+
+ env:
+ OS_NAME: ${{ matrix.os }}
+ PYTHON_VERSION: ${{ matrix.python-version }}
+ MACOSX_DEPLOYMENT_TARGET: 10.14
+ LIBXML2_VERSION: 2.9.10
+ LIBXSLT_VERSION: 1.1.34
+ COVERAGE: false
+ GCC_VERSION: 8
+ USE_CCACHE: 1
+ CCACHE_SLOPPINESS: "pch_defines,time_macros"
+ CCACHE_COMPRESS: 1
+ CCACHE_MAXSIZE: "100M"
+
+ steps:
+ - name: Checkout repo
+ uses: actions/checkout@v2
+ with:
+ fetch-depth: 1
+
+ - name: Setup python
+ uses: actions/setup-python@v2
+ with:
+ python-version: ${{ matrix.python-version }}
+
+ - name: Cache [ccache]
+ uses: pat-s/always-upload-cache@v2.1.3
+ if: startsWith(runner.os, 'Linux')
+ with:
+ path: ~/.ccache
+ key: ${{ runner.os }}-ccache${{ matrix.extra_hash }}-${{ matrix.python-version }}-${{ hashFiles('**/requirements*.txt', '.github/**/ci.yml', '**/ci-run.sh') }}
+
+ - name: Run CI
+ continue-on-error: ${{ matrix.allowed_failure || false }}
+ env: ${{ matrix.env }}
+ run: bash ./tools/ci-run.sh
+
+ - name: Build docs
+ if: contains( env.EXTRA_DEPS, 'sphinx')
+ run: make html
+
+ - name: Upload docs
+ uses: actions/upload-artifact@v2
+ if: contains( env.EXTRA_DEPS, 'sphinx')
+ with:
+ name: website_html
+ path: doc/html
+ if-no-files-found: ignore
+
+ - name: Upload Coverage Report
+ uses: actions/upload-artifact@v2
+ with:
+ name: pycoverage_html
+ path: coverage*
+ if-no-files-found: ignore
+
+ - name: Upload Wheel
+ uses: actions/upload-artifact@v2
+ if: ${{ env.STATIC_DEPS == 'true' && matrix.extra_hash == 0 }}
+ with:
+ name: wheels-${{ runner.os }}
+ path: dist/*.whl
+ if-no-files-found: ignore