-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
241 additions
and
38 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,206 @@ | ||
# Try to get a short workflow name and a job name that start with Python | ||
# version to make it easier to check the status inside GitHub UI. | ||
# | ||
# When using external actions check that the external repos are permitted via | ||
# the GitHub configuration at https://github.com/twisted/twisted/settings/actions | ||
# | ||
name: CI | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
tags: | ||
|
||
pull_request: | ||
branches: [ master ] | ||
|
||
permissions: | ||
contents: read | ||
|
||
# Only have a run a single parallel for each branch. | ||
# Runs for master are queues. | ||
# Older runs for non-master branches are cancelled and the jobs are executed | ||
# only for the latest push to the branch. | ||
concurrency: | ||
group: ${{ github.ref }} | ||
cancel-in-progress: ${{ github.ref != 'refs/heads/master' }} | ||
|
||
|
||
defaults: | ||
run: | ||
shell: bash | ||
|
||
env: | ||
# The default values in the job generated by the matrix. | ||
DEFAULT_PYTHON_VERSION: '3.11' | ||
|
||
jobs: | ||
testing: | ||
# We can't use `env.*` in the job name, only in the steps. | ||
name: cpython-${{ matrix.python-version }} | ||
runs-on: 'ubuntu-latest' | ||
strategy: | ||
fail-fast: false | ||
matrix: | ||
python-version: ['3.8', '3.9', '3.10', '3.11'] | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ matrix.python-version }} | ||
allow-prereleases: true | ||
|
||
- name: Install dependencies | ||
run: | | ||
openssl version | ||
python -m pip install --upgrade twisted coverage | ||
- name: Test | ||
run: | | ||
coverage run -m twisted.trial constantly | ||
- name: Upload coverage data | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: coverage-data | ||
path: .coverage | ||
if-no-files-found: error # 'warn' or 'ignore' are also available. | ||
|
||
coverage: | ||
name: Combine & check coverage. | ||
needs: testing | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-python@v4 | ||
with: | ||
# Use latest Python, so it understands all syntax. | ||
python-version: 3.11 | ||
|
||
- run: python -Im pip install --upgrade coverage[toml] | ||
|
||
- uses: actions/download-artifact@v3 | ||
with: | ||
name: coverage-data | ||
|
||
- name: Combine coverage & fail if it's <100%. | ||
run: | | ||
python -Im coverage combine | ||
python -Im coverage html --skip-covered --skip-empty | ||
# Report and write to summary. | ||
python -Im coverage report --format=markdown >> $GITHUB_STEP_SUMMARY | ||
# Report again and fail if under 100%. | ||
python -Im coverage report --fail-under=100 | ||
static-checks: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
with: | ||
# Need full history for various diff checks to work. | ||
fetch-depth: 0 | ||
|
||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '${{ env.DEFAULT_PYTHON_VERSION }}' | ||
|
||
- name: Install dependencies | ||
run: | | ||
python -m pip install --upgrade pyflakes | ||
- name: Run the checks | ||
run: | | ||
python --version | ||
pyflakes constantly | ||
apidocs: | ||
name: API docs build | ||
runs-on: ubuntu-22.04 | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: ${{ env.DEFAULT_PYTHON_VERSION }} | ||
- name: Install dependencies | ||
run: | | ||
python -m pip install --upgrade pydoctor | ||
- name: Run pydoctor | ||
run: | | ||
pydoctor --project-name constantly constantly | ||
# Used for various release automation. | ||
# This is also executed for each PR to exercise the release as much | ||
# as possible and reduce the possibility of finding bugs in the release | ||
# process late in the release cycle, | ||
# The files are published only when a tag is created. | ||
release-publish: | ||
name: Check release and publish on twisted-* tag | ||
runs-on: 'ubuntu-latest' | ||
steps: | ||
- uses: actions/checkout@v3 | ||
|
||
- name: Set up Python | ||
uses: actions/setup-python@v4 | ||
with: | ||
python-version: '${{ env.DEFAULT_PYTHON_VERSION }}' | ||
|
||
- name: Build | ||
run: | | ||
python -m pip install --upgrade pip wheel pep517 | ||
rm -rf dist/* | ||
python setup.py bdist_wheel sdist | ||
- name: Files to be pushed to PyPi | ||
run: ls -R dist/ | ||
|
||
- name: Check matched tag version and branch version - on tag | ||
if: startsWith(github.ref, 'refs/tags/') | ||
run: python admin/check_tag_version_match.py "${{ github.ref }}" | ||
|
||
- name: Publish to PyPI - on tag | ||
if: startsWith(github.ref, 'refs/tags/') | ||
uses: pypa/gh-action-pypi-publish@a56da0b891b3dc519c7ee3284aff1fad93cc8598 | ||
|
||
|
||
# We have this job so that the PR can be blocked on a single job. | ||
# In this way, each time a job is modified, | ||
# we don't have to go to GitHub UI and reconfigure branch protection. | ||
# See GitHub support answer for this hack. | ||
# https://gist.github.com/altendky/2e3483a1f7e1ba21cc97de75db9b7d1c | ||
all-successful: | ||
# Is very important to force running this always, as otherwise it will be | ||
# skipped by default. | ||
if: always() | ||
runs-on: ubuntu-latest | ||
# Here should be the list of all the other jobs defined in this file. | ||
needs: | ||
- testing | ||
- coverage | ||
- apidocs | ||
- static-checks | ||
- release-publish | ||
steps: | ||
- name: Require all successes | ||
shell: python | ||
env: | ||
RESULTS: ${{ toJSON(needs.*.result) }} | ||
run: | | ||
import json | ||
import os | ||
import sys | ||
results = json.loads(os.environ["RESULTS"]) | ||
sys.exit(0 if all(result == "success" for result in results) else 1) |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
# | ||
# Used during the release process to make sure that we release based on a | ||
# tag that has the same version as the current twisted.__version. | ||
# | ||
# Designed to be conditionally called inside GitHub Actions release job. | ||
# Tags should use PEP440 version scheme. | ||
# | ||
# To be called as: admin/check_tag_version_match.py refs/tags/twisted-20.3.0 | ||
# | ||
import sys | ||
|
||
import pep517.meta | ||
|
||
|
||
TAG_PREFIX = "refs/tags/" | ||
|
||
if len(sys.argv) < 2: | ||
print("No tag check requested.") | ||
sys.exit(0) | ||
|
||
branch_version = pep517.meta.load(".").version | ||
run_version = sys.argv[1] | ||
|
||
if not run_version.startswith(TAG_PREFIX): | ||
print(f"Not a twisted release tag name '{run_version}.") | ||
sys.exit(1) | ||
|
||
run_version = run_version[len(TAG_PREFIX) :] # noqa: E203 | ||
|
||
if run_version != branch_version: | ||
print(f"Branch is at '{branch_version}' while tag is '{run_version}'") | ||
exit(1) | ||
|
||
print(f"All good. Branch and tag versions match for '{branch_version}'.") | ||
sys.exit(0) |