Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
82 changes: 82 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
name: Build FastGithub

on:
push:
branches: [ main, master ]
pull_request:
branches: [ main, master ]

jobs:
build:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4

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

- name: Restore dependencies
run: dotnet restore FastGithub.sln

- name: Build
run: dotnet build FastGithub.sln --no-restore --configuration Release

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

build-multi-platform:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: ubuntu-latest
runtime: linux-x64
artifact-name: fastgithub-linux-x64
- os: windows-latest
runtime: win-x64
artifact-name: fastgithub-win-x64
- os: macos-latest
runtime: osx-x64
artifact-name: fastgithub-osx-x64

steps:
- uses: actions/checkout@v4

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

- name: Build for ${{ matrix.os }}
run: |
dotnet restore FastGithub.sln
dotnet build FastGithub.sln --configuration Release

- name: Publish single-file artifacts with UI
shell: bash
run: |
# 发布主程序
dotnet publish FastGithub/FastGithub.csproj \
-c Release \
-r ${{ matrix.runtime }} \
--self-contained true \
-p:PublishSingleFile=true \
-p:PublishTrimmed=true \
-o ./publish/${{ matrix.runtime }}

# 发布 UI (仅 Windows)
if [ "${{ matrix.runtime }}" == "win-x64" ]; then
dotnet publish FastGithub.UI/FastGithub.UI.csproj \
-c Release \
-o ./publish/${{ matrix.runtime }}
fi

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact-name }}
path: ./publish/${{ matrix.runtime }}
185 changes: 185 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,185 @@
name: Create Release

on:
workflow_dispatch:
inputs:
version:
description: '版本号 (例如: v1.0.0)'
required: true
type: string
prerelease:
description: '是否为预发布版本'
required: false
type: boolean
default: false

jobs:
build-and-release:
runs-on: ubuntu-latest

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

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

- name: Validate version format
run: |
if [[ ! "${{ github.event.inputs.version }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9]+)?$ ]]; then
echo "错误: 版本号格式不正确。请使用格式: v1.0.0 或 v1.0.0-beta"
exit 1
fi

- name: Check if tag exists
run: |
if git rev-parse "${{ github.event.inputs.version }}" >/dev/null 2>&1; then
echo "错误: 标签 ${{ github.event.inputs.version }} 已存在"
exit 1
fi

- name: Create and push tag
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git tag -a "${{ github.event.inputs.version }}" -m "Release ${{ github.event.inputs.version }}"
git push origin "${{ github.event.inputs.version }}"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

build-artifacts:
needs: build-and-release
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
include:
- os: ubuntu-latest
runtime: linux-x64
artifact-name: fastgithub-linux-x64
- os: windows-latest
runtime: win-x64
artifact-name: fastgithub-win-x64
- os: macos-latest
runtime: osx-x64
artifact-name: fastgithub-osx-x64

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.version }}

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

- name: Restore dependencies
run: dotnet restore FastGithub.sln

- name: Build and publish
shell: bash
run: |
# 发布主程序
dotnet publish FastGithub/FastGithub.csproj \
-c Release \
-r ${{ matrix.runtime }} \
--self-contained true \
-p:PublishSingleFile=true \
-p:PublishTrimmed=true \
-o ./publish/${{ matrix.runtime }}

# 发布 UI (仅 Windows)
if [ "${{ matrix.runtime }}" == "win-x64" ]; then
dotnet publish FastGithub.UI/FastGithub.UI.csproj \
-c Release \
-o ./publish/${{ matrix.runtime }}
fi

- name: Create archive
shell: bash
run: |
cd ./publish/${{ matrix.runtime }}
if [ "${{ matrix.os }}" == "windows-latest" ]; then
7z a -tzip ../../${{ matrix.artifact-name }}.zip *
else
tar -czf ../../${{ matrix.artifact-name }}.tar.gz *
fi

- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.artifact-name }}
path: |
${{ matrix.artifact-name }}.zip
${{ matrix.artifact-name }}.tar.gz

create-github-release:
needs: build-artifacts
runs-on: ubuntu-latest

steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.inputs.version }}

- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: ./artifacts

- name: Prepare release assets
run: |
mkdir -p ./release-assets
find ./artifacts -name "*.zip" -o -name "*.tar.gz" | while read file; do
cp "$file" ./release-assets/
done
ls -la ./release-assets/

- name: Generate release notes
id: release_notes
run: |
cat > release_notes.md << 'EOF'
## FastGithub Release ${{ github.event.inputs.version }}

🚀 **新版本发布**

### 📦 下载说明
- **Windows 用户**: 下载 `fastgithub-win-x64.zip`
- **Linux 用户**: 下载 `fastgithub-linux-x64.tar.gz`
- **macOS 用户**: 下载 `fastgithub-osx-x64.tar.gz`

### 🔧 安装说明
请参考 [README.md](https://github.com/${{ github.repository }}/blob/main/README.md) 中的部署方式。

### ⚠️ 注意事项
- Windows版本包含UI界面程序
- 首次使用需要安装并信任CA证书
- 详细配置请查看项目文档

---

**完整更新日志**: https://github.com/${{ github.repository }}/compare/$(git describe --tags --abbrev=0 HEAD^)...${{ github.event.inputs.version }}
EOF

- name: Create GitHub Release
uses: softprops/action-gh-release@v1
with:
tag_name: ${{ github.event.inputs.version }}
name: FastGithub ${{ github.event.inputs.version }}
body_path: release_notes.md
files: ./release-assets/*
draft: false
prerelease: ${{ github.event.inputs.prerelease }}
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- name: Cleanup artifacts
run: rm -rf ./artifacts ./release-assets release_notes.md
8 changes: 4 additions & 4 deletions FastGithub.FlowAnalyze/FlowStatistics.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,21 @@ public record FlowStatistics
/// <summary>
/// 获取总读上行
/// </summary>
public long TotalRead { get; init; }
public long TotalRead { get; set; }

/// <summary>
/// 获取总下行
/// </summary>
public long TotalWrite { get; init; }
public long TotalWrite { get; set; }

/// <summary>
/// 获取读取速率
/// </summary>
public double ReadRate { get; init; }
public double ReadRate { get; set; }

/// <summary>
/// 获取写入速率
/// </summary>
public double WriteRate { get; init; }
public double WriteRate { get; set; }
}
}
Loading