mirror of
https://github.com/router-for-me/CLIProxyAPI.git
synced 2026-06-23 05:26:20 +08:00
240 lines
8.2 KiB
YAML
240 lines
8.2 KiB
YAML
name: release
|
|
|
|
on:
|
|
push:
|
|
# run only against tags
|
|
tags:
|
|
- '*'
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
env:
|
|
GO_VERSION: '1.26.4'
|
|
|
|
jobs:
|
|
build-hosted:
|
|
name: build ${{ matrix.target }}
|
|
runs-on: ${{ matrix.runner }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- target: linux-amd64
|
|
runner: ubuntu-latest
|
|
goos: linux
|
|
goarch: amd64
|
|
asset_arch: amd64
|
|
archive_format: tar.gz
|
|
- target: linux-arm64
|
|
runner: ubuntu-24.04-arm
|
|
goos: linux
|
|
goarch: arm64
|
|
asset_arch: aarch64
|
|
archive_format: tar.gz
|
|
- target: darwin-amd64
|
|
runner: macos-15-intel
|
|
goos: darwin
|
|
goarch: amd64
|
|
asset_arch: amd64
|
|
archive_format: tar.gz
|
|
- target: darwin-arm64
|
|
runner: macos-15
|
|
goos: darwin
|
|
goarch: arm64
|
|
asset_arch: aarch64
|
|
archive_format: tar.gz
|
|
- target: windows-amd64
|
|
runner: windows-latest
|
|
goos: windows
|
|
goarch: amd64
|
|
asset_arch: amd64
|
|
archive_format: zip
|
|
- target: windows-arm64
|
|
runner: windows-11-arm
|
|
goos: windows
|
|
goarch: arm64
|
|
asset_arch: aarch64
|
|
archive_format: zip
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Refresh models catalog
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
git fetch --depth 1 https://github.com/router-for-me/models.git main
|
|
git show FETCH_HEAD:models.json > internal/registry/models/models.json
|
|
- name: Fetch tags
|
|
shell: bash
|
|
run: git fetch --force --tags
|
|
- uses: actions/setup-go@v6
|
|
with:
|
|
go-version: ${{ env.GO_VERSION }}
|
|
cache: true
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
~/.cache/go-build
|
|
~/go/pkg/mod
|
|
key: go-${{ runner.os }}-${{ runner.arch }}-${{ matrix.target }}-${{ hashFiles('go.sum') }}
|
|
restore-keys: |
|
|
go-${{ runner.os }}-${{ runner.arch }}-${{ matrix.target }}-
|
|
go-${{ runner.os }}-${{ runner.arch }}-
|
|
- name: Generate Build Metadata
|
|
shell: bash
|
|
run: |
|
|
set -euo pipefail
|
|
echo "RELEASE_VERSION=${GITHUB_REF_NAME#v}" >> "$GITHUB_ENV"
|
|
echo "COMMIT=$(git rev-parse --short HEAD)" >> "$GITHUB_ENV"
|
|
echo "BUILD_DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)" >> "$GITHUB_ENV"
|
|
- name: Build archive
|
|
shell: bash
|
|
env:
|
|
TARGET: ${{ matrix.target }}
|
|
GOOS: ${{ matrix.goos }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
ASSET_ARCH: ${{ matrix.asset_arch }}
|
|
ARCHIVE_FORMAT: ${{ matrix.archive_format }}
|
|
run: |
|
|
set -euo pipefail
|
|
binary_name="cli-proxy-api"
|
|
if [[ "$GOOS" == "windows" ]]; then
|
|
binary_name="cli-proxy-api.exe"
|
|
fi
|
|
|
|
archive_dir="dist/${TARGET}/archive"
|
|
archive_name="CLIProxyAPI_${RELEASE_VERSION}_${GOOS}_${ASSET_ARCH}.${ARCHIVE_FORMAT}"
|
|
rm -rf "dist/${TARGET}"
|
|
mkdir -p "$archive_dir"
|
|
|
|
CGO_ENABLED=1 GOOS="$GOOS" GOARCH="$GOARCH" go build \
|
|
-ldflags="-s -w -X main.Version=${RELEASE_VERSION} -X main.Commit=${COMMIT} -X main.BuildDate=${BUILD_DATE}" \
|
|
-o "$archive_dir/$binary_name" ./cmd/server/
|
|
|
|
cp LICENSE README.md README_CN.md config.example.yaml "$archive_dir/"
|
|
if [[ "$ARCHIVE_FORMAT" == "zip" ]]; then
|
|
powershell -NoProfile -Command "Compress-Archive -Path '${archive_dir}/*' -DestinationPath 'dist/${archive_name}' -Force"
|
|
else
|
|
tar -C "$archive_dir" -czf "dist/$archive_name" "$binary_name" LICENSE README.md README_CN.md config.example.yaml
|
|
fi
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ${{ matrix.target }}
|
|
path: dist/CLIProxyAPI_*
|
|
if-no-files-found: error
|
|
|
|
build-freebsd:
|
|
name: build freebsd-${{ matrix.goarch }}
|
|
runs-on: ubuntu-latest
|
|
env:
|
|
TARGET: freebsd-${{ matrix.goarch }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
ASSET_ARCH: ${{ matrix.asset_arch }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
include:
|
|
- goarch: amd64
|
|
vm_arch: x86-64
|
|
asset_arch: amd64
|
|
- goarch: arm64
|
|
vm_arch: arm64
|
|
asset_arch: aarch64
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Refresh models catalog
|
|
run: |
|
|
git fetch --depth 1 https://github.com/router-for-me/models.git main
|
|
git show FETCH_HEAD:models.json > internal/registry/models/models.json
|
|
- name: Fetch tags
|
|
run: git fetch --force --tags
|
|
- uses: actions/cache@v4
|
|
with:
|
|
path: |
|
|
.freebsd-cache/${{ matrix.goarch }}/go
|
|
.freebsd-cache/${{ matrix.goarch }}/gocache
|
|
.freebsd-cache/${{ matrix.goarch }}/gomodcache
|
|
key: freebsd-${{ matrix.goarch }}-go${{ env.GO_VERSION }}-${{ hashFiles('go.sum') }}
|
|
restore-keys: |
|
|
freebsd-${{ matrix.goarch }}-go${{ env.GO_VERSION }}-
|
|
freebsd-${{ matrix.goarch }}-
|
|
- name: Generate Build Metadata
|
|
run: |
|
|
echo "RELEASE_VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
|
|
echo COMMIT=`git rev-parse --short HEAD` >> $GITHUB_ENV
|
|
echo BUILD_DATE=`date -u +%Y-%m-%dT%H:%M:%SZ` >> $GITHUB_ENV
|
|
- name: Start FreeBSD ${{ matrix.goarch }} VM
|
|
uses: cross-platform-actions/action@v1.2.0
|
|
with:
|
|
operating_system: freebsd
|
|
architecture: ${{ matrix.vm_arch }}
|
|
version: '13.5'
|
|
shell: sh
|
|
memory: 5G
|
|
cpu_count: 4
|
|
environment_variables: GO_VERSION RELEASE_VERSION COMMIT BUILD_DATE TARGET GOARCH ASSET_ARCH
|
|
- name: Build FreeBSD archive
|
|
shell: cpa.sh {0}
|
|
run: |
|
|
set -eu
|
|
cache_root=".freebsd-cache/${GOARCH}"
|
|
go_root="${cache_root}/go"
|
|
mkdir -p "${cache_root}/gocache" "${cache_root}/gomodcache"
|
|
if [ ! -x "${go_root}/bin/go" ]; then
|
|
fetch -o /tmp/go.tar.gz "https://go.dev/dl/go${GO_VERSION}.freebsd-${GOARCH}.tar.gz"
|
|
rm -rf "$go_root"
|
|
mkdir -p "$cache_root"
|
|
tar -C "$cache_root" -xzf /tmp/go.tar.gz
|
|
fi
|
|
export GOCACHE="$PWD/${cache_root}/gocache"
|
|
export GOMODCACHE="$PWD/${cache_root}/gomodcache"
|
|
export PATH="$PWD/${go_root}/bin:$PATH"
|
|
go version
|
|
|
|
archive_dir="dist/${TARGET}/archive"
|
|
archive_name="CLIProxyAPI_${RELEASE_VERSION}_freebsd_${ASSET_ARCH}.tar.gz"
|
|
rm -rf "dist/${TARGET}"
|
|
mkdir -p "$archive_dir"
|
|
|
|
CGO_ENABLED=1 GOOS=freebsd GOARCH="$GOARCH" go build \
|
|
-ldflags="-s -w -X main.Version=${RELEASE_VERSION} -X main.Commit=${COMMIT} -X main.BuildDate=${BUILD_DATE}" \
|
|
-o "$archive_dir/cli-proxy-api" ./cmd/server/
|
|
|
|
cp LICENSE README.md README_CN.md config.example.yaml "$archive_dir/"
|
|
tar -C "$archive_dir" -czf "dist/$archive_name" cli-proxy-api LICENSE README.md README_CN.md config.example.yaml
|
|
- uses: actions/upload-artifact@v4
|
|
with:
|
|
name: freebsd-${{ matrix.goarch }}
|
|
path: dist/CLIProxyAPI_*
|
|
if-no-files-found: error
|
|
|
|
publish-release:
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- build-hosted
|
|
- build-freebsd
|
|
steps:
|
|
- uses: actions/download-artifact@v4
|
|
with:
|
|
path: dist
|
|
merge-multiple: true
|
|
- name: Create checksums
|
|
run: |
|
|
set -euo pipefail
|
|
cd dist
|
|
sha256sum CLIProxyAPI_* | sort -k2 > checksums.txt
|
|
- name: Publish release
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
run: |
|
|
set -euo pipefail
|
|
if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then
|
|
gh release upload "$GITHUB_REF_NAME" dist/* --clobber
|
|
else
|
|
gh release create "$GITHUB_REF_NAME" dist/* --title "$GITHUB_REF_NAME" --generate-notes
|
|
fi
|