Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
132 commits
Select commit Hold shift + click to select a range
727a065
Refactor
xBaank Dec 11, 2025
e4f2c7d
a
xBaank Dec 11, 2025
a02595a
a
xBaank Dec 11, 2025
667cf00
a
xBaank Dec 11, 2025
c6ff447
wip
xBaank Dec 12, 2025
f2dcb6e
WIP
xBaank Dec 12, 2025
c678354
a
xBaank Dec 12, 2025
bbe64b8
a
xBaank Dec 13, 2025
8e79d8c
a
xBaank Dec 13, 2025
e5426b1
a
xBaank Dec 13, 2025
5f1618d
a
xBaank Dec 13, 2025
713aded
a
xBaank Dec 13, 2025
e6875bf
some api changes
xBaank Dec 13, 2025
1cbad05
a
xBaank Dec 14, 2025
743cb06
a
xBaank Dec 14, 2025
7f1e838
a
xBaank Dec 14, 2025
88bd86e
WIP
xBaank Dec 15, 2025
8dc4984
wip
xBaank Dec 15, 2025
994db89
wip
xBaank Dec 15, 2025
bf6e006
a
xBaank Dec 15, 2025
6acc764
Abbsssssssssstractioooooooooonsssssss
xBaank Dec 15, 2025
4847318
wip
xBaank Dec 16, 2025
8e3b1fd
WIP
xBaank Dec 16, 2025
6378ba0
wip
xBaank Dec 16, 2025
9de6ebc
a
xBaank Dec 16, 2025
5cca884
a
xBaank Dec 16, 2025
0815291
wip
xBaank Dec 17, 2025
82cb7ed
wip
xBaank Dec 17, 2025
e1fd7cd
wip
xBaank Dec 17, 2025
3344a10
wip
xBaank Dec 17, 2025
7d693b1
wip
xBaank Dec 18, 2025
1ac5c4c
wip
xBaank Dec 18, 2025
af07cab
wip
xBaank Dec 18, 2025
25c6933
wip
xBaank Dec 18, 2025
d5c7d1d
WIP
xBaank Dec 20, 2025
bceff3f
wip
xBaank Dec 20, 2025
a799452
A
xBaank Dec 20, 2025
b3f0df2
wip
xBaank Dec 21, 2025
8c7036b
wip
xBaank Dec 22, 2025
5b3fbdc
wip
xBaank Dec 22, 2025
5a770d0
wip
xBaank Dec 22, 2025
9af5d1c
wip
xBaank Dec 22, 2025
090641f
wip
xBaank Dec 22, 2025
863f3c4
wip
xBaank Dec 22, 2025
d1b823b
a
xBaank Dec 22, 2025
868a1e0
fix
xBaank Dec 22, 2025
e002442
a
xBaank Dec 22, 2025
1b607e7
a
xBaank Dec 23, 2025
8210eb6
a
xBaank Dec 23, 2025
d333909
wip
xBaank Dec 23, 2025
6a6ec17
wip
xBaank Dec 23, 2025
8f46d4f
wip
xBaank Dec 23, 2025
904a584
wip (#20)
xBaank Dec 23, 2025
e118b13
fix ip proxy
xBaank Dec 24, 2025
4d7c9de
wip
Dec 24, 2025
7dc31fb
Merge branch 'improve_tests' of https://github.com/xBaank/Netorrent i…
Dec 24, 2025
fca6381
wip
Dec 25, 2025
9fc60f8
DOCKEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEER
xBaank Dec 25, 2025
9311c84
a
xBaank Dec 25, 2025
b12313f
a
xBaank Dec 25, 2025
25918bc
wip
xBaank Dec 25, 2025
7d35506
wip
xBaank Dec 25, 2025
7e5d7ed
wip
xBaank Dec 26, 2025
f758f02
wip
xBaank Dec 26, 2025
d8ec3ee
wip
xBaank Dec 26, 2025
4603ef7
wip
xBaank Dec 26, 2025
eff9ee6
Add step to check IPv6 configuration
xBaank Dec 26, 2025
de9f785
wip
xBaank Dec 26, 2025
2a44de1
wip
xBaank Dec 27, 2025
fa73430
wip
xBaank Dec 28, 2025
65d820b
wip
xBaank Dec 29, 2025
877def4
wip
xBaank Dec 29, 2025
d23c610
a
xBaank Dec 30, 2025
882526c
wip
xBaank Dec 30, 2025
a45aa3c
WIP
Dec 31, 2025
749278f
Refactor PeerRequestWindow and RequestScheduler: simplify window calc…
Dec 31, 2025
5a4464d
Refactor TorrentTests and MessageStream: simplify matrix parameters a…
Dec 31, 2025
a93381c
wip
Dec 31, 2025
d590f86
wip
Jan 1, 2026
ddfbac7
wip
Jan 1, 2026
74aed14
wip
Jan 1, 2026
f8f213f
Update timeout and matrix parameters in TorrentTests
xBaank Jan 4, 2026
e8cf47f
Optimistic choking (#25)
xBaank Jan 4, 2026
5f6eafe
Add more cases
xBaank Jan 4, 2026
a6e714c
wip
xBaank Jan 4, 2026
cadbcf1
wip
xBaank Jan 5, 2026
3991d1e
Fix formatting issues in README.md
xBaank Jan 5, 2026
902c52e
Dispose and start trackers concurrently
xBaank Jan 5, 2026
8785da1
wip
xBaank Jan 6, 2026
227f623
wip
xBaank Jan 6, 2026
848940c
wip
xBaank Jan 6, 2026
b02d753
cleanup
xBaank Jan 6, 2026
ddfac63
wip
xBaank Jan 6, 2026
5fe7c93
wip
xBaank Jan 6, 2026
2631604
wip
xBaank Jan 6, 2026
6202d29
wip
xBaank Jan 7, 2026
7af84e2
wip
xBaank Jan 7, 2026
234b3ac
wip
xBaank Jan 7, 2026
3ae2a71
wip
xBaank Jan 8, 2026
c3496c4
Send cancel request
xBaank Jan 8, 2026
16cb11e
wip
xBaank Jan 8, 2026
9393613
wip
xBaank Jan 8, 2026
08ef7b2
cleanup
xBaank Jan 10, 2026
2f71887
wip
xBaank Jan 11, 2026
2a69b9b
wip
xBaank Jan 11, 2026
ac6b9cc
wip
xBaank Jan 11, 2026
6ff0a22
wip
xBaank Jan 12, 2026
d9b456e
wip
xBaank Jan 12, 2026
63e1044
wip
xBaank Jan 12, 2026
4ed5ea2
wip
xBaank Jan 12, 2026
61f8153
wip
xBaank Jan 12, 2026
7d6aa28
wip
xBaank Jan 12, 2026
6b176b4
wip
xBaank Jan 12, 2026
63e9a41
wip
xBaank Jan 13, 2026
54c9652
wip
xBaank Jan 13, 2026
6894dba
wip
xBaank Jan 13, 2026
dcb307e
wip
xBaank Jan 13, 2026
4f1d746
wip
xBaank Jan 13, 2026
66e4e36
Update README
xBaank Jan 14, 2026
cff4ae6
wip
xBaank Jan 14, 2026
b57a5fd
wip
xBaank Jan 14, 2026
882de49
Revise README for statistics monitoring and examples
xBaank Jan 14, 2026
ba0aeec
wip
xBaank Jan 14, 2026
4d30b5c
wip
xBaank Jan 14, 2026
1f87711
wip (#30)
xBaank Jan 14, 2026
e17f099
Add GNU GPL v3 License
xBaank Jan 14, 2026
b44dce8
wip
xBaank Jan 14, 2026
7f4c268
wip
xBaank Jan 14, 2026
3eeda6d
wip
xBaank Jan 14, 2026
fbba57b
wip
xBaank Jan 14, 2026
629561a
wip
xBaank Jan 14, 2026
1107168
wip
xBaank Jan 14, 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
25 changes: 18 additions & 7 deletions .github/workflows/dotnet.yml
Original file line number Diff line number Diff line change
@@ -1,28 +1,39 @@
# This workflow will build a .NET project
# This workflow will build and test a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net

name: .NET
name: .NET CI

on:
push:
branches: [ "*" ]
branches: [ main, develop ]
pull_request:
branches: [ "*" ]
branches: [ main, develop ]

jobs:
build:

runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Restore dependencies
run: dotnet restore

- name: Build
run: dotnet build --no-restore
run: dotnet build --no-restore --configuration Release

- name: Test
run: dotnet test --no-build --verbosity normal
run: dotnet test --no-build --configuration Release --verbosity normal
282 changes: 282 additions & 0 deletions .github/workflows/nuget-publish.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,282 @@
name: NuGet Publish

on:
push:
branches: [ master, develop ]
tags: [ '*' ]
workflow_dispatch:
inputs:
version:
description: 'Override version (optional)'
required: false
type: string
environment:
description: 'Publish environment'
required: false
default: 'auto'
type: choice
options:
- auto
- staging
- production
create_release:
description: 'Create GitHub release (production only)'
required: false
type: boolean
default: false
release_notes:
description: 'Release notes'
required: false
type: string

env:
DOTNET_VERSION: 10.0.x
NUGET_SOURCE: https://api.nuget.org/v3/index.json

jobs:
build:
runs-on: ubuntu-latest
outputs:
version: ${{ steps.setup.outputs.version }}
is-nightly: ${{ steps.setup.outputs.is-nightly }}
is-release: ${{ steps.setup.outputs.is-release }}
should-publish: ${{ steps.setup.outputs.should-publish }}
environment: ${{ steps.setup.outputs.environment }}
create-release: ${{ steps.setup.outputs.create-release }}

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Cache NuGet packages
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: ${{ runner.os }}-nuget-${{ hashFiles('**/*.csproj') }}
restore-keys: |
${{ runner.os }}-nuget-

- name: Restore dependencies
run: dotnet restore

- name: Build
run: dotnet build --no-restore --configuration Release

- name: Test
run: dotnet test --no-build --configuration Release --verbosity normal

- name: Setup version and publishing strategy
id: setup
uses: actions/github-script@v7
with:
script: |
const core = require('@actions/core');

// Get current context
const ref = context.ref;
const eventName = context.eventName;
const inputs = context.payload.inputs || {};

// Initialize variables
let version = '';
let isNightly = false;
let isRelease = false;
let shouldPublish = false;
let environment = 'auto';
let createRelease = false;

// Handle manual override
if (inputs.version) {
version = inputs.version;
environment = inputs.environment || 'auto';
isNightly = version.includes('nightly');
isRelease = !isNightly && !version.includes('preview');
shouldPublish = true;
createRelease = inputs.create_release === true && isRelease;
} else {
// Automatic version detection
if (ref === 'refs/heads/develop') {
// Nightly builds for develop branch
const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
const commitSha = context.sha.substring(0, 7);
version = `1.0.0-nightly-${timestamp}-${commitSha}`;
isNightly = true;
shouldPublish = true;
environment = 'nightly';
} else if (ref.startsWith('refs/tags/')) {
// Release from git tag
version = ref.replace('refs/tags/v', '');
version = ref.replace('refs/tags/', '');
isRelease = true;
shouldPublish = true;
environment = 'production';
// Create GitHub release for all tags
createRelease = true;
} else if (eventName === 'release') {
// Release from GitHub release
version = context.payload.release.tag_name;
isRelease = true;
shouldPublish = true;
environment = 'production';
} else if (ref === 'refs/heads/main') {
// Main branch builds (preview versions)
version = `1.0.0-preview-${context.runNumber}`;
environment = 'staging';
shouldPublish = false; // Don't auto-publish from main
}
}

// Resolve auto environment
if (environment === 'auto') {
environment = isNightly ? 'nightly' : isRelease ? 'production' : 'staging';
}

// Validate version format (basic check)
if (!version.match(/^\d+\.\d+\.\d+(-[\w\.\-]+)?$/)) {
core.setFailed(`Invalid version format: ${version}`);
return;
}

// Set outputs
core.setOutput('version', version);
core.setOutput('is-nightly', isNightly);
core.setOutput('is-release', isRelease);
core.setOutput('should-publish', shouldPublish);
core.setOutput('environment', environment);
core.setOutput('create-release', createRelease && ref.startsWith('refs/tags/'));

// Log information
console.log(`Version: ${version}`);
console.log(`Is Nightly: ${isNightly}`);
console.log(`Is Release: ${isRelease}`);
console.log(`Should Publish: ${shouldPublish}`);
console.log(`Environment: ${environment}`);
console.log(`Create Release: ${createRelease}`);

- name: Pack
run: |
dotnet pack Netorrent/Netorrent.csproj \
--configuration Release \
--output ./artifacts \
-p:PackageVersion=${{ steps.setup.outputs.version }} \
-p:ContinuousIntegrationBuild=true \
-p:IncludeSymbols=true

- name: Validate packages
run: |
dotnet nuget verify ./artifacts/*.nupkg --all
dotnet nuget verify ./artifacts/*.snupkg --all

- name: List packages
if: steps.setup.outputs.should-publish == 'true'
run: |
echo "Generated packages:"
ls -la ./artifacts/ || echo "No artifacts found"

- name: Upload artifacts
uses: actions/upload-artifact@v4
if: steps.setup.outputs.should-publish == 'true'
with:
name: nuget-packages-${{ steps.setup.outputs.version }}
path: ./artifacts/*.nupkg
retention-days: ${{ steps.setup.outputs.is-nightly == 'true' && '30' || '90' }}

publish:
needs: build
runs-on: ubuntu-latest
if: needs.build.outputs.should-publish == 'true'
environment: ${{ needs.build.outputs.environment }}

steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: nuget-packages-${{ needs.build.outputs.version }}
path: ./artifacts

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: ${{ env.DOTNET_VERSION }}

- name: Publish to NuGet
run: |
dotnet nuget push ./artifacts/*.nupkg \
--source ${{ env.NUGET_SOURCE }} \
--api-key ${{ secrets.NUGET_API_KEY }} \
--skip-duplicate
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}

- name: Publish symbols
run: |
dotnet nuget push ./artifacts/*.snupkg \
--source ${{ env.NUGET_SOURCE }} \
--api-key ${{ secrets.NUGET_API_KEY }} \
--skip-duplicate
env:
NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }}

- name: Create GitHub Release
if: needs.build.outputs.create-release == 'true'
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ needs.build.outputs.version }}
release_name: Release ${{ needs.build.outputs.version }}
body: |
## 📦 Package Information
- **Version**: `${{ needs.build.outputs.version }}`
- **NuGet**: [Netorrent.${{ needs.build.outputs.version }}](https://www.nuget.org/packages/Netorrent/${{ needs.build.outputs.version }})
- **Installation**: `dotnet add package Netorrent --version ${{ needs.build.outputs.version }}`

${{ github.event.inputs.release_notes || '' }}

---

🤖 *This release was automatically generated. Check [Actions](https://github.com/${{ github.repository }}/actions) for build details.*
draft: false
prerelease: ${{ contains(needs.build.outputs.version, 'nightly') || contains(needs.build.outputs.version, 'preview') || contains(needs.build.outputs.version, 'rc') }}

- name: Upload release assets
if: needs.build.outputs.create-release == 'true'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const path = require('path');

const version = '${{ needs.build.outputs.version }}';
const artifactsDir = './artifacts';

// Get release ID
const { data: release } = await github.rest.repos.getReleaseByTag({
owner: context.repo.owner,
repo: context.repo.repo,
tag: version
});

// Upload all .nupkg and .snupkg files
const files = fs.readdirSync(artifactsDir)
.filter(file => file.endsWith('.nupkg') || file.endsWith('.snupkg'));

for (const file of files) {
const filePath = path.join(artifactsDir, file);
const fileData = fs.readFileSync(filePath);

await github.rest.repos.uploadReleaseAsset({
owner: context.repo.owner,
repo: context.repo.repo,
release_id: release.id,
name: file,
data: fileData
});
}

Loading