Skip to content

Commit 18590bb

Browse files
committed
ci/docs: stabiliser la pipeline et ajouter la checklist de smoke release
- Remplace la CI par une version réaliste et maintenable: lint, tests matrix Ubuntu/Windows (Py 3.12/3.13), puis smoke checks. - Retire les références cassées de l'ancien workflow (chemins/fichiers absents) et aligne les commandes smoke sur les options CLI réellement disponibles. - Ajoute une checklist de smoke release dédiée et référence la documentation de parité IDE dans le README. - Met à jour TODO.md (checklist release + CI matrix marquées comme réalisées).
1 parent 5f643f2 commit 18590bb

4 files changed

Lines changed: 97 additions & 155 deletions

File tree

.github/workflows/ci.yml

Lines changed: 43 additions & 152 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@ name: CI
22

33
on:
44
push:
5-
branches: [ main, develop ]
5+
branches: [main, develop]
66
pull_request:
7-
branches: [ main, develop ]
7+
branches: [main, develop]
88
workflow_dispatch:
99

10-
env:
11-
PYTHON_VERSION: '3.11'
12-
CACHE_VERSION: v1
13-
1410
jobs:
1511
lint:
16-
name: Lint and static analysis
12+
name: Lint (ruff + black)
1713
runs-on: ubuntu-latest
1814
steps:
1915
- name: Checkout repository
@@ -22,184 +18,79 @@ jobs:
2218
- name: Set up Python
2319
uses: actions/setup-python@v5
2420
with:
25-
python-version: ${{ env.PYTHON_VERSION }}
26-
cache: 'pip'
27-
cache-dependency-path: |
28-
requirements.txt
29-
constraints.txt
30-
31-
- name: Upgrade pip
32-
run: python -m pip install --upgrade pip
33-
34-
- name: Install linters and tools
35-
run: python -m pip install ruff mypy bandit pip-audit safety cyclonedx-py
36-
37-
- name: Ruff (lint)
38-
run: ruff check . --output-format=github
39-
40-
- name: Ruff (format check)
41-
run: ruff format --check .
42-
43-
- name: Mypy (type check)
44-
run: mypy --config-file pyproject.toml utils Plugins_SDK engine_sdk bcasl
45-
46-
- name: Bandit (security)
47-
run: bandit -r utils Plugins_SDK engine_sdk bcasl -f json -o bandit-report.json
48-
49-
- name: pip-audit (dependencies)
50-
if: hashFiles('requirements.txt') != ''
51-
run: pip-audit -r requirements.txt --format=json --output=pip-audit-report.json
52-
53-
- name: Safety check
54-
if: hashFiles('requirements.txt') != ''
55-
run: safety check -r requirements.txt --json --output safety-report.json
56-
continue-on-error: true
57-
58-
- name: Generate SBOM
59-
if: hashFiles('requirements.txt') != ''
60-
run: cyclonedx-py -r requirements.txt -o sbom.json
61-
62-
- name: Upload security reports
63-
uses: actions/upload-artifact@v4
64-
with:
65-
name: security-reports
66-
path: |
67-
bandit-report.json
68-
pip-audit-report.json
69-
safety-report.json
70-
sbom.json
71-
if-no-files-found: ignore
21+
python-version: "3.13"
22+
cache: "pip"
7223

73-
format:
74-
name: Code formatting
75-
runs-on: ubuntu-latest
76-
steps:
77-
- name: Checkout repository
78-
uses: actions/checkout@v4
79-
80-
- name: Set up Python
81-
uses: actions/setup-python@v5
82-
with:
83-
python-version: ${{ env.PYTHON_VERSION }}
84-
cache: 'pip'
85-
86-
- name: Install black
87-
run: python -m pip install black
88-
89-
- name: Black format check
90-
run: black --check --diff .
91-
92-
types:
93-
name: Type checking
94-
runs-on: ubuntu-latest
95-
steps:
96-
- name: Checkout repository
97-
uses: actions/checkout@v4
98-
99-
- name: Set up Python
100-
uses: actions/setup-python@v5
101-
with:
102-
python-version: ${{ env.PYTHON_VERSION }}
103-
cache: 'pip'
104-
105-
- name: Install dependencies
24+
- name: Install tooling
10625
run: |
10726
python -m pip install --upgrade pip
108-
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
109-
pip install mypy
27+
pip install ruff black
11028
111-
- name: MyPy type check
112-
run: mypy --config-file pyproject.toml utils Plugins_SDK engine_sdk bcasl
29+
- name: Ruff
30+
run: ruff check .
31+
32+
- name: Black
33+
run: black --check .
11334

11435
tests:
115-
name: Tests
116-
runs-on: ubuntu-latest
117-
env:
118-
QT_QPA_PLATFORM: offscreen
36+
name: Tests (${{ matrix.os }}, py${{ matrix.python-version }})
37+
runs-on: ${{ matrix.os }}
11938
strategy:
39+
fail-fast: false
12040
matrix:
121-
python-version: ['3.10', '3.11', '3.12']
41+
os: [ubuntu-latest, windows-latest]
42+
python-version: ["3.12", "3.13"]
43+
env:
44+
QT_QPA_PLATFORM: offscreen
12245
steps:
12346
- name: Checkout repository
12447
uses: actions/checkout@v4
12548

126-
- name: Set up Python ${{ matrix.python-version }}
49+
- name: Set up Python
12750
uses: actions/setup-python@v5
12851
with:
12952
python-version: ${{ matrix.python-version }}
130-
cache: 'pip'
53+
cache: "pip"
13154

13255
- name: Install dependencies
13356
run: |
13457
python -m pip install --upgrade pip
135-
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
58+
pip install -r requirements.txt
13659
137-
- name: Run tests with pytest
138-
run: |
139-
if [ -d tests ]; then
140-
python -m pytest tests/ -v --tb=short --cov=utils --cov=Plugins_SDK --cov=engine_sdk --cov=bcasl --cov-report=xml --cov-report=term-missing
141-
else
142-
echo "No tests directory found, skipping tests"
143-
fi
60+
- name: Run unit tests
61+
run: pytest -q
14462

145-
- name: Upload coverage to Codecov
146-
if: matrix.python-version == '3.11'
147-
uses: codecov/codecov-action@v4
148-
with:
149-
file: ./coverage.xml
150-
flags: unittests
151-
name: codecov-umbrella
152-
fail_ci_if_error: false
153-
154-
build:
155-
name: Build and test (${{ matrix.os }}, py${{ matrix.python-version }})
63+
smoke:
64+
name: Smoke checks (${{ matrix.os }})
15665
runs-on: ${{ matrix.os }}
157-
needs: lint
158-
env:
159-
QT_QPA_PLATFORM: offscreen
66+
needs: [lint, tests]
16067
strategy:
16168
fail-fast: false
16269
matrix:
163-
os: [ubuntu-latest, macos-latest, windows-latest]
164-
python-version: ['3.10', '3.11']
165-
70+
os: [ubuntu-latest, windows-latest]
71+
env:
72+
QT_QPA_PLATFORM: offscreen
16673
steps:
16774
- name: Checkout repository
16875
uses: actions/checkout@v4
16976

17077
- name: Set up Python
17178
uses: actions/setup-python@v5
17279
with:
173-
python-version: ${{ matrix.python-version }}
174-
cache: 'pip'
175-
176-
- name: Upgrade pip
177-
run: python -m pip install --upgrade pip
80+
python-version: "3.13"
81+
cache: "pip"
17882

179-
- name: Install requirements (if present)
180-
if: hashFiles('requirements.txt') != ''
181-
run: python -m pip install -r requirements.txt
182-
183-
- name: Install tooling (pytest, coverage, build)
184-
run: python -m pip install pytest coverage build
83+
- name: Install dependencies
84+
run: |
85+
python -m pip install --upgrade pip
86+
pip install -r requirements.txt
18587
186-
- name: Verify sources compile
88+
- name: Compile sources
18789
run: python -m compileall -q .
18890

189-
- name: Run tests with coverage (if tests/ exists)
190-
run: >-
191-
python -c "import os,sys,subprocess; sys.exit(subprocess.call([sys.executable,'-m','coverage','run','-m','pytest','-q'])) if os.path.isdir('tests') else 0"
192-
193-
- name: Generate coverage XML (if coverage file exists)
194-
run: >-
195-
python -c "import os,sys,subprocess; sys.exit(subprocess.call([sys.executable,'-m','coverage','xml','-i'])) if os.path.isfile('.coverage') else 0"
196-
197-
- name: Upload coverage artifact
198-
uses: actions/upload-artifact@v4
199-
with:
200-
name: coverage-${{ matrix.os }}-py${{ matrix.python-version }}
201-
path: coverage.xml
202-
if-no-files-found: ignore
203-
204-
# Packaging (sdist/wheel) intentionally disabled.
205-
# This project is distributed as a standalone binary, not a PyPI package.
91+
- name: CLI smoke
92+
run: |
93+
python pycompiler_ark.py --help
94+
python pycompiler_ark.py --help-all
95+
python pycompiler_ark.py --version
96+
python pycompiler_ark.py --info

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,8 @@ python -m OnlyMod.EngineOnlyMod --engine nuitka -f script.py --dry-run
128128
- [How to create a BC plugin](docs/how_to_create_a_bc_plugin.md)
129129
- [Dedicated interactive CLI (`--cli`)](docs/dedicated_cli.md)
130130
- [IDE-like main GUI (`--ide-gui`)](docs/ide_like_gui.md)
131+
- [Release smoke checklist](docs/release_smoke_checklist.md)
132+
- [IDE GUI parity matrix](docs/ide_gui_parity_matrix.md)
131133

132134
---
133135

TODO.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
### Phase 1 - Stabiliser le socle (P0)
44
- [ ] Geler les nouvelles features le temps du durcissement qualite.
55
- [ ] Corriger les bugs bloquants ouverts (launcher, install tools, IDE GUI).
6-
- [ ] Mettre en place une checklist release: smoke test CLI + GUI sur Linux/Windows.
6+
- [x] Mettre en place une checklist release: smoke test CLI + GUI sur Linux/Windows.
77

88
### Phase 2 - Securiser les flux critiques (P0)
99
- [x] Orchestrer les installs outils en sequence stricte: systeme puis Python.
@@ -33,8 +33,8 @@
3333
- [ ] Reduire la dette technique dans les zones a fort churn.
3434

3535
### Phase 6 - CI/CD et livrable (P1)
36-
- [ ] Ajouter GitHub Actions: lint + tests + smoke build.
37-
- [ ] Executer la matrice CI minimale sur Ubuntu + Windows.
36+
- [x] Ajouter GitHub Actions: lint + tests + smoke build.
37+
- [x] Executer la matrice CI minimale sur Ubuntu + Windows.
3838
- [ ] Mettre en place versioning + changelog de release.
3939

4040
### Phase 7 - Documentation et contribution (P2)

docs/release_smoke_checklist.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# Release Smoke Checklist
2+
3+
Use this checklist before merging to `main` or cutting a release tag.
4+
5+
## 1) Environment sanity
6+
7+
- [ ] Fresh virtual environment created.
8+
- [ ] `pip install -r requirements.txt` succeeds.
9+
- [ ] Project starts without local hacks.
10+
11+
## 2) CLI smoke
12+
13+
- [ ] `python pycompiler_ark.py --help`
14+
- [ ] `python pycompiler_ark.py --help-all`
15+
- [ ] `python pycompiler_ark.py --version`
16+
- [ ] `python pycompiler_ark.py --info`
17+
- [ ] `python pycompiler_ark.py --cli` opens and exits cleanly.
18+
19+
## 3) Main GUI smoke
20+
21+
- [ ] `python pycompiler_ark.py` launches main window.
22+
- [ ] Workspace selection works.
23+
- [ ] File add/remove/filter works.
24+
- [ ] Compile and cancel actions are responsive.
25+
- [ ] Log area remains readable (theme-aware).
26+
27+
## 4) IDE-like GUI smoke
28+
29+
- [ ] `python pycompiler_ark.py --ide-gui` launches IDE-like layout.
30+
- [ ] `(...)` menu actions work (workspace, venv, files, stats, theme, language).
31+
- [ ] Dependency analysis action works (panel + activity icon).
32+
- [ ] Engine tabs and entrypoint selector load correctly.
33+
34+
## 5) Engine/BCASL smoke
35+
36+
- [ ] `python pycompiler_ark.py engines --dry-run` works.
37+
- [ ] `python pycompiler_ark.py bcasl` opens.
38+
- [ ] At least one compile run succeeds in a test workspace.
39+
40+
## 6) Platform matrix
41+
42+
- [ ] Linux smoke completed.
43+
- [ ] Windows smoke completed.
44+
45+
## 7) CI gates
46+
47+
- [ ] Lint job is green.
48+
- [ ] Test matrix is green.
49+
- [ ] Smoke job is green.

0 commit comments

Comments
 (0)