Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
260b4f1
chore: bump librtbit-tracker-comms to 0.1.2
Apr 8, 2026
ecd5114
CI: fix cargo-deb install to use crates-io registry
Apr 8, 2026
e9223d3
CI: quote variables in publish-release scp/sha256sum commands
Apr 8, 2026
cf20ce2
CI: pass Forgejo token as GIT_AUTH_TOKEN in push-ghcr step
Apr 8, 2026
c4aadba
CI: revert quoting in publish-release — was causing shell syntax error
Apr 8, 2026
8f68c20
CI: replace push-ghcr buildx with pull+retag from Forgejo registry
Apr 8, 2026
9b69adc
CI: use skopeo to copy images to GHCR (no Docker daemon needed)
Apr 9, 2026
ef821aa
CI: fix publish-release variable expansion for tags with hyphens
Apr 9, 2026
d62f112
CI: use single-shell block for publish-release to preserve variables
Apr 9, 2026
1506f34
CI: use $TAG not ${TAG} — Woodpecker eats brace syntax as template vars
Apr 9, 2026
3b4a3f9
Merge pull request 'chore: Configure Renovate' (#1) from renovate/con…
Apr 9, 2026
5c1a50e
chore(deps): update alpine docker tag to v3.23
Apr 9, 2026
9ef47e8
chore(deps): update gcr.io/cadvisor/cadvisor docker tag to v0.55.1
Apr 9, 2026
53813ef
Merge pull request 'chore(deps): update alpine docker tag to v3.23' (…
Apr 9, 2026
11fd6d5
Merge pull request 'chore(deps): update gcr.io/cadvisor/cadvisor dock…
Apr 9, 2026
9ac9dce
ci: add push-github step to auto-sync to GitHub
Apr 9, 2026
d274882
ci: add GitHub release creation on tag events
Apr 9, 2026
61048ef
ci: fix shallow clone for GitHub push (git fetch --unshallow)
Apr 9, 2026
e0cf892
ci: fix GitHub push — use bare clone instead of unshallow
Apr 9, 2026
94e7d27
ci: add pull_request trigger and guard deploy steps
Apr 10, 2026
ac4f9d6
ci: fix tag builds and scrub GitHub source mirror
Apr 11, 2026
02cb001
chore: add per-project clippy flags to exclude desktop crate from pre…
Apr 11, 2026
7211071
ci: add forgejo-release step to create releases on Forgejo on tag
Apr 11, 2026
b50f60e
ci: fix publish-release ssh-keyscan and JSON body in release steps
Apr 11, 2026
4a7a78e
ci: use $TAG not ${TAG} — Woodpecker substitutes braced form at YAML …
Apr 11, 2026
da28168
ci: make release steps idempotent — delete existing release before cr…
Apr 11, 2026
e7f6fc4
chore(deps-dev): bump eslint from 9.39.4 to 10.2.1
dependabot[bot] Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .cargo-clippy-flags
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
--workspace --exclude rtbit-desktop --no-default-features --features default-tls -- -D warnings
153 changes: 136 additions & 17 deletions .woodpecker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ when:
branch: main
- event: tag
- event: manual
- event: pull_request

steps:
- name: fmt
Expand Down Expand Up @@ -63,7 +64,11 @@ 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
when:
- event: push
branch: main
- event: tag

- name: build-windows
image: rust:1.88-bookworm
Expand All @@ -79,9 +84,13 @@ 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
- event: tag

- name: publish-release
image: alpine:3.21
image: alpine:3.23
when:
- event: tag
environment:
Expand All @@ -92,18 +101,73 @@ 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"
- 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/
- 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"
- |
set -e
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 "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: 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\`"

# 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
[ -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:
Expand Down Expand Up @@ -135,18 +199,73 @@ steps:
- PLUGIN_PASSWORD

- name: push-ghcr
image: woodpeckerci/plugin-docker-buildx
image: quay.io/skopeo/stable
when:
- event: tag
settings:
repo: ghcr.io/ausagentsmith-org/rusttorrent
registry: ghcr.io
username: AusAgentSmith
password:
environment:
GH_TOKEN:
from_secret: gh_release_token
tag: ["${CI_COMMIT_TAG}", "latest", "alpha"]
build_args_from_env:
- PLUGIN_PASSWORD
FORGEJO_TOKEN:
from_secret: git_auth_token
commands:
- 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: github-release
image: alpine:3.23
when:
- event: tag
environment:
GH_TOKEN:
from_secret: gh_release_token
commands:
- apk add --no-cache curl jq
- |
TAG="$CI_COMMIT_TAG"
REPO="AusAgentSmith-org/rustTorrent"
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\`"

# 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
[ -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: discord-success
image: alpine/curl
Expand Down
2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -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 }

Expand Down
2 changes: 1 addition & 1 deletion bench/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
2 changes: 1 addition & 1 deletion bench/seeder/Dockerfile
Original file line number Diff line number Diff line change
@@ -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
Expand Down
2 changes: 1 addition & 1 deletion benchv2/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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"]
2 changes: 1 addition & 1 deletion crates/librtbit/webui/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
"@types/react-dom": "^19",
"@vitejs/plugin-react": "^5",
"autoprefixer": "^10.4.16",
"eslint": "^9.39.4",
"eslint": "^10.2.1",
"eslint-plugin-react-hooks": "^7.0.1",
"eslint-plugin-react-refresh": "^0.5.2",
"prettier": "^3.7",
Expand Down
Loading