diff options
author | Pradyun Gedam <pradyunsg@users.noreply.github.com> | 2021-04-01 23:48:39 +0100 |
---|---|---|
committer | Pradyun Gedam <pradyunsg@users.noreply.github.com> | 2021-04-02 01:26:26 +0100 |
commit | c022615961b3b6fa5b1a5aa6b6f620c8eee7f7da (patch) | |
tree | 8c2a5f2f7bbf74cdfae974c5a052313774c577c6 /.github | |
parent | 0cdf9d7260611155d8f8bf90e7403c1c7bbc611c (diff) | |
download | pip-c022615961b3b6fa5b1a5aa6b6f620c8eee7f7da.tar.gz |
Add a single GitHub Actions workflow for CI
Diffstat (limited to '.github')
-rw-r--r-- | .github/workflows/ci.yml | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..950239b6a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,189 @@ +name: CI + +on: + push: + branches: [master] + tags: + # Tags for all potential release numbers till 2030. + - "2[0-9].[0-3]" # 20.0 -> 29.3 + - "2[0-9].[0-3].[0-9]+" # 20.0.0 -> 29.3.[0-9]+ + pull_request: + schedule: + - cron: 0 0 * * MON # Run every Monday at 00:00 UTC + +jobs: + determine-changes: + runs-on: ubuntu-latest + outputs: + tests: ${{ steps.filter.outputs.tests }} + vendoring: ${{ steps.filter.outputs.vendoring }} + steps: + # For pull requests it's not necessary to checkout the code + - uses: dorny/paths-filter@v2 + id: filter + with: + filters: | + vendoring: + # Anything that's touching "vendored code" + - "src/pip/_vendor/**" + - "pyproject.toml" + tests: + # Anything that's touching testable stuff + - ".github/workflows/ci.yml" + - "tools/requirements/tests.txt" + - "src/**" + - "tests/**" + + pre-commit: + name: pre-commit + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - uses: pre-commit/action@v2.0.0 + with: + extra_args: --hook-stage=manual + + packaging: + name: packaging + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + - name: Set up git credentials + run: | + git config --global user.email "pypa-dev@googlegroups.com" + git config --global user.name "pip" + + - run: pip install nox + - run: nox -s prepare-release -- 99.9 + - run: nox -s build-release -- 99.9 + + vendoring: + name: vendoring + runs-on: ubuntu-latest + + needs: [determine-changes] + if: ${{ needs.determine-changes.outputs.vendoring == 'true' }} + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + + - run: pip install vendoring + - run: vendoring sync . --verbose + - run: git diff --exit-code + + tests-unix: + name: tests / ${{ matrix.python }} / ${{ matrix.os }} + runs-on: ${{ matrix.os }}-latest + + needs: [pre-commit, packaging, determine-changes] + if: ${{ needs.determine-changes.outputs.tests == 'true' }} + + strategy: + fail-fast: true + matrix: + os: [Ubuntu, MacOS] + python: + - 3.6 + - 3.7 + - 3.8 + - 3.9 + include: + - os: Ubuntu + python: pypy3 + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + + - run: pip install tox 'virtualenv<20' + + # Main check + - name: Run unit tests + run: >- + tox -e py -- + -m unit + --verbose --numprocesses auto --showlocals + - name: Run integration tests + run: >- + tox -e py -- + -m integration + --verbose --numprocesses auto --showlocals + --durations=5 + + tests-windows: + name: tests / ${{ matrix.python }} / ${{ matrix.os }} / ${{ matrix.group }} + runs-on: ${{ matrix.os }}-latest + + needs: [pre-commit, packaging, determine-changes] + if: ${{ needs.determine-changes.outputs.tests == 'true' }} + + strategy: + fail-fast: true + matrix: + os: [Windows] + python: + - 3.6 + - 3.7 + - 3.8 + - 3.9 + group: [1, 2] + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python }} + + # We use a RAMDisk on Windows, since filesystem IO is a big slowdown + # for our tests. + - name: Create a RAMDisk + run: ./tools/ci/New-RAMDisk.ps1 -Drive R -Size 1GB + + - name: Setup RAMDisk permissions + run: | + mkdir R:\Temp + $acl = Get-Acl "R:\Temp" + $rule = New-Object System.Security.AccessControl.FileSystemAccessRule( + "Everyone", "FullControl", "ContainerInherit,ObjectInherit", "None", "Allow" + ) + $acl.AddAccessRule($rule) + Set-Acl "R:\Temp" $acl + + - run: pip install tox 'virtualenv<20' + env: + TEMP: "R:\\Temp" + + # Main check + - name: Run unit tests + if: matrix.group == 1 + run: >- + tox -e py -- + -m unit + --verbose --numprocesses auto --showlocals + env: + TEMP: "R:\\Temp" + + - name: Run integration tests (group 1) + if: matrix.group == 1 + run: >- + tox -e py -- + -m integration -k "not test_install" + --verbose --numprocesses auto --showlocals + env: + TEMP: "R:\\Temp" + + - name: Run integration tests (group 2) + if: matrix.group == 2 + run: >- + tox -e py -- + -m integration -k "test_install" + --verbose --numprocesses auto --showlocals + env: + TEMP: "R:\\Temp" |