diff --git a/.config/constraints.txt b/.config/constraints.txt index dc15496..91b84be 100644 --- a/.config/constraints.txt +++ b/.config/constraints.txt @@ -58,7 +58,8 @@ pluggy==1.5.0 # via pytest pycparser==2.22 # via cffi pygments==2.18.0 # via mkdocs-material pymdown-extensions==10.12 # via markdown-exec, mkdocs-ansible, mkdocs-material, mkdocstrings -pytest==8.3.4 # via pytest-mock, pytest-plus, ansible-compat (pyproject.toml) +pytest==8.3.4 # via pytest-instafail, pytest-mock, pytest-plus, ansible-compat (pyproject.toml) +pytest-instafail==0.5.0 # via ansible-compat (pyproject.toml) pytest-mock==3.14.0 # via ansible-compat (pyproject.toml) pytest-plus==0.7.0 # via ansible-compat (pyproject.toml) python-dateutil==2.9.0.post0 # via ghp-import, mkdocs-macros-plugin diff --git a/.config/requirements-test.in b/.config/requirements-test.in index c1430cd..6901fdd 100644 --- a/.config/requirements-test.in +++ b/.config/requirements-test.in @@ -1,5 +1,6 @@ coverage pip +pytest-instafail pytest-mock pytest-plus>=0.6.1 pytest>=7.2.0 diff --git a/.github/workflows/tox.yml b/.github/workflows/tox.yml index ad5aba9..72e3dd8 100644 --- a/.github/workflows/tox.yml +++ b/.github/workflows/tox.yml @@ -1,180 +1,40 @@ +--- name: tox + on: - create: # is used for publishing to PyPI and TestPyPI - tags: # any tag regardless of its name, no branches - - "**" - push: # only publishes pushes to the main branch to TestPyPI - branches: # any integration branch but not tag + push: + branches: - "main" + - "releases/**" + - "stable/**" pull_request: - schedule: - - cron: 1 0 * * * # Run daily at 0:01 UTC + branches: + - "main" workflow_call: -jobs: - prepare: - name: prepare - runs-on: ubuntu-22.04 - outputs: - matrix: ${{ steps.generate_matrix.outputs.matrix }} - steps: - - name: Determine matrix - id: generate_matrix - uses: coactions/dynamic-matrix@v4 - with: - min_python: "3.9" - max_python: "3.13" - default_python: "3.10" - other_names: | - lint - docs - pkg - py39-ansible214 - py39-ansible215 - py310-ansible215 - py310-ansible217 - py311-ansible215 - py312-ansible216 - py312-ansible217 - py312-devel - py313-devel - smoke - platforms: linux,macos - macos: minmax - build: - name: ${{ matrix.name }} - - runs-on: ${{ matrix.os || 'ubuntu-22.04' }} - needs: prepare - strategy: - fail-fast: false - matrix: ${{ fromJson(needs.prepare.outputs.matrix) }} - env: - FORCE_COLOR: 1 - PYTEST_REQPASS: 109 - steps: - - uses: actions/checkout@v4 - with: - fetch-depth: 0 # needed by setuptools-scm - submodules: true - - - name: Set up Python ${{ matrix.python_version }} - uses: actions/setup-python@v5 - with: - python-version: ${{ matrix.python_version }} - - - name: Pre-commit cache - uses: actions/cache@v4 - with: - path: ~/.cache/pre-commit - key: ${{ matrix.name }}-pre-commit-${{ hashFiles('setup.cfg', 'tox.ini', 'pyproject.toml', '.pre-commit-config.yaml') }} - - - name: Pip cache - uses: actions/cache@v4 - with: - path: ~/.cache/pip - key: ${{ matrix.name }}-pip-${{ hashFiles('setup.cfg', 'tox.ini', 'pyproject.toml', '.pre-commit-config.yaml') }} - - - name: Install tox - run: python3 -m pip install --upgrade 'tox>=4.0.3' - - - run: ${{ matrix.command }} - - - run: ${{ matrix.command2 }} - if: ${{ matrix.command2 }} - - - run: ${{ matrix.command3 }} - if: ${{ matrix.command3 }} - - - run: ${{ matrix.command4 }} - if: ${{ matrix.command4 }} - - - run: ${{ matrix.command5 }} - if: ${{ matrix.command5 }} - - - name: Archive logs - uses: actions/upload-artifact@v4 - with: - name: logs-${{ matrix.name }}.zip - include-hidden-files: true - path: | - .tox/**/log/ - .tox/**/.coverage* - .tox/**/coverage.xml +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true - - name: Report failure if git reports dirty status - run: | - if [[ -n $(git status -s) ]]; then - # shellcheck disable=SC2016 - echo -n '::error file=git-status::' - printf '### Failed as git reported modified and/or untracked files\n```\n%s\n```\n' "$(git status -s)" | tee -a "$GITHUB_STEP_SUMMARY" - exit 99 - fi - # https://github.com/actions/toolkit/issues/193 - - check: - if: always() - permissions: - id-token: write - checks: read - - needs: - - build - runs-on: ubuntu-latest - - steps: - # checkout needed for codecov action which needs codecov.yml file - - uses: actions/checkout@v4 - - - name: Set up Python # likely needed for coverage - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - run: pip3 install 'coverage>=7.5.1' - - - name: Merge logs into a single archive - uses: actions/upload-artifact/merge@v4 - with: - name: logs.zip - include-hidden-files: true - pattern: logs-*.zip - # artifacts like py312.zip and py312-macos do have overlapping files - separate-directories: true - - - name: Download artifacts - uses: actions/download-artifact@v4 - with: - name: logs.zip - path: . - - - name: Check for expected number of coverage.xml reports - run: | - JOBS_PRODUCING_COVERAGE=16 - if [ "$(find . -name coverage.xml | wc -l | bc)" -ne "${JOBS_PRODUCING_COVERAGE}" ]; then - echo "::error::Number of coverage.xml files was not the expected one (${JOBS_PRODUCING_COVERAGE}): $(find . -name coverage.xml |xargs echo)" - exit 1 - fi - - - name: Upload coverage data - uses: codecov/codecov-action@v4 - with: - name: ${{ matrix.name }} - # verbose: true # optional (default = false) - fail_ci_if_error: true - use_oidc: true # cspell:ignore oidc - - - name: Check codecov.io status - if: github.event_name == 'pull_request' - uses: coactions/codecov-status@main - - - name: Decide whether the needed jobs succeeded or failed - uses: re-actors/alls-green@release/v1 - with: - jobs: ${{ toJSON(needs) }} - - - name: Delete Merged Artifacts - uses: actions/upload-artifact/merge@v4 - with: - include-hidden-files: true - delete-merged: true +jobs: + tox: + uses: ansible/team-devtools/.github/workflows/tox.yml@main + with: + jobs_producing_coverage: 11 + other_names: | + docs + lint + pkg + py39-ansible214 + py39-ansible215 + py310-ansible215 + py310-ansible217 + py311-ansible215 + py312-ansible216 + py312-ansible217 + py312-devel + py313-devel + py310-macos:tox -e py310 + py313-macos:tox -e py313 + smoke + skip_explode: "1" diff --git a/.gitignore b/.gitignore index 8e14d57..59a247c 100644 --- a/.gitignore +++ b/.gitignore @@ -134,3 +134,4 @@ ansible_collections # Generated by setuptools-scm src/ansible_compat/_version.py +node_modules diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..fcec5d7 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,28 @@ +{ + "name": "ansible-compat", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "prettier": "^3.4.2" + } + }, + "node_modules/prettier": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..bb8539d --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "devDependencies": { + "prettier": "^3.4.2" + } +}