1 #90
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: | |
- Alpha | |
tags: | |
- "v*" | |
pull_request_target: | |
branches: | |
- Alpha | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.ref }} | |
cancel-in-progress: true | |
env: | |
REGISTRY: docker.io | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
jobs: | |
# - { goos: darwin, goarch: arm64, output: arm64 } | |
# - { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-compatible } | |
# - { goos: darwin, goarch: amd64, goamd64: v3, output: amd64 } | |
# - { goos: linux, goarch: '386', output: '386' } | |
# - { goos: linux, goarch: amd64, goamd64: v1, output: amd64-compatible } | |
# - { goos: linux, goarch: amd64, goamd64: v3, output: amd64 } | |
# - { goos: linux, goarch: arm64, output: arm64 } | |
# - { goos: linux, goarch: arm, goarm: '7', output: armv7 } | |
# - { goos: linux, goarch: mips, mips: hardfloat, output: mips-hardfloat } | |
# - { goos: linux, goarch: mips, mips: softfloat, output: mips-softfloat } | |
# - { goos: linux, goarch: mipsle, mips: hardfloat, output: mipsle-hardfloat } | |
# - { goos: linux, goarch: mipsle, mips: softfloat, output: mipsle-softfloat } | |
# - { goos: linux, goarch: mips64, output: mips64 } | |
# - { goos: linux, goarch: mips64le, output: mips64le } | |
- { goos: linux, goarch: loong64, output: loong64-abi1, abi: '1' } | |
# - { goos: linux, goarch: loong64, output: loong64-abi2, abi: '2' } | |
# - { goos: linux, goarch: riscv64, output: riscv64 } | |
# - { goos: linux, goarch: s390x, output: s390x } | |
# - { goos: windows, goarch: '386', output: '386' } | |
# - { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible } | |
# - { goos: windows, goarch: amd64, goamd64: v3, output: amd64 } | |
# - { goos: windows, goarch: arm, goarm: '7', output: armv7 } | |
# - { goos: windows, goarch: arm64, output: arm64 } | |
# - { goos: freebsd, goarch: '386', output: '386' } | |
# - { goos: freebsd, goarch: amd64, goamd64: v1, output: amd64-compatible } | |
# - { goos: freebsd, goarch: amd64, goamd64: v3, output: amd64 } | |
# - { goos: freebsd, goarch: arm64, output: arm64 } | |
# - { goos: android, goarch: '386', ndk: i686-linux-android34, output: '386' } | |
# - { goos: android, goarch: amd64, ndk: x86_64-linux-android34, output: amd64 } | |
# - { goos: android, goarch: arm, ndk: armv7a-linux-androideabi34, output: armv7 } | |
# - { goos: android, goarch: arm64, ndk: aarch64-linux-android34, output: arm64-v8 } | |
# - { goos: windows, goarch: '386', output: '386-go120', version: 20 } | |
# - { goos: windows, goarch: amd64, goamd64: v1, output: amd64-compatible-go120, version: 20 } | |
# - { goos: windows, goarch: amd64, goamd64: v3, output: amd64-go120, version: 20 } | |
# - { goos: darwin, goarch: arm64, output: arm64-go120, version: 20 } | |
# - { goos: darwin, goarch: amd64, goamd64: v1, output: amd64-compatible-go120, version: 20 } | |
# - { goos: darwin, goarch: amd64, goamd64: v3, output: amd64-go120, version: 20 } | |
# - { goos: linux, goarch: '386', output: '386-go120', version: 20 } | |
# - { goos: linux, goarch: amd64, goamd64: v1, output: amd64-compatible-go120, version: 20 } | |
# - { goos: linux, goarch: amd64, goamd64: v3, output: amd64-go120, version: 20 } | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Go1.22 | |
if: ${{ matrix.jobs.version != '20' && matrix.jobs.goarch != 'loong64' }} | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ^1.22 | |
- name: Set up Go1.20 | |
if: ${{ matrix.jobs.version == '20' && matrix.jobs.goarch != 'loong64' }} | |
uses: actions/setup-go@v5 | |
with: | |
go-version: ^1.20 | |
- name: Set up Go1.21 loongarch abi1 | |
if: ${{ matrix.jobs.goarch == 'loong64' && matrix.jobs.abi == '1' }} | |
run: | | |
wget -q https://github.com/xishang0128/loongarch64-golang/releases/download/1.21.5/go1.21.5.linux-amd64-abi1.tar.gz | |
ls | |
echo test11111 | |
ls /usr | |
tar xf go1.21.5.linux-amd64-abi1.tar.gz -C /usr/local/ | |
export PATH=$PATH:/usr/local/go/bin | |
go version | |
- name: Set up Go1.21 loongarch abi2 | |
if: ${{ matrix.jobs.goarch == 'loong64' && matrix.jobs.abi == '2' }} | |
run: | | |
wget -q https://github.com/xishang0128/loongarch64-golang/releases/download/1.21.5/go1.21.5.linux-amd64-abi2.tar.gz | |
tar zxf go1.21.5.linux-amd64-abi2.tar.gz -C /usr/local/ | |
export PATH=$PATH:/usr/local/go/bin | |
- 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=='' || github.ref_type=='tag'}} | |
run: echo "VERSION=$(git describe --tags)" >> $GITHUB_ENV | |
shell: bash | |
- name: Set Time Variable | |
run: | | |
echo "BUILDTIME=$(date)" >> $GITHUB_ENV | |
echo "CGO_ENABLED=0" >> $GITHUB_ENV | |
echo "BUILDTAG=-extldflags --static" >> $GITHUB_ENV | |
- name: Setup NDK | |
if: ${{ matrix.jobs.goos == 'android' }} | |
uses: nttld/setup-ndk@v1 | |
id: setup-ndk | |
with: | |
ndk-version: r26c | |
- name: Set NDK path | |
if: ${{ matrix.jobs.goos == 'android' }} | |
run: | | |
echo "CC=${{steps.setup-ndk.outputs.ndk-path}}/toolchains/llvm/prebuilt/linux-x86_64/bin/${{matrix.jobs.ndk}}-clang" >> $GITHUB_ENV | |
echo "CGO_ENABLED=1" >> $GITHUB_ENV | |
echo "BUILDTAG=" >> $GITHUB_ENV | |
# - name: build core | |
# env: | |
# GOOS: ${{matrix.jobs.goos}} | |
# GOARCH: ${{matrix.jobs.goarch}} | |
# GOAMD64: ${{matrix.jobs.goamd64}} | |
# GOARM: ${{matrix.jobs.arm}} | |
# GOMIPS: ${{matrix.jobs.mips}} | |
# run: | | |
# echo $CGO_ENABLED | |
# go build -v -tags "with_gvisor" -trimpath -ldflags "${BUILDTAG} -X 'github.com/metacubex/mihomo/constant.Version=${VERSION}' -X 'github.com/metacubex/mihomo/constant.BuildTime=${BUILDTIME}' -w -s -buildid=" | |
# if [ "${{matrix.jobs.goos}}" = "windows" ]; then | |
# cp mihomo.exe mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}.exe | |
# zip -r mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}.zip mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}.exe | |
# else | |
# cp mihomo mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}} | |
# gzip -c mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}} > mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}.gz | |
# rm mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}} | |
# fi | |
# - name: Create DEB package | |
# if: ${{ matrix.jobs.goos == 'linux' && !contains(matrix.jobs.goarch, 'mips') }} | |
# run: | | |
# sudo apt-get install dpkg | |
# if [ "${{matrix.jobs.goarch}}" = "loong64" ]; then | |
# ARCH=loongarch64 | |
# else | |
# ARCH=${{matrix.jobs.goarch}} | |
# fi | |
# mkdir -p mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/DEBIAN | |
# mkdir -p mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/usr/bin | |
# mkdir -p mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/etc/mihomo | |
# mkdir -p mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/etc/systemd/system/ | |
# mkdir -p mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/usr/share/licenses/mihomo | |
# cp mihomo mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/usr/bin/mihomo | |
# cp LICENSE mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/usr/share/licenses/mihomo/ | |
# cp .github/mihomo.service mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/etc/systemd/system/ | |
# cat > mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/etc/mihomo/config.yaml <<EOF | |
# mixed-port: 7890 | |
# external-controller: 127.0.0.1:9090 | |
# EOF | |
# cat > mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}/DEBIAN/control <<EOF | |
# Package: mihomo | |
# Version: 1.18.2-${VERSION} | |
# Section: | |
# Priority: extra | |
# Architecture: ${ARCH} | |
# Maintainer: MetaCubeX <[email protected]> | |
# Homepage: https://wiki.metacubex.one/ | |
# Description: The universal proxy platform. | |
# EOF | |
# dpkg-deb -Z gzip --build mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION} | |
# - name: Convert DEB to RPM | |
# if: ${{ matrix.jobs.goos == 'linux' && !contains(matrix.jobs.goarch, 'mips') }} | |
# run: | | |
# sudo apt-get install -y alien | |
# alien --to-rpm --scripts mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}.deb | |
# mv mihomo*.rpm mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}.rpm | |
# - name: Convert DEB to PKG | |
# if: ${{ matrix.jobs.goos == 'linux' && !contains(matrix.jobs.goarch, 'mips') && !contains(matrix.jobs.goarch, 'loong') }} | |
# run: | | |
# docker pull archlinux | |
# docker run --rm -v ./:/mnt archlinux bash -c " | |
# pacman -Syu pkgfile base-devel --noconfirm | |
# curl -L https://github.com/helixarch/debtap/raw/master/debtap > /usr/bin/debtap | |
# chmod 755 /usr/bin/debtap | |
# debtap -u | |
# debtap -Q /mnt/mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}.deb | |
# " | |
# mv mihomo*.pkg.tar.zst mihomo-${{matrix.jobs.goos}}-${{matrix.jobs.output}}-${VERSION}.pkg.tar.zst | |
# - name: Save version | |
# run: | | |
# echo ${VERSION} > version.txt | |
# shell: bash | |
# - name: Archive production artifacts | |
# uses: actions/upload-artifact@v4 | |
# with: | |
# name: ${{ matrix.jobs.goos }}-${{ matrix.jobs.output }} | |
# path: | | |
# mihomo*.gz | |
# mihomo*.deb | |
# mihomo*.rpm | |
# mihomo*.pkg.tar.zst | |
# mihomo*.zip | |
# version.txt | |
# Upload-Prerelease: | |
# permissions: write-all | |
# if: ${{ github.ref_type == 'branch' && !startsWith(github.event_name, 'pull_request') }} | |
# needs: [build] | |
# runs-on: ubuntu-latest | |
# steps: | |
# - name: Download all workflow run artifacts | |
# uses: actions/download-artifact@v4 | |
# with: | |
# path: bin/ | |
# merge-multiple: true | |
# - 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 | |
# 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://github.com/MetaCubeX/mihomo/wiki/FAQ) | |
# [二进制文件筛选 / Binary file selector](https://metacubex.github.io/Meta-Docs/startup/#_1) | |
# [查看文档 / Docs](https://metacubex.github.io/Meta-Docs/) | |
# 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@v4 | |
# with: | |
# fetch-depth: 0 | |
# - name: Get tags | |
# run: | | |
# echo "CURRENTVERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV | |
# git fetch --tags | |
# echo "PREVERSION=$(git describe --tags --abbrev=0 HEAD^)" >> $GITHUB_ENV | |
# - name: Generate release notes | |
# run: | | |
# cp ./.github/genReleaseNote.sh ./ | |
# bash ./genReleaseNote.sh -v ${PREVERSION}...${CURRENTVERSION} | |
# rm ./genReleaseNote.sh | |
# - uses: actions/download-artifact@v4 | |
# with: | |
# path: bin/ | |
# merge-multiple: true | |
# - 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 | |
# body_path: release.md | |