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 164ae22e6a736b1d6e3696345d5b4e5dbba89cec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 19 Apr 2026 11:28:30 +0000 Subject: [PATCH 24/24] chore(deps-dev): bump vite-plugin-svgr from 4.5.0 to 5.2.0 Bumps [vite-plugin-svgr](https://github.com/pd4d10/vite-plugin-svgr) from 4.5.0 to 5.2.0. - [Release notes](https://github.com/pd4d10/vite-plugin-svgr/releases) - [Commits](https://github.com/pd4d10/vite-plugin-svgr/compare/v4.5.0...v5.2.0) --- updated-dependencies: - dependency-name: vite-plugin-svgr dependency-version: 5.2.0 dependency-type: direct:development update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- crates/librtbit/webui/package.json | 2 +- package-lock.json | 32 +++++++++++++++--------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/crates/librtbit/webui/package.json b/crates/librtbit/webui/package.json index 6c4639a..d4011c4 100644 --- a/crates/librtbit/webui/package.json +++ b/crates/librtbit/webui/package.json @@ -37,6 +37,6 @@ "typescript": "^5.3.2", "typescript-eslint": "^8.57.1", "vite": "^7", - "vite-plugin-svgr": "^4.2.0" + "vite-plugin-svgr": "^5.2.0" } } diff --git a/package-lock.json b/package-lock.json index 5061fca..a1b6ed0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -75,7 +75,22 @@ "typescript": "^5.3.2", "typescript-eslint": "^8.57.1", "vite": "^7", - "vite-plugin-svgr": "^4.2.0" + "vite-plugin-svgr": "^5.2.0" + } + }, + "crates/librtbit/webui/node_modules/vite-plugin-svgr": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-5.2.0.tgz", + "integrity": "sha512-qj2eAKF8C6PZWemVTvQA0xgQIcP1hHU6Buh7fl6BhvayWwnuxE+z417miKxeDvRWbDrupQ1oK99hfxElopJ3sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.3.0", + "@svgr/core": "^8.1.0", + "@svgr/plugin-jsx": "^8.1.0" + }, + "peerDependencies": { + "vite": ">=3.0.0" } }, "desktop": { @@ -4745,21 +4760,6 @@ } } }, - "node_modules/vite-plugin-svgr": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/vite-plugin-svgr/-/vite-plugin-svgr-4.5.0.tgz", - "integrity": "sha512-W+uoSpmVkSmNOGPSsDCWVW/DDAyv+9fap9AZXBvWiQqrboJ08j2vh0tFxTD/LjwqwAd3yYSVJgm54S/1GhbdnA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.2.0", - "@svgr/core": "^8.1.0", - "@svgr/plugin-jsx": "^8.1.0" - }, - "peerDependencies": { - "vite": ">=2.6.0" - } - }, "node_modules/warning": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz",