committed by
GitHub
1 changed files with 146 additions and 0 deletions
@ -0,0 +1,146 @@ |
|||
name: CI |
|||
|
|||
on: |
|||
push: |
|||
branches: [ "main", "master" ] |
|||
pull_request: |
|||
branches: [ "main", "master" ] |
|||
|
|||
jobs: |
|||
check: |
|||
name: Lint, fmt-check, and tests |
|||
runs-on: ubuntu-latest |
|||
steps: |
|||
- name: Check out code |
|||
uses: actions/checkout@v6 |
|||
|
|||
- name: Set up Go |
|||
uses: actions/setup-go@v6 |
|||
with: |
|||
go-version: '1.25.5' |
|||
|
|||
- name: Cache Go modules |
|||
uses: actions/cache@v5 |
|||
with: |
|||
path: | |
|||
~/.cache/go-build |
|||
# Module cache |
|||
${{ github.workspace }}/pkg/mod |
|||
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} |
|||
restore-keys: | |
|||
${{ runner.os }}-go- |
|||
|
|||
- name: Run gofmt (check) |
|||
run: | |
|||
echo "Checking formatting with gofmt..." |
|||
fmt_output=$(gofmt -l . || true) |
|||
if [ -n "$fmt_output" ]; then |
|||
echo "The following files need formatting:" |
|||
echo "$fmt_output" |
|||
echo "Run 'gofmt -w .' to fix." |
|||
exit 1 |
|||
fi |
|||
|
|||
- name: Run golangci-lint |
|||
uses: golangci/golangci-lint-action@v9 |
|||
with: |
|||
version: v2.8.0 |
|||
args: --timeout=5m ./... |
|||
env: |
|||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
|||
|
|||
- name: Run tests |
|||
run: | |
|||
go test ./... -v |
|||
|
|||
build: |
|||
name: Build binaries |
|||
runs-on: ubuntu-latest |
|||
strategy: |
|||
matrix: |
|||
include: |
|||
- goos: linux |
|||
goarch: amd64 |
|||
cgo: 0 |
|||
- goos: darwin |
|||
goarch: arm64 |
|||
cgo: 0 |
|||
- goos: android |
|||
goarch: arm64 |
|||
cgo: 1 |
|||
api: 21 |
|||
# you can add more (android/arm, windows, etc.) later |
|||
|
|||
steps: |
|||
- name: Check out code |
|||
uses: actions/checkout@v6 |
|||
with: |
|||
fetch-tags: true |
|||
|
|||
- name: Set up Go |
|||
uses: actions/setup-go@v6 |
|||
with: |
|||
go-version: '1.25.5' |
|||
|
|||
# Install Android NDK for android rows and expose ndk-path output |
|||
- name: Setup Android NDK |
|||
if: matrix.goos == 'android' |
|||
id: setup-ndk |
|||
uses: nttld/setup-ndk@v1 |
|||
with: |
|||
ndk-version: r26d |
|||
add-to-path: false |
|||
|
|||
- name: Build |
|||
env: |
|||
GOOS: ${{ matrix.goos }} |
|||
GOARCH: ${{ matrix.goarch }} |
|||
CGO_ENABLED: ${{ matrix.cgo }} |
|||
ANDROID_API: ${{ matrix.api }} |
|||
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} |
|||
run: | |
|||
echo "Building for $GOOS/$GOARCH (CGO_ENABLED=$CGO_ENABLED)" |
|||
|
|||
# If this is an Android build, point CC at the NDK toolchain clang |
|||
if [ "$GOOS" = "android" ]; then |
|||
if [ -z "$ANDROID_NDK_HOME" ]; then |
|||
echo "ANDROID_NDK_HOME is not set – did setup-ndk run?" |
|||
exit 1 |
|||
fi |
|||
|
|||
TOOLCHAIN_BIN="$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin" |
|||
|
|||
if [ "$GOARCH" = "arm64" ]; then |
|||
export CC="$TOOLCHAIN_BIN/aarch64-linux-android${ANDROID_API}-clang" |
|||
elif [ "$GOARCH" = "arm" ]; then |
|||
export CC="$TOOLCHAIN_BIN/armv7a-linux-androideabi${ANDROID_API}-clang" |
|||
else |
|||
echo "Unsupported ANDROID GOARCH=$GOARCH" |
|||
exit 1 |
|||
fi |
|||
|
|||
echo "Using Android NDK CC=$CC" |
|||
fi |
|||
|
|||
mkdir -p dist |
|||
|
|||
ext="" |
|||
if [ "$GOOS" = "windows" ]; then |
|||
ext=".exe" |
|||
fi |
|||
|
|||
GOOS=$GOOS GOARCH=$GOARCH \ |
|||
go build -ldflags "-s -w -checklinkname=0" -trimpath \ |
|||
-o "dist/client-${GOOS}-${GOARCH}${ext}" \ |
|||
./client |
|||
|
|||
GOOS=$GOOS GOARCH=$GOARCH \ |
|||
go build -ldflags "-s -w -checklinkname=0" -trimpath \ |
|||
-o "dist/server-${GOOS}-${GOARCH}${ext}" \ |
|||
./server |
|||
|
|||
- name: Upload artifact |
|||
uses: actions/upload-artifact@v6 |
|||
with: |
|||
name: good-turn-${{ matrix.goos }}-${{ matrix.goarch }} |
|||
path: dist/** |
|||
Loading…
Reference in new issue