From 260b4f15a23b28cc8b4899ecdb2b264282431ec6 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 07:30:25 +1000 Subject: [PATCH 01/24] chore: bump librtbit-tracker-comms to 0.1.2 --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 309d220..78f9393 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -42,7 +42,7 @@ dht = { version = "0.1.1", registry = "forgejo", package = "librtbit-dht", defau librtbit-lsd = { version = "0.1.1", registry = "forgejo", default-features = false } peer_binary_protocol = { version = "0.1.1", registry = "forgejo", package = "librtbit-peer-protocol", default-features = false } sha1w = { version = "0.1.1", registry = "forgejo", package = "librtbit-sha1-wrapper", default-features = false } -tracker_comms = { version = "0.1.1", registry = "forgejo", package = "librtbit-tracker-comms", default-features = false } +tracker_comms = { version = "0.1.2", registry = "forgejo", package = "librtbit-tracker-comms", default-features = false } librtbit-upnp = { version = "0.1.1", registry = "forgejo" } upnp-serve = { version = "0.1.1", registry = "forgejo", package = "librtbit-upnp-serve", default-features = false } From ecd511464a9f7849be4239f7b4019ae6a4fdffbb Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 08:41:55 +1000 Subject: [PATCH 02/24] CI: fix cargo-deb install to use crates-io registry --- .woodpecker.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 1ae45e0..f7cf2ef 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -63,7 +63,7 @@ steps: - if [ -n "$CI_COMMIT_TAG" ]; then export CARGO_PROFILE_RELEASE_LTO=fat CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 CARGO_PROFILE_RELEASE_STRIP=symbols; fi - cargo build --profile release-github -p rtbit --no-default-features --features default-tls - ls -lh target/release-github/rtbit - - if [ -n "$CI_COMMIT_TAG" ]; then cargo install cargo-deb && cargo deb -p rtbit --no-build --no-strip --profile release-github -o target/release-github/rtbit_amd64.deb && ls -lh target/release-github/rtbit_amd64.deb; fi + - if [ -n "$CI_COMMIT_TAG" ]; then cargo install cargo-deb --registry crates-io && cargo deb -p rtbit --no-build --no-strip --profile release-github -o target/release-github/rtbit_amd64.deb && ls -lh target/release-github/rtbit_amd64.deb; fi - name: build-windows image: rust:1.88-bookworm @@ -100,8 +100,9 @@ steps: - sha256sum rtbit-$CI_COMMIT_TAG-* > "SHA256SUMS-$CI_COMMIT_TAG.txt" - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/$CI_COMMIT_TAG" - scp -o StrictHostKeyChecking=accept-new rtbit-$CI_COMMIT_TAG-* SHA256SUMS-$CI_COMMIT_TAG.txt root@100.92.4.57:/root/downloads/rusttorrent/$CI_COMMIT_TAG/ - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "cd /root/downloads/rusttorrent/$CI_COMMIT_TAG && ln -sf rtbit-$CI_COMMIT_TAG-linux-x86_64 rtbit-linux-x86_64 && ln -sf rtbit-$CI_COMMIT_TAG-windows-x86_64.exe rtbit-windows-x86_64.exe" - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "cd /root/downloads/rusttorrent && rm -rf latest && ln -s $CI_COMMIT_TAG latest" + - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-linux-x86_64 $DLDIR/rtbit-linux-x86_64" + - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-windows-x86_64.exe $DLDIR/rtbit-windows-x86_64.exe" + - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn $CI_COMMIT_TAG /root/downloads/rusttorrent/latest" - echo "Published https://dl.rusttorrent.dev/latest/" - name: build-and-push From e9223d3ea7725b5a880a5b0879922e59569a9bc4 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 08:49:46 +1000 Subject: [PATCH 03/24] CI: quote variables in publish-release scp/sha256sum commands --- .woodpecker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index f7cf2ef..ba25b12 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -97,9 +97,9 @@ steps: - cp target/release-github/rtbit "rtbit-$CI_COMMIT_TAG-linux-x86_64" - cp target/x86_64-pc-windows-gnu/release-github/rtbit.exe "rtbit-$CI_COMMIT_TAG-windows-x86_64.exe" - cp target/release-github/rtbit_amd64.deb "rtbit-$CI_COMMIT_TAG-amd64.deb" 2>/dev/null || true - - sha256sum rtbit-$CI_COMMIT_TAG-* > "SHA256SUMS-$CI_COMMIT_TAG.txt" + - sha256sum rtbit-"$CI_COMMIT_TAG"-* > "SHA256SUMS-$CI_COMMIT_TAG.txt" - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/$CI_COMMIT_TAG" - - scp -o StrictHostKeyChecking=accept-new rtbit-$CI_COMMIT_TAG-* SHA256SUMS-$CI_COMMIT_TAG.txt root@100.92.4.57:/root/downloads/rusttorrent/$CI_COMMIT_TAG/ + - scp -o StrictHostKeyChecking=accept-new rtbit-"$CI_COMMIT_TAG"-* "SHA256SUMS-$CI_COMMIT_TAG.txt" root@100.92.4.57:/root/downloads/rusttorrent/"$CI_COMMIT_TAG"/ - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-linux-x86_64 $DLDIR/rtbit-linux-x86_64" - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-windows-x86_64.exe $DLDIR/rtbit-windows-x86_64.exe" - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn $CI_COMMIT_TAG /root/downloads/rusttorrent/latest" From cf20ce2849a9ce6e300ce0d59b255e594dfb6206 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 09:03:41 +1000 Subject: [PATCH 04/24] CI: pass Forgejo token as GIT_AUTH_TOKEN in push-ghcr step --- .woodpecker.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index ba25b12..234c166 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -139,6 +139,9 @@ steps: image: woodpeckerci/plugin-docker-buildx when: - event: tag + environment: + GIT_AUTH_TOKEN: + from_secret: git_auth_token settings: repo: ghcr.io/ausagentsmith-org/rusttorrent registry: ghcr.io @@ -147,7 +150,7 @@ steps: from_secret: gh_release_token tag: ["${CI_COMMIT_TAG}", "latest", "alpha"] build_args_from_env: - - PLUGIN_PASSWORD + - GIT_AUTH_TOKEN - name: discord-success image: alpine/curl From c4aadbad4c7aa4efc75ffb532489f2e3c502d8a5 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 09:20:27 +1000 Subject: [PATCH 05/24] =?UTF-8?q?CI:=20revert=20quoting=20in=20publish-rel?= =?UTF-8?q?ease=20=E2=80=94=20was=20causing=20shell=20syntax=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 234c166..280a9e0 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -97,9 +97,9 @@ steps: - cp target/release-github/rtbit "rtbit-$CI_COMMIT_TAG-linux-x86_64" - cp target/x86_64-pc-windows-gnu/release-github/rtbit.exe "rtbit-$CI_COMMIT_TAG-windows-x86_64.exe" - cp target/release-github/rtbit_amd64.deb "rtbit-$CI_COMMIT_TAG-amd64.deb" 2>/dev/null || true - - sha256sum rtbit-"$CI_COMMIT_TAG"-* > "SHA256SUMS-$CI_COMMIT_TAG.txt" + - sha256sum rtbit-$CI_COMMIT_TAG-* > SHA256SUMS-$CI_COMMIT_TAG.txt - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/$CI_COMMIT_TAG" - - scp -o StrictHostKeyChecking=accept-new rtbit-"$CI_COMMIT_TAG"-* "SHA256SUMS-$CI_COMMIT_TAG.txt" root@100.92.4.57:/root/downloads/rusttorrent/"$CI_COMMIT_TAG"/ + - scp -o StrictHostKeyChecking=accept-new rtbit-$CI_COMMIT_TAG-* SHA256SUMS-$CI_COMMIT_TAG.txt root@100.92.4.57:/root/downloads/rusttorrent/$CI_COMMIT_TAG/ - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-linux-x86_64 $DLDIR/rtbit-linux-x86_64" - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-windows-x86_64.exe $DLDIR/rtbit-windows-x86_64.exe" - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn $CI_COMMIT_TAG /root/downloads/rusttorrent/latest" From 8f68c201401c0711d0e9d41420dca18d3e59a922 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 09:48:04 +1000 Subject: [PATCH 06/24] CI: replace push-ghcr buildx with pull+retag from Forgejo registry --- .woodpecker.yml | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 280a9e0..1a62004 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -136,21 +136,19 @@ steps: - PLUGIN_PASSWORD - name: push-ghcr - image: woodpeckerci/plugin-docker-buildx + image: docker:cli when: - event: tag environment: - GIT_AUTH_TOKEN: - from_secret: git_auth_token - settings: - repo: ghcr.io/ausagentsmith-org/rusttorrent - registry: ghcr.io - username: AusAgentSmith - password: + GH_TOKEN: from_secret: gh_release_token - tag: ["${CI_COMMIT_TAG}", "latest", "alpha"] - build_args_from_env: - - GIT_AUTH_TOKEN + FORGEJO_TOKEN: + from_secret: git_auth_token + commands: + - docker login repo.indexarr.net -u "$FORGEJO_TOKEN" -p "$FORGEJO_TOKEN" + - docker login ghcr.io -u AusAgentSmith -p "$GH_TOKEN" + - docker pull repo.indexarr.net/indexarr/rusttorrent:$CI_COMMIT_TAG + - for tag in $CI_COMMIT_TAG latest alpha; do docker tag repo.indexarr.net/indexarr/rusttorrent:$CI_COMMIT_TAG ghcr.io/ausagentsmith-org/rusttorrent:$tag && docker push ghcr.io/ausagentsmith-org/rusttorrent:$tag; done - name: discord-success image: alpine/curl From 9b69adc0db0183835656793d5d984646ef77778a Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 10:12:43 +1000 Subject: [PATCH 07/24] CI: use skopeo to copy images to GHCR (no Docker daemon needed) --- .woodpecker.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 1a62004..4d8b34d 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -136,7 +136,7 @@ steps: - PLUGIN_PASSWORD - name: push-ghcr - image: docker:cli + image: quay.io/skopeo/stable when: - event: tag environment: @@ -145,10 +145,10 @@ steps: FORGEJO_TOKEN: from_secret: git_auth_token commands: - - docker login repo.indexarr.net -u "$FORGEJO_TOKEN" -p "$FORGEJO_TOKEN" - - docker login ghcr.io -u AusAgentSmith -p "$GH_TOKEN" - - docker pull repo.indexarr.net/indexarr/rusttorrent:$CI_COMMIT_TAG - - for tag in $CI_COMMIT_TAG latest alpha; do docker tag repo.indexarr.net/indexarr/rusttorrent:$CI_COMMIT_TAG ghcr.io/ausagentsmith-org/rusttorrent:$tag && docker push ghcr.io/ausagentsmith-org/rusttorrent:$tag; done + - SRC="docker://repo.indexarr.net/indexarr/rusttorrent:$CI_COMMIT_TAG" + - SRC_CREDS="--src-creds=$FORGEJO_TOKEN:$FORGEJO_TOKEN" + - DST_CREDS="--dest-creds=AusAgentSmith:$GH_TOKEN" + - for tag in $CI_COMMIT_TAG latest alpha; do skopeo copy $SRC_CREDS $DST_CREDS $SRC "docker://ghcr.io/ausagentsmith-org/rusttorrent:$tag"; done - name: discord-success image: alpine/curl From ef821aac9f2550b1a08b6dcd1cf190f8576a7472 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 10:28:46 +1000 Subject: [PATCH 08/24] CI: fix publish-release variable expansion for tags with hyphens --- .woodpecker.yml | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 4d8b34d..87cd4e3 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -97,12 +97,13 @@ steps: - cp target/release-github/rtbit "rtbit-$CI_COMMIT_TAG-linux-x86_64" - cp target/x86_64-pc-windows-gnu/release-github/rtbit.exe "rtbit-$CI_COMMIT_TAG-windows-x86_64.exe" - cp target/release-github/rtbit_amd64.deb "rtbit-$CI_COMMIT_TAG-amd64.deb" 2>/dev/null || true - - sha256sum rtbit-$CI_COMMIT_TAG-* > SHA256SUMS-$CI_COMMIT_TAG.txt - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/$CI_COMMIT_TAG" - - scp -o StrictHostKeyChecking=accept-new rtbit-$CI_COMMIT_TAG-* SHA256SUMS-$CI_COMMIT_TAG.txt root@100.92.4.57:/root/downloads/rusttorrent/$CI_COMMIT_TAG/ - - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-linux-x86_64 $DLDIR/rtbit-linux-x86_64" - - DLDIR=/root/downloads/rusttorrent/$CI_COMMIT_TAG && ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-$CI_COMMIT_TAG-windows-x86_64.exe $DLDIR/rtbit-windows-x86_64.exe" - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn $CI_COMMIT_TAG /root/downloads/rusttorrent/latest" + - TAG="$CI_COMMIT_TAG" + - sha256sum rtbit-${TAG}-* > "SHA256SUMS-${TAG}.txt" + - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/${TAG}" + - scp -o StrictHostKeyChecking=accept-new rtbit-${TAG}-* "SHA256SUMS-${TAG}.txt" root@100.92.4.57:/root/downloads/rusttorrent/${TAG}/ + - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-${TAG}-linux-x86_64 /root/downloads/rusttorrent/${TAG}/rtbit-linux-x86_64" + - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-${TAG}-windows-x86_64.exe /root/downloads/rusttorrent/${TAG}/rtbit-windows-x86_64.exe" + - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn ${TAG} /root/downloads/rusttorrent/latest" - echo "Published https://dl.rusttorrent.dev/latest/" - name: build-and-push From d62f11282b77d70ab0b78dc4334491d204f300f0 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 10:38:44 +1000 Subject: [PATCH 09/24] CI: use single-shell block for publish-release to preserve variables --- .woodpecker.yml | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 87cd4e3..d0be883 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -97,13 +97,16 @@ steps: - cp target/release-github/rtbit "rtbit-$CI_COMMIT_TAG-linux-x86_64" - cp target/x86_64-pc-windows-gnu/release-github/rtbit.exe "rtbit-$CI_COMMIT_TAG-windows-x86_64.exe" - cp target/release-github/rtbit_amd64.deb "rtbit-$CI_COMMIT_TAG-amd64.deb" 2>/dev/null || true - - TAG="$CI_COMMIT_TAG" - - sha256sum rtbit-${TAG}-* > "SHA256SUMS-${TAG}.txt" - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/${TAG}" - - scp -o StrictHostKeyChecking=accept-new rtbit-${TAG}-* "SHA256SUMS-${TAG}.txt" root@100.92.4.57:/root/downloads/rusttorrent/${TAG}/ - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-${TAG}-linux-x86_64 /root/downloads/rusttorrent/${TAG}/rtbit-linux-x86_64" - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sf rtbit-${TAG}-windows-x86_64.exe /root/downloads/rusttorrent/${TAG}/rtbit-windows-x86_64.exe" - - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn ${TAG} /root/downloads/rusttorrent/latest" + - | + set -e + TAG="$CI_COMMIT_TAG" + echo "Tag is: $TAG" + ls -la rtbit-* + sha256sum rtbit-${TAG}-* > "SHA256SUMS-${TAG}.txt" + ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/${TAG}" + scp -o StrictHostKeyChecking=accept-new rtbit-${TAG}-* "SHA256SUMS-${TAG}.txt" root@100.92.4.57:/root/downloads/rusttorrent/${TAG}/ + ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "cd /root/downloads/rusttorrent/${TAG} && ln -sf rtbit-${TAG}-linux-x86_64 rtbit-linux-x86_64 && ln -sf rtbit-${TAG}-windows-x86_64.exe rtbit-windows-x86_64.exe" + ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn ${TAG} /root/downloads/rusttorrent/latest" - echo "Published https://dl.rusttorrent.dev/latest/" - name: build-and-push From 1506f34efcd3c3e3918dc9165eccf5821e7bb09e Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Thu, 9 Apr 2026 10:49:41 +1000 Subject: [PATCH 10/24] =?UTF-8?q?CI:=20use=20$TAG=20not=20${TAG}=20?= =?UTF-8?q?=E2=80=94=20Woodpecker=20eats=20brace=20syntax=20as=20template?= =?UTF-8?q?=20vars?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker.yml | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index d0be883..713e815 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -100,13 +100,11 @@ steps: - | set -e TAG="$CI_COMMIT_TAG" - echo "Tag is: $TAG" - ls -la rtbit-* - sha256sum rtbit-${TAG}-* > "SHA256SUMS-${TAG}.txt" - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/${TAG}" - scp -o StrictHostKeyChecking=accept-new rtbit-${TAG}-* "SHA256SUMS-${TAG}.txt" root@100.92.4.57:/root/downloads/rusttorrent/${TAG}/ - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "cd /root/downloads/rusttorrent/${TAG} && ln -sf rtbit-${TAG}-linux-x86_64 rtbit-linux-x86_64 && ln -sf rtbit-${TAG}-windows-x86_64.exe rtbit-windows-x86_64.exe" - ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn ${TAG} /root/downloads/rusttorrent/latest" + sha256sum rtbit-$TAG-* > "SHA256SUMS-$TAG.txt" + ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "mkdir -p /root/downloads/rusttorrent/$TAG" + scp -o StrictHostKeyChecking=accept-new rtbit-$TAG-* "SHA256SUMS-$TAG.txt" root@100.92.4.57:/root/downloads/rusttorrent/$TAG/ + ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "cd /root/downloads/rusttorrent/$TAG && ln -sf rtbit-$TAG-linux-x86_64 rtbit-linux-x86_64 && ln -sf rtbit-$TAG-windows-x86_64.exe rtbit-windows-x86_64.exe" + ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn $TAG /root/downloads/rusttorrent/latest" - echo "Published https://dl.rusttorrent.dev/latest/" - name: build-and-push From 5c1a50e27978e3ed0be9853afb6ae2cc769dd5bc Mon Sep 17 00:00:00 2001 From: sprooty Date: Thu, 9 Apr 2026 08:58:09 +0000 Subject: [PATCH 11/24] chore(deps): update alpine docker tag to v3.23 --- .woodpecker.yml | 2 +- bench/seeder/Dockerfile | 2 +- benchv2/Dockerfile | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 713e815..83e9239 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -81,7 +81,7 @@ steps: - ls -lh target/x86_64-pc-windows-gnu/release-github/rtbit.exe - name: publish-release - image: alpine:3.21 + image: alpine:3.23 when: - event: tag environment: diff --git a/bench/seeder/Dockerfile b/bench/seeder/Dockerfile index 864dd1e..6da8640 100644 --- a/bench/seeder/Dockerfile +++ b/bench/seeder/Dockerfile @@ -1,4 +1,4 @@ -FROM alpine:3.21 +FROM alpine:3.23 RUN apk add --no-cache transmission-daemon curl RUN mkdir -p /config /data/testdata /data/torrents COPY settings.json /config/settings.json diff --git a/benchv2/Dockerfile b/benchv2/Dockerfile index 23bdb2a..4676c1a 100644 --- a/benchv2/Dockerfile +++ b/benchv2/Dockerfile @@ -7,7 +7,7 @@ COPY src/ src/ RUN cargo build --release && \ ./target/release/benchv2 --help > /dev/null -FROM alpine:3.21 +FROM alpine:3.23 RUN apk add --no-cache ca-certificates curl COPY --from=builder /app/target/release/benchv2 /usr/local/bin/benchv2 ENTRYPOINT ["benchv2"] From 9ef47e8389a89c6f7e129ddd736023bdbecaa55a Mon Sep 17 00:00:00 2001 From: sprooty Date: Thu, 9 Apr 2026 08:58:11 +0000 Subject: [PATCH 12/24] chore(deps): update gcr.io/cadvisor/cadvisor docker tag to v0.55.1 --- bench/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bench/docker-compose.yml b/bench/docker-compose.yml index 7f2158e..628db31 100644 --- a/bench/docker-compose.yml +++ b/bench/docker-compose.yml @@ -108,7 +108,7 @@ services: # ── Metrics: cAdvisor ────────────────────────────────────────────────── cadvisor: - image: gcr.io/cadvisor/cadvisor:v0.49.1 + image: gcr.io/cadvisor/cadvisor:v0.55.1 privileged: true volumes: - /:/rootfs:ro From 9ac9dce9c86191e6ac3e3c07459e7729cb9301ae Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Fri, 10 Apr 2026 06:31:32 +1000 Subject: [PATCH 13/24] ci: add push-github step to auto-sync to GitHub --- .woodpecker.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.woodpecker.yml b/.woodpecker.yml index 83e9239..abcbe11 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -152,6 +152,19 @@ steps: - DST_CREDS="--dest-creds=AusAgentSmith:$GH_TOKEN" - for tag in $CI_COMMIT_TAG latest alpha; do skopeo copy $SRC_CREDS $DST_CREDS $SRC "docker://ghcr.io/ausagentsmith-org/rusttorrent:$tag"; done + - name: push-github + image: alpine/git + when: + - event: push + branch: main + environment: + GH_TOKEN: + from_secret: gh_release_token + commands: + - git remote add github "https://x-access-token:$GH_TOKEN@github.com/AusAgentSmith-org/rustTorrent.git" 2>/dev/null || true + - git push github HEAD:main --force + - git push github --tags --force 2>/dev/null || true + - name: discord-success image: alpine/curl environment: From d27488206f5486bbca8dba98077b269b7902124f Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Fri, 10 Apr 2026 06:36:01 +1000 Subject: [PATCH 14/24] ci: add GitHub release creation on tag events --- .woodpecker.yml | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/.woodpecker.yml b/.woodpecker.yml index abcbe11..cbef86a 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -152,6 +152,49 @@ steps: - DST_CREDS="--dest-creds=AusAgentSmith:$GH_TOKEN" - for tag in $CI_COMMIT_TAG latest alpha; do skopeo copy $SRC_CREDS $DST_CREDS $SRC "docker://ghcr.io/ausagentsmith-org/rusttorrent:$tag"; done + - name: github-release + image: alpine:3.23 + when: + - event: tag + environment: + GH_TOKEN: + from_secret: gh_release_token + commands: + - apk add --no-cache git curl jq + - | + TAG="$CI_COMMIT_TAG" + REPO="AusAgentSmith-org/rustTorrent" + echo "Creating GitHub release $TAG on $REPO" + + git remote add github "https://x-access-token:$GH_TOKEN@github.com/$REPO.git" 2>/dev/null || true + git push github "refs/tags/$TAG" --force + + BODY="## Downloads\n\n" + BODY="$BODY- **Linux x86_64**: \`rtbit-${TAG}-linux-x86_64\`\n" + BODY="$BODY- **Windows x86_64**: \`rtbit-${TAG}-windows-x86_64.exe\`\n" + BODY="$BODY- **Debian/Ubuntu**: \`rtbit-${TAG}-amd64.deb\`\n" + BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:${TAG}\`\n" + BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-${TAG}.txt\`" + + RELEASE_ID=$(curl -sf -X POST \ + -H "Authorization: token $GH_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"$TAG\",\"name\":\"rustTorrent $TAG\",\"body\":\"$(echo -e "$BODY")\",\"draft\":false,\"prerelease\":true}" \ + "https://api.github.com/repos/$REPO/releases" | jq -r '.id') + + echo "Release created: ID=$RELEASE_ID" + + for file in "rtbit-${TAG}-linux-x86_64" "rtbit-${TAG}-windows-x86_64.exe" "rtbit-${TAG}-amd64.deb" "SHA256SUMS-${TAG}.txt"; do + [ -f "$file" ] || continue + echo "Uploading $file" + curl -sf -X POST \ + -H "Authorization: token $GH_TOKEN" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@$file" \ + "https://uploads.github.com/repos/$REPO/releases/$RELEASE_ID/assets?name=$file" > /dev/null + done + echo "GitHub release $TAG complete" + - name: push-github image: alpine/git when: From 61048ef4f03ad66235ca3adcf369a3f019c92633 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Fri, 10 Apr 2026 06:37:13 +1000 Subject: [PATCH 15/24] ci: fix shallow clone for GitHub push (git fetch --unshallow) --- .woodpecker.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.woodpecker.yml b/.woodpecker.yml index cbef86a..5082050 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -166,6 +166,7 @@ steps: REPO="AusAgentSmith-org/rustTorrent" echo "Creating GitHub release $TAG on $REPO" + git fetch --unshallow origin 2>/dev/null || true git remote add github "https://x-access-token:$GH_TOKEN@github.com/$REPO.git" 2>/dev/null || true git push github "refs/tags/$TAG" --force @@ -204,6 +205,7 @@ steps: GH_TOKEN: from_secret: gh_release_token commands: + - git fetch --unshallow origin 2>/dev/null || true - git remote add github "https://x-access-token:$GH_TOKEN@github.com/AusAgentSmith-org/rustTorrent.git" 2>/dev/null || true - git push github HEAD:main --force - git push github --tags --force 2>/dev/null || true From e0cf892df896080e23231109ac1a3bfc81ca2fdc Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Fri, 10 Apr 2026 06:40:50 +1000 Subject: [PATCH 16/24] =?UTF-8?q?ci:=20fix=20GitHub=20push=20=E2=80=94=20u?= =?UTF-8?q?se=20bare=20clone=20instead=20of=20unshallow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 5082050..caf78b8 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -204,11 +204,13 @@ steps: environment: GH_TOKEN: from_secret: gh_release_token + FORGEJO_TOKEN: + from_secret: git_auth_token commands: - - git fetch --unshallow origin 2>/dev/null || true - - git remote add github "https://x-access-token:$GH_TOKEN@github.com/AusAgentSmith-org/rustTorrent.git" 2>/dev/null || true - - git push github HEAD:main --force - - git push github --tags --force 2>/dev/null || true + - git clone --bare "https://x-access-token:$FORGEJO_TOKEN@repo.indexarr.net/indexarr/rustTorrent.git" /tmp/repo.git + - cd /tmp/repo.git + - git push --force "https://x-access-token:$GH_TOKEN@github.com/AusAgentSmith-org/rustTorrent.git" main:main + - git push --force "https://x-access-token:$GH_TOKEN@github.com/AusAgentSmith-org/rustTorrent.git" --tags 2>/dev/null || true - name: discord-success image: alpine/curl From 94e7d276864fb27a620c83fd206d5670f71abfc5 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Fri, 10 Apr 2026 13:59:23 +1000 Subject: [PATCH 17/24] ci: add pull_request trigger and guard deploy steps --- .woodpecker.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.woodpecker.yml b/.woodpecker.yml index caf78b8..18260ea 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -3,6 +3,7 @@ when: branch: main - event: tag - event: manual + - event: pull_request steps: - name: fmt @@ -64,6 +65,9 @@ steps: - cargo build --profile release-github -p rtbit --no-default-features --features default-tls - ls -lh target/release-github/rtbit - if [ -n "$CI_COMMIT_TAG" ]; then cargo install cargo-deb --registry crates-io && cargo deb -p rtbit --no-build --no-strip --profile release-github -o target/release-github/rtbit_amd64.deb && ls -lh target/release-github/rtbit_amd64.deb; fi + when: + - event: push + branch: main - name: build-windows image: rust:1.88-bookworm @@ -79,6 +83,9 @@ steps: - if [ -n "$CI_COMMIT_TAG" ]; then export CARGO_PROFILE_RELEASE_LTO=fat CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1 CARGO_PROFILE_RELEASE_STRIP=symbols; fi - cargo build --profile release-github -p rtbit --target x86_64-pc-windows-gnu --no-default-features --features default-tls - ls -lh target/x86_64-pc-windows-gnu/release-github/rtbit.exe + when: + - event: push + branch: main - name: publish-release image: alpine:3.23 From ac4f9d67ea886805db86caeaf0e1291f195a81e9 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Sat, 11 Apr 2026 20:16:36 +0000 Subject: [PATCH 18/24] ci: fix tag builds and scrub GitHub source mirror - Add event: tag to build-linux and build-windows so binaries exist when release steps run - Remove push-github step (GitHub repo is README-only, not a source mirror) - Fix github-release to use target_commitish instead of git-pushing tags (can't push commits that don't exist on GitHub) --- .woodpecker.yml | 26 ++++---------------------- 1 file changed, 4 insertions(+), 22 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 18260ea..c54a969 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -68,6 +68,7 @@ steps: when: - event: push branch: main + - event: tag - name: build-windows image: rust:1.88-bookworm @@ -86,6 +87,7 @@ steps: when: - event: push branch: main + - event: tag - name: publish-release image: alpine:3.23 @@ -167,16 +169,12 @@ steps: GH_TOKEN: from_secret: gh_release_token commands: - - apk add --no-cache git curl jq + - apk add --no-cache curl jq - | TAG="$CI_COMMIT_TAG" REPO="AusAgentSmith-org/rustTorrent" echo "Creating GitHub release $TAG on $REPO" - git fetch --unshallow origin 2>/dev/null || true - git remote add github "https://x-access-token:$GH_TOKEN@github.com/$REPO.git" 2>/dev/null || true - git push github "refs/tags/$TAG" --force - BODY="## Downloads\n\n" BODY="$BODY- **Linux x86_64**: \`rtbit-${TAG}-linux-x86_64\`\n" BODY="$BODY- **Windows x86_64**: \`rtbit-${TAG}-windows-x86_64.exe\`\n" @@ -187,7 +185,7 @@ steps: RELEASE_ID=$(curl -sf -X POST \ -H "Authorization: token $GH_TOKEN" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$TAG\",\"name\":\"rustTorrent $TAG\",\"body\":\"$(echo -e "$BODY")\",\"draft\":false,\"prerelease\":true}" \ + -d "{\"tag_name\":\"$TAG\",\"target_commitish\":\"main\",\"name\":\"rustTorrent $TAG\",\"body\":\"$(echo -e "$BODY")\",\"draft\":false,\"prerelease\":true}" \ "https://api.github.com/repos/$REPO/releases" | jq -r '.id') echo "Release created: ID=$RELEASE_ID" @@ -203,22 +201,6 @@ steps: done echo "GitHub release $TAG complete" - - name: push-github - image: alpine/git - when: - - event: push - branch: main - environment: - GH_TOKEN: - from_secret: gh_release_token - FORGEJO_TOKEN: - from_secret: git_auth_token - commands: - - git clone --bare "https://x-access-token:$FORGEJO_TOKEN@repo.indexarr.net/indexarr/rustTorrent.git" /tmp/repo.git - - cd /tmp/repo.git - - git push --force "https://x-access-token:$GH_TOKEN@github.com/AusAgentSmith-org/rustTorrent.git" main:main - - git push --force "https://x-access-token:$GH_TOKEN@github.com/AusAgentSmith-org/rustTorrent.git" --tags 2>/dev/null || true - - name: discord-success image: alpine/curl environment: From 02cb001301a6f638fe11ae9f75402aec97233d88 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Sat, 11 Apr 2026 20:18:25 +0000 Subject: [PATCH 19/24] chore: add per-project clippy flags to exclude desktop crate from pre-push hook --- .cargo-clippy-flags | 1 + 1 file changed, 1 insertion(+) create mode 100644 .cargo-clippy-flags diff --git a/.cargo-clippy-flags b/.cargo-clippy-flags new file mode 100644 index 0000000..97c655c --- /dev/null +++ b/.cargo-clippy-flags @@ -0,0 +1 @@ +--workspace --exclude rtbit-desktop --no-default-features --features default-tls -- -D warnings From 72110717ecca5c011f6b1a85f75db6124d554898 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Sat, 11 Apr 2026 20:22:48 +0000 Subject: [PATCH 20/24] ci: add forgejo-release step to create releases on Forgejo on tag --- .woodpecker.yml | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/.woodpecker.yml b/.woodpecker.yml index c54a969..9a60411 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -116,6 +116,46 @@ steps: ssh -o StrictHostKeyChecking=accept-new root@100.92.4.57 "ln -sfn $TAG /root/downloads/rusttorrent/latest" - echo "Published https://dl.rusttorrent.dev/latest/" + - name: forgejo-release + image: alpine:3.23 + when: + - event: tag + environment: + FORGEJO_TOKEN: + from_secret: git_auth_token + commands: + - apk add --no-cache curl jq + - | + TAG="$CI_COMMIT_TAG" + API="https://repo.indexarr.net/api/v1" + REPO="indexarr/rustTorrent" + echo "Creating Forgejo release $TAG" + + BODY="## Downloads\n\n" + BODY="$BODY- **Linux x86_64**: \`rtbit-${TAG}-linux-x86_64\`\n" + BODY="$BODY- **Windows x86_64**: \`rtbit-${TAG}-windows-x86_64.exe\`\n" + BODY="$BODY- **Debian/Ubuntu**: \`rtbit-${TAG}-amd64.deb\`\n" + BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:${TAG}\`\n" + BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-${TAG}.txt\`" + + RELEASE_ID=$(curl -sf -X POST \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"$TAG\",\"name\":\"rustTorrent $TAG\",\"body\":\"$(echo -e "$BODY")\",\"draft\":false,\"prerelease\":true}" \ + "$API/repos/$REPO/releases" | jq -r '.id') + + echo "Forgejo release created: ID=$RELEASE_ID" + + for file in "rtbit-${TAG}-linux-x86_64" "rtbit-${TAG}-windows-x86_64.exe" "rtbit-${TAG}-amd64.deb" "SHA256SUMS-${TAG}.txt"; do + [ -f "$file" ] || continue + echo "Uploading $file" + curl -sf -X POST \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -F "attachment=@$file" \ + "$API/repos/$REPO/releases/$RELEASE_ID/assets" > /dev/null + done + echo "Forgejo release $TAG complete" + - name: build-and-push image: woodpeckerci/plugin-docker-buildx when: From b50f60ebc6fd5d9237b16ea6701b58ba1a125dca Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Sat, 11 Apr 2026 22:12:58 +0000 Subject: [PATCH 21/24] ci: fix publish-release ssh-keyscan and JSON body in release steps --- .woodpecker.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 9a60411..600ee8d 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -101,7 +101,7 @@ steps: - mkdir -p ~/.ssh - echo "$DEPLOY_SSH_KEY" > ~/.ssh/id_ed25519 - chmod 600 ~/.ssh/id_ed25519 - - ssh-keyscan -H 100.92.4.57 >> ~/.ssh/known_hosts 2>/dev/null + - ssh-keyscan -H 100.92.4.57 >> ~/.ssh/known_hosts 2>/dev/null || true - echo "Publishing release $CI_COMMIT_TAG" - cp target/release-github/rtbit "rtbit-$CI_COMMIT_TAG-linux-x86_64" - cp target/x86_64-pc-windows-gnu/release-github/rtbit.exe "rtbit-$CI_COMMIT_TAG-windows-x86_64.exe" @@ -141,7 +141,7 @@ steps: RELEASE_ID=$(curl -sf -X POST \ -H "Authorization: token $FORGEJO_TOKEN" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$TAG\",\"name\":\"rustTorrent $TAG\",\"body\":\"$(echo -e "$BODY")\",\"draft\":false,\"prerelease\":true}" \ + -d "{\"tag_name\":\"$TAG\",\"name\":\"rustTorrent $TAG\",\"body\":\"$BODY\",\"draft\":false,\"prerelease\":true}" \ "$API/repos/$REPO/releases" | jq -r '.id') echo "Forgejo release created: ID=$RELEASE_ID" @@ -225,7 +225,7 @@ steps: RELEASE_ID=$(curl -sf -X POST \ -H "Authorization: token $GH_TOKEN" \ -H "Content-Type: application/json" \ - -d "{\"tag_name\":\"$TAG\",\"target_commitish\":\"main\",\"name\":\"rustTorrent $TAG\",\"body\":\"$(echo -e "$BODY")\",\"draft\":false,\"prerelease\":true}" \ + -d "{\"tag_name\":\"$TAG\",\"target_commitish\":\"main\",\"name\":\"rustTorrent $TAG\",\"body\":\"$BODY\",\"draft\":false,\"prerelease\":true}" \ "https://api.github.com/repos/$REPO/releases" | jq -r '.id') echo "Release created: ID=$RELEASE_ID" From 4a7a78ef2549ca988ea2e034c649689616c56b8f Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Sat, 11 Apr 2026 22:56:31 +0000 Subject: [PATCH 22/24] =?UTF-8?q?ci:=20use=20$TAG=20not=20${TAG}=20?= =?UTF-8?q?=E2=80=94=20Woodpecker=20substitutes=20braced=20form=20at=20YAM?= =?UTF-8?q?L=20parse=20time?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 600ee8d..71d948e 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -132,11 +132,11 @@ steps: echo "Creating Forgejo release $TAG" BODY="## Downloads\n\n" - BODY="$BODY- **Linux x86_64**: \`rtbit-${TAG}-linux-x86_64\`\n" - BODY="$BODY- **Windows x86_64**: \`rtbit-${TAG}-windows-x86_64.exe\`\n" - BODY="$BODY- **Debian/Ubuntu**: \`rtbit-${TAG}-amd64.deb\`\n" - BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:${TAG}\`\n" - BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-${TAG}.txt\`" + BODY="$BODY- **Linux x86_64**: \`rtbit-$TAG-linux-x86_64\`\n" + BODY="$BODY- **Windows x86_64**: \`rtbit-$TAG-windows-x86_64.exe\`\n" + BODY="$BODY- **Debian/Ubuntu**: \`rtbit-$TAG-amd64.deb\`\n" + BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:$TAG\`\n" + BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-$TAG.txt\`" RELEASE_ID=$(curl -sf -X POST \ -H "Authorization: token $FORGEJO_TOKEN" \ @@ -146,7 +146,7 @@ steps: echo "Forgejo release created: ID=$RELEASE_ID" - for file in "rtbit-${TAG}-linux-x86_64" "rtbit-${TAG}-windows-x86_64.exe" "rtbit-${TAG}-amd64.deb" "SHA256SUMS-${TAG}.txt"; do + for file in "rtbit-$TAG-linux-x86_64" "rtbit-$TAG-windows-x86_64.exe" "rtbit-$TAG-amd64.deb" "SHA256SUMS-$TAG.txt"; do [ -f "$file" ] || continue echo "Uploading $file" curl -sf -X POST \ @@ -216,11 +216,11 @@ steps: echo "Creating GitHub release $TAG on $REPO" BODY="## Downloads\n\n" - BODY="$BODY- **Linux x86_64**: \`rtbit-${TAG}-linux-x86_64\`\n" - BODY="$BODY- **Windows x86_64**: \`rtbit-${TAG}-windows-x86_64.exe\`\n" - BODY="$BODY- **Debian/Ubuntu**: \`rtbit-${TAG}-amd64.deb\`\n" - BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:${TAG}\`\n" - BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-${TAG}.txt\`" + BODY="$BODY- **Linux x86_64**: \`rtbit-$TAG-linux-x86_64\`\n" + BODY="$BODY- **Windows x86_64**: \`rtbit-$TAG-windows-x86_64.exe\`\n" + BODY="$BODY- **Debian/Ubuntu**: \`rtbit-$TAG-amd64.deb\`\n" + BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:$TAG\`\n" + BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-$TAG.txt\`" RELEASE_ID=$(curl -sf -X POST \ -H "Authorization: token $GH_TOKEN" \ @@ -230,7 +230,7 @@ steps: echo "Release created: ID=$RELEASE_ID" - for file in "rtbit-${TAG}-linux-x86_64" "rtbit-${TAG}-windows-x86_64.exe" "rtbit-${TAG}-amd64.deb" "SHA256SUMS-${TAG}.txt"; do + for file in "rtbit-$TAG-linux-x86_64" "rtbit-$TAG-windows-x86_64.exe" "rtbit-$TAG-amd64.deb" "SHA256SUMS-$TAG.txt"; do [ -f "$file" ] || continue echo "Uploading $file" curl -sf -X POST \ From da28168e6683ab7653868c0340ccdb8a1ad98c91 Mon Sep 17 00:00:00 2001 From: AusAgentSmith Date: Sat, 11 Apr 2026 23:30:57 +0000 Subject: [PATCH 23/24] =?UTF-8?q?ci:=20make=20release=20steps=20idempotent?= =?UTF-8?q?=20=E2=80=94=20delete=20existing=20release=20before=20create?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .woodpecker.yml | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/.woodpecker.yml b/.woodpecker.yml index 71d948e..d71a2f0 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -138,12 +138,24 @@ steps: BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:$TAG\`\n" BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-$TAG.txt\`" - RELEASE_ID=$(curl -sf -X POST \ + # Delete existing release by tag if present (idempotent retry) + EXISTING_ID=$(curl -s -H "Authorization: token $FORGEJO_TOKEN" \ + "$API/repos/$REPO/releases/tags/$TAG" | jq -r '.id // empty') + if [ -n "$EXISTING_ID" ]; then + echo "Deleting existing release ID=$EXISTING_ID" + curl -s -X DELETE -H "Authorization: token $FORGEJO_TOKEN" \ + "$API/repos/$REPO/releases/$EXISTING_ID" + fi + + RELEASE_ID=$(curl -s -X POST \ -H "Authorization: token $FORGEJO_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"$TAG\",\"name\":\"rustTorrent $TAG\",\"body\":\"$BODY\",\"draft\":false,\"prerelease\":true}" \ "$API/repos/$REPO/releases" | jq -r '.id') + if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "null" ]; then + echo "ERROR: Failed to create Forgejo release"; exit 1 + fi echo "Forgejo release created: ID=$RELEASE_ID" for file in "rtbit-$TAG-linux-x86_64" "rtbit-$TAG-windows-x86_64.exe" "rtbit-$TAG-amd64.deb" "SHA256SUMS-$TAG.txt"; do @@ -222,12 +234,26 @@ steps: BODY="$BODY- **Docker**: \`ghcr.io/ausagentsmith-org/rusttorrent:$TAG\`\n" BODY="$BODY\nSHA256 checksums in \`SHA256SUMS-$TAG.txt\`" - RELEASE_ID=$(curl -sf -X POST \ + # Delete existing release by tag if present (idempotent retry) + EXISTING_ID=$(curl -s -H "Authorization: token $GH_TOKEN" \ + "https://api.github.com/repos/$REPO/releases/tags/$TAG" | jq -r '.id // empty') + if [ -n "$EXISTING_ID" ]; then + echo "Deleting existing GitHub release ID=$EXISTING_ID" + curl -s -X DELETE -H "Authorization: token $GH_TOKEN" \ + "https://api.github.com/repos/$REPO/releases/$EXISTING_ID" + curl -s -X DELETE -H "Authorization: token $GH_TOKEN" \ + "https://api.github.com/repos/$REPO/git/refs/tags/$TAG" || true + fi + + RELEASE_ID=$(curl -s -X POST \ -H "Authorization: token $GH_TOKEN" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"$TAG\",\"target_commitish\":\"main\",\"name\":\"rustTorrent $TAG\",\"body\":\"$BODY\",\"draft\":false,\"prerelease\":true}" \ "https://api.github.com/repos/$REPO/releases" | jq -r '.id') + if [ -z "$RELEASE_ID" ] || [ "$RELEASE_ID" = "null" ]; then + echo "ERROR: Failed to create GitHub release"; exit 1 + fi echo "Release created: ID=$RELEASE_ID" for file in "rtbit-$TAG-linux-x86_64" "rtbit-$TAG-windows-x86_64.exe" "rtbit-$TAG-amd64.deb" "SHA256SUMS-$TAG.txt"; do From c7f5c0558d04ead18bfc57c9007bda56bfcfb4f1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 11:28:25 +0000 Subject: [PATCH 24/24] chore(deps-dev): bump vite from 7.3.1 to 8.0.8 Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.3.1 to 8.0.8. - [Release notes](https://github.com/vitejs/vite/releases) - [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md) - [Commits](https://github.com/vitejs/vite/commits/v8.0.8/packages/vite) --- updated-dependencies: - dependency-name: vite dependency-version: 8.0.8 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- crates/librtbit/webui/package.json | 2 +- package-lock.json | 857 +++++++++++++++++++++++++++-- 2 files changed, 812 insertions(+), 47 deletions(-) diff --git a/crates/librtbit/webui/package.json b/crates/librtbit/webui/package.json index 6c4639a..7a6e017 100644 --- a/crates/librtbit/webui/package.json +++ b/crates/librtbit/webui/package.json @@ -36,7 +36,7 @@ "tailwindcss": "^4.1.18", "typescript": "^5.3.2", "typescript-eslint": "^8.57.1", - "vite": "^7", + "vite": "^8", "vite-plugin-svgr": "^4.2.0" } } diff --git a/package-lock.json b/package-lock.json index 5061fca..3c99107 100644 --- a/package-lock.json +++ b/package-lock.json @@ -74,10 +74,349 @@ "tailwindcss": "^4.1.18", "typescript": "^5.3.2", "typescript-eslint": "^8.57.1", - "vite": "^7", + "vite": "^8.0.8", "vite-plugin-svgr": "^4.2.0" } }, + "crates/librtbit/webui/node_modules/lightningcss": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.32.0.tgz", + "integrity": "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-android-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.32.0.tgz", + "integrity": "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.32.0.tgz", + "integrity": "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-darwin-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.32.0.tgz", + "integrity": "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-freebsd-x64": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.32.0.tgz", + "integrity": "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.32.0.tgz", + "integrity": "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.32.0.tgz", + "integrity": "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-linux-arm64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.32.0.tgz", + "integrity": "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-linux-x64-gnu": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.32.0.tgz", + "integrity": "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-linux-x64-musl": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.32.0.tgz", + "integrity": "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.32.0.tgz", + "integrity": "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/lightningcss-win32-x64-msvc": { + "version": "1.32.0", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.32.0.tgz", + "integrity": "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "crates/librtbit/webui/node_modules/vite": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-8.0.8.tgz", + "integrity": "sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.8", + "rolldown": "1.0.0-rc.15", + "tinyglobby": "^0.2.15" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.0", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, "desktop": { "name": "rtbit-desktop", "version": "0.0.1", @@ -376,6 +715,40 @@ "node": ">=6.9.0" } }, + "node_modules/@emnapi/core": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.2.tgz", + "integrity": "sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.2.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.2.tgz", + "integrity": "sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", + "integrity": "sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.27.2", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", @@ -389,6 +762,7 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } @@ -406,6 +780,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -423,6 +798,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -440,6 +816,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -457,6 +834,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -474,6 +852,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -491,6 +870,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -508,6 +888,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -525,6 +906,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -542,6 +924,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -559,6 +942,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -576,6 +960,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -593,6 +978,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -610,6 +996,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -627,6 +1014,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -644,6 +1032,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -661,6 +1050,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -678,6 +1068,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -695,6 +1086,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -712,6 +1104,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -729,6 +1122,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -746,6 +1140,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": ">=18" } @@ -763,6 +1158,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } @@ -780,6 +1176,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -797,6 +1194,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -814,6 +1212,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -1046,22 +1445,51 @@ "node": ">=6.0.0" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-1.1.4.tgz", + "integrity": "sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@tybys/wasm-util": "^0.10.1" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Brooooooklyn" + }, + "peerDependencies": { + "@emnapi/core": "^1.7.1", + "@emnapi/runtime": "^1.7.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.124.0", + "resolved": "https://registry.npmjs.org/@oxc-project/types/-/types-0.124.0.tgz", + "integrity": "sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "funding": { + "url": "https://github.com/sponsors/Boshen" } }, "node_modules/@popperjs/core": { @@ -1122,6 +1550,263 @@ "react-dom": ">=16.14.0" } }, + "node_modules/@rolldown/binding-android-arm64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-android-arm64/-/binding-android-arm64-1.0.0-rc.15.tgz", + "integrity": "sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-arm64/-/binding-darwin-arm64-1.0.0-rc.15.tgz", + "integrity": "sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-darwin-x64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-darwin-x64/-/binding-darwin-x64-1.0.0-rc.15.tgz", + "integrity": "sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-freebsd-x64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-freebsd-x64/-/binding-freebsd-x64-1.0.0-rc.15.tgz", + "integrity": "sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm-gnueabihf": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm-gnueabihf/-/binding-linux-arm-gnueabihf-1.0.0-rc.15.tgz", + "integrity": "sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-gnu/-/binding-linux-arm64-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-arm64-musl": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-arm64-musl/-/binding-linux-arm64-musl-1.0.0-rc.15.tgz", + "integrity": "sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-ppc64-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-ppc64-gnu/-/binding-linux-ppc64-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-s390x-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-s390x-gnu/-/binding-linux-s390x-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-gnu": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-gnu/-/binding-linux-x64-gnu-1.0.0-rc.15.tgz", + "integrity": "sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-linux-x64-musl": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-linux-x64-musl/-/binding-linux-x64-musl-1.0.0-rc.15.tgz", + "integrity": "sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-openharmony-arm64": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-openharmony-arm64/-/binding-openharmony-arm64-1.0.0-rc.15.tgz", + "integrity": "sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-wasm32-wasi": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-wasm32-wasi/-/binding-wasm32-wasi-1.0.0-rc.15.tgz", + "integrity": "sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "1.9.2", + "@emnapi/runtime": "1.9.2", + "@napi-rs/wasm-runtime": "^1.1.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@rolldown/binding-win32-arm64-msvc": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-arm64-msvc/-/binding-win32-arm64-msvc-1.0.0-rc.15.tgz", + "integrity": "sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/binding-win32-x64-msvc": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/binding-win32-x64-msvc/-/binding-win32-x64-msvc-1.0.0-rc.15.tgz", + "integrity": "sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, "node_modules/@rolldown/pluginutils": { "version": "1.0.0-beta.53", "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz", @@ -1164,7 +1849,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.55.1", @@ -1178,7 +1864,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.55.1", @@ -1192,7 +1879,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.55.1", @@ -1206,7 +1894,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.55.1", @@ -1220,7 +1909,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.55.1", @@ -1234,7 +1924,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.55.1", @@ -1248,7 +1939,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.55.1", @@ -1262,7 +1954,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.55.1", @@ -1276,7 +1969,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.55.1", @@ -1290,7 +1984,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.55.1", @@ -1304,7 +1999,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-loong64-musl": { "version": "4.55.1", @@ -1318,7 +2014,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.55.1", @@ -1332,7 +2029,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-ppc64-musl": { "version": "4.55.1", @@ -1346,7 +2044,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.55.1", @@ -1360,7 +2059,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.55.1", @@ -1374,7 +2074,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.55.1", @@ -1388,7 +2089,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.55.1", @@ -1402,7 +2104,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.55.1", @@ -1416,7 +2119,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-openbsd-x64": { "version": "4.55.1", @@ -1430,7 +2134,8 @@ "optional": true, "os": [ "openbsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.55.1", @@ -1444,7 +2149,8 @@ "optional": true, "os": [ "openharmony" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.55.1", @@ -1458,7 +2164,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.55.1", @@ -1472,7 +2179,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.55.1", @@ -1486,7 +2194,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.55.1", @@ -1500,7 +2209,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@svgr/babel-plugin-add-jsx-attribute": { "version": "8.0.0", @@ -2225,6 +2935,17 @@ "node": ">= 10" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", @@ -3074,6 +3795,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -4222,9 +4944,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", "engines": { @@ -4235,9 +4957,9 @@ } }, "node_modules/postcss": { - "version": "8.5.6", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.10.tgz", + "integrity": "sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==", "dev": true, "funding": [ { @@ -4366,12 +5088,54 @@ "node": ">=4" } }, + "node_modules/rolldown": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/rolldown/-/rolldown-1.0.0-rc.15.tgz", + "integrity": "sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.124.0", + "@rolldown/pluginutils": "1.0.0-rc.15" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.0-rc.15", + "@rolldown/binding-darwin-arm64": "1.0.0-rc.15", + "@rolldown/binding-darwin-x64": "1.0.0-rc.15", + "@rolldown/binding-freebsd-x64": "1.0.0-rc.15", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.0-rc.15", + "@rolldown/binding-linux-arm64-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-arm64-musl": "1.0.0-rc.15", + "@rolldown/binding-linux-ppc64-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-s390x-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-x64-gnu": "1.0.0-rc.15", + "@rolldown/binding-linux-x64-musl": "1.0.0-rc.15", + "@rolldown/binding-openharmony-arm64": "1.0.0-rc.15", + "@rolldown/binding-wasm32-wasi": "1.0.0-rc.15", + "@rolldown/binding-win32-arm64-msvc": "1.0.0-rc.15", + "@rolldown/binding-win32-x64-msvc": "1.0.0-rc.15" + } + }, + "node_modules/rolldown/node_modules/@rolldown/pluginutils": { + "version": "1.0.0-rc.15", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.15.tgz", + "integrity": "sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==", + "dev": true, + "license": "MIT" + }, "node_modules/rollup": { "version": "4.55.1", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.55.1.tgz", "integrity": "sha512-wDv/Ht1BNHB4upNbK74s9usvl7hObDnvVzknxqY/E/O3X6rW1U1rV1aENEfJ54eFZDTNo7zv1f5N4edCluH7+A==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -4676,6 +5440,7 @@ "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0",