Merge pull request #11378 from nicoddemus/improve-ci-workflow

Improve CI workflow
This commit is contained in:
Bruno Oliveira 2023-09-02 11:59:25 -03:00 committed by GitHub
commit e4794b26b2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 48 additions and 30 deletions

View File

@ -1,33 +1,38 @@
name: deploy name: deploy
on: on:
push: workflow_dispatch:
tags: inputs:
# These tags are protected, see: version:
# https://github.com/pytest-dev/pytest/settings/tag_protection description: 'Release version'
- "[0-9]+.[0-9]+.[0-9]+" required: true
- "[0-9]+.[0-9]+.[0-9]+rc[0-9]+" default: '1.2.3'
# Set permissions at the job level. # Set permissions at the job level.
permissions: {} permissions: {}
jobs: jobs:
build: package:
runs-on: ubuntu-latest runs-on: ubuntu-latest
env:
SETUPTOOLS_SCM_PRETEND_VERSION: ${{ github.event.inputs.version }}
timeout-minutes: 10 timeout-minutes: 10
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v3
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false persist-credentials: false
- name: Build and Check Package - name: Build and Check Package
uses: hynek/build-and-inspect-python-package@v1.5 uses: hynek/build-and-inspect-python-package@v1.5
deploy: deploy:
if: github.repository == 'pytest-dev/pytest' if: github.repository == 'pytest-dev/pytest'
needs: [build] needs: [package]
runs-on: ubuntu-latest runs-on: ubuntu-latest
environment: deploy
timeout-minutes: 30 timeout-minutes: 30
permissions: permissions:
id-token: write id-token: write
@ -37,9 +42,17 @@ jobs:
with: with:
name: Packages name: Packages
path: dist path: dist
- name: Publish package to PyPI - name: Publish package to PyPI
uses: pypa/gh-action-pypi-publish@v1.8.8 uses: pypa/gh-action-pypi-publish@v1.8.8
- name: Push tag
run: |
git config user.name "pytest bot"
git config user.email "pytestbot@gmail.com"
git tag --annotate --message=v${{ github.event.inputs.version }} v${{ github.event.inputs.version }} ${{ github.sha }}
git push origin v${{ github.event.inputs.version }}
release-notes: release-notes:
# todo: generate the content in the build job # todo: generate the content in the build job
@ -55,12 +68,12 @@ jobs:
with: with:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false persist-credentials: false
- name: Set up Python - name: Set up Python
uses: actions/setup-python@v4 uses: actions/setup-python@v4
with: with:
python-version: "3.11" python-version: "3.11"
- name: Install tox - name: Install tox
run: | run: |
python -m pip install --upgrade pip python -m pip install --upgrade pip

View File

@ -27,7 +27,19 @@ concurrency:
permissions: {} permissions: {}
jobs: jobs:
package:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
fetch-depth: 0
persist-credentials: false
- name: Build and Check Package
uses: hynek/build-and-inspect-python-package@v1.5
build: build:
needs: [package]
runs-on: ${{ matrix.os }} runs-on: ${{ matrix.os }}
timeout-minutes: 45 timeout-minutes: 45
permissions: permissions:
@ -58,7 +70,6 @@ jobs:
"macos-py310", "macos-py310",
"macos-py312", "macos-py312",
"docs",
"doctesting", "doctesting",
"plugins", "plugins",
] ]
@ -149,10 +160,6 @@ jobs:
os: ubuntu-latest os: ubuntu-latest
tox_env: "plugins" tox_env: "plugins"
- name: "docs"
python: "3.8"
os: ubuntu-latest
tox_env: "docs"
- name: "doctesting" - name: "doctesting"
python: "3.8" python: "3.8"
os: ubuntu-latest os: ubuntu-latest
@ -165,6 +172,12 @@ jobs:
fetch-depth: 0 fetch-depth: 0
persist-credentials: false persist-credentials: false
- name: Download Package
uses: actions/download-artifact@v3
with:
name: Packages
path: dist
- name: Set up Python ${{ matrix.python }} - name: Set up Python ${{ matrix.python }}
uses: actions/setup-python@v4 uses: actions/setup-python@v4
with: with:
@ -178,11 +191,13 @@ jobs:
- name: Test without coverage - name: Test without coverage
if: "! matrix.use_coverage" if: "! matrix.use_coverage"
run: "tox -e ${{ matrix.tox_env }}" shell: bash
run: tox run -e ${{ matrix.tox_env }} --installpkg `find dist/*.tar.gz`
- name: Test with coverage - name: Test with coverage
if: "matrix.use_coverage" if: "matrix.use_coverage"
run: "tox -e ${{ matrix.tox_env }}-coverage" shell: bash
run: tox run -e ${{ matrix.tox_env }}-coverage --installpkg `find dist/*.tar.gz`
- name: Generate coverage report - name: Generate coverage report
if: "matrix.use_coverage" if: "matrix.use_coverage"
@ -196,10 +211,3 @@ jobs:
fail_ci_if_error: true fail_ci_if_error: true
files: ./coverage.xml files: ./coverage.xml
verbose: true verbose: true
check-package:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Build and Check Package
uses: hynek/build-and-inspect-python-package@v1.5

View File

@ -133,14 +133,11 @@ Releasing
Both automatic and manual processes described above follow the same steps from this point onward. Both automatic and manual processes described above follow the same steps from this point onward.
#. After all tests pass and the PR has been approved, tag the release commit #. After all tests pass and the PR has been approved, trigger the ``deploy`` job
in the ``release-MAJOR.MINOR.PATCH`` branch and push it. This will publish to PyPI:: in https://github.com/pytest-dev/pytest/actions/workflows/deploy.yml.
git fetch upstream This job will require approval from ``pytest-dev/core``, after which it will publish to PyPI
git tag MAJOR.MINOR.PATCH upstream/release-MAJOR.MINOR.PATCH and tag the repository.
git push upstream MAJOR.MINOR.PATCH
Wait for the deploy to complete, then make sure it is `available on PyPI <https://pypi.org/project/pytest>`_.
#. Merge the PR. **Make sure it's not squash-merged**, so that the tagged commit ends up in the main branch. #. Merge the PR. **Make sure it's not squash-merged**, so that the tagged commit ends up in the main branch.