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
9d84577
Bump toolchain to Svelte 5 / SvelteKit 2.70
arg274 Aug 31, 2026
97f6a5e
Run sv migrate svelte-5 codemod over src and tests
arg274 Aug 31, 2026
9210e2b
Migrate app source to Svelte 5 runes
arg274 Aug 31, 2026
6e9cdb0
Move the pre-paint theme script from {@html} into app.html
arg274 Aug 31, 2026
860b41e
Upgrade to Skeleton v5 and the maintained headless-table fork
arg274 Aug 31, 2026
43efc8b
Bump Vite 8, Vitest 4 and typescript-eslint 8 to clear audit findings
arg274 Aug 31, 2026
c3f5f78
Fix washed-out checksum and grade backgrounds under Tailwind 4
arg274 Sep 1, 2026
2476eeb
Restore pre-migration visuals and unblock the copy buttons
arg274 Sep 1, 2026
422274d
Align paginator icon sizes and simplify the page readout
arg274 Sep 1, 2026
b60c929
Pin the jump-to-page control to the paginator height
arg274 Sep 1, 2026
17c8096
Fix Tailwind class conflicts flagged across the project
arg274 Sep 1, 2026
326e8fb
Show copy feedback on the button and restore button cursors
arg274 Sep 1, 2026
966f456
Give the home page's click here a pointer cursor
arg274 Sep 1, 2026
6b108e5
Restore icon sizing inside btn-icon and square off the navbar corner
arg274 Sep 1, 2026
7e420a5
Restore a readable backdrop on the overview tooltips
arg274 Sep 1, 2026
6eca298
Replace Skeleton with Bits UI and own the styling layer
arg274 Sep 25, 2026
7f6cbd8
Re-anchor the palette to master instead of the Skeleton v5 port
arg274 Sep 25, 2026
7403372
Give the page an explicit app-shell grid so h-full resolves
arg274 Sep 25, 2026
8e89ae9
Route on the act of choosing files, not on the file list
arg274 Sep 25, 2026
059ca1c
Clear the pending file selection on returning home
arg274 Sep 25, 2026
3610012
Declare the tonal presets with @utility so hover works
arg274 Sep 25, 2026
bd7939f
Strip the forms border off the jump-to-track field
arg274 Sep 25, 2026
e111773
Keep the page content in flow while a drag is over it
arg274 Sep 26, 2026
173bc2e
Clear the standing eslint errors
arg274 Sep 26, 2026
12bd2cb
Stop the single log view racing the route a new selection asks for
arg274 Sep 26, 2026
5660d27
Run the gates on every push, and cut releases from tags
arg274 Sep 26, 2026
9acea99
Move the workflows off the deprecated action runtime
arg274 Sep 26, 2026
eb2ea2a
Let a dispatched release pick the Node it builds with
arg274 Sep 26, 2026
b8c904d
Merge master into svelte5-migration
arg274 Sep 26, 2026
e57e2c6
Merge master into svelte5-migration
arg274 Sep 26, 2026
1d4894c
Switch to Geist as a variable font
arg274 Sep 27, 2026
4987c36
Bring the help page up to date
arg274 Sep 27, 2026
d2c58f0
Parse EZ CD Audio Converter 6.0.0 logs
arg274 Oct 10, 2026
daaf7ac
Bring the experimental parsers in line with the mature ones
arg274 Oct 10, 2026
9f47c4d
Keep leading zeros in Rip AccurateRip checksums
arg274 Oct 10, 2026
feade92
Upgrade to SvelteKit 3
arg274 Oct 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
124 changes: 124 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
name: CI

on:
# `branches` rather than a bare `push` so tags fall to release.yml alone
# and a version bump is not built twice.
push:
branches: ['**']
pull_request:

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

permissions:
contents: read

jobs:
web:
name: Frontend
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7

- uses: actions/setup-node@v7
with:
node-version: '22'
cache: npm
cache-dependency-path: web/package-lock.json

- name: Install dependencies
run: npm ci
working-directory: web

- name: Types and compiler diagnostics
run: npm run check
working-directory: web

# Deliberately not `npm run lint`: that also runs prettier, which has
# never been green here (105 files differ from its output). Reformatting
# them is a decision for a commit of its own, not a gate.
- name: Lint
run: npx eslint .
working-directory: web

- name: Generate the static site
run: npm run build
working-directory: web

- name: Upload static site files
uses: actions/upload-artifact@v7
with:
name: webui
path: web/build

rust:
name: Backend
needs: web
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v7

# rust-embed pulls web/build into the binary at compile time, so the
# directory has to be there before cargo reads the crate -- clippy
# included. Reusing the artifact keeps it to one npm build per run.
- name: Download static site files
uses: actions/download-artifact@v8
with:
name: webui
path: web/build

- uses: dtolnay/rust-toolchain@stable
with:
components: clippy

- uses: Swatinem/rust-cache@v2

- name: Clippy
run: cargo clippy --all-targets --features experimental_rippers -- -D warnings

binaries:
name: Binaries
# Pushes produce artifacts, including the push to the default branch that
# a merged pull request creates. Pull requests themselves stop at the
# gates, so the same commit is never built twice.
if: github.event_name == 'push'
needs: [web, rust]
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
asset: cambia-linux-x86_64
- os: windows-latest
asset: cambia-windows-x86_64.exe
- os: macos-latest
asset: cambia-macos-arm64
steps:
- uses: actions/checkout@v7

- name: Download static site files
uses: actions/download-artifact@v8
with:
name: webui
path: web/build

- uses: dtolnay/rust-toolchain@stable

- uses: Swatinem/rust-cache@v2

- name: Build w/ experimental rippers
run: cargo build --release --features experimental_rippers

- name: Stage the binary under its release name
shell: bash
run: |
mkdir -p dist
cp "target/release/cambia${{ matrix.os == 'windows-latest' && '.exe' || '' }}" "dist/${{ matrix.asset }}"

- name: Upload binary
uses: actions/upload-artifact@v7
with:
name: ${{ matrix.asset }}
path: dist/${{ matrix.asset }}
48 changes: 0 additions & 48 deletions .github/workflows/main.yml

This file was deleted.

6 changes: 3 additions & 3 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ on:
description: 'Existing tag to build and publish'
required: true
node-version:
description: 'Node to build the frontend with'
default: '20'
description: 'Node to build the frontend with; 0.1.x tags need 20'
default: '22'

permissions:
contents: write
Expand Down Expand Up @@ -44,7 +44,7 @@ jobs:

- uses: actions/setup-node@v7
with:
node-version: ${{ inputs.node-version || '20' }}
node-version: ${{ inputs.node-version || '22' }}
cache: npm
cache-dependency-path: web/package-lock.json

Expand Down
12 changes: 12 additions & 0 deletions cambia-core/src/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ pub mod ezcd_parser;
#[cfg(feature = "freac")]
pub mod freac_parser;

use regex::Regex;
use serde::{Serialize, Deserialize};
use ts_rs::TS;

Expand Down Expand Up @@ -123,4 +124,15 @@ pub trait ParserTrack: TrackExtractor {
ar_info: self.extract_ar_info(),
}
}
}

pub fn split_tracks<'a>(log: &'a str, regex: &Regex) -> Vec<(u8, &'a str)> {
let starts: Vec<(usize, u8)> = regex.captures_iter(log)
.map(|captures| (captures.get(0).unwrap().start(), captures.get(1).unwrap().as_str().parse::<u8>().unwrap_or_default()))
.collect();

starts.iter().enumerate().map(|(idx, &(start, num))| {
let end = starts.get(idx + 1).map_or(log.len(), |&(next, _)| next);
(num, &log[start..end])
}).collect()
}
Loading
Loading