1 #42
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build | |
on: | |
workflow_dispatch: | |
push: | |
paths-ignore: | |
- "docs/**" | |
- "README.md" | |
- ".github/ISSUE_TEMPLATE/**" | |
branches: | |
- main | |
tags: | |
- "v*" | |
pull_request_target: | |
branches: | |
- main | |
concurrency: | |
group: ${{ github.ref }}-${{ github.workflow }} | |
cancel-in-progress: true | |
env: | |
REGISTRY: docker.io | |
jobs: | |
Build: | |
permissions: write-all | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
job: | |
- { | |
type: "WithoutCGO", | |
target: "linux-amd64 linux-amd64-compatible", | |
id: "1", | |
} | |
- { | |
type: "WithoutCGO", | |
target: "linux-armv5 linux-armv6 linux-armv7", | |
id: "2", | |
} | |
- { | |
type: "WithoutCGO", | |
target: "linux-arm64 linux-mips64 linux-mips64le", | |
id: "3", | |
} | |
- { | |
type: "WithoutCGO", | |
target: "linux-mips-softfloat linux-mips-hardfloat linux-mipsle-softfloat linux-mipsle-hardfloat", | |
id: "4", | |
} | |
- { type: "WithoutCGO", target: "linux-386 linux-riscv64", id: "5" } | |
- { | |
type: "WithoutCGO", | |
target: "freebsd-386 freebsd-amd64 freebsd-arm64", | |
id: "6", | |
} | |
- { | |
type: "WithoutCGO", | |
target: "windows-amd64-compatible windows-amd64 windows-386", | |
id: "7", | |
} | |
- { | |
type: "WithoutCGO", | |
target: "windows-arm64 windows-arm32v7", | |
id: "8", | |
} | |
- { | |
type: "WithoutCGO", | |
target: "darwin-amd64 darwin-arm64 android-arm64", | |
id: "9", | |
} | |
- { type: "WithCGO", target: "windows/*", id: "1" } | |
- { type: "WithCGO", target: "linux/386", id: "2" } | |
- { type: "WithCGO", target: "linux/amd64", id: "3" } | |
- { type: "WithCGO", target: "linux/arm64,linux/riscv64", id: "4" } | |
- { type: "WithCGO", target: "linux/arm,", id: "5" } | |
- { type: "WithCGO", target: "linux/arm-6,linux/arm-7", id: "6" } | |
- { type: "WithCGO", target: "linux/mips,linux/mipsle", id: "7" } | |
- { type: "WithCGO", target: "linux/mips64", id: "8" } | |
- { type: "WithCGO", target: "linux/mips64le", id: "9" } | |
- { type: "WithCGO", target: "darwin-10.16/*", id: "10" } | |
- { type: "WithCGO", target: "android", id: "11" } | |
steps: | |
- name: Check out code into the Go module directory | |
uses: actions/checkout@v3 | |
- name: Set variables | |
run: echo "VERSION=$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set variables | |
if: ${{github.ref_name=='Alpha'}} | |
run: echo "VERSION=alpha-$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set variables | |
if: ${{github.ref_name=='Beta'}} | |
run: echo "VERSION=beta-$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set variables | |
if: ${{github.ref_name=='Meta'}} | |
run: echo "VERSION=meta-$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set variables | |
if: ${{github.ref_name=='' || github.ref_type=='tag'}} | |
run: echo "VERSION=$(git describe --tags)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set ENV | |
run: | | |
sudo timedatectl set-timezone "Asia/Shanghai" | |
echo "NAME=clash.meta" >> $GITHUB_ENV | |
echo "REPO=${{ github.repository }}" >> $GITHUB_ENV | |
echo "ShortSHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV | |
echo "BUILDTIME=$(date)" >> $GITHUB_ENV | |
echo "BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set ENV | |
run: | | |
echo "TAGS=with_gvisor,with_lwip" >> $GITHUB_ENV | |
echo "LDFLAGS=-X 'github.com/Dreamacro/clash/constant.Version=${VERSION}' -X 'github.com/Dreamacro/clash/constant.BuildTime=${BUILDTIME}' -w -s -buildid=" >> $GITHUB_ENV | |
shell: bash | |
- name: Setup Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: "1.21" | |
check-latest: true | |
- name: Test | |
if: ${{ matrix.job.id=='1' && matrix.job.type=='WithoutCGO' }} | |
run: | | |
go test ./... | |
- name: Build WithoutCGO | |
if: ${{ matrix.job.type=='WithoutCGO' }} | |
env: | |
NAME: Clash.Meta | |
BINDIR: bin | |
run: make -j$(($(nproc) + 1)) ${{ matrix.job.target }} | |
- uses: nttld/[email protected] | |
if: ${{ matrix.job.type=='WithCGO' && matrix.job.target=='android' }} | |
id: setup-ndk | |
with: | |
ndk-version: r26 | |
add-to-path: false | |
local-cache: false | |
- name: Build Android | |
if: ${{ matrix.job.type=='WithCGO' && matrix.job.target=='android' }} | |
env: | |
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} | |
run: | | |
mkdir bin | |
CC=${ANDROID_NDK_HOME}/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android33-clang | |
CGO_ENABLED=1 CC=${CC} GOARCH=arm64 GOOS=android go build -tags ${TAGS} -trimpath -ldflags "${LDFLAGS}" -o bin/${NAME}-android-arm64 | |
- name: Set up xgo | |
if: ${{ matrix.job.type=='WithCGO' && matrix.job.target!='android' }} | |
run: | | |
docker pull techknowlogick/xgo:latest | |
go install src.techknowlogick.com/xgo@latest | |
- name: Build by xgo | |
if: ${{ matrix.job.type=='WithCGO' && matrix.job.target!='android' }} | |
env: | |
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} | |
run: | | |
mkdir bin | |
xgo --targets="${{ matrix.job.target }}" --tags="${TAGS}" -ldflags="${LDFLAGS}" --out bin/${NAME} ./ | |
- name: Rename | |
if: ${{ matrix.job.type=='WithCGO' }} | |
run: | | |
cd bin | |
ls -la | |
cp ../.github/rename-cgo.sh ./ | |
bash ./rename-cgo.sh | |
rm ./rename-cgo.sh | |
ls -la | |
cd .. | |
- name: Zip | |
if: ${{ success() }} | |
run: | | |
cd bin | |
ls -la | |
chmod +x * | |
cp ../.github/release.sh ./ | |
bash ./release.sh | |
rm ./release.sh | |
ls -la | |
cd .. | |
- name: Save version | |
run: echo ${VERSION} > bin/version.txt | |
shell: bash | |
- uses: actions/upload-artifact@v3 | |
if: ${{ success() }} | |
with: | |
name: artifact | |
path: bin/ | |
Upload-Release: | |
permissions: write-all | |
if: ${{ github.ref_type=='branch' && github.ref=='refs/heads/main' }} | |
needs: [Build] | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/download-artifact@v3 | |
with: | |
name: artifact | |
path: bin/ | |
- name: Display structure of downloaded files | |
run: ls -R | |
working-directory: bin | |
- name: Upload Release | |
uses: softprops/action-gh-release@v1 | |
if: ${{ success() }} | |
with: | |
prerelease: false | |
tag_name: latest | |
files: bin/* | |
generate_release_notes: true |