Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
0732cba
Added: compression search budget
JakimPL Sep 12, 2026
f1960f6
Added: the compression study harness and its accounting report
JakimPL Sep 12, 2026
aa5e8c6
Measured: seed transforms, search budgets and strategy depth
JakimPL Sep 12, 2026
f7b9207
Priced: candidate token grammars in a study-side parser
JakimPL Sep 12, 2026
7aafe67
Recorded: the compression study verdicts
JakimPL Sep 12, 2026
f2a599a
Rewrote: the build and release scripts in Python
JakimPL Sep 13, 2026
5b90694
Rewrote: the development scripts in Python
JakimPL Sep 13, 2026
cff95e4
Held: the bootstrap scripts to the standard library
JakimPL Sep 13, 2026
77059f9
Named: every command the sampletones entry runs
JakimPL Sep 13, 2026
6910265
Opened: the tools package to the command line
JakimPL Sep 13, 2026
c54a7ff
Moved: synthesis and calibration into the tools package
JakimPL Sep 13, 2026
a61586e
Moved: the driver toolchain and the trace into the tools package
JakimPL Sep 13, 2026
2a50aae
Moved: the mark and the icon suite into the tools package
JakimPL Sep 13, 2026
2a10bdc
Moved: the source checks into the tools package
JakimPL Sep 13, 2026
bbfc3cc
Moved: the codec study into the tools package
JakimPL Sep 13, 2026
9135087
Moved: the sample corpus and its emitters into the tools package
JakimPL Sep 13, 2026
c2089f2
Organized: the development documents into subdirectories
JakimPL Sep 13, 2026
6b40b70
Reformat
JakimPL Sep 13, 2026
e0e4f48
Removed: the codec study's corpus of local files
JakimPL Sep 13, 2026
054e5d1
Fixed: the CI and build breakages
JakimPL Sep 13, 2026
a61c3e0
Split: the test run into suite, doctests and benchmarks targets
JakimPL Sep 13, 2026
6a2759f
Lightened: the command registry and the tools' failure messages
JakimPL Sep 13, 2026
a249579
Shared: one table writer for every report
JakimPL Sep 13, 2026
67ead94
Tidied: the tools package after the review
JakimPL Sep 13, 2026
6d08f89
Moved: the calibration configuration into the tools package
JakimPL Sep 13, 2026
0f84b83
Centralized: the bootstrap scripts' layout, platform facts and releas…
JakimPL Sep 13, 2026
cb526e1
Corrected: the stale facts in the user documentation
JakimPL Sep 13, 2026
9def965
Rewrote: the user guide in plain language
JakimPL Sep 13, 2026
2097dc4
Fixed: the Windows path in the open command's refusal test
JakimPL Sep 13, 2026
1dc9ba0
Improved: compression progress indicator
JakimPL Sep 13, 2026
387e930
Fixed: ruff issues
JakimPL Sep 13, 2026
41b6a85
Moved: the mark's data into its config package
JakimPL Sep 13, 2026
0091300
Hardened: the scripts' interpreter gate, CI conditions and release facts
JakimPL Sep 13, 2026
597a3c4
Tidied: the study's sources, the light paths and the tools' names
JakimPL Sep 13, 2026
0d257e7
Sharpened: the tests the review found weak
JakimPL Sep 13, 2026
599dccc
Corrected: the development documents the review found stale
JakimPL Sep 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
26 changes: 17 additions & 9 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ jobs:
enable-cache: true

- name: Install system libraries
run: bash scripts/linux/build/dependencies.sh
run: python3 scripts/system_dependencies.py

- name: Install the development environment
run: uv sync --group dev
Expand All @@ -52,6 +52,8 @@ jobs:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
python: ["3.12", "3.13"]
env:
PYTHON: ${{ matrix.os == 'windows-latest' && 'python' || 'python3' }}
steps:
- uses: actions/checkout@v7

Expand All @@ -63,22 +65,28 @@ jobs:

- name: Install system libraries (Linux)
if: runner.os == 'Linux'
run: bash scripts/linux/build/dependencies.sh
run: python3 scripts/system_dependencies.py

- name: Install system libraries (macOS)
if: runner.os == 'macOS'
run: |
bash scripts/macos/build/dependencies.sh
bash scripts/macos/build/build_env.sh >> "$GITHUB_ENV"
python3 scripts/system_dependencies.py
python3 scripts/build_environment.py >> "$GITHUB_ENV"

- name: Install the development environment
id: environment
run: uv sync --group dev

- name: Run doctests
run: uv run python -m pytest src/ --doctest-modules --no-cov
- name: Run the doctests
shell: bash
run: $PYTHON scripts/run_tests.py doctests

- name: Run the unit and integration suites with coverage
run: uv run python -m pytest -n auto --cov --ignore=tests/benchmarks
- name: Run the test suite with coverage
if: ${{ !cancelled() && steps.environment.outcome == 'success' }}
shell: bash
run: $PYTHON scripts/run_tests.py suite --workers auto

- name: Run the benchmarks
run: uv run python -m pytest tests/benchmarks --no-cov
if: ${{ !cancelled() && steps.environment.outcome == 'success' }}
shell: bash
run: $PYTHON scripts/run_tests.py benchmarks
49 changes: 18 additions & 31 deletions .github/workflows/workflow.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,7 @@ jobs:

- name: Verify tag matches project version
if: startsWith(github.ref, 'refs/tags/v')
run: |
python3 scripts/ci/checks/version_tag.py \
--tag "$GITHUB_REF_NAME" \
--project-version "$(uv version --short)"
run: python3 scripts/verify_version_tag.py --tag "$GITHUB_REF_NAME"

- name: Build sdist and wheel
run: uv build
Expand Down Expand Up @@ -78,19 +75,28 @@ jobs:
- name: Install PortAudio (macOS)
if: runner.os == 'macOS'
run: |
bash repository/scripts/macos/build/dependencies.sh
bash repository/scripts/macos/build/build_env.sh >> "$GITHUB_ENV"
python3 repository/scripts/system_dependencies.py
python3 repository/scripts/build_environment.py >> "$GITHUB_ENV"

- name: Install the wheel and check the entry point
shell: bash
run: |
python -m pip install --upgrade pip
python -m pip install dist/*.whl
sampletones --version
sampletones --help

- name: Check the wheel carries every resource it needs at startup
shell: bash
run: sampletones --self-check
run: sampletones self-check

- name: Check a developer command refuses to run outside a checkout
shell: bash
run: |
if refusal=$(sampletones check import-boundary --all 2>&1); then
exit 1
fi
grep "runs from a checkout" <<< "$refusal"

bundle:
name: Standalone bundle (${{ matrix.platform }})
Expand All @@ -114,38 +120,19 @@ jobs:

- name: Install system libraries (Linux)
if: runner.os == 'Linux'
run: bash scripts/linux/build/dependencies.sh
run: python scripts/system_dependencies.py

- name: Create the build environment the bundle scripts expect
- name: Build the bundle
shell: bash
run: |
python -m venv .venv-build
if [ "$RUNNER_OS" = "Windows" ]; then
venv_python=.venv-build/Scripts/python.exe
else
venv_python=.venv-build/bin/python
fi
"$venv_python" -m pip install --upgrade pip
"$venv_python" -m pip install ".[build]" --group assets

- name: Build the bundle (Linux)
if: runner.os == 'Linux'
run: bash scripts/linux/build/build.sh --release

- name: Build the bundle (Windows)
if: runner.os == 'Windows'
shell: cmd
run: scripts\windows\build\build.bat --release
run: python scripts/bundle.py --release

- name: Check the bundle runs and carries its notices
shell: bash
run: python scripts/ci/checks/bundle.py bin/sampletones
run: python scripts/verify_bundle.py

- name: Zip the bundle
shell: bash
run: |
name="sampletones-${GITHUB_REF_NAME}-${{ matrix.platform }}"
python scripts/ci/zip_bundle.py bin/sampletones "bundles/${name}.zip" --root "${name}"
run: python scripts/archive_bundle.py --label "${{ matrix.platform }}"

- uses: actions/upload-artifact@v7
with:
Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,11 @@ dist/
wheels/
/bin/
/build/
/bundles/

sampletones
!src/sampletones
!tests/sampletones
!tests/unit/sampletones

*.pyc
*.pyo
Expand Down
41 changes: 30 additions & 11 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -35,55 +35,55 @@ repos:
hooks:
- id: import-boundary
name: import boundary
entry: uv run scripts/checks/import_boundary.py --all
entry: uv run sampletones check import-boundary --all
language: system
types: [python]
pass_filenames: false
verbose: true

- id: unused-tags
name: unused tags
entry: uv run scripts/checks/unused_tags.py
entry: uv run sampletones check unused-tags
language: system
types: [python]
pass_filenames: false
verbose: true

- id: rendered-literals
name: rendered literals
entry: uv run scripts/checks/rendered_literals.py
entry: uv run sampletones check rendered-literals
language: system
files: ^tests/.*\.py$
pass_filenames: false
verbose: true

- id: tag-names
name: tag names
entry: uv run scripts/checks/tag_names.py --all
entry: uv run sampletones check tag-names --all
language: system
types: [python]
pass_filenames: false
verbose: true

- id: palette-colors
name: palette colors
entry: uv run scripts/checks/palette_colors.py
entry: uv run sampletones check palette-colors
language: system
files: (^src/sampletones_application/.*\.py|^src/sampletones_config/.*\.yaml)$
pass_filenames: false
verbose: true

- id: language-keys
name: language keys
entry: uv run scripts/checks/language_keys.py
entry: uv run sampletones check language-keys
language: system
files: (\.py|^src/sampletones_config/lang/.*\.yaml)$
pass_filenames: false
verbose: true

- id: shortcut-actions
name: shortcut actions
entry: uv run scripts/checks/shortcut_actions.py
entry: uv run sampletones check shortcut-actions
language: system
files: (\.py|^src/sampletones_config/keybindings/.*\.yaml)$
pass_filenames: false
Expand All @@ -109,20 +109,39 @@ repos:

- id: icons
name: icons
entry: uv run python scripts/assets/icons.py
entry: uv run sampletones icons
language: system
files: ^src/sampletones_assets/(icons|mark)/
files: ^src/(sampletones_assets/icons|sampletones_tools/assets/mark)/
pass_filenames: false
verbose: true
stages:
- pre-push

- id: pytest
name: pytest
- id: test
name: test
entry: make test
language: system
types:
- python
stages:
- pre-push
pass_filenames: false

- id: test-docs
name: test docs
entry: make test-docs
language: system
files: ^src/.*\.py$
stages:
- pre-push
pass_filenames: false

- id: benchmarks
name: benchmarks
entry: make benchmarks
language: system
types:
- python
stages:
- pre-push
pass_filenames: false
6 changes: 3 additions & 3 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
## v0.3.2

* Added NSF player and export.
* Added stems conversion: mix several recordings into one reconstruction
* Matched each stem against its own recording, so a stem plays what was recorded on it
* Added a per-source channel cap
* Added stems conversion: mix several recordings into one reconstruction.
* Matched each stem against its own recording, so a stem plays what was recorded on it.
* Added a per-source channel cap.
* Bumped the reconstruction data-version to `2.2` with backward compatibility for `2.1`.

## v0.3.1 [2026-08-18]
Expand Down
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ SOFTWARE.

The MIT license above covers the SampleToNES source code and the application
icons under `src/sampletones_assets/icons/`, which are drawn from the mark
declared in `src/sampletones_assets/mark/`.
declared in `src/sampletones_tools/assets/mark/`.

Font files bundled under `src/sampletones_assets/fonts/` are the work of third
parties and remain under their own licenses (SIL Open Font License 1.1 and the
Expand Down
Loading
Loading