You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

268 lines
8.5 KiB

name: Build and Release
on:
push:
branches: [ main, develop ]
tags: [ 'v*' ]
pull_request:
branches: [ main ]
jobs:
test:
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.21'
- name: Download dependencies
run: go mod download
- name: Run tests
run: go test -v ./...
- name: Run race detection tests
run: go test -race -v ./...
- name: Run benchmarks
run: go test -bench=. -benchmem ./...
build:
name: Build Multi-Platform
runs-on: ubuntu-latest
needs: test
strategy:
matrix:
include:
- goos: linux
goarch: amd64
name: linux-amd64
- goos: linux
goarch: arm64
name: linux-arm64
- goos: linux
goarch: 386
name: linux-386
- goos: linux
goarch: arm
name: linux-arm
- goos: darwin
goarch: amd64
name: darwin-amd64
- goos: darwin
goarch: arm64
name: darwin-arm64
- goos: windows
goarch: amd64
name: windows-amd64
ext: .exe
- goos: windows
goarch: 386
name: windows-386
ext: .exe
- goos: windows
goarch: arm64
name: windows-arm64
ext: .exe
- goos: freebsd
goarch: amd64
name: freebsd-amd64
- goos: freebsd
goarch: arm64
name: freebsd-arm64
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up Go
uses: actions/setup-go@v4
with:
go-version: '1.21'
- name: Get version
id: version
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
else
VERSION=v1.1.0-$(git rev-parse --short HEAD)
fi
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Building version: $VERSION"
- name: Build binary
env:
GOOS: ${{ matrix.goos }}
GOARCH: ${{ matrix.goarch }}
VERSION: ${{ steps.version.outputs.VERSION }}
run: |
BUILD_TIME=$(date -u '+%Y-%m-%d_%H:%M:%S')
GIT_COMMIT=$(git rev-parse --short HEAD)
LDFLAGS="-ldflags \"-X main.version=${VERSION} -X main.buildTime=${BUILD_TIME} -X main.gitCommit=${GIT_COMMIT} -s -w\""
mkdir -p dist
BINARY_NAME="wormhole-server-${VERSION}-${{ matrix.name }}${{ matrix.ext }}"
echo "Building ${BINARY_NAME}..."
go build ${LDFLAGS} -o "dist/${BINARY_NAME}" cmd/wormhole-server/main.go
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: wormhole-server-${{ matrix.name }}
path: dist/wormhole-server-*-${{ matrix.name }}*
retention-days: 30
release:
name: Create Release
runs-on: ubuntu-latest
needs: build
if: startsWith(github.ref, 'refs/tags/')
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v3
with:
path: artifacts
- name: Get version
id: version
run: echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_OUTPUT
- name: Create release packages
run: |
mkdir -p release
VERSION=${{ steps.version.outputs.VERSION }}
# 移动所有二进制文件到一个目录
find artifacts -name "wormhole-server-*" -type f -exec mv {} release/ \;
cd release
# 为每个平台创建发布包
for binary in wormhole-server-${VERSION}-*; do
if [[ "$binary" == *.exe ]]; then
# Windows平台使用zip
platform=$(echo "$binary" | sed "s/wormhole-server-${VERSION}-//; s/.exe$//")
zip -j "wormhole-server-${VERSION}-${platform}.zip" "$binary" ../configs/server.yaml ../README.md
else
# 其他平台使用tar.gz
platform=$(echo "$binary" | sed "s/wormhole-server-${VERSION}-//")
tar -czf "wormhole-server-${VERSION}-${platform}.tar.gz" "$binary" -C .. configs/server.yaml README.md
fi
done
# 创建校验和文件
sha256sum wormhole-server-${VERSION}-*.{tar.gz,zip} > wormhole-server-${VERSION}-checksums.txt
- name: Create Release
uses: ncipollo/release-action@v1
with:
tag: ${{ steps.version.outputs.VERSION }}
name: Wormhole Server ${{ steps.version.outputs.VERSION }}
draft: false
prerelease: false
artifacts: "release/wormhole-server-*"
body: |
## Wormhole Server ${{ steps.version.outputs.VERSION }}
### 🚀 新功能
- 高性能 SOCKS5 代理服务器
- 速率限制和连接池优化
- 内存优化和DNS缓存
- 多平台支持
### 📦 下载
选择适合您系统的版本:
**Linux:**
- `wormhole-server-${{ steps.version.outputs.VERSION }}-linux-amd64.tar.gz` - Linux x86_64
- `wormhole-server-${{ steps.version.outputs.VERSION }}-linux-arm64.tar.gz` - Linux ARM64
- `wormhole-server-${{ steps.version.outputs.VERSION }}-linux-arm.tar.gz` - Linux ARM
- `wormhole-server-${{ steps.version.outputs.VERSION }}-linux-386.tar.gz` - Linux x86
**macOS:**
- `wormhole-server-${{ steps.version.outputs.VERSION }}-darwin-amd64.tar.gz` - macOS Intel
- `wormhole-server-${{ steps.version.outputs.VERSION }}-darwin-arm64.tar.gz` - macOS Apple Silicon
**Windows:**
- `wormhole-server-${{ steps.version.outputs.VERSION }}-windows-amd64.zip` - Windows x64
- `wormhole-server-${{ steps.version.outputs.VERSION }}-windows-386.zip` - Windows x86
- `wormhole-server-${{ steps.version.outputs.VERSION }}-windows-arm64.zip` - Windows ARM64
**FreeBSD:**
- `wormhole-server-${{ steps.version.outputs.VERSION }}-freebsd-amd64.tar.gz` - FreeBSD x86_64
- `wormhole-server-${{ steps.version.outputs.VERSION }}-freebsd-arm64.tar.gz` - FreeBSD ARM64
### 🔐 校验和
下载 `wormhole-server-${{ steps.version.outputs.VERSION }}-checksums.txt` 来验证文件完整性。
### 📖 使用方法
1. 下载适合您系统的版本
2. 解压文件
3. 编辑 `server.yaml` 配置文件
4. 运行 `./wormhole-server -config server.yaml`
更多信息请查看 [README.md](https://github.com/azoic/wormhole-server/blob/main/README.md)
docker:
name: Build Docker Images
runs-on: ubuntu-latest
needs: test
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/'))
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
if: secrets.DOCKER_USERNAME && secrets.DOCKER_PASSWORD
- name: Get version
id: version
run: |
if [[ $GITHUB_REF == refs/tags/* ]]; then
VERSION=${GITHUB_REF#refs/tags/}
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "LATEST=true" >> $GITHUB_OUTPUT
else
VERSION=v1.1.0-$(git rev-parse --short HEAD)
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "LATEST=false" >> $GITHUB_OUTPUT
fi
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: .
platforms: linux/amd64,linux/arm64
push: ${{ secrets.DOCKER_USERNAME && secrets.DOCKER_PASSWORD }}
tags: |
${{ secrets.DOCKER_USERNAME }}/wormhole-server:${{ steps.version.outputs.VERSION }}
${{ secrets.DOCKER_USERNAME }}/wormhole-server:latest
build-args: |
VERSION=${{ steps.version.outputs.VERSION }}
cache-from: type=gha
cache-to: type=gha,mode=max