From 4b7acb1389e9a560a21b4e71d8e62fc9b94ce2c3 Mon Sep 17 00:00:00 2001 From: Andy Hsu Date: Fri, 4 Aug 2023 19:27:14 +0800 Subject: [PATCH] feat(ci): add multiple ARM targets prebuilt (close #4243) --- .github/workflows/release_linux_musl_arm.yml | 34 ++++++++++++++ build.sh | 48 +++++++++++++++++--- 2 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/release_linux_musl_arm.yml diff --git a/.github/workflows/release_linux_musl_arm.yml b/.github/workflows/release_linux_musl_arm.yml new file mode 100644 index 00000000000..4d424507d78 --- /dev/null +++ b/.github/workflows/release_linux_musl_arm.yml @@ -0,0 +1,34 @@ +name: release_linux_musl_arm + +on: + release: + types: [ published ] + +jobs: + release_arm: + strategy: + matrix: + platform: [ ubuntu-latest ] + go-version: [ '1.20' ] + name: Release + runs-on: ${{ matrix.platform }} + steps: + + - name: Setup Go + uses: actions/setup-go@v4 + with: + go-version: ${{ matrix.go-version }} + + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - name: Build + run: | + bash build.sh release linux_musl_arm + + - name: Upload assets + uses: softprops/action-gh-release@v1 + with: + files: build/compress/* diff --git a/build.sh b/build.sh index 5640e00ee3b..7847b568eab 100644 --- a/build.sh +++ b/build.sh @@ -93,15 +93,15 @@ BuildRelease() { mkdir -p "build" muslflags="--extldflags '-static -fpic' $ldflags" BASE="https://musl.nn.ci/" - FILES=(x86_64-linux-musl-cross aarch64-linux-musl-cross arm-linux-musleabihf-cross mips-linux-musl-cross mips64-linux-musl-cross mips64el-linux-musl-cross mipsel-linux-musl-cross powerpc64le-linux-musl-cross s390x-linux-musl-cross) + FILES=(x86_64-linux-musl-cross aarch64-linux-musl-cross mips-linux-musl-cross mips64-linux-musl-cross mips64el-linux-musl-cross mipsel-linux-musl-cross powerpc64le-linux-musl-cross s390x-linux-musl-cross) for i in "${FILES[@]}"; do url="${BASE}${i}.tgz" curl -L -o "${i}.tgz" "${url}" sudo tar xf "${i}.tgz" --strip-components 1 -C /usr/local rm -f "${i}.tgz" done - OS_ARCHES=(linux-musl-amd64 linux-musl-arm64 linux-musl-arm linux-musl-mips linux-musl-mips64 linux-musl-mips64le linux-musl-mipsle linux-musl-ppc64le linux-musl-s390x) - CGO_ARGS=(x86_64-linux-musl-gcc aarch64-linux-musl-gcc arm-linux-musleabihf-gcc mips-linux-musl-gcc mips64-linux-musl-gcc mips64el-linux-musl-gcc mipsel-linux-musl-gcc powerpc64le-linux-musl-gcc s390x-linux-musl-gcc) + OS_ARCHES=(linux-musl-amd64 linux-musl-arm64 linux-musl-mips linux-musl-mips64 linux-musl-mips64le linux-musl-mipsle linux-musl-ppc64le linux-musl-s390x) + CGO_ARGS=(x86_64-linux-musl-gcc aarch64-linux-musl-gcc mips-linux-musl-gcc mips64-linux-musl-gcc mips64el-linux-musl-gcc mipsel-linux-musl-gcc powerpc64le-linux-musl-gcc s390x-linux-musl-gcc) for i in "${!OS_ARCHES[@]}"; do os_arch=${OS_ARCHES[$i]} cgo_cc=${CGO_ARGS[$i]} @@ -121,6 +121,39 @@ BuildRelease() { mv alist-* build } +BuildReleaseLinuxMuslArm() { + rm -rf .git/ + mkdir -p "build" + muslflags="--extldflags '-static -fpic' $ldflags" + BASE="https://musl.nn.ci/" +# FILES=(arm-linux-musleabi-cross arm-linux-musleabihf-cross armeb-linux-musleabi-cross armeb-linux-musleabihf-cross armel-linux-musleabi-cross armel-linux-musleabihf-cross armv5l-linux-musleabi-cross armv5l-linux-musleabihf-cross armv6-linux-musleabi-cross armv6-linux-musleabihf-cross armv7l-linux-musleabihf-cross armv7m-linux-musleabi-cross armv7r-linux-musleabihf-cross) + FILES=(arm-linux-musleabi-cross arm-linux-musleabihf-cross armel-linux-musleabi-cross armel-linux-musleabihf-cross armv5l-linux-musleabi-cross armv5l-linux-musleabihf-cross armv6-linux-musleabi-cross armv6-linux-musleabihf-cross armv7l-linux-musleabihf-cross armv7m-linux-musleabi-cross armv7r-linux-musleabihf-cross) + for i in "${FILES[@]}"; do + url="${BASE}${i}.tgz" + curl -L -o "${i}.tgz" "${url}" + sudo tar xf "${i}.tgz" --strip-components 1 -C /usr/local + rm -f "${i}.tgz" + done +# OS_ARCHES=(linux-musleabi-arm linux-musleabihf-arm linux-musleabi-armeb linux-musleabihf-armeb linux-musleabi-armel linux-musleabihf-armel linux-musleabi-armv5l linux-musleabihf-armv5l linux-musleabi-armv6 linux-musleabihf-armv6 linux-musleabihf-armv7l linux-musleabi-armv7m linux-musleabihf-armv7r) +# CGO_ARGS=(arm-linux-musleabi-gcc arm-linux-musleabihf-gcc armeb-linux-musleabi-gcc armeb-linux-musleabihf-gcc armel-linux-musleabi-gcc armel-linux-musleabihf-gcc armv5l-linux-musleabi-gcc armv5l-linux-musleabihf-gcc armv6-linux-musleabi-gcc armv6-linux-musleabihf-gcc armv7l-linux-musleabihf-gcc armv7m-linux-musleabi-gcc armv7r-linux-musleabihf-gcc) +# GOARMS=('' '' '' '' '' '' '5' '5' '6' '6' '7' '7' '7') + OS_ARCHES=(linux-musleabi-arm linux-musleabihf-arm linux-musleabi-armel linux-musleabihf-armel linux-musleabi-armv5l linux-musleabihf-armv5l linux-musleabi-armv6 linux-musleabihf-armv6 linux-musleabihf-armv7l linux-musleabi-armv7m linux-musleabihf-armv7r) + CGO_ARGS=(arm-linux-musleabi-gcc arm-linux-musleabihf-gcc armel-linux-musleabi-gcc armel-linux-musleabihf-gcc armv5l-linux-musleabi-gcc armv5l-linux-musleabihf-gcc armv6-linux-musleabi-gcc armv6-linux-musleabihf-gcc armv7l-linux-musleabihf-gcc armv7m-linux-musleabi-gcc armv7r-linux-musleabihf-gcc) + GOARMS=('' '' '' '' '5' '5' '6' '6' '7' '7' '7') + for i in "${!OS_ARCHES[@]}"; do + os_arch=${OS_ARCHES[$i]} + cgo_cc=${CGO_ARGS[$i]} + arm=${GOARMS[$i]} + echo building for ${os_arch} + export GOOS=linux + export GOARCH=arm + export CC=${cgo_cc} + export CGO_ENABLED=1 + export GOARM=${arm} + go build -o ./build/$appName-$os_arch -ldflags="$muslflags" -tags=jsoniter . + done +} + MakeRelease() { cd build mkdir compress @@ -140,8 +173,8 @@ MakeRelease() { rm -f alist.exe done cd compress - find . -type f -print0 | xargs -0 md5sum >md5.txt - cat md5.txt + find . -type f -print0 | xargs -0 md5sum >"$1" + cat "$1" cd ../.. } @@ -156,9 +189,12 @@ elif [ "$1" = "release" ]; then FetchWebRelease if [ "$2" = "docker" ]; then BuildDocker + elif [ "$2" = "linux_musl_arm" ]; then + BuildReleaseLinuxMuslArm + MakeRelease "md5-linux-musl-arm.txt" else BuildRelease - MakeRelease + MakeRelease "md5.txt" fi else echo -e "Parameter error"