Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adopt tox workflow using coactions/dynamic-matrix #1883

Merged
merged 1 commit into from
Aug 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .config/dictionary.txt
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
CAs
assertIn
2 changes: 2 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
* @pycontribs/jira
/.github/ @ssbarnea
15 changes: 7 additions & 8 deletions .github/workflows/jira_ci.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,16 @@
name: ci

# runs only after tox workflow finished successfully
on:
# Trigger the workflow on push or pull request,
# but only for the main branch
push:
branches:
- main
pull_request:
branches:
- main
workflow_run:
workflows: [tox]
branches: [main]
types:
- completed

jobs:
server:
if: ${{ github.event.workflow_run.conclusion == 'success' }}
uses: pycontribs/jira/.github/workflows/jira_server_ci.yml@main

cloud:
Expand Down
179 changes: 179 additions & 0 deletions .github/workflows/tox.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,179 @@
---
name: tox
on:
push:
branches: ["main"]
pull_request:
branches: ["main"]

concurrency:
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true

env:
FORCE_COLOR: 1 # tox, pytest
PY_COLORS: 1

jobs:
prepare:
name: prepare
runs-on: ubuntu-24.04
outputs:
matrix: ${{ steps.generate_matrix.outputs.matrix }}
steps:
- name: Determine matrix
id: generate_matrix
uses: coactions/dynamic-matrix@v3
with:
min_python: "3.9"
max_python: "3.12"
default_python: "3.9"
other_names: |
lint
docs
pkg
# ^ arm64 runner is using py311 for matching python version used in AAP 2.5
platforms: linux,macos,linux-arm64:ubuntu-24.04-arm64-2core
skip_explode: "1"
build:
name: ${{ matrix.name }}
runs-on: ${{ matrix.os || 'ubuntu-24.04' }}
needs:
- prepare
strategy:
fail-fast: false
matrix: ${{ fromJson(needs.prepare.outputs.matrix) }}
steps:

- uses: actions/checkout@v4
with:
fetch-depth: 0 # needed by setuptools-scm
submodules: true

- name: Set pre-commit cache
uses: actions/cache@v4
if: ${{ contains(matrix.name, 'lint') }}
with:
path: |
~/.cache/pre-commit
key: pre-commit-${{ matrix.name }}-${{ hashFiles('.pre-commit-config.yaml') }}

- name: Set up Python ${{ matrix.python_version || '3.10' }}
uses: actions/setup-python@v5
with:
cache: pip
python-version: ${{ matrix.python_version || '3.10' }}
cache-dependency-path: "*requirements*.txt"

- name: Install tox
run: |
python3 -m pip install --upgrade pip wheel tox

- 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
if-no-files-found: error
path: |
.tox/**/log/
.tox/**/coverage.xml

- 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()
environment: check
permissions:
id-token: write
checks: read

needs:
- build

runs-on: ubuntu-24.04

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
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 reports
run: .github/check-coverage.sh

# Single uploads inside check job for codecov to allow use to retry
# it when it fails without running tests again. Fails often enough!
- name: Upload junit xml reports
# PRs from forks might not have access to the secret
if: env.CODECOV_TOKEN
env:
CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN || env.CODECOV_TOKEN }}
uses: codecov/test-results-action@v1
with:
name: ${{ matrix.name }}
files: "*/tests/output/junit/*.xml"
fail_ci_if_error: true
token: ${{ secrets.CODECOV_TOKEN }}

- 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
files: "*/tests/output/reports/coverage.xml"

# - 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:
delete-merged: true
3 changes: 2 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,8 @@ repos:
types: [text]
args: []
require_serial: false
additional_dependencies: []
additional_dependencies:
- tomli; python_version<'3.11'
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.6.2"
hooks:
Expand Down
5 changes: 0 additions & 5 deletions README.rst
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,6 @@ Jira Python Library
.. image:: https://img.shields.io/github/issues/pycontribs/jira.svg
:target: https://github.com/pycontribs/jira/issues

.. image:: https://img.shields.io/badge/irc-%23pycontribs-blue
:target: irc:///#pycontribs

------------

.. image:: https://readthedocs.org/projects/jira/badge/?version=main
:target: https://jira.readthedocs.io/

Expand Down
3 changes: 1 addition & 2 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,7 @@
# The encoding of source files.
# source_encoding = 'utf-8-sig'

# The master toctree document.
master_doc = "index"
root_doc = "index"

# General information about the project.
project = py_pkg.__name__
Expand Down
8 changes: 4 additions & 4 deletions jira/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -3279,7 +3279,7 @@ def create_temp_project_avatar(

This method returns a dict of properties that can be used to crop a subarea of a larger image for use.
This dict should be saved and passed to :py:meth:`confirm_project_avatar` to finish the avatar creation process.
If you want to cut out the middleman and confirm the avatar with Jira's default cropping,
If you want to confirm the avatar with Jira's default cropping,
pass the 'auto_confirm' argument with a truthy value and :py:meth:`confirm_project_avatar` will be called for you before this method returns.

Args:
Expand Down Expand Up @@ -3825,7 +3825,7 @@ def create_temp_user_avatar(

This method returns a dict of properties that can be used to crop a subarea of a larger image for use.
This dict should be saved and passed to :py:meth:`confirm_user_avatar` to finish the avatar creation process.
If you want to cut out the middleman and confirm the avatar with Jira's default cropping, pass the ``auto_confirm`` argument with a truthy value and
If you want to confirm the avatar with Jira's default cropping, pass the ``auto_confirm`` argument with a truthy value and
:py:meth:`confirm_user_avatar` will be called for you before this method returns.

Args:
Expand Down Expand Up @@ -4234,7 +4234,7 @@ def _add_client_cert_to_session(self):

If configured through the constructor.

https://docs.python-requests.org/en/master/user/advanced/#client-side-certificates
https://docs.python-requests.org/en/latest/user/advanced/#client-side-certificates
- str: a single file (containing the private key and the certificate)
- Tuple[str,str] a tuple of both files’ paths
"""
Expand All @@ -4246,7 +4246,7 @@ def _add_ssl_cert_verif_strategy_to_session(self):

If configured through the constructor.

https://docs.python-requests.org/en/master/user/advanced/#ssl-cert-verification
https://docs.python-requests.org/en/latest/user/advanced/#ssl-cert-verification
- str: Path to a `CA_BUNDLE` file or directory with certificates of trusted CAs.
- bool: True/False
"""
Expand Down
21 changes: 19 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -93,14 +93,31 @@ test = [
jirashell = "jira.jirashell:main"

[tool.codespell]
check-filenames = true
check-hidden = true
quiet-level = 0
write-changes = true
enable-colors = true
skip = [
"./.eggs",
"./.git",
"./.mypy_cache",
"./.tox",
"./build",
"./docs/build",
"./node_modules",
"./pip-wheel-metadata",
"./tests/icon.png",
".DS_Store",
".ruff_cache",
"AUTHORS",
"ChangeLog"
"ChangeLog",
"__pycache__",
"coverage.xml",
"dist",
]
ignore-words = ".config/dictionary.txt"
builtin = ["clear", "rare", "usage", "names", "code"]
ignore-words = [".config/dictionary.txt"]

[tool.files]
packages = """
Expand Down
5 changes: 4 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ requires =
# tox-extra
# tox-pyenv
envlist =
lint
pkg
docs
py311
py310
py39
Expand Down Expand Up @@ -99,7 +102,7 @@ commands =
'import pathlib; '\
'docs_dir = pathlib.Path(r"{toxworkdir}") / "docs_out"; index_file = docs_dir / "index.html"; print(f"\nDocumentation available under `file://\{index_file\}`\n\nTo serve docs, use `python3 -m http.server --directory \{docs_dir\} 0`\n")'

[testenv:packaging]
[testenv:pkg]
basepython = python3
description =
Build package, verify metadata, install package and assert behavior when ansible is missing.
Expand Down
Loading