Skip to content

Commit 1f38775

Browse files
[MERGE] Resolve conflict with divergant changes.
2 parents 6542364 + eef5058 commit 1f38775

File tree

7 files changed

+125
-62
lines changed

7 files changed

+125
-62
lines changed

.github/workflows/CI-BUILD.yml

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
name: CI-BUILD
3-
# Continuous Integration workflow for building, the project
3+
description: "Continuous Integration workflow for building, the project."
4+
run-name: Build ${{ github.ref_name }} by @${{ github.actor }}
45
#
56
# Jobs included:
67
# - BUILD: Ensures the project compiles correctly
@@ -19,6 +20,10 @@ permissions: {}
1920

2021
env:
2122
ENVIRONMENT: ${{ (github.ref == 'refs/heads/stable' || startsWith(github.ref, 'refs/tags/v')) && 'Deployment' || (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/feature') || startsWith(github.ref, 'refs/heads/patch-') || startsWith(github.ref, 'refs/tags/v')) && 'Testing' || 'Experimenting' }}
23+
# Define Python versions at the top level -- Expected format: X.Y (e.g., 3.13)
24+
PYTHON_DEFAULT: "${{ vars.PYTHON_DEFAULT }}"
25+
PYTHON_OLD_MIN: "${{ vars.PYTHON_OLD_MIN }}" # For Oldest Python versions
26+
PYTHON_EXPERIMENTAL: "${{ vars.PYTHON_EXPERIMENTAL }}" # For future Python versions
2227

2328
jobs:
2429
BUILD:
@@ -46,7 +51,7 @@ jobs:
4651
persist-credentials: false
4752
- uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
4853
with:
49-
python-version: "3.12"
54+
python-version: "${{ vars.PYTHON_DEFAULT }}"
5055
- name: Pre-Clean
5156
id: clean
5257
run: make -j1 -f Makefile purge 2>/dev/null || true
@@ -77,28 +82,28 @@ jobs:
7782
strategy:
7883
fail-fast: false
7984
matrix:
80-
python-version: ["3.10", "3.11", "3.12"]
85+
python-version: ["${{ vars.PYTHON_OLD_MIN }}", "${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
8186
lang-var: ["de.utf-8", "jp.utf-8"]
8287
experimental: [true]
8388
include:
84-
- python-version: "3.10"
89+
- python-version: "${{ vars.PYTHON_DEFAULT }}"
8590
lang-var: "de.utf-8"
8691
experimental: false
87-
- python-version: "3.10"
92+
- python-version: "${{ vars.PYTHON_DEFAULT }}"
8893
lang-var: "jp.utf-8"
8994
experimental: false
90-
- python-version: "3.10"
95+
- python-version: "${{ vars.PYTHON_OLD_MIN }}"
9196
lang-var: "en_US.utf-8"
9297
experimental: false
93-
- python-version: "3.11"
98+
- python-version: "${{ vars.PYTHON_OLD_EXTRA }}"
9499
lang-var: "en_US.utf-8"
95100
experimental: false
96-
- python-version: "3.11"
101+
- python-version: "${{ vars.PYTHON_DEFAULT }}"
97102
lang-var: "en_US.utf-8"
98103
experimental: false
99-
- python-version: "3.12"
104+
- python-version: "${{ vars.PYTHON_EXPERIMENTAL }}"
100105
lang-var: "en_US.utf-8"
101-
experimental: false
106+
experimental: ${{ (needs.BUILD.environment == 'Experimenting') }}
102107
outputs:
103108
bootstrap_status: ${{ steps.bootstrap.outcome }}
104109
env:
@@ -126,7 +131,7 @@ jobs:
126131
- name: Summerize Building
127132
id: sumerize-py-build
128133
run: |
129-
echo "- Building works on python version ${{ matrix.python-version }}" >> $GITHUB_STEP_SUMMARY
134+
echo "- [x] Building works on python version ${{ matrix.python-version }}" >> "$GITHUB_STEP_SUMMARY"
130135
if: ${{ success() }}
131136
shell: bash
132137
- name: Run Tests
@@ -136,7 +141,7 @@ jobs:
136141
- name: Summerize Install
137142
id: sumerize-user-install
138143
run: |
139-
echo "- User Installing works on python version ${{ matrix.python-version }}" >> $GITHUB_STEP_SUMMARY
144+
echo "- [x] User Installing works on python version ${{ matrix.python-version }}" >> "$GITHUB_STEP_SUMMARY"
140145
if: ${{ success() }}
141146
shell: bash
142147
- name: Test Info
@@ -159,6 +164,8 @@ jobs:
159164
if: ${{ !cancelled() }}
160165
outputs:
161166
didBUILD: ${{ steps.check_status.outputs.build_success }}
167+
build_ref: ${{ steps.check_status.outputs.build_ref }}
168+
build_ref_name: ${{ steps.check_status.outputs.build_ref_name }}
162169
steps:
163170
- id: check_status
164171
run: |
@@ -167,3 +174,5 @@ jobs:
167174
else
168175
echo "build_success=false" >> "$GITHUB_OUTPUT"
169176
fi
177+
echo "build_ref=${{ github.ref }}" >> "$GITHUB_OUTPUT"
178+
echo "build_ref_name=${{ github.ref_name }}" >> "$GITHUB_OUTPUT"

.github/workflows/CI-DOCS.yml

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
name: CI-DOCS
3-
# Continuous Integration workflow for Testing Documentation Building.
3+
description: "Continuous Integration workflow for Testing Documentation Building."
4+
run-name: Generate and lint documentation for ${{ github.ref_name }} by @${{ github.actor }}
45
#
56
# Jobs included:
67
# - DOCS: Builds and lints documentation
@@ -35,7 +36,7 @@ jobs:
3536
strategy:
3637
matrix:
3738
os: [ubuntu-latest, macos-latest, windows-latest]
38-
python-version: ["3.10", "3.11", "3.12"]
39+
python-version: ["${{ vars.PYTHON_OLD_MIN }}", "${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
3940
env:
4041
OS: ${{ matrix.os }}
4142
PYTHON_VERSION: ${{ matrix.python-version }}
@@ -44,6 +45,8 @@ jobs:
4445
DOCS_BUILD_REF: ${{ github.sha }}
4546
steps:
4647
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
48+
with:
49+
persist-credentials: false
4750
- name: Set up Python ${{ matrix.python-version }}
4851
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
4952
with:

.github/workflows/CI-MATs.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
---
22
name: CI-MATs
3-
# Continuous Integration workflow for Minimal Acceptance Tests (MATs).
3+
description: "Continuous Integration workflow for Minimal Acceptance Tests (MATs)."
4+
run-name: Minimal Acceptance Tests for ${{ github.ref_name }} by @${{ github.actor }}
45
#
56
# This workflow runs after successful completion of CI-BUILD to ensure
67
# that the codebase meets minimal acceptance criteria.
@@ -60,6 +61,7 @@ jobs:
6061
permissions:
6162
actions: read
6263
contents: read
64+
pull-requests: read
6365
statuses: write
6466
needs: check_build
6567
if: ${{ !cancelled() && (needs.check_build.outputs.should_run == 'true') }}
@@ -71,7 +73,7 @@ jobs:
7173
timeout-minutes: 8
7274
strategy:
7375
matrix:
74-
python-version: ["3.10", "3.11", "3.12"]
76+
python-version: ["${{ vars.PYTHON_OLD_MIN }}", "${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
7577
outputs:
7678
mats_status: ${{ steps.tests.outcome }}
7779
env:
@@ -101,7 +103,7 @@ jobs:
101103
- name: Summerize MATs for python ${{ matrix.python-version }}
102104
id: sumerize-mats
103105
run: |
104-
echo "- MATS works on python version ${{ matrix.python-version }}" >> $GITHUB_STEP_SUMMARY
106+
echo "- [x] MATS succeeded with python version ${{ matrix.python-version }}" >> "$GITHUB_STEP_SUMMARY"
105107
if: ${{ success() }}
106108
- name: Post-Clean
107109
id: post
@@ -111,6 +113,7 @@ jobs:
111113
MATS_STATUS:
112114
permissions:
113115
actions: read
116+
pull-requests: read
114117
needs: [check_build, MATS]
115118
runs-on: ubuntu-latest
116119
if: ${{ !cancelled() }}

.github/workflows/Tests.yml

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ jobs:
7272
strategy:
7373
matrix:
7474
os: [ubuntu-latest, macos-latest, windows-latest]
75-
python-version: ["3.10", "3.11", "3.12", "3.13"]
75+
python-version: ["${{ vars.PYTHON_OLD_MIN }}", "${{ vars.PYTHON_OLD_EXTRA }}", "${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
7676
env:
7777
OS: ${{ matrix.os }}
7878
PYTHON_VERSION: ${{ matrix.python-version }}
@@ -166,15 +166,15 @@ jobs:
166166
timeout-minutes: 10
167167

168168
env:
169-
PYTHON_VERSION: '3.13'
169+
PYTHON_VERSION: "${{ vars.PYTHON_DEFAULT }}"
170170
LANG: "en_US.utf-8"
171171

172172
steps:
173173
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
174174
- name: Set up Python
175175
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
176176
with:
177-
python-version: "3.13"
177+
python-version: "${{ vars.PYTHON_DEFAULT }}"
178178
- name: Install dependencies for python Linters
179179
run: |
180180
pip install --upgrade "pip>=24.3.1" "setuptools>=75.0" "wheel>=0.44" "build>=1.2.2";
@@ -210,7 +210,7 @@ jobs:
210210
strategy:
211211
matrix:
212212
os: [ubuntu-latest, macos-latest]
213-
python-version: ["3.10", "3.11", "3.12", "3.13"]
213+
python-version: ["${{ vars.PYTHON_OLD_MIN }}", "${{ vars.PYTHON_OLD_EXTRA }}", "${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
214214
env:
215215
OS: ${{ matrix.os }}
216216
PYTHON_VERSION: ${{ matrix.python-version }}
@@ -330,7 +330,7 @@ jobs:
330330
strategy:
331331
matrix:
332332
os: [ubuntu-latest, macos-latest]
333-
python-version: ["3.10", "3.11", "3.12", "3.13"]
333+
python-version: ["${{ vars.PYTHON_OLD_MIN }}", "${{ vars.PYTHON_OLD_EXTRA }}", "${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
334334
env:
335335
OS: ${{ matrix.os }}
336336
PYTHON_VERSION: ${{ matrix.python-version }}
@@ -411,7 +411,7 @@ jobs:
411411
strategy:
412412
matrix:
413413
os: [ubuntu-latest]
414-
python-version: ["3.10", "3.11", "3.12", "3.13"]
414+
python-version: ["${{ vars.PYTHON_OLD_MIN }}", "${{ vars.PYTHON_OLD_EXTRA }}", "${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
415415
env:
416416
OS: 'ubuntu-latest'
417417
PYTHON_VERSION: ${{ matrix.python-version }}
@@ -464,7 +464,7 @@ jobs:
464464

465465
env:
466466
OS: 'ubuntu-latest'
467-
PYTHON_VERSION: '3.12'
467+
PYTHON_VERSION: "${{ vars.PYTHON_DEFAULT }}"
468468
LANG: 'en_US.utf-8'
469469
CODECLIMATE_REPO_TOKEN: ${{ secrets.CODECLIMATE_TOKEN }}
470470
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
@@ -475,11 +475,11 @@ jobs:
475475
- name: Set up Python
476476
uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0
477477
with:
478-
python-version: "3.12"
478+
python-version: "${{ vars.PYTHON_DEFAULT }}"
479479
- name: Prep Testing Tox
480480
id: prep-tox
481481
run: |
482-
if [ "$OS" == "ubuntu-latest" ] ; then { sudo apt-get update || true ;} ; wait ; { sudo apt-get install --assume-yes python3.10 python3.11 python3.11-venv || echo "::warning file=.github/workflows/Tests.yml,line=677,endLine=677,title=SKIPPED::SKIP Enhanced TOX Tests." ;} ; wait ; fi
482+
if [ "$OS" == "ubuntu-latest" ] ; then { sudo apt-get update || true ;} ; wait ; { sudo apt-get install --assume-yes python3.10 python3.11 python3.11-venv || echo "::warning file=.github/workflows/Tests.yml,line=482,endLine=482,title=SKIPPED::SKIP Enhanced TOX Tests." ;} ; wait ; fi
483483
- name: Install dependencies for Tox
484484
run: |
485485
pip install --upgrade "pip>=24.3.1" "setuptools>=75.0" "wheel>=0.44" "build>=1.2.1";

docs/CI.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,55 @@ Continuous integration testing is handled by GitHub Actions and the generous Cir
1111
[![CodeCov](https://codecov.io/gh/reactive-firewall/multicast/graphs/sunburst.svg)](https://codecov.io/gh/reactive-firewall/multicast)
1212
[![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9458/badge)](https://app.deepsource.com/report/3f7c11ca-c203-44ec-9e01-126078f11660)
1313
[GHA Metrics](https://github.com/reactive-firewall/multicast/actions/metrics/performance?dateRangeType=DATE_RANGE_TYPE_LAST_90_DAYS)
14+
![CodeRabbit Pull Request Reviews](https://img.shields.io/coderabbit/prs/github/reactive-firewall/multicast?utm_source=oss&utm_medium=github&utm_campaign=reactive-firewall%2Fmulticast&labelColor=171717&color=FF570A&link=https%3A%2F%2Fcoderabbit.ai&label=CodeRabbit+Reviews)
15+
[![Average time to resolve an issue](https://isitmaintained.com/badge/resolution/reactive-firewall/multicast.svg)](https://isitmaintained.com/project/reactive-firewall/multicast "Average time to resolve an issue")
16+
[![Percentage of issues still open](https://isitmaintained.com/badge/open/reactive-firewall/multicast.svg)](https://isitmaintained.com/project/reactive-firewall/multicast "Percentage of issues still open")
17+
18+
## Configurable CI Variables
19+
20+
This section documents environment variables used across CI workflows to ensure consistency and
21+
simplify maintenance.
22+
23+
### Python Version Variables
24+
25+
To standardize Python version management across all CI workflows, we use a set of environment
26+
variables defined at the top of each workflow file. This approach centralizes version definitions
27+
while maintaining separation between workflows, making future updates easier and ensuring
28+
consistency.
29+
30+
#### Standard Python Version Variables
31+
32+
| Variable | Purpose | Example Value |
33+
|----------|---------|---------------|
34+
| `PYTHON_DEFAULT` | The default Python version used for single-version jobs | `"3.12"` |
35+
| `PYTHON_OLD_MIN` | Oldest/minimum Python version for cross-python portability testing | `"3.10"` |
36+
| `PYTHON_OLD_EXTRA` | Additional Python version for coverage testing | `"3.11"` |
37+
| `PYTHON_EXPERIMENTAL` | Future/experimental Python version for optional testing | `"3.13"` |
38+
39+
#### Usage Examples
40+
41+
##### Setting up Python with the default version
42+
43+
```yaml
44+
- uses: actions/setup-python@v5
45+
with:
46+
python-version: "${{ vars.PYTHON_DEFAULT }}"
47+
```
48+
49+
##### Using matrix strategy for multi-version testing
50+
51+
```yaml
52+
jobs:
53+
test:
54+
strategy:
55+
fail-fast: false
56+
matrix:
57+
python-version: ["${{ vars.PYTHON_DEFAULT }}", "${{ vars.PYTHON_EXPERIMENTAL }}"]
58+
steps:
59+
- uses: actions/setup-python@v5
60+
with:
61+
python-version: ${{ matrix.python-version }}
62+
```
1463
1564
## Testing
1665

tests/check_spelling

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ CODESPELL_OPTIONS="--quiet-level=4 --builtin clear,rare,code -L assertIn"
139139
# Define specific typos to check for (regression tests)
140140
declare -a SPECIFIC_TYPOS=(
141141
"RECCOMENDED:RECOMMENDED"
142+
"succedded:succeeded"
142143
)
143144

144145
function cleanup() {

0 commit comments

Comments
 (0)