
This implements PEP 621, obviating the need for `setup.py`, `setup.cfg`, and `MANIFEST.in`. The build backend Hatchling (of which I am a maintainer in the PyPA) is now used as that is the default in the official Python packaging tutorial. Hatchling is available on all the major distribution channels such as Debian, Fedora, and many more. ## Python support The earliest supported Python 3 version of Hatchling is 3.7, therefore I've also set that as the minimum here. Python 3.6 is EOL and other build backends like flit-core and setuptools also dropped support. Python 3.6 accounted for 3-4% of downloads in the last month. ## Plugins Configuration is now completely static with the help of 3 plugins: ### Readme hynek's hatch-fancy-pypi-readme allows for the dynamic construction of the readme which was previously coded up in `setup.py`. Now it's simply: ```toml [tool.hatch.metadata.hooks.fancy-pypi-readme] content-type = "text/markdown" fragments = [ { path = "README.md" }, { path = "CHANGES.md" }, ] ``` ### Versioning hatch-vcs is currently just a wrapper around setuptools-scm (which despite the legacy naming is actually now decoupled from setuptools): ```toml [tool.hatch.version] source = "vcs" [tool.hatch.build.hooks.vcs] version-file = "src/_black_version.py" template = ''' version = "{version}" ''' ``` ### mypyc hatch-mypyc offers many benefits over the existing approach: - No need to manually select files for inclusion - Avoids the need for the current CI workaround for https://github.com/mypyc/mypyc/issues/946 - Intermediate artifacts (like `build/`) from setuptools and mypyc itself no longer clutter the project directory - Runtime dependencies required at build time no longer need to be manually redeclared as this is a built-in option of Hatchling Co-authored-by: Richard Si <63936253+ichard26@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
156 lines
5.2 KiB
YAML
156 lines
5.2 KiB
YAML
name: diff-shades
|
|
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
paths: ["src/**", "pyproject.toml", ".github/workflows/*"]
|
|
|
|
pull_request:
|
|
paths: ["src/**", "pyproject.toml", ".github/workflows/*"]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.run_id }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
configure:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
matrix: ${{ steps.set-config.outputs.matrix }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "*"
|
|
|
|
- name: Install diff-shades and support dependencies
|
|
run: |
|
|
python -m pip install click packaging urllib3
|
|
python -m pip install https://github.com/ichard26/diff-shades/archive/stable.zip
|
|
|
|
- name: Calculate run configuration & metadata
|
|
id: set-config
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
run: >
|
|
python scripts/diff_shades_gha_helper.py config ${{ github.event_name }} ${{ matrix.mode }}
|
|
|
|
analysis:
|
|
name: analysis / ${{ matrix.mode }}
|
|
needs: configure
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
HATCH_BUILD_HOOKS_ENABLE: "1"
|
|
# Clang is less picky with the C code it's given than gcc (and may
|
|
# generate faster binaries too).
|
|
CC: clang-12
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include: ${{ fromJson(needs.configure.outputs.matrix )}}
|
|
|
|
steps:
|
|
- name: Checkout this repository (full clone)
|
|
uses: actions/checkout@v3
|
|
with:
|
|
# The baseline revision could be rather old so a full clone is ideal.
|
|
fetch-depth: 0
|
|
|
|
- uses: actions/setup-python@v4
|
|
with:
|
|
python-version: "*"
|
|
|
|
- name: Install diff-shades and support dependencies
|
|
run: |
|
|
python -m pip install https://github.com/ichard26/diff-shades/archive/stable.zip
|
|
python -m pip install click packaging urllib3
|
|
# After checking out old revisions, this might not exist so we'll use a copy.
|
|
cat scripts/diff_shades_gha_helper.py > helper.py
|
|
git config user.name "diff-shades-gha"
|
|
git config user.email "diff-shades-gha@example.com"
|
|
|
|
- name: Attempt to use cached baseline analysis
|
|
id: baseline-cache
|
|
uses: actions/cache@v3
|
|
with:
|
|
path: ${{ matrix.baseline-analysis }}
|
|
key: ${{ matrix.baseline-cache-key }}
|
|
|
|
- name: Build and install baseline revision
|
|
if: steps.baseline-cache.outputs.cache-hit != 'true'
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
run: >
|
|
${{ matrix.baseline-setup-cmd }}
|
|
&& python -m pip install .
|
|
|
|
- name: Analyze baseline revision
|
|
if: steps.baseline-cache.outputs.cache-hit != 'true'
|
|
run: >
|
|
diff-shades analyze -v --work-dir projects-cache/
|
|
${{ matrix.baseline-analysis }} ${{ matrix.force-flag }}
|
|
|
|
- name: Build and install target revision
|
|
env:
|
|
GITHUB_TOKEN: ${{ github.token }}
|
|
run: >
|
|
${{ matrix.target-setup-cmd }}
|
|
&& python -m pip install .
|
|
|
|
- name: Analyze target revision
|
|
run: >
|
|
diff-shades analyze -v --work-dir projects-cache/
|
|
${{ matrix.target-analysis }} --repeat-projects-from
|
|
${{ matrix.baseline-analysis }} ${{ matrix.force-flag }}
|
|
|
|
- name: Generate HTML diff report
|
|
run: >
|
|
diff-shades --dump-html diff.html compare --diff
|
|
${{ matrix.baseline-analysis }} ${{ matrix.target-analysis }}
|
|
|
|
- name: Upload diff report
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{ matrix.mode }}-diff.html
|
|
path: diff.html
|
|
|
|
- name: Upload baseline analysis
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{ matrix.baseline-analysis }}
|
|
path: ${{ matrix.baseline-analysis }}
|
|
|
|
- name: Upload target analysis
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: ${{ matrix.target-analysis }}
|
|
path: ${{ matrix.target-analysis }}
|
|
|
|
- name: Generate summary file (PR only)
|
|
if: github.event_name == 'pull_request' && matrix.mode == 'preview-changes'
|
|
run: >
|
|
python helper.py comment-body
|
|
${{ matrix.baseline-analysis }} ${{ matrix.target-analysis }}
|
|
${{ matrix.baseline-sha }} ${{ matrix.target-sha }}
|
|
${{ github.event.pull_request.number }}
|
|
|
|
- name: Upload summary file (PR only)
|
|
if: github.event_name == 'pull_request' && matrix.mode == 'preview-changes'
|
|
uses: actions/upload-artifact@v3
|
|
with:
|
|
name: .pr-comment.json
|
|
path: .pr-comment.json
|
|
|
|
- name: Verify zero changes (PR only)
|
|
if: matrix.mode == 'assert-no-changes'
|
|
run: >
|
|
diff-shades compare --check ${{ matrix.baseline-analysis }} ${{ matrix.target-analysis }}
|
|
|| (echo "Please verify you didn't change the stable code style unintentionally!" && exit 1)
|
|
|
|
- name: Check for failed files for target revision
|
|
# Even if the previous step failed, we should still check for failed files.
|
|
if: always()
|
|
run: >
|
|
diff-shades show-failed --check --show-log ${{ matrix.target-analysis }}
|