Skip to content

Commit d8073cc

Browse files
committed
Merge pull request #8 from ventura8/feature/v1.2.0
release: v1.2.0 – cross-platform Linux/macOS support + real E2E test …
2 parents d976edb + 6d0f468 commit d8073cc

63 files changed

Lines changed: 4816 additions & 524 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.agents/skills/release-prep/SKILL.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,56 @@ Create two release docs under `docs/releases/`:
7070
.\run_local_pipeline.ps1
7171
```
7272

73+
### 5.5. Author Commit Title and Detailed Description
74+
75+
Before committing, write a **conventional commit** with:
76+
77+
- **Title** (≤ 72 chars): `release: vX.Y.Z – <one-line summary of biggest change>`
78+
- **Detailed description**: multiline body covering:
79+
- What changed (features, fixes, refactors)
80+
- Cross-platform / CI/CD improvements
81+
- Quality gate results (coverage %, linter grades)
82+
- Breaking changes (if any) prefixed with `BREAKING CHANGE:`
83+
84+
Template:
85+
86+
```text
87+
release: vX.Y.Z – <summary>
88+
89+
## What's new
90+
- ...
91+
92+
## Cross-platform & CI
93+
- ...
94+
95+
## Quality gates
96+
- Coverage: XX.X% (threshold ≥ 90%)
97+
- Linters: ✅ zero warnings
98+
- Type checkers: ✅ zero errors
99+
- Radon complexity: ✅ A-grade (CC ≤ 5); project complexity threshold: CC < 10
100+
101+
## Breaking changes
102+
<!-- Choose one of the following and remove the other: -->
103+
- None
104+
<!-- OR (standalone footer, no list marker):
105+
BREAKING CHANGE: <description>
106+
107+
Alternatively use the title notation: release!: vX.Y.Z – <summary>
108+
-->
109+
```
110+
111+
Stage and commit with this message:
112+
113+
```bash
114+
poetry check --lock
115+
git add pyproject.toml poetry.lock pytest.ini docs/ README.md AGENTS.md .agents/skills/ \
116+
docker/ tests/ modules/ auto_subtitle.py install_dependencies.sh \
117+
run_local_pipeline.ps1 run_local_pipeline.sh start.sh .dockerignore \
118+
.github/workflows/ci.yml .github/workflows/release.yml
119+
git diff --cached
120+
git commit -m "release: vX.Y.Z – <summary>" -m "<detailed body>"
121+
```
122+
73123
### 6. Commit and Tag
74124

75125
Prepare clear, descriptive commit messages summarising the release features,

.dockerignore

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
.venv/
2+
.git/
3+
.pytest_cache/
4+
.mypy_cache/
5+
.ruff_cache/
6+
__pycache__/
7+
*.pyc
8+
tests/fixtures/temp*
9+
radon_report.txt
10+
coverage.xml
11+
coverage.json
12+
.coverage
13+
.env
14+
.env.*
15+
.ssh/

.github/workflows/ci.yml

Lines changed: 80 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
- name: Set up Python
2525
uses: actions/setup-python@v6.3.0
2626
with:
27-
python-version: "3.12.13"
27+
python-version: "3.12"
2828
cache: "pip"
2929
cache-dependency-path: |
3030
pyproject.toml
@@ -65,7 +65,11 @@ jobs:
6565
- name: Run PowerShell Lint
6666
shell: pwsh
6767
run: |
68-
$scriptPaths = @("./install_dependencies.ps1", "./run_local_pipeline.ps1")
68+
$scriptPaths = @(
69+
"./install_dependencies.ps1",
70+
"./run_local_pipeline.ps1",
71+
"./.github/scripts/Invoke-PowerShellLint.ps1"
72+
)
6973
& ./.github/scripts/Invoke-PowerShellLint.ps1 -ScriptPaths $scriptPaths -MaxCyclomaticComplexity 9 -MaxNestingDepth 4
7074
7175
- name: Run Markdown auto-delinter (mdformat)
@@ -92,6 +96,10 @@ jobs:
9296
run: |
9397
poetry run ruff check modules auto_subtitle.py tests
9498
99+
- name: Run Ruff format check
100+
run: |
101+
poetry run ruff format --check .
102+
95103
- name: Run Flake8
96104
run: |
97105
poetry run flake8 modules auto_subtitle.py tests
@@ -122,7 +130,7 @@ jobs:
122130
123131
- name: Run Radon Complexity (A-grade enforced)
124132
run: |
125-
poetry run radon cc auto_subtitle.py modules tests/modules tests/orchestration -s -a | tee radon_report.txt
133+
poetry run radon cc auto_subtitle.py modules tests -s -a | tee radon_report.txt
126134
127135
{
128136
echo "## Radon Cyclomatic Complexity"
@@ -139,7 +147,7 @@ jobs:
139147
140148
- name: Run Radon Maintainability Index (A-grade enforced)
141149
run: |
142-
poetry run radon mi auto_subtitle.py modules tests/modules tests/orchestration -s | tee radon_mi_report.txt
150+
poetry run radon mi auto_subtitle.py modules tests -s | tee radon_mi_report.txt
143151
144152
{
145153
echo "## Radon Maintainability Index (A-grade enforced)"
@@ -156,7 +164,7 @@ jobs:
156164
157165
- name: Run Radon Halstead Metrics (hal)
158166
run: |
159-
poetry run radon hal auto_subtitle.py modules tests/modules tests/orchestration | tee radon_hal_report.txt
167+
poetry run radon hal auto_subtitle.py modules tests | tee radon_hal_report.txt
160168
161169
{
162170
echo "## Radon Halstead Metrics"
@@ -177,7 +185,7 @@ jobs:
177185
- name: Set up Python
178186
uses: actions/setup-python@v6.3.0
179187
with:
180-
python-version: "3.12.13"
188+
python-version: "3.12"
181189
cache: "pip"
182190
cache-dependency-path: |
183191
pyproject.toml
@@ -208,7 +216,7 @@ jobs:
208216
209217
- name: Run Tests with Coverage
210218
run: |
211-
poetry run pytest --cov=auto_subtitle --cov=modules --cov-branch --cov-report=xml --cov-report=json --cov-report=term --cov-fail-under=90 tests/
219+
poetry run pytest -m "not e2e" --cov=auto_subtitle --cov=modules --cov-branch --cov-report=xml --cov-report=json --cov-report=term --cov-fail-under=90 tests/
212220
213221
- name: Enforce Per-File Coverage >= 90%
214222
run: |
@@ -241,7 +249,7 @@ jobs:
241249
- name: Set up Python
242250
uses: actions/setup-python@v6.3.0
243251
with:
244-
python-version: "3.12.13"
252+
python-version: "3.12"
245253
cache: "pip"
246254
cache-dependency-path: |
247255
pyproject.toml
@@ -279,3 +287,67 @@ jobs:
279287
run: |
280288
poetry run python tests/tools/transform_metrics.py coverage.xml assets/coverage.svg
281289
cat coverage_summary.md >> $GITHUB_STEP_SUMMARY
290+
291+
e2e_real_dependencies:
292+
name: "🚀 Real Dependencies E2E (${{ matrix.os }})"
293+
needs: [static_analysis, technical_validation]
294+
strategy:
295+
fail-fast: false
296+
matrix:
297+
os: [ubuntu-latest, macos-latest, windows-latest]
298+
runs-on: ${{ matrix.os }}
299+
steps:
300+
- uses: actions/checkout@v7.0.0
301+
with:
302+
persist-credentials: false
303+
304+
- name: Set up Python
305+
uses: actions/setup-python@v6.3.0
306+
with:
307+
python-version: "3.12"
308+
309+
- name: Install FFmpeg (macOS)
310+
if: runner.os == 'macOS'
311+
run: brew install ffmpeg
312+
env:
313+
HOMEBREW_NO_REQUIRE_TAP_TRUST: "1"
314+
315+
- name: Install FFmpeg (Linux)
316+
if: runner.os == 'Linux'
317+
run: |
318+
sudo apt-get update
319+
sudo apt-get install -y ffmpeg
320+
321+
- name: Install FFmpeg (Windows)
322+
if: runner.os == 'Windows'
323+
run: choco install ffmpeg --no-progress -y
324+
shell: pwsh
325+
326+
- name: Install Poetry
327+
run: python -m pip install "poetry==${{ env.POETRY_VERSION }}"
328+
329+
- name: Configure Poetry In-Project Virtualenv
330+
run: poetry config virtualenvs.in-project true
331+
332+
- name: Install Real ML & Test Dependencies (Linux)
333+
if: runner.os == 'Linux'
334+
run: poetry install -v --with ml,dev --no-root
335+
env:
336+
POETRY_REQUESTS_TIMEOUT: "300"
337+
338+
- name: Install E2E Test Dependencies (macOS/Windows)
339+
if: runner.os != 'Linux'
340+
run: poetry install -v --only main,dev --no-root
341+
342+
- name: Run Real Dependencies E2E Test Suite (Linux)
343+
if: runner.os == 'Linux'
344+
run: poetry run pytest -m e2e tests/e2e/test_real_pipeline.py -v
345+
346+
- name: Run Real Dependencies E2E Smoke Tests (macOS)
347+
if: runner.os == 'macOS'
348+
run: poetry run pytest -m e2e -k "not real_nllb_translator_cpu_execution" tests/e2e/test_real_pipeline.py -v
349+
350+
- name: Run Real Dependencies E2E Smoke Tests (Windows)
351+
if: runner.os == 'Windows'
352+
shell: pwsh
353+
run: poetry run pytest -m e2e -k "not real_nllb_translator_cpu_execution" tests/e2e/test_real_pipeline.py -v

0 commit comments

Comments
 (0)