Build meta Core for ShellCrash #18
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 meta Core for ShellCrash | |
on: | |
workflow_dispatch: | |
inputs: | |
tag1: | |
description: 'project name of meta, such as MetaCubeX/mihomo' | |
required: true | |
type: string | |
tag2: | |
description: 'tag or branches of meta, such as v1.18.0 or Alpha' | |
required: true | |
type: string | |
tag3: | |
description: 'a new prerelease name (such as clash.meta.alpha) or only upload-artifact' | |
required: false | |
type: string | |
tag4: | |
description: 'git push as crashcore (such as meta) or only upload-artifact' | |
required: false | |
type: string | |
tag5: | |
description: 'build tags' | |
required: false | |
type: string | |
jobs: | |
go: | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{steps.go.outputs.version}} | |
steps: | |
- name: get latest go version | |
id: go | |
run: | | |
echo version=$(curl -s https://raw.githubusercontent.com/actions/go-versions/update-versions-manifest-file/versions-manifest.json | grep -oE '"version": "[0-9]{1}.[0-9]{1,}(.[0-9]{1,})?"' | head -1 | cut -d':' -f2 | sed 's/ //g; s/"//g') >> $GITHUB_OUTPUT | |
meta: | |
runs-on: ubuntu-latest | |
needs: go | |
env: | |
REPO: ${{ github.event.inputs.tag1 }} | |
TAGS: ${{ github.event.inputs.tag5 }} | |
outputs: | |
version: ${{steps.meta.outputs.version}} | |
tags: ${{steps.meta.outputs.tags}} | |
steps: | |
- name: setup go | |
uses: actions/[email protected] | |
with: | |
go-version: ${{needs.go.outputs.version}} | |
- name: get meta version | |
id: meta | |
run: | | |
version=${{ github.event.inputs.tag2 }} | |
echo version=$version >> $GITHUB_OUTPUT | |
if [ -z "$TAGS" ];then | |
echo tags='' >> $GITHUB_OUTPUT | |
else | |
echo tags=$TAGS >> $GITHUB_OUTPUT | |
fi | |
cross: | |
strategy: | |
matrix: | |
include: | |
# linux | |
- name: linux-amd64 | |
goos: linux | |
goarch: amd64 | |
goamd64: v1 | |
- name: linux-386 | |
goos: linux | |
goarch: 386 | |
- name: linux-arm64 | |
goos: linux | |
goarch: arm64 | |
- name: linux-armv5 | |
goos: linux | |
goarch: arm | |
goarm: 5 | |
- name: linux-armv7 | |
goos: linux | |
goarch: arm | |
goarm: 7 | |
- name: linux-mips-softfloat | |
goos: linux | |
goarch: mips | |
gomips: softfloat | |
- name: linux-mipsle-softfloat | |
goos: linux | |
goarch: mipsle | |
gomips: softfloat | |
- name: linux-mipsle-hardfloat | |
goos: linux | |
goarch: mipsle | |
gomips: hardfloat | |
fail-fast: false | |
runs-on: ubuntu-latest | |
needs: | |
- go | |
- meta | |
env: | |
GOOS: ${{ matrix.goos }} | |
GOARCH: ${{ matrix.goarch }} | |
GOAMD64: ${{ matrix.goamd64 }} | |
GOARM: ${{ matrix.goarm }} | |
GOMIPS: ${{ matrix.gomips }} | |
CGO_ENABLED: 0 | |
TAGS: ${{needs.meta.outputs.tags}} | |
VERSION: ${{needs.meta.outputs.version}} | |
steps: | |
- name: Checkout meta | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 | |
with: | |
repository: ${{ github.event.inputs.tag1 }} | |
ref: ${{ github.event.inputs.tag2 }} | |
fetch-depth: 1 | |
- name: Setup Go | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ${{needs.go.outputs.version}} | |
- name: Set ENV | |
run: | | |
sudo timedatectl set-timezone "Asia/Shanghai" | |
echo "BUILDTIME=$(date)" >> $GITHUB_ENV | |
shell: bash | |
- name: build core | |
id: build | |
run: go build -v -trimpath -ldflags "-X 'github.com/metacubex/mihomo/constant.Version=${VERSION}' -X 'github.com/metacubex/mihomo/constant.BuildTime=${BUILDTIME}' -s -w -buildid=" -tags "${TAGS}" -o meta | |
- name: Upload file to workspace | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ matrix.name }} | |
path: meta | |
push_to_git: | |
needs: | |
- cross | |
- meta | |
runs-on: ubuntu-latest | |
env: | |
RELEASE: ${{ github.event.inputs.tag3 }} | |
PUSHDIR: ${{ github.event.inputs.tag4 }} | |
VERSION: ${{needs.meta.outputs.version}} | |
steps: | |
- name: Checkout ShellCrash | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4 | |
with: | |
fetch-depth: 1 | |
- name: Download file from workspace | |
uses: actions/download-artifact@v4 | |
with: | |
path: ./tmp | |
- name: Zip core by tar | |
run: | | |
for arch in amd64 armv5 armv7 arm64 mips-softfloat mipsle-hardfloat mipsle-softfloat;do | |
mv -f ./tmp/linux-${arch}/meta ./tmp/CrashCore | |
chmod +x ./tmp/CrashCore | |
tar --no-same-owner -zcvf ./tmp/clash-linux-${arch}.tar.gz -C ./tmp CrashCore | |
done | |
- name: Commit and push | |
if: ${{ env.PUSHDIR != '' }} | |
run: | | |
crashcore='meta' | |
mkdir -p ./bin/${crashcore} | |
rm -fr ./bin/${crashcore}/* | |
mv -f ./tmp/clash-linux-*.tar.gz ./bin/${crashcore}/ | |
rm -fr ./tmp | |
sed -i "s/${crashcore}_v=.*/${crashcore}_v=${VERSION}/" ./bin/version | |
git config --global user.email "github-actions[bot]@users.noreply.github.com" && git config --global user.name "github-actions[bot]" | |
git add . && git commit -m "更新${crashcore}内核至${VERSION}" || exit 0 | |
git push | |
- name: Create Release and Upload Release Asset | |
if: ${{ env.RELEASE != '' && env.PUSHDIR == '' }} | |
uses: softprops/action-gh-release@v1 | |
with: | |
tag_name: ${{ github.event.inputs.tag3 }} | |
name: ${{ github.event.inputs.tag3 }} | |
body: "The ${{env.VERSION}} version of ${{ github.event.inputs.tag1 }} \n这是${{ github.event.inputs.tag1 }}的${{env.VERSION}}版本内核文件\nhttps://github.com/${{ github.event.inputs.tag1 }}/releases \nOnly support for ShellCrash\n仅适配ShellCrash项目" | |
draft: false | |
prerelease: true | |
files: | | |
./tmp/clash*.tar.gz | |
- name: Cleanup Workflow | |
uses: Mattraks/delete-workflow-runs@main | |
with: | |
retain_days: 1 | |
keep_minimum_runs: 2 |