Adding Python 3.13 support

This commit is contained in:
Patrick Lehmann
2024-10-24 22:37:42 +02:00
committed by GitHub
12 changed files with 313 additions and 147 deletions

View File

@@ -1,9 +0,0 @@
input: doc
output: _build
requirements: requirements.txt
target: gh-pages
formats: [ html ]
images:
base: btdi/sphinx:pytooling
latex: btdi/latex
theme: https://codeload.GitHub.com/buildthedocs/sphinx.theme/tar.gz/v1

View File

@@ -32,12 +32,12 @@ on:
python_version: python_version:
description: 'Python version.' description: 'Python version.'
required: false required: false
default: '3.12' default: '3.13'
type: string type: string
python_version_list: python_version_list:
description: 'Space separated list of Python versions to run tests with.' description: 'Space separated list of Python versions to run tests with.'
required: false required: false
default: '3.9 3.10 3.11 3.12' default: '3.9 3.10 3.11 3.12 3.13'
type: string type: string
system_list: system_list:
description: 'Space separated list of systems to run tests on.' description: 'Space separated list of systems to run tests on.'
@@ -123,8 +123,8 @@ jobs:
disable_list = "${{ inputs.disable_list }}".strip() disable_list = "${{ inputs.disable_list }}".strip()
currentMSYS2Version = "3.11" currentMSYS2Version = "3.11"
currentAlphaVersion = "3.13" currentAlphaVersion = "3.14"
currentAlphaRelease = "3.13.0-alpha.1" currentAlphaRelease = "3.14.0-alpha.1"
if systems == "": if systems == "":
print("::error title=Parameter::system_list is empty.") print("::error title=Parameter::system_list is empty.")
@@ -151,8 +151,8 @@ jobs:
else: else:
disabled = [disable.strip() for disable in disable_list.split(" ")] disabled = [disable.strip() for disable in disable_list.split(" ")]
if "3.7" in versions: if "3.8" in versions:
print("::warning title=Deprecated::Support for Python 3.7 ended in 2023.06.27.") print("::warning title=Deprecated::Support for Python 3.8 ended in 2024.10.")
if "msys2" in systems: if "msys2" in systems:
print("::warning title=Deprecated::System 'msys2' will be replaced by 'mingw64'.") print("::warning title=Deprecated::System 'msys2' will be replaced by 'mingw64'.")
if currentAlphaVersion in versions: if currentAlphaVersion in versions:
@@ -164,13 +164,13 @@ jobs:
data = { data = {
# Python and PyPy versions supported by "setup-python" action # Python and PyPy versions supported by "setup-python" action
"python": { "python": {
"3.7": { "icon": "⚫", "until": "2023.06.27" }, "3.8": { "icon": "⚫", "until": "2024.10" },
"3.8": { "icon": "🔴", "until": "2024.10" }, "3.9": { "icon": "🔴", "until": "2025.10" },
"3.9": { "icon": "🟠", "until": "2025.10" }, "3.10": { "icon": "🟠", "until": "2026.10" },
"3.10": { "icon": "🟡", "until": "2026.10" }, "3.11": { "icon": "🟡", "until": "2027.10" },
"3.11": { "icon": "🟢", "until": "2027.10" },
"3.12": { "icon": "🟢", "until": "2028.10" }, "3.12": { "icon": "🟢", "until": "2028.10" },
# "3.13": { "icon": "🟣", "until": "2028.10" }, "3.13": { "icon": "🟢", "until": "2029.10" },
"3.14": { "icon": "🟣", "until": "2030.10" },
"pypy-3.7": { "icon": "⟲⚫", "until": "????.??" }, "pypy-3.7": { "icon": "⟲⚫", "until": "????.??" },
"pypy-3.8": { "icon": "⟲🔴", "until": "????.??" }, "pypy-3.8": { "icon": "⟲🔴", "until": "????.??" },
"pypy-3.9": { "icon": "⟲🟠", "until": "????.??" }, "pypy-3.9": { "icon": "⟲🟠", "until": "????.??" },

View File

@@ -6,10 +6,10 @@ on:
jobs: jobs:
Params: Params:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.10 3.11" python_version_list: "3.12 3.13"
system_list: "ubuntu windows" system_list: "ubuntu windows"
Testing: Testing:
@@ -50,7 +50,7 @@ jobs:
retention-days: 1 retention-days: 1
ArtifactCleanUp: ArtifactCleanUp:
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r1 uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@dev
needs: needs:
- Params - Params
- Testing - Testing

View File

@@ -6,54 +6,54 @@ on:
jobs: jobs:
Params_Default: Params_Default:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
Params_PythonVersions: Params_PythonVersions:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.9 3.10 pypy-3.8 pypy-3.9" python_version_list: "3.11 3.12 pypy-3.9 pypy-3.10"
Params_Systems: Params_Systems:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
system_list: "windows mingw32 mingw64" system_list: "windows mingw32 mingw64"
Params_Include: Params_Include:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.10" python_version_list: "3.11"
system_list: "ubuntu windows macos" system_list: "ubuntu windows macos macos-arm"
include_list: "ubuntu:3.11 ubuntu:3.12" include_list: "ubuntu:3.12 ubuntu:3.13"
Params_Exclude: Params_Exclude:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.10" python_version_list: "3.12"
system_list: "ubuntu windows macos" system_list: "ubuntu windows macos macos-arm"
exclude_list: "windows:3.10 windows:3.11" exclude_list: "windows:3.12 windows:3.13"
Params_Disable: Params_Disable:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.10" python_version_list: "3.12"
system_list: "ubuntu windows macos" system_list: "ubuntu windows macos macos-arm"
disable_list: "windows:3.10 windows:3.11" disable_list: "windows:3.12 windows:3.13"
Params_All: Params_All:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Example name: Example
python_version_list: "3.10 3.11" python_version_list: "3.12 3.13"
system_list: "ubuntu windows macos" system_list: "ubuntu windows macos macos-arm"
include_list: "windows:3.8 windows:3.9 windows:3.12" include_list: "windows:3.10 windows:3.11 windows:3.13"
exclude_list: "macos:3.10 macos:3.11" exclude_list: "macos:3.12 macos:3.13"
Params_Check: Params_Check:
needs: needs:
@@ -80,12 +80,10 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.12" expectedPythonVersion = "3.13"
expectedPythons = ["3.8", "3.9", "3.10", "3.11", "3.12"] expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"]
expectedSystems = ["ubuntu", "windows", "macos"] expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw64:3.11", "ucrt64:3.11"] expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw64:3.11", "ucrt64:3.11"]
expectedJobs.remove("macos:3.8")
expectedJobs.remove("macos:3.9")
expectedName = "Example" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -116,7 +114,10 @@ jobs:
print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.")
print("Actual jobs:") print("Actual jobs:")
for job in actualPythonJobs: for job in actualPythonJobs:
print(f" {job['system']}:{job['python']}") if job['system'] == "msys2":
print(f" {job['runtime'].lower()}:{job['python']}")
else:
print(f" {job['system']}:{job['python']}")
print("Expected jobs:") print("Expected jobs:")
for job in expectedJobs: for job in expectedJobs:
print(f" {job}") print(f" {job}")
@@ -142,13 +143,10 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.12" expectedPythonVersion = "3.13"
expectedPythons = ["3.9", "3.10", "pypy-3.8", "pypy-3.9"] expectedPythons = ["3.11", "3.12", "pypy-3.9", "pypy-3.10"]
expectedSystems = ["ubuntu", "windows", "macos"] expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw64:3.11", "ucrt64:3.11"] expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw64:3.11", "ucrt64:3.11"]
expectedJobs.remove("macos:3.9")
expectedJobs.remove("macos:pypy-3.8")
expectedJobs.remove("macos:pypy-3.9")
expectedName = "Example" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -179,7 +177,10 @@ jobs:
print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.")
print("Actual jobs:") print("Actual jobs:")
for job in actualPythonJobs: for job in actualPythonJobs:
print(f" {job['system']}:{job['python']}") if job['system'] == "msys2":
print(f" {job['runtime'].lower()}:{job['python']}")
else:
print(f" {job['system']}:{job['python']}")
print("Expected jobs:") print("Expected jobs:")
for job in expectedJobs: for job in expectedJobs:
print(f" {job}") print(f" {job}")
@@ -205,8 +206,8 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.12" expectedPythonVersion = "3.13"
expectedPythons = ["3.8", "3.9", "3.10", "3.11", "3.12"] expectedPythons = ["3.9", "3.10", "3.11", "3.12", "3.13"]
expectedSystems = ["windows"] expectedSystems = ["windows"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw32:3.11", "mingw64:3.11"] expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["mingw32:3.11", "mingw64:3.11"]
expectedName = "Example" expectedName = "Example"
@@ -239,7 +240,10 @@ jobs:
print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.")
print("Actual jobs:") print("Actual jobs:")
for job in actualPythonJobs: for job in actualPythonJobs:
print(f" {job['system']}:{job['python']}") if job['system'] == "msys2":
print(f" {job['runtime'].lower()}:{job['python']}")
else:
print(f" {job['system']}:{job['python']}")
print("Expected jobs:") print("Expected jobs:")
for job in expectedJobs: for job in expectedJobs:
print(f" {job}") print(f" {job}")
@@ -265,9 +269,9 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.12" expectedPythonVersion = "3.13"
expectedPythons = ["3.10"] expectedPythons = ["3.12"]
expectedSystems = ["ubuntu", "windows", "macos"] expectedSystems = ["ubuntu", "windows", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["ubuntu:3.11", "ubuntu:3.12"] expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["ubuntu:3.11", "ubuntu:3.12"]
expectedName = "Example" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
@@ -299,7 +303,10 @@ jobs:
print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.")
print("Actual jobs:") print("Actual jobs:")
for job in actualPythonJobs: for job in actualPythonJobs:
print(f" {job['system']}:{job['python']}") if job['system'] == "msys2":
print(f" {job['runtime'].lower()}:{job['python']}")
else:
print(f" {job['system']}:{job['python']}")
print("Expected jobs:") print("Expected jobs:")
for job in expectedJobs: for job in expectedJobs:
print(f" {job}") print(f" {job}")
@@ -325,9 +332,9 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.12" expectedPythonVersion = "3.13"
expectedPythons = ["3.10"] expectedPythons = ["3.12"]
expectedSystems = ["ubuntu", "macos"] expectedSystems = ["ubuntu", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons]
expectedName = "Example" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
@@ -359,7 +366,10 @@ jobs:
print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.")
print("Actual jobs:") print("Actual jobs:")
for job in actualPythonJobs: for job in actualPythonJobs:
print(f" {job['system']}:{job['python']}") if job['system'] == "msys2":
print(f" {job['runtime'].lower()}:{job['python']}")
else:
print(f" {job['system']}:{job['python']}")
print("Expected jobs:") print("Expected jobs:")
for job in expectedJobs: for job in expectedJobs:
print(f" {job}") print(f" {job}")
@@ -385,9 +395,9 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.12" expectedPythonVersion = "3.13"
expectedPythons = ["3.10"] expectedPythons = ["3.12"]
expectedSystems = ["ubuntu", "macos"] expectedSystems = ["ubuntu", "macos", "macos-arm"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons]
expectedName = "Example" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
@@ -419,7 +429,10 @@ jobs:
print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.")
print("Actual jobs:") print("Actual jobs:")
for job in actualPythonJobs: for job in actualPythonJobs:
print(f" {job['system']}:{job['python']}") if job['system'] == "msys2":
print(f" {job['runtime'].lower()}:{job['python']}")
else:
print(f" {job['system']}:{job['python']}")
print("Expected jobs:") print("Expected jobs:")
for job in expectedJobs: for job in expectedJobs:
print(f" {job}") print(f" {job}")
@@ -445,10 +458,10 @@ jobs:
from pyTooling.Common import zipdicts from pyTooling.Common import zipdicts
expectedPythonVersion = "3.12" expectedPythonVersion = "3.13"
expectedPythons = ["3.10", "3.11"] expectedPythons = ["3.12", "3.13"]
expectedSystems = ["ubuntu", "windows"] expectedSystems = ["ubuntu", "windows"]
expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["windows:3.8", "windows:3.9", "windows:3.12"] expectedJobs = [f"{system}:{python}" for system in expectedSystems for python in expectedPythons] + ["windows:3.10", "windows:3.11", "windows:3.13"]
expectedName = "Example" expectedName = "Example"
expectedArtifacts = { expectedArtifacts = {
"unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML", "unittesting_xml": f"{expectedName}-UnitTestReportSummary-XML",
@@ -479,7 +492,10 @@ jobs:
print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.") print(f"Number of 'python_jobs' does not match: {len(actualPythonJobs)} != {len(expectedJobs)}.")
print("Actual jobs:") print("Actual jobs:")
for job in actualPythonJobs: for job in actualPythonJobs:
print(f" {job['system']}:{job['python']}") if job['system'] == "msys2":
print(f" {job['runtime'].lower()}:{job['python']}")
else:
print(f" {job['system']}:{job['python']}")
print("Expected jobs:") print("Expected jobs:")
for job in expectedJobs: for job in expectedJobs:
print(f" {job}") print(f" {job}")

View File

@@ -6,21 +6,21 @@ on:
jobs: jobs:
UnitTestingParams: UnitTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: pyDummy name: pyDummy
python_version_list: "3.8 3.9 3.10 3.11 3.12 pypy-3.8 pypy-3.9 pypy-3.10" python_version_list: "3.8 3.9 3.10 3.11 3.12 3.13 pypy-3.8 pypy-3.9 pypy-3.10"
disable_list: "windows:pypy-3.10" # disable_list: "windows:pypy-3.10"
PlatformTestingParams: PlatformTestingParams:
uses: pyTooling/Actions/.github/workflows/Parameters.yml@r1 uses: pyTooling/Actions/.github/workflows/Parameters.yml@dev
with: with:
name: Platform name: Platform
python_version_list: "" python_version_list: ""
system_list: "ubuntu windows macos mingw32 mingw64 clang64 ucrt64" system_list: "ubuntu windows macos mingw32 mingw64 clang64 ucrt64"
UnitTesting: UnitTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r1 uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@dev
needs: needs:
- UnitTestingParams - UnitTestingParams
with: with:
@@ -33,7 +33,7 @@ jobs:
# coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }} # coverage_html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_html }}
PlatformTesting: PlatformTesting:
uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@r1 uses: pyTooling/Actions/.github/workflows/UnitTesting.yml@dev
needs: needs:
- PlatformTestingParams - PlatformTestingParams
with: with:
@@ -48,7 +48,7 @@ jobs:
coverage_html_artifact: ${{ fromJson(needs.PlatformTestingParams.outputs.artifact_names).codecoverage_html }} coverage_html_artifact: ${{ fromJson(needs.PlatformTestingParams.outputs.artifact_names).codecoverage_html }}
# Coverage: # Coverage:
# uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@r1 # uses: pyTooling/Actions/.github/workflows/CoverageCollection.yml@dev
# needs: # needs:
# - UnitTestingParams # - UnitTestingParams
# with: # with:
@@ -58,7 +58,7 @@ jobs:
# codacy_token: ${{ secrets.CODACY_PROJECT_TOKEN }} # codacy_token: ${{ secrets.CODACY_PROJECT_TOKEN }}
StaticTypeCheck: StaticTypeCheck:
uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@r1 uses: pyTooling/Actions/.github/workflows/StaticTypeCheck.yml@dev
needs: needs:
- UnitTestingParams - UnitTestingParams
with: with:
@@ -69,7 +69,7 @@ jobs:
html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }}
PublishCoverageResults: PublishCoverageResults:
uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@r1 uses: pyTooling/Actions/.github/workflows/PublishCoverageResults.yml@dev
needs: needs:
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
@@ -92,7 +92,7 @@ jobs:
additional_merge_args: '-d "--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit;reduce-depth:pytest.tests.platform"' additional_merge_args: '-d "--pytest=rewrite-dunder-init;reduce-depth:pytest.tests.unit;reduce-depth:pytest.tests.platform"'
Package: Package:
uses: pyTooling/Actions/.github/workflows/Package.yml@r1 uses: pyTooling/Actions/.github/workflows/Package.yml@dev
needs: needs:
- UnitTestingParams - UnitTestingParams
- UnitTesting - UnitTesting
@@ -103,25 +103,40 @@ jobs:
artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }} artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).package_all }}
# VerifyDocs: # VerifyDocs:
# uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@r1 # uses: pyTooling/Actions/.github/workflows/VerifyDocs.yml@dev
# needs: # needs:
# - UnitTestingParams # - UnitTestingParams
# with: # with:
# python_version: ${{ needs.UnitTestingParams.outputs.python_version }} # python_version: ${{ needs.UnitTestingParams.outputs.python_version }}
BuildTheDocs: HTMLDocumentation:
uses: pyTooling/Actions/.github/workflows/BuildTheDocs.yml@r1 uses: pyTooling/Actions/.github/workflows/SphinxDocumentation.yml@dev
needs: needs:
- UnitTestingParams - UnitTestingParams
# - VerifyDocs # - VerifyDocs
with: with:
artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }} python_version: ${{ needs.UnitTestingParams.outputs.python_version }}
# unittest_xml_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).unittesting_xml }}
# coverage_json_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).codecoverage_json }}
html_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_html }}
latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }}
PublishToGitHubPages: PDFDocumentation:
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@r1 uses: pyTooling/Actions/.github/workflows/LaTeXDocumentation.yml@r1
needs: needs:
- UnitTestingParams - UnitTestingParams
- BuildTheDocs - HTMLDocumentation
with:
document: actions
latex_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_latex }}
pdf_artifact: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).documentation_pdf }}
PublishToGitHubPages:
uses: pyTooling/Actions/.github/workflows/PublishToGitHubPages.yml@dev
needs:
- UnitTestingParams
- HTMLDocumentation
# - PDFDocumentation
# - Coverage # - Coverage
- PublishCoverageResults - PublishCoverageResults
- StaticTypeCheck - StaticTypeCheck
@@ -131,7 +146,7 @@ jobs:
typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }} typing: ${{ fromJson(needs.UnitTestingParams.outputs.artifact_names).statictyping_html }}
ReleasePage: ReleasePage:
uses: pyTooling/Actions/.github/workflows/Release.yml@r1 uses: pyTooling/Actions/.github/workflows/Release.yml@dev
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- UnitTesting - UnitTesting
@@ -142,7 +157,7 @@ jobs:
- PublishToGitHubPages - PublishToGitHubPages
PublishOnPyPI: PublishOnPyPI:
uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@r1 uses: pyTooling/Actions/.github/workflows/PublishOnPyPI.yml@dev
if: startsWith(github.ref, 'refs/tags') if: startsWith(github.ref, 'refs/tags')
needs: needs:
- UnitTestingParams - UnitTestingParams
@@ -156,7 +171,7 @@ jobs:
PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }} PYPI_TOKEN: ${{ secrets.PYPI_TOKEN }}
ArtifactCleanUp: ArtifactCleanUp:
uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@r1 uses: pyTooling/Actions/.github/workflows/ArtifactCleanUp.yml@dev
needs: needs:
- UnitTestingParams - UnitTestingParams
- PlatformTestingParams - PlatformTestingParams

View File

@@ -138,7 +138,7 @@ python_version_list
| Parameter Name | Required | Type | Default | | Parameter Name | Required | Type | Default |
+======================+==========+==========+============================+ +======================+==========+==========+============================+
| python_version_list | optional | string | ``3.8 3.9 3.10 3.11 3.12`` | | python_version_list | optional | string | ``3.8 3.9 3.10 3.11 3.12`` |
+----------------------+----------+----------+-------------------------- -+ +----------------------+----------+----------+----------------------------+
Space separated list of CPython versions and/or mypy version to run tests with. Space separated list of CPython versions and/or mypy version to run tests with.

115
doc/_static/css/override.css vendored Normal file
View File

@@ -0,0 +1,115 @@
/* theme overrides */
.rst-content h1,
.rst-content h2 {
margin-top: 24px;
margin-bottom: 6px;
text-decoration: underline;
}
.rst-content h3,
.rst-content h4,
.rst-content h5,
.rst-content h6 {
margin-top: 12px;
margin-bottom: 6px;
}
.rst-content p {
margin-bottom: 6px
}
/* general overrides */
html {
font-size: 15px;
}
footer {
font-size: 95%;
text-align: center
}
footer p {
margin-bottom: 0px /* 12px */;
font-size: 95%
}
section > p,
.section p,
.simple li {
text-align: justify
}
.rst-content .topic-title {
font-size: larger;
font-weight: 700;
margin-top: 18px;
margin-bottom: 6px;
}
.rst-content p.rubric {
text-decoration: underline;
font-weight: 700;
margin-top: 18px;
margin-bottom: 16px;
}
/* wyrm overrides */
.wy-menu-vertical header,
.wy-menu-vertical p.caption {
color: #9b9b9b /* #55a5d9 */;
padding: 0 0.809em /* 0 1.618em */;
margin: 6px 0 0 0 /* 12px 0 0 */;
border-top: 1px solid #9b9b9b;
}
.wy-side-nav-search {
margin-bottom: 0 /* .809em */;
background-color: #333333 /* #2980b9 */;
/* BTD: */
/*color: #fcfcfc*/
}
.wy-side-nav-search input[type=text] {
border-radius: 0px /* 50px */;
}
.wy-side-nav-search .wy-dropdown > a, .wy-side-nav-search > a {
/* BTD: */
/*color: #fcfcfc;*/
margin-bottom: 0.404em /* .809em */;
}
.wy-side-nav-search > div.version {
margin: 0 0 6px 0;
/* BTD: */
/*margin-top: -.4045em;*/
}
.wy-nav .wy-menu-vertical a:hover {
background-color: #333333 /* #2980b9 */;
}
.wy-nav-content {
max-width: 1600px /* 800px */ ;
}
.wy-nav-top {
background: #333333 /* #2980b9 */;
}
/* Sphinx Design */
.sd-tab-set {
margin: 0
}
.sd-tab-set > label {
padding-top: .5em;
padding-right: 1em;
padding-bottom: .5em;
padding-left: 1em
}
.sd-container-fluid {
padding-left: 0;
padding-right: 0;
}

View File

@@ -14,7 +14,7 @@ ROOT = Path(__file__).resolve().parent
sys_path.insert(0, abspath(".")) sys_path.insert(0, abspath("."))
sys_path.insert(0, abspath("..")) sys_path.insert(0, abspath(".."))
sys_path.insert(0, abspath("../pyDummy")) sys_path.insert(0, abspath("../pyDummy"))
sys_path.insert(0, abspath("_extensions")) # sys_path.insert(0, abspath("_extensions"))
# ============================================================================== # ==============================================================================
@@ -23,9 +23,11 @@ sys_path.insert(0, abspath("_extensions"))
# The version info for the project you're documenting, acts as replacement for # The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the # |version| and |release|, also used in various other places throughout the
# built documents. # built documents.
project = "Actions" githubNamespace = "pyTooling"
githubProject = "Actions"
project = "pyDummy"
packageInformationFile = Path(f"../pyDummy/__init__.py") packageInformationFile = Path(f"../{project}/__init__.py")
versionInformation = extractVersionInformation(packageInformationFile) versionInformation = extractVersionInformation(packageInformationFile)
author = versionInformation.Author author = versionInformation.Author
@@ -73,30 +75,15 @@ except Exception as ex:
# ============================================================================== # ==============================================================================
# Options for HTML output # Options for HTML output
# ============================================================================== # ==============================================================================
html_context = {} html_theme = "sphinx_rtd_theme"
ctx = ROOT / "context.json" html_theme_options = {
if ctx.is_file(): "logo_only": True,
html_context.update(loads(ctx.open('r').read())) "vcs_pageview_mode": 'blob',
"navigation_depth": 5,
if (ROOT / "_theme").is_dir(): }
html_theme_path = ["."] html_css_files = [
html_theme = "_theme" 'css/override.css',
html_theme_options = { ]
"logo_only": True,
"home_breadcrumbs": False,
"vcs_pageview_mode": 'blob',
# "body_max_width": None
# "navigation_depth": 5,
}
elif find_spec("sphinx_rtd_theme") is not None:
html_theme = "sphinx_rtd_theme"
html_theme_options = {
"logo_only": True,
"vcs_pageview_mode": 'blob',
# "navigation_depth": 5,
}
else:
html_theme = "alabaster"
# Add any paths that contain custom static files (such as style sheets) here, # Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files, # relative to this directory. They are copied after the builtin static files,
@@ -107,7 +94,7 @@ html_logo = str(Path(html_static_path[0]) / "logo.png")
html_favicon = str(Path(html_static_path[0]) / "icon.png") html_favicon = str(Path(html_static_path[0]) / "icon.png")
# Output file base name for HTML help builder. # Output file base name for HTML help builder.
htmlhelp_basename = "ActionsDoc" htmlhelp_basename = f"{githubProject}Doc"
# If not None, a 'Last updated on:' timestamp is inserted at every page # If not None, a 'Last updated on:' timestamp is inserted at every page
# bottom, using the given strftime format. # bottom, using the given strftime format.
@@ -160,10 +147,10 @@ latex_elements = {
# author, documentclass [howto, manual, or own class]). # author, documentclass [howto, manual, or own class]).
latex_documents = [ latex_documents = [
( master_doc, ( master_doc,
"Actions.tex", f"{githubProject}.tex",
"The pyTooling Actions Documentation", f"The {githubProject} Documentation",
"Patrick Lehmann", f"Patrick Lehmann",
"manual" f"manual"
), ),
] ]
@@ -174,7 +161,6 @@ latex_documents = [
extensions = [ extensions = [
# Standard Sphinx extensions # Standard Sphinx extensions
"sphinx.ext.autodoc", "sphinx.ext.autodoc",
"sphinx.ext.coverage",
"sphinx.ext.extlinks", "sphinx.ext.extlinks",
"sphinx.ext.intersphinx", "sphinx.ext.intersphinx",
"sphinx.ext.inheritance_diagram", "sphinx.ext.inheritance_diagram",
@@ -186,10 +172,12 @@ extensions = [
# SphinxContrib extensions # SphinxContrib extensions
"sphinxcontrib.mermaid", "sphinxcontrib.mermaid",
# Other extensions # Other extensions
"sphinx_fontawesome", "sphinx_design",
"sphinx_copybutton",
"sphinx_autodoc_typehints", "sphinx_autodoc_typehints",
"sphinx_inline_tabs",
"autoapi.sphinx", "autoapi.sphinx",
"sphinx_reports",
# User defined extensions
] ]
@@ -221,11 +209,11 @@ autodoc_typehints = "both"
# Sphinx.Ext.ExtLinks # Sphinx.Ext.ExtLinks
# ============================================================================== # ==============================================================================
extlinks = { extlinks = {
"gh": ("https://GitHub.com/%s", "gh:%s"), "gh": (f"https://GitHub.com/%s", "gh:%s"),
"ghissue": ("https://GitHub.com/pyTooling/Actions/issues/%s", "issue #%s"), "ghissue": (f"https://GitHub.com/{githubNamespace}/{githubProject}/issues/%s", "issue #%s"),
"ghpull": ("https://GitHub.com/pyTooling/Actions/pull/%s", "pull request #%s"), "ghpull": (f"https://GitHub.com/{githubNamespace}/{githubProject}/pull/%s", "pull request #%s"),
"ghsrc": ("https://GitHub.com/pyTooling/Actions/blob/main/%s", None), "ghsrc": (f"https://GitHub.com/{githubNamespace}/{githubProject}/blob/main/%s", None),
"wiki": ("https://en.wikipedia.org/wiki/%s", None), "wiki": (f"https://en.wikipedia.org/wiki/%s", None),
} }
@@ -265,18 +253,53 @@ todo_link_only = True
# ============================================================================== # ==============================================================================
# Sphinx.Ext.Coverage # sphinx-reports
# ============================================================================== # ==============================================================================
coverage_show_missing_items = True # report_unittest_testsuites = {
# "src": {
# "name": f"{project}",
# "xml_report": "../report/unit/unittest.xml",
# }
# }
# report_codecov_packages = {
# "src": {
# "name": f"{project}",
# "json_report": "../report/coverage/coverage.json",
# "fail_below": 80,
# "levels": "default"
# }
# }
# report_doccov_packages = {
# "src": {
# "name": f"{project}",
# "directory": f"../{project}",
# "fail_below": 80,
# "levels": "default"
# }
# }
# ==============================================================================
# Sphinx_Design
# ==============================================================================
# sd_fontawesome_latex = True
# ============================================================================== # ==============================================================================
# AutoAPI.Sphinx # AutoAPI.Sphinx
# ============================================================================== # ==============================================================================
autoapi_modules = { autoapi_modules = {
"pyDummy": { f"{project}": {
"template": "module", "template": "package",
"output": "pyDummy", "output": project,
"override": True "override": True
} }
} }
for directory in [mod for mod in Path(f"../{project}").iterdir() if mod.is_dir() and mod.name != "__pycache__"]:
print(f"Adding module rule for '{project}.{directory.name}'")
autoapi_modules[f"{project}.{directory.name}"] = {
"template": "module",
"output": project,
"override": True
}

View File

@@ -3,5 +3,5 @@ Code Coverage Report
Code coverage report generated with `pytest <https://github.com/pytest-dev/pytest>`__ and `Coverage.py <https://github.com/nedbat/coveragepy/tree/master>`__. Code coverage report generated with `pytest <https://github.com/pytest-dev/pytest>`__ and `Coverage.py <https://github.com/nedbat/coveragepy/tree/master>`__.
.. report:code-coverage:: .. #report:code-coverage::
:packageid: src :packageid: src

View File

@@ -6,6 +6,9 @@ pyTooling ~= 6.7
sphinx ~= 8.1 sphinx ~= 8.1
docutils ~= 0.21 docutils ~= 0.21
# ReadTheDocs Theme
sphinx_rtd_theme ~= 3.0
# Sphinx Extenstions # Sphinx Extenstions
#sphinx.ext.coverage #sphinx.ext.coverage
#sphinxcontrib-actdiag>=0.8.5 #sphinxcontrib-actdiag>=0.8.5
@@ -18,3 +21,6 @@ sphinx_design ~= 0.6.1
sphinx-copybutton >= 0.5.2 sphinx-copybutton >= 0.5.2
sphinx_autodoc_typehints ~= 2.5 sphinx_autodoc_typehints ~= 2.5
# changelog>=0.3.5 # changelog>=0.3.5
sphinx_reports ~= 0.6
# BuildTheDocs Extensions (mostly patched Sphinx extensions)

View File

@@ -7,11 +7,11 @@
.. |SHIELD:svg:pyTooling-github| image:: https://img.shields.io/badge/pyTooling-Actions-63bf7f.svg?longCache=true&style=flat-square&longCache=true&logo=GitHub .. |SHIELD:svg:pyTooling-github| image:: https://img.shields.io/badge/pyTooling-Actions-63bf7f.svg?longCache=true&style=flat-square&longCache=true&logo=GitHub
:alt: Sourcecode on GitHub :alt: Sourcecode on GitHub
:height: 22 :height: 22
:target: https://GitHub.com/pyTooling/pyTooling :target: https://GitHub.com/pyTooling/Actions
.. |SHIELD:png:pyTooling-github| image:: https://raster.shields.io/badge/pyTooling-Actions-63bf7f.svg?longCache=true&style=flat-square&longCache=true&logo=GitHub .. |SHIELD:png:pyTooling-github| image:: https://raster.shields.io/badge/pyTooling-Actions-63bf7f.svg?longCache=true&style=flat-square&longCache=true&logo=GitHub
:alt: Sourcecode on GitHub :alt: Sourcecode on GitHub
:height: 22 :height: 22
:target: https://GitHub.com/pyTooling/pyTooling :target: https://GitHub.com/pyTooling/Actions
.. # Sourcecode license .. # Sourcecode license
.. |SHIELD:svg:pyTooling-src-license| image:: https://img.shields.io/pypi/l/pyTooling?longCache=true&style=flat-square&logo=Apache&label=code .. |SHIELD:svg:pyTooling-src-license| image:: https://img.shields.io/pypi/l/pyTooling?longCache=true&style=flat-square&logo=Apache&label=code

View File

@@ -3,5 +3,5 @@ Unittest Summary Report
Unittest report generated with `pytest <https://github.com/pytest-dev/pytest>`__. Unittest report generated with `pytest <https://github.com/pytest-dev/pytest>`__.
.. report:unittest-summary:: .. #report:unittest-summary::
:reportid: src :reportid: src