Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
69b9aa4
chore(deps-dev): bump @cloudflare/workers-types
dependabot[bot] Jun 14, 2026
9833c3c
chore(deps-dev): bump @typescript/native-preview
dependabot[bot] Jun 14, 2026
777eb5f
Merge pull request #143 from nulltask/dependabot/npm_and_yarn/cloudfl…
nulltask Jun 14, 2026
de7ef5d
Merge pull request #144 from nulltask/dependabot/npm_and_yarn/typescr…
nulltask Jun 14, 2026
2b10f2a
chore(deps-dev): replace @typescript/native-preview with typescript 7…
nulltask Jun 18, 2026
ef55155
Merge pull request #147 from nulltask/chore/typescript-7-rc
nulltask Jun 18, 2026
8aa5985
chore(deps): bump actions/checkout from 6 to 7
dependabot[bot] Jun 21, 2026
ba8ad0c
chore(deps-dev): bump oxlint from 1.69.0 to 1.70.0
dependabot[bot] Jun 21, 2026
3394f14
chore(deps-dev): bump wrangler from 4.100.0 to 4.103.0
dependabot[bot] Jun 21, 2026
07bee99
Merge pull request #148 from nulltask/dependabot/github_actions/actio…
nulltask Jun 25, 2026
6671115
Merge pull request #149 from nulltask/dependabot/npm_and_yarn/oxlint-…
nulltask Jun 25, 2026
5241b1b
Merge pull request #153 from nulltask/dependabot/npm_and_yarn/wrangle…
nulltask Jun 25, 2026
6febb36
docs: add changeset rules to AGENTS.md [ci skip]
nulltask Jun 30, 2026
ee091fa
chore(deps-dev): bump oxfmt from 0.54.0 to 0.57.0
dependabot[bot] Jul 1, 2026
70fcf08
Merge pull request #152 from nulltask/dependabot/npm_and_yarn/oxfmt-0…
nulltask Jul 6, 2026
da899ca
fix(ci): drop per-package dependabot directories that break the pnpm …
nulltask Jul 7, 2026
33fa443
chore(deps-dev): bump @cloudflare/workers-types
dependabot[bot] Jul 7, 2026
68dd2ee
chore(deps-dev): bump tsx from 4.22.4 to 4.23.0
dependabot[bot] Jul 7, 2026
0f5f996
chore(deps-dev): bump oxlint from 1.70.0 to 1.73.0
dependabot[bot] Jul 7, 2026
9077abf
fix(lr2-skin,player-web): make public const types isolated-declaratio…
nulltask Jul 7, 2026
44b7af6
Merge pull request #161 from nulltask/dependabot/npm_and_yarn/oxlint-…
nulltask Jul 7, 2026
f406231
Merge pull request #160 from nulltask/dependabot/npm_and_yarn/tsx-4.23.0
nulltask Jul 7, 2026
c0aa29c
Merge pull request #159 from nulltask/dependabot/npm_and_yarn/cloudfl…
nulltask Jul 7, 2026
76d299d
chore(deps-dev): bump wrangler from 4.103.0 to 4.107.0
dependabot[bot] Jul 7, 2026
5c301ae
chore(deps-dev): bump tsdown from 0.22.2 to 0.22.3
nulltask Jul 7, 2026
61d5093
chore(deps-dev): bump vitest and @vitest/coverage-v8 to 4.1.10
nulltask Jul 7, 2026
c3a508f
chore(deps-dev): bump vite from 8.0.16 to 8.1.3
dependabot[bot] Jul 7, 2026
4abf41d
Merge pull request #158 from nulltask/dependabot/npm_and_yarn/vite-8.1.3
nulltask Jul 7, 2026
67bfb26
Merge pull request #157 from nulltask/dependabot/npm_and_yarn/wrangle…
nulltask Jul 7, 2026
22b9894
chore(deps): bump actions/setup-node from 6 to 7
dependabot[bot] Jul 19, 2026
28a51f0
fix(deps): repair lockfile corrupted by auto-merge of #157 and #158
nulltask Aug 4, 2026
add2ae3
Merge branch 'devel' into dependabot/github_actions/actions/setup-node-7
nulltask Aug 4, 2026
5e9fd20
Merge pull request #163 from nulltask/dependabot/github_actions/actio…
nulltask Aug 5, 2026
e799be2
chore(deps): bump node-web-audio-api from 2.0.0 to 2.1.0
dependabot[bot] Aug 9, 2026
4cdcdcc
chore(deps-dev): bump oxlint from 1.73.0 to 1.77.0
dependabot[bot] Aug 9, 2026
ccd80c6
chore(deps-dev): bump @changesets/cli from 2.31.0 to 2.31.1
dependabot[bot] Aug 9, 2026
d6f3c74
chore(deps-dev): bump tsx from 4.23.0 to 4.23.8
dependabot[bot] Aug 9, 2026
d72eb6b
Merge pull request #164 from nulltask/dependabot/npm_and_yarn/node-we…
nulltask Aug 11, 2026
f75e9ed
Merge pull request #165 from nulltask/dependabot/npm_and_yarn/oxlint-…
nulltask Aug 11, 2026
9a80288
Merge pull request #167 from nulltask/dependabot/npm_and_yarn/tsx-4.23.8
nulltask Aug 11, 2026
973122f
Merge pull request #166 from nulltask/dependabot/npm_and_yarn/changes…
nulltask Aug 11, 2026
0c0950d
chore(deps-dev): bump tsdown from 0.22.3 to 0.22.14
dependabot[bot] Aug 11, 2026
d31d0d2
Merge pull request #168 from nulltask/dependabot/npm_and_yarn/tsdown-…
nulltask Aug 11, 2026
4273cb0
chore(deps): bump node-web-audio-api from 2.1.0 to 2.2.0
dependabot[bot] Aug 16, 2026
95d3f92
chore(deps-dev): bump tsx from 4.23.8 to 4.23.12
dependabot[bot] Aug 16, 2026
d5a3116
chore(deps-dev): bump tinybench from 6.0.2 to 6.1.3
dependabot[bot] Aug 16, 2026
aeb3185
chore(deps-dev): bump @cloudflare/workers-types
dependabot[bot] Aug 16, 2026
d95c95d
Merge pull request #172 from nulltask/dependabot/npm_and_yarn/tinyben…
nulltask Aug 16, 2026
6029f30
Merge pull request #171 from nulltask/dependabot/npm_and_yarn/tsx-4.2…
nulltask Aug 16, 2026
b2aabc2
Merge pull request #169 from nulltask/dependabot/npm_and_yarn/node-we…
nulltask Aug 16, 2026
6dd00b0
Merge pull request #173 from nulltask/dependabot/npm_and_yarn/cloudfl…
nulltask Aug 16, 2026
ab210cb
feat: add play-log recording and LR2/beatoraja/IIDX replay simulators
nulltask Aug 17, 2026
692b419
chore: upgrade toolchain to Node 26
nulltask Aug 17, 2026
18a3ec4
feat: replay dropped play-logs and latch playlog options per play
nulltask Aug 17, 2026
e96d7fa
feat: hash-match play-logs, switchable judge rulesets, and lil-gui pl…
nulltask Aug 17, 2026
8c0746d
Merge branch 'devel' of https://github.com/nulltask/be-music into devel
nulltask Aug 17, 2026
e81baa9
chore(deps-dev): move to TypeScript 7.0.2 stable
nulltask Aug 17, 2026
575f657
chore: version packages
nulltask Aug 17, 2026
92e2c1a
fix(ci): register benchmark cases for the new player-web playlog exports
nulltask Aug 17, 2026
fd01a56
fix(ci): map the @be-music/player/playlog subpath in the typecheck ts…
nulltask Aug 17, 2026
5cec87c
fix(ci): pass benchmark snapshots through the environment, not argv
nulltask Aug 17, 2026
d10b8dc
fix(ci): move benchmark snapshots between jobs as artifacts, and alia…
nulltask Aug 17, 2026
dc51b63
fix(ci): retry the benchmark comment through transient GitHub 5xx
nulltask Aug 17, 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
9 changes: 6 additions & 3 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
version: 2
updates:
- package-ecosystem: "npm"
directories:
- "/"
- "/packages/*"
# The root entry covers every pnpm workspace member: Dependabot bumps
# packages/*/package.json manifests together with the shared root
# pnpm-lock.yaml. Per-package directory entries must not be added back —
# they generate manifest-only PRs that leave pnpm-lock.yaml stale and fail
# CI with ERR_PNPM_OUTDATED_LOCKFILE.
directory: "/"
schedule:
interval: "weekly"
ignore:
Expand Down
148 changes: 81 additions & 67 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0

Expand Down Expand Up @@ -84,15 +84,15 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Setup pnpm
uses: pnpm/action-setup@v6
with:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand All @@ -111,8 +111,6 @@ jobs:
needs.changes.outputs.code_changed == 'true'
runs-on: ubuntu-24.04-arm
timeout-minutes: 30
outputs:
snapshot_b64: ${{ steps.aggregate-head.outputs.snapshot_b64 }}
env:
BENCH_TIME_MS: 20
BENCH_WARMUP_TIME_MS: 10
Expand All @@ -122,7 +120,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.head.sha }}

Expand All @@ -132,7 +130,7 @@ jobs:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand All @@ -156,12 +154,18 @@ jobs:
run: |
set -euo pipefail
pnpm run bench:aggregate -- --output tmp/bench/head.json tmp/bench/head-runs/*.json
{
echo "snapshot_b64<<__SNAPSHOT__"
node -e "const fs=require('node:fs'); process.stdout.write(fs.readFileSync('tmp/bench/head.json').toString('base64'));"
echo
echo "__SNAPSHOT__"
} >> "$GITHUB_OUTPUT"

# The snapshot moves between jobs as an artifact, never as a job output. It outgrew both limits a job
# output would impose: a single argv/envp string caps at `MAX_ARG_STRLEN` (128 KiB) so the compare job
# could neither pass it to `node` nor even start `bash` with it in the environment, and job outputs
# themselves cap at 1 MiB. Artifacts have no such ceiling and keep the payload off the process image.
- name: Upload head benchmark snapshot
uses: actions/upload-artifact@v7
with:
name: bench-pr-head-snapshot
path: tmp/bench/head.json
retention-days: 1
if-no-files-found: error

benchmark-pr-base:
name: Benchmark Base (PR)
Expand All @@ -173,7 +177,6 @@ jobs:
outputs:
available: ${{ steps.detect-bench.outputs.available == 'true' &&
steps.run-base-benchmark.outcome == 'success' }}
snapshot_b64: ${{ steps.aggregate-base.outputs.snapshot_b64 }}
env:
BENCH_TIME_MS: 20
BENCH_WARMUP_TIME_MS: 10
Expand All @@ -183,7 +186,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
ref: ${{ github.event.pull_request.head.sha }}
Expand All @@ -194,7 +197,7 @@ jobs:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand Down Expand Up @@ -259,12 +262,16 @@ jobs:
run: |
set -euo pipefail
pnpm run bench:aggregate -- --output tmp/bench/base.json tmp/bench/base-runs/*.json
{
echo "snapshot_b64<<__SNAPSHOT__"
node -e "const fs=require('node:fs'); process.stdout.write(fs.readFileSync('tmp/bench/base.json').toString('base64'));"
echo
echo "__SNAPSHOT__"
} >> "$GITHUB_OUTPUT"

- name: Upload base benchmark snapshot
if: steps.detect-bench.outputs.available == 'true' &&
steps.run-base-benchmark.outcome == 'success'
uses: actions/upload-artifact@v7
with:
name: bench-pr-base-snapshot
path: tmp/bench/base.json
retention-days: 1
if-no-files-found: error

benchmark-pr:
name: Benchmark (PR)
Expand All @@ -284,7 +291,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ github.event.pull_request.head.sha }}

Expand All @@ -294,7 +301,7 @@ jobs:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand All @@ -303,20 +310,23 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile --prefer-offline

# The snapshot travels as a base64 job output. It MUST reach the decoder through the environment and stdin,
# never as a command-line argument: Linux caps a single argv entry at `MAX_ARG_STRLEN` (128 KiB), and the
# snapshot passed that once the benchmarked export count grew — the step died with
# `node: Argument list too long` (exit 126). `printf` is a bash builtin, so piping the env var into
# `base64 -d` never execs with the payload attached.
- name: Restore head benchmark snapshot
shell: bash
run: |
set -euo pipefail
mkdir -p tmp/bench
node -e "const fs=require('node:fs'); fs.writeFileSync('tmp/bench/head.json', Buffer.from(process.argv[1], 'base64'));" '${{ needs.benchmark-pr-head.outputs.snapshot_b64 }}'
uses: actions/download-artifact@v8
with:
name: bench-pr-head-snapshot
path: tmp/bench

- name: Restore base benchmark snapshot
if: needs.benchmark-pr-base.outputs.available == 'true'
shell: bash
run: |
set -euo pipefail
mkdir -p tmp/bench
node -e "const fs=require('node:fs'); fs.writeFileSync('tmp/bench/base.json', Buffer.from(process.argv[1], 'base64'));" '${{ needs.benchmark-pr-base.outputs.snapshot_b64 }}'
uses: actions/download-artifact@v8
with:
name: bench-pr-base-snapshot
path: tmp/bench

- name: Generate benchmark report
shell: bash
Expand All @@ -331,6 +341,7 @@ jobs:
- name: Post benchmark comment
uses: actions/github-script@v9
with:
retries: 3
script: |
const fs = require('node:fs');
const marker = '<!-- be-music-exports-benchmark -->';
Expand Down Expand Up @@ -375,8 +386,6 @@ jobs:
if: github.event_name == 'push' && needs.changes.outputs.code_changed == 'true'
runs-on: ubuntu-24.04-arm
timeout-minutes: 30
outputs:
snapshot_b64: ${{ steps.aggregate-head.outputs.snapshot_b64 }}
env:
BENCH_TIME_MS: 20
BENCH_WARMUP_TIME_MS: 10
Expand All @@ -386,7 +395,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ github.sha }}

Expand All @@ -396,7 +405,7 @@ jobs:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand All @@ -420,12 +429,14 @@ jobs:
run: |
set -euo pipefail
pnpm run bench:aggregate -- --output tmp/bench/head.json tmp/bench/head-runs/*.json
{
echo "snapshot_b64<<__SNAPSHOT__"
node -e "const fs=require('node:fs'); process.stdout.write(fs.readFileSync('tmp/bench/head.json').toString('base64'));"
echo
echo "__SNAPSHOT__"
} >> "$GITHUB_OUTPUT"

- name: Upload head benchmark snapshot
uses: actions/upload-artifact@v7
with:
name: bench-push-head-snapshot
path: tmp/bench/head.json
retention-days: 1
if-no-files-found: error

benchmark-push-base:
name: Benchmark Base (Push)
Expand All @@ -436,7 +447,6 @@ jobs:
outputs:
available: ${{ steps.detect-bench.outputs.available == 'true' &&
steps.run-base-benchmark.outcome == 'success' }}
snapshot_b64: ${{ steps.aggregate-base.outputs.snapshot_b64 }}
env:
BENCH_TIME_MS: 20
BENCH_WARMUP_TIME_MS: 10
Expand All @@ -446,7 +456,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
fetch-depth: 0
ref: ${{ github.sha }}
Expand All @@ -457,7 +467,7 @@ jobs:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand Down Expand Up @@ -527,12 +537,16 @@ jobs:
run: |
set -euo pipefail
pnpm run bench:aggregate -- --output tmp/bench/base.json tmp/bench/base-runs/*.json
{
echo "snapshot_b64<<__SNAPSHOT__"
node -e "const fs=require('node:fs'); process.stdout.write(fs.readFileSync('tmp/bench/base.json').toString('base64'));"
echo
echo "__SNAPSHOT__"
} >> "$GITHUB_OUTPUT"

- name: Upload base benchmark snapshot
if: steps.detect-bench.outputs.available == 'true' &&
steps.run-base-benchmark.outcome == 'success'
uses: actions/upload-artifact@v7
with:
name: bench-push-base-snapshot
path: tmp/bench/base.json
retention-days: 1
if-no-files-found: error

benchmark-push:
name: Benchmark (Push)
Expand All @@ -550,7 +564,7 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7
with:
ref: ${{ github.sha }}

Expand All @@ -560,7 +574,7 @@ jobs:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand All @@ -569,20 +583,19 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile --prefer-offline

# Env + stdin, never argv — see the matching note on the PR-side restore steps (`MAX_ARG_STRLEN`).
- name: Restore head benchmark snapshot
shell: bash
run: |
set -euo pipefail
mkdir -p tmp/bench
node -e "const fs=require('node:fs'); fs.writeFileSync('tmp/bench/head.json', Buffer.from(process.argv[1], 'base64'));" '${{ needs.benchmark-push-head.outputs.snapshot_b64 }}'
uses: actions/download-artifact@v8
with:
name: bench-push-head-snapshot
path: tmp/bench

- name: Restore base benchmark snapshot
if: needs.benchmark-push-base.outputs.available == 'true'
shell: bash
run: |
set -euo pipefail
mkdir -p tmp/bench
node -e "const fs=require('node:fs'); fs.writeFileSync('tmp/bench/base.json', Buffer.from(process.argv[1], 'base64'));" '${{ needs.benchmark-push-base.outputs.snapshot_b64 }}'
uses: actions/download-artifact@v8
with:
name: bench-push-base-snapshot
path: tmp/bench

- name: Generate benchmark report
shell: bash
Expand All @@ -597,6 +610,7 @@ jobs:
- name: Post benchmark comment
uses: actions/github-script@v9
with:
retries: 3
script: |
const fs = require('node:fs');
const marker = '<!-- be-music-exports-benchmark -->';
Expand Down Expand Up @@ -652,15 +666,15 @@ jobs:

steps:
- name: Checkout
uses: actions/checkout@v6
uses: actions/checkout@v7

- name: Setup pnpm
uses: pnpm/action-setup@v6
with:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
uses: actions/setup-node@v7
with:
node-version-file: .node-version
cache: pnpm
Expand Down
Loading