This repository has been archived by the owner on Dec 7, 2023. It is now read-only.
Build #17
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/**" | |
tags: | |
- "v*" | |
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", | |
} | |
# only for test | |
- { type: "WithoutCGO-GO120", target: "linux-amd64 linux-amd64-compatible",id: "1" } | |
# Go 1.20 is the last release that will run on any release of Windows 7, 8, Server 2008 and Server 2012. Go 1.21 will require at least Windows 10 or Server 2016. | |
- { type: "WithoutCGO-GO120", target: "windows-amd64-compatible windows-amd64 windows-386",id: "2" } | |
# Go 1.20 is the last release that will run on macOS 10.13 High Sierra or 10.14 Mojave. Go 1.21 will require macOS 10.15 Catalina or later. | |
- { type: "WithoutCGO-GO120", target: "darwin-amd64 darwin-arm64 android-arm64",id: "3" } | |
- { 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=='release'}} | |
run: echo "VERSION=rev-$(git rev-parse --short HEAD)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set variables | |
if: ${{github.ref_name=='dev'}} | |
run: echo "VERSION=dev-$(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.rev" >> $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/MerlinKodo/clash-rev/constant.Version=${VERSION}' -X 'github.com/MerlinKodo/clash-rev/constant.BuildTime=${BUILDTIME}' -w -s -buildid=" >> $GITHUB_ENV | |
shell: bash | |
- name: Setup Go | |
if: ${{ matrix.job.type!='WithoutCGO-GO120' }} | |
uses: actions/setup-go@v4 | |
with: | |
go-version: "1.21" | |
check-latest: true | |
- name: Setup Go | |
if: ${{ matrix.job.type=='WithoutCGO-GO120' }} | |
uses: actions/setup-go@v4 | |
with: | |
go-version: "1.20" | |
check-latest: true | |
- name: Test | |
if: ${{ matrix.job.id=='1' && matrix.job.type!='WithCGO' }} | |
run: | | |
go test ./... | |
- name: Build WithoutCGO | |
if: ${{ matrix.job.type!='WithCGO' }} | |
env: | |
NAME: Clash.Rev | |
BINDIR: bin | |
run: make -j$(($(nproc) + 1)) ${{ matrix.job.target }} | |
- uses: nttld/setup-ndk@v1 | |
if: ${{ matrix.job.type=='WithCGO' && matrix.job.target=='android' }} | |
id: setup-ndk | |
with: | |
ndk-version: r26 | |
- 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: Rename | |
if: ${{ matrix.job.type=='WithoutCGO-GO120' }} | |
run: | | |
cd bin | |
ls -la | |
cp ../.github/rename-go120.sh ./ | |
bash ./rename-go120.sh | |
rm ./rename-go120.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-Prerelease: | |
permissions: write-all | |
if: ${{ github.ref_type=='branch' && github.event_name != 'pull_request' }} | |
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: Delete current release assets | |
uses: 8Mi-Tech/delete-release-assets-action@main | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
tag: Prerelease-${{ github.ref_name }} | |
deleteOnlyFromDrafts: false | |
- name: Set Env | |
run: | | |
echo "BUILDTIME=$(TZ=Asia/Shanghai date)" >> $GITHUB_ENV | |
shell: bash | |
- name: Tag Repo | |
uses: richardsimko/update-tag@v1.0.6 | |
with: | |
tag_name: Prerelease-${{ github.ref_name }} | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- run: | | |
cat > release.txt << 'EOF' | |
Release created at ${{ env.BUILDTIME }} | |
Synchronize ${{ github.ref_name }} branch code updates, keeping only the latest version | |
<br> | |
[我应该下载哪个文件? / Which file should I download?](https://merlinkodo.github.io/Clash-Rev-Doc/startup/faq/) | |
[查看文档 / Docs](https://merlinkodo.github.io/Clash-Rev-Doc/) | |
EOF | |
- name: Upload Prerelease | |
uses: softprops/action-gh-release@v1 | |
if: ${{ success() }} | |
with: | |
tag_name: Prerelease-${{ github.ref_name }} | |
files: | | |
bin/* | |
prerelease: true | |
generate_release_notes: true | |
body_path: release.txt | |
Upload-Release: | |
permissions: write-all | |
if: ${{ github.ref_type=='tag' }} | |
needs: [Build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- 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: | |
tag_name: ${{ github.ref_name }} | |
files: bin/* | |
generate_release_notes: true | |
Docker: | |
if: ${{ github.event_name != 'pull_request' }} | |
permissions: write-all | |
needs: [Build] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- uses: actions/download-artifact@v3 | |
with: | |
name: artifact | |
path: bin/ | |
- name: Display structure of downloaded files | |
run: ls -R | |
working-directory: bin | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Setup Docker buildx | |
uses: docker/setup-buildx-action@v2 | |
with: | |
version: latest | |
# Extract metadata (tags, labels) for Docker | |
# https://github.com/docker/metadata-action | |
- name: Extract Docker metadata | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: ${{ env.REGISTRY }}/${{ secrets.DOCKERHUB_ACCOUNT }}/${{secrets.DOCKERHUB_REPO}} | |
- name: Show files | |
run: | | |
ls . | |
ls bin/ | |
- name: Log into registry | |
if: github.event_name != 'pull_request' | |
uses: docker/login-action@v2 | |
with: | |
registry: ${{ env.REGISTRY }} | |
username: ${{ secrets.DOCKER_HUB_USER }} | |
password: ${{ secrets.DOCKER_HUB_TOKEN }} | |
# Build and push Docker image with Buildx (don't push on PR) | |
# https://github.com/docker/build-push-action | |
- name: Build and push Docker image | |
id: build-and-push | |
uses: docker/build-push-action@v4 | |
with: | |
context: . | |
file: ./Dockerfile | |
push: ${{ github.event_name != 'pull_request' }} | |
platforms: | | |
linux/386 | |
linux/amd64 | |
linux/arm64/v8 | |
linux/arm/v7 | |
# linux/riscv64 | |
tags: ${{ steps.meta.outputs.tags }} | |
labels: ${{ steps.meta.outputs.labels }} |