Skip to content

Provide option in attrs.define to allow users to exclude parameters set to default value from repr #1104

Provide option in attrs.define to allow users to exclude parameters set to default value from repr

Provide option in attrs.define to allow users to exclude parameters set to default value from repr #1104

Workflow file for this run

---
name: CI
on:
merge_group:
push:
branches: [main]
tags: ["*"]
pull_request:
workflow_dispatch:
env:
FORCE_COLOR: "1"
PIP_DISABLE_PIP_VERSION_CHECK: "1"
PIP_NO_PYTHON_VERSION_WARNING: "1"
permissions: {}
jobs:
build-package:
name: Build & verify package
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: hynek/build-and-inspect-python-package@v2
id: baipp
outputs:
# Used to define the matrix for tests below. The value is based on
# packaging metadata (trove classifiers).
supported-python-versions: ${{ steps.baipp.outputs.supported_python_classifiers_json_array }}
tests:
name: Tests & Mypy on ${{ matrix.python-version }}
runs-on: ubuntu-latest
needs: build-package
strategy:
fail-fast: false
matrix:
# Created by the build-and-inspect-python-package action above.
python-version: ${{ fromJson(needs.build-package.outputs.supported-python-versions) }}
steps:
- name: Download pre-built packages
uses: actions/download-artifact@v4
with:
name: Packages
path: dist
- run: tar xf dist/*.tar.gz --strip-components=1
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
cache: pip
- name: Prepare tox
run: |
V=${{ matrix.python-version }}
DO_MYPY=1
if [[ "$V" == "3.7" || "$V" == "3.8" ]]; then
DO_MYPY=0
fi
echo DO_MYPY=$DO_MYPY >>$GITHUB_ENV
echo TOX_PYTHON=py$(echo $V | tr -d .) >>$GITHUB_ENV
python -Im pip install tox
- run: python -Im pip install tox-uv
if: matrix.python-version != '3.7'
- run: python -Im tox run -e ${{ env.TOX_PYTHON }}-mypy
if: env.DO_MYPY == '1'
- name: Remove src to ensure tests run against wheel
run: rm -rf src
- run: >
python -Im
tox run
--installpkg dist/*.whl
-e ${{ env.TOX_PYTHON }}-tests
- name: Upload coverage data
uses: actions/upload-artifact@v4
with:
name: coverage-data-${{ matrix.python-version }}
path: .coverage.*
if-no-files-found: ignore
tests-pypy:
name: Tests on ${{ matrix.python-version }}
runs-on: ubuntu-latest
needs: build-package
strategy:
fail-fast: false
matrix:
python-version:
- pypy-3.9
- pypy-3.10
steps:
- name: Download pre-built packages
uses: actions/download-artifact@v4
with:
name: Packages
path: dist
- run: |
tar xf dist/*.tar.gz --strip-components=1
rm -rf src # ensure tests run against wheel
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python-version }}
allow-prereleases: true
cache: pip
- run: python -Im pip install tox-uv
- run: >
python -Im
tox run
--installpkg dist/*.whl
-e pypy3-tests
coverage:
name: Combine & check coverage
runs-on: ubuntu-latest
needs: tests
steps:
- name: Download pre-built packages
uses: actions/download-artifact@v4
with:
name: Packages
path: dist
- run: tar xf dist/*.tar.gz --strip-components=1
- uses: actions/setup-python@v5
with:
python-version-file: .python-version-default
cache: pip
- name: Download coverage data
uses: actions/download-artifact@v4
with:
pattern: coverage-data-*
merge-multiple: true
- name: Combine coverage & fail if it's <100%.
run: |
python -Im pip install coverage[toml]
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
- name: Upload HTML report if check failed.
uses: actions/upload-artifact@v4
with:
name: html-report
path: htmlcov
if: ${{ failure() }}
docs:
name: Build docs & run doctests
runs-on: ubuntu-latest
needs: build-package
steps:
- name: Download pre-built packages
uses: actions/download-artifact@v4
with:
name: Packages
path: dist
- run: tar xf dist/*.tar.gz --strip-components=1
- uses: actions/setup-python@v5
with:
# Keep in sync with tox/docs and .readthedocs.yaml.
python-version: "3.12"
cache: pip
- run: python -Im pip install tox-uv
- run: python -Im tox run -e docs,changelog
pyright:
name: Check types using pyright
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version-file: .python-version-default
cache: pip
- run: python -Im pip install tox-uv
- run: python -Im tox run -e pyright
install-dev:
name: Verify dev env
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version-file: .python-version-default
cache: pip
- run: python -Im pip install uv
- run: uv venv --python $(cat .python-version-default)
- run: uv pip install -e .[dev]
- name: Ensure we can import attr and attrs packages
run: |
source .venv/bin/activate
python -Ic 'import attr; print(attr.__version__)'
python -Ic 'import attrs; print(attrs.__version__)'
# Ensure everything required is passing for branch protection.
required-checks-pass:
if: always()
needs:
- coverage
- tests-pypy
- docs
- install-dev
- pyright
runs-on: ubuntu-latest
steps:
- name: Decide whether the needed jobs succeeded or failed
uses: re-actors/alls-green@release/v1
with:
jobs: ${{ toJSON(needs) }}