Перейти к содержанию

CI Matrix

This page documents what each GitHub Actions workflow validates and which artifacts it produces.

Workflow overview

Workflow Trigger focus Main checks Main artifacts
full_course_smoke.yml broad course changes MkDocs strict build, representative Python labs, Block 5 HDL smoke reproducibility summary, selected plots
python_quality.yml Python changes formatting/linting and Python quality gates PASS/FAIL logs
block4_labs.yml fixed-point lab block Lab 4.1 and 4.2 executable Python models fixed-point FIR/mixer figures
block5_hdl.yml HDL/FPGA block Icarus Verilog compilation and self-checking testbenches VCD files, PASS/FAIL logs
hdl-canonical-ci.yml canonical HDL vectors generated vectors and HDL smoke path canonical vector logs
block6_rf_analysis.yml RF frontend lab block Lab 6.4 synthetic RF analysis spectrum/time plots, metrics JSON
block7_tx_rx.yml TX/RX chain block Lab 7.2 and 7.3 executable models frequency-plan/spectrum plots, loopback metrics
block8_sync.yml synchronization labs CFO, phase, timing and end-to-end sync models constellation plots, EVM/BER metrics
block9_recording_analysis.yml IQ recording labs CI16 reader and multi-format IQ reader spectrum plots, metrics JSON, synthetic captures
qpsk_demo_analysis.yml generated QPSK replay dataset deterministic dataset generation, analyzer run and metric thresholds constellation SVG, spectrum SVG, analysis summary JSON
dataset_manifests.yml dataset metadata dataset manifest parsing, Git LFS pointer and checksum rules manifest validation report
docs-assets-check.yml markdown asset integrity local markdown asset links PASS/FAIL report
experiment-manifests-check.yml manifest consistency YAML structure and required fields in experiments/*.yaml PASS/FAIL report
pages.yml / docs deploy documentation MkDocs site build and GitHub Pages deploy published course site
generate_ieee_plots.yml demo figures generated IEEE-style plots docs/assets/*.png

Full Course Smoke

Purpose: verify that the repository still works as an integrated engineering course.

Checks:

  • mkdocs build --strict;
  • representative executable Python labs through tools/run_all_labs.py;
  • Block 5 HDL smoke tests with Icarus Verilog;
  • reproducibility summary artifacts.

Local equivalent:

python tools/tasks.py smoke

Python Quality

Purpose: catch basic Python regressions before the broader course smoke path.

Checks typically include:

  • Ruff configuration from pyproject.toml;
  • pytest coverage for repository-level utilities and regression checks;
  • import/runtime sanity for course helpers when they are included in the test set.

Local equivalent:

python tools/run_local_ci.py --quick

Block 4 Labs

Purpose: verify fixed-point executable labs and generated figures.

Checks:

  • Lab 4.1 fixed-point FIR model;
  • Lab 4.2 fixed-point digital mixer model;
  • generated-figure existence checks.

Block 6 RF Analysis

Purpose: verify synthetic RF capture analysis and its metrics artifacts.

Checks:

  • Lab 6.4 executable model;
  • generated PNG and JSON artifacts.

Block 7 TX/RX

Purpose: verify TX/RX chain modeling and loopback metrics generation.

Checks:

  • Lab 7.2 DUC/DDC model;
  • Lab 7.3 loopback metrics model;
  • generated PNG and JSON artifacts.

Block 5 HDL

Purpose: verify synthesizable/educational Verilog examples and self-checking testbenches.

The HDL smoke flow is documented in HDL Smoke Verification.

Checks:

  • iq_passthrough;
  • fir_iq_4tap;
  • nco_mixer_iq;
  • axis_iq_passthrough;
  • BPSK chain and control-wrapper smoke tests when canonical vectors are regenerated.

Local equivalent:

make hdl

QPSK Demo Analysis

Purpose: keep the synthetic QPSK replay dataset reproducible and useful for Block 9/11/12 reports.

Checks:

  • generate the deterministic CI16 fixture;
  • run the analyzer;
  • verify the summary JSON and preview SVG files exist;
  • enforce basic metric thresholds for sample count, symbol count, EVM and CFO.

Local equivalent:

python tools/generate_demo_qpsk_dataset.py
python tools/analyze_demo_qpsk_dataset.py

Dataset Manifests

Purpose: keep dataset descriptors consistent without committing unnecessary binary payloads.

Checks:

  • parse dataset manifests;
  • verify required metadata fields;
  • check Git LFS pointer rules and checksum fields when present.

Local equivalent:

python tools/check_dataset_manifests.py

Block 8 Synchronization

Purpose: verify synchronization models and generated metrics.

Checks:

  • Lab 8.1 CFO correction;
  • Lab 8.2 phase correction;
  • Lab 8.3 timing recovery;
  • Lab 8.4 end-to-end sync chain.

Artifacts:

  • constellation plots;
  • phase/timing plots;
  • EVM/BER metrics JSON.

Block 9 Recording Analysis

Purpose: verify metadata-driven IQ capture processing.

Checks:

  • Lab 9.2 CI16 reader;
  • Lab 9.3 multi-format IQ reader.

Artifacts:

  • FFT spectrum plots;
  • CI16/CU8/CF32 synthetic capture metrics;
  • quality checks for SNR, DC and clipping.

Documentation build

Purpose: keep the bilingual MkDocs site consistent.

Checks:

  • navigation references;
  • snippet includes;
  • Mermaid-friendly markdown structure;
  • strict-mode warnings.

Local equivalent:

python tools/tasks.py docs

Docs Assets Check

Purpose: fail fast on broken local markdown asset links.

Checks:

  • run tools/check_markdown_assets.py;
  • verify referenced local assets exist.

Experiment Manifests Check

Purpose: keep experiment manifests machine-checkable and reproducible.

Checks:

  • parse every experiments/*.yaml;
  • validate required fields and template paths;
  • enforce unique and filename-aligned experiment.id.

When to add a new workflow

Add a dedicated workflow when a new block has:

  • executable models with generated artifacts;
  • HDL testbenches;
  • external tool assumptions;
  • long-running checks that should not always run in full_course_smoke.yml.

CI quality checklist

  • [ ] Workflow has a clear name.
  • [ ] Trigger paths are scoped.
  • [ ] Dependencies are explicit.
  • [ ] Generated artifacts are validated.
  • [ ] Artifacts are uploaded when useful.
  • [ ] Local equivalent command is documented.