1+ name : Build and Release
2+
3+ on :
4+ push :
5+ tags :
6+ - ' *'
7+
8+ jobs :
9+ build :
10+ runs-on : ubuntu-22.04
11+ strategy :
12+ matrix :
13+ include :
14+ - go_version : ' stable'
15+ group : ' standard'
16+ - go_version : ' 1.25'
17+ group : ' android'
18+
19+ steps :
20+ - name : Checkout code
21+ uses : actions/checkout@v4
22+
23+ - name : Set up Go
24+ uses : actions/setup-go@v5
25+ with :
26+ go-version : ${{ matrix.go_version }}
27+ cache : true
28+
29+ - name : Install Dependencies
30+ run : |
31+ go mod download
32+ # Установка swag для генерации доки
33+ go install github.com/swaggo/swag/cmd/swag@latest
34+
35+ - name : Build Web and Docs
36+ if : matrix.group == 'standard'
37+ run : |
38+ export NODE_OPTIONS=--openssl-legacy-provider
39+ go run gen_web.go
40+ cd server && ~/go/bin/swag init -g web/server.go
41+
42+ - name : Build Standard Platforms
43+ if : matrix.group == 'standard'
44+ run : |
45+ LDFLAGS="-s -w -checklinkname=0"
46+ FLAGS="-ldflags=$LDFLAGS -tags=nosqlite -trimpath"
47+ mkdir -p dist
48+
49+ # Linux
50+ GOOS=linux GOARCH=amd64 go build $FLAGS -o dist/TorrServer-linux-amd64 ./cmd
51+ GOOS=linux GOARCH=arm64 go build $FLAGS -o dist/TorrServer-linux-arm64 ./cmd
52+ GOOS=linux GOARCH=arm GOARM=7 go build $FLAGS -o dist/TorrServer-linux-arm7 ./cmd
53+ GOOS=linux GOARCH=arm GOARM=5 go build $FLAGS -o dist/TorrServer-linux-arm5 ./cmd
54+ GOOS=linux GOARCH=386 go build $FLAGS -o dist/TorrServer-linux-386 ./cmd
55+
56+ # Windows
57+ GOOS=windows GOARCH=amd64 go build $FLAGS -o dist/TorrServer-windows-amd64.exe ./cmd
58+ GOOS=windows GOARCH=386 go build $FLAGS -o dist/TorrServer-windows-386.exe ./cmd
59+
60+ # Darwin
61+ GOOS=darwin GOARCH=amd64 go build $FLAGS -o dist/TorrServer-darwin-amd64 ./cmd
62+ GOOS=darwin GOARCH=arm64 go build $FLAGS -o dist/TorrServer-darwin-arm64 ./cmd
63+
64+ # MIPS & Others
65+ GOOS=linux GOARCH=mips GOMIPS=softfloat go build $FLAGS -o dist/TorrServer-linux-mips ./cmd
66+ GOOS=linux GOARCH=mipsle GOMIPS=softfloat go build $FLAGS -o dist/TorrServer-linux-mipsle ./cmd
67+ GOOS=linux GOARCH=riscv64 go build $FLAGS -o dist/TorrServer-linux-riscv64 ./cmd
68+
69+ - name : Build Android (Go 1.25)
70+ if : matrix.group == 'android'
71+ run : |
72+ # Для Android тоже нужен сгенерированный веб
73+ go run gen_web.go
74+
75+ LDFLAGS="-s -w -checklinkname=0"
76+ FLAGS="-ldflags=$LDFLAGS -tags=nosqlite -trimpath"
77+ mkdir -p dist
78+
79+ # Используем предустановленный NDK в Ubuntu 22.04
80+ export NDK_TOOLCHAIN="$ANDROID_NDK_LATEST_HOME/toolchains/llvm/prebuilt/linux-x86_64"
81+
82+ # Сборка Android платформ с CGO
83+ CC=$NDK_TOOLCHAIN/bin/armv7a-linux-androideabi21-clang CGO_ENABLED=1 GOOS=android GOARCH=arm GOARM=7 go build $FLAGS -o dist/TorrServer-android-arm7 ./cmd
84+ CC=$NDK_TOOLCHAIN/bin/aarch64-linux-android21-clang CGO_ENABLED=1 GOOS=android GOARCH=arm64 go build $FLAGS -o dist/TorrServer-android-arm64 ./cmd
85+ CC=$NDK_TOOLCHAIN/bin/i686-linux-android21-clang CGO_ENABLED=1 GOOS=android GOARCH=386 go build $FLAGS -o dist/TorrServer-android-386 ./cmd
86+ CC=$NDK_TOOLCHAIN/bin/x86_64-linux-android21-clang CGO_ENABLED=1 GOOS=android GOARCH=amd64 go build $FLAGS -o dist/TorrServer-android-amd64 ./cmd
87+
88+ - name : Upload Artifacts
89+ uses : actions/upload-artifact@v4
90+ with :
91+ name : binaries-${{ matrix.group }}
92+ path : dist/*
93+
94+ release :
95+ needs : build
96+ runs-on : ubuntu-latest
97+ permissions :
98+ contents : write # Важно для создания релиза
99+ steps :
100+ - name : Download all artifacts
101+ uses : actions/download-artifact@v4
102+ with :
103+ path : all-dist
104+ merge-multiple : true
105+
106+ - name : Create Release
107+ uses : softprops/action-gh-release@v2
108+ with :
109+ files : all-dist/*
110+ env :
111+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
0 commit comments