Skip to content

Commit 7042c99

Browse files
committed
Initial public release
0 parents  commit 7042c99

27 files changed

Lines changed: 1881 additions & 0 deletions

.gitattributes

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# Exclude internal planning artifacts from source archives
2+
3+
docs/*.resolved export-ignore
4+
docs/*.resolved.* export-ignore
5+
docs/*.metadata.json export-ignore

.github/dependabot.yml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
version: 2
2+
updates:
3+
- package-ecosystem: "pip"
4+
directory: "/"
5+
schedule:
6+
interval: "monthly"
7+
open-pull-requests-limit: 5
8+
9+
- package-ecosystem: "github-actions"
10+
directory: "/"
11+
schedule:
12+
interval: "weekly"
13+
open-pull-requests-limit: 5

.github/workflows/ci.yml

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
name: CI
2+
3+
on:
4+
pull_request:
5+
push:
6+
branches:
7+
- main
8+
- dev
9+
10+
jobs:
11+
test:
12+
runs-on: ubuntu-latest
13+
strategy:
14+
fail-fast: false
15+
matrix:
16+
python-version: ["3.11", "3.12"]
17+
18+
steps:
19+
- name: Checkout
20+
uses: actions/checkout@v4
21+
22+
- name: Set up Python
23+
uses: actions/setup-python@v5
24+
with:
25+
python-version: ${{ matrix.python-version }}
26+
27+
- name: Install dependencies
28+
run: |
29+
python -m pip install --upgrade pip
30+
pip install -r requirements.txt
31+
32+
- name: Bytecode compile
33+
run: python -m compileall webui.py utils.py entrypoint.py desktop_app.py transpose_chords.py
34+
35+
- name: Run tests
36+
run: python -m unittest discover -s tests -v
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Desktop Release
2+
3+
on:
4+
push:
5+
tags:
6+
- "v*"
7+
workflow_dispatch:
8+
9+
permissions:
10+
contents: write
11+
12+
jobs:
13+
build-windows:
14+
runs-on: windows-latest
15+
16+
steps:
17+
- name: Checkout
18+
uses: actions/checkout@v4
19+
20+
- name: Set up Python
21+
uses: actions/setup-python@v5
22+
with:
23+
python-version: "3.11"
24+
25+
- name: Install dependencies
26+
run: |
27+
python -m pip install --upgrade pip
28+
pip install -r requirements-desktop.txt
29+
30+
- name: Build executable
31+
shell: powershell
32+
run: |
33+
pyinstaller --noconfirm --onefile --windowed --name CapoToKeys `
34+
--add-data "templates;templates" `
35+
--add-data "static;static" `
36+
desktop_app.py
37+
38+
- name: Archive artifact
39+
shell: powershell
40+
run: |
41+
Compress-Archive -Path dist\CapoToKeys.exe -DestinationPath dist\CapoToKeys-windows.zip -Force
42+
43+
- name: Upload build artifact
44+
uses: actions/upload-artifact@v4
45+
with:
46+
name: CapoToKeys-windows
47+
path: dist/CapoToKeys-windows.zip
48+
49+
- name: Attach to GitHub Release
50+
if: startsWith(github.ref, 'refs/tags/v')
51+
uses: softprops/action-gh-release@v2
52+
with:
53+
files: dist/CapoToKeys-windows.zip

.github/workflows/docker-ghcr.yml

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
name: Docker GHCR
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- dev
8+
tags:
9+
- "v*"
10+
workflow_dispatch:
11+
12+
permissions:
13+
contents: read
14+
packages: write
15+
16+
jobs:
17+
build-and-push:
18+
runs-on: ubuntu-latest
19+
20+
steps:
21+
- name: Checkout
22+
uses: actions/checkout@v4
23+
24+
- name: Set up Docker Buildx
25+
uses: docker/setup-buildx-action@v3
26+
27+
- name: Log in to GHCR
28+
uses: docker/login-action@v3
29+
with:
30+
registry: ghcr.io
31+
username: ${{ github.actor }}
32+
password: ${{ secrets.GITHUB_TOKEN }}
33+
34+
- name: Extract metadata
35+
id: meta
36+
uses: docker/metadata-action@v5
37+
with:
38+
images: ghcr.io/${{ github.repository }}
39+
tags: |
40+
type=sha,prefix=sha-
41+
type=ref,event=branch
42+
type=ref,event=tag
43+
type=semver,pattern={{version}}
44+
type=raw,value=latest,enable={{is_default_branch}}
45+
46+
- name: Build and push
47+
uses: docker/build-push-action@v6
48+
with:
49+
context: .
50+
file: ./dockerfile
51+
push: true
52+
tags: ${{ steps.meta.outputs.tags }}
53+
labels: ${{ steps.meta.outputs.labels }}

.gitignore

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
__pycache__/
2+
*.py[cod]
3+
*.pyo
4+
*.pyd
5+
.pytest_cache/
6+
.mypy_cache/
7+
.ruff_cache/
8+
9+
# local generated outputs
10+
appdata/config/capotokeys/outputs/*
11+
!appdata/config/capotokeys/outputs/.gitkeep
12+
13+
# local test scratch
14+
tests/.tmp/
15+
16+
# packaging artifacts
17+
build/
18+
dist/
19+
*.spec

CONTRIBUTING.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Contributing
2+
3+
## Setup
4+
5+
1. Create a virtual environment.
6+
2. Install dependencies:
7+
8+
```bash
9+
pip install -r requirements.txt
10+
```
11+
12+
3. Run tests:
13+
14+
```bash
15+
python -m unittest discover -s tests -v
16+
```
17+
18+
## Development Flow
19+
20+
1. Create a feature branch from `dev`.
21+
2. Keep changes focused and include tests for behavior changes.
22+
3. Ensure CI passes before opening a pull request.
23+
24+
## Coding Guidelines
25+
26+
- Preserve Flask WebUI compatibility as the primary target.
27+
- Keep desktop mode optional and non-blocking for Docker workflows.
28+
- Avoid breaking output naming and archive grouping without migration notes.
29+
30+
## Pull Request Checklist
31+
32+
- [ ] Tests added or updated.
33+
- [ ] `python -m unittest discover -s tests -v` passes.
34+
- [ ] README/docs updated when behavior/config changes.
35+
- [ ] No secrets, local outputs, or build artifacts committed.

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2026 ReproDev
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

0 commit comments

Comments
 (0)