From 901a74e2524cb90312d5a962086c00463f8e4071 Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Thu, 8 Sep 2022 21:22:21 +0800 Subject: [PATCH] ci: auto release --- .github/workflows/build_docker.yml | 2 +- .github/workflows/release.yml | 52 ++++++++++++++++++++ .github/workflows/release_docker.yml | 42 ++++++++++++++++ build.sh | 71 ++++++++++++++++++++++++++-- 4 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/release_docker.yml diff --git a/.github/workflows/build_docker.yml b/.github/workflows/build_docker.yml index 1edcee7c..76cf9efe 100644 --- a/.github/workflows/build_docker.yml +++ b/.github/workflows/build_docker.yml @@ -36,4 +36,4 @@ jobs: push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} - platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/arm/v6,linux/s390x \ No newline at end of file + platforms: linux/amd64,linux/arm64 \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..58753d8b --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,52 @@ +name: release + +on: + push: + tags: + - '*' + +jobs: + changelog: + name: Create Release + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - run: npx changelogithub # or changelogithub@0.12 if ensure the stable result + env: + GITHUB_TOKEN: ${{secrets.MY_TOKEN}} + release: + needs: changelog + strategy: + matrix: + platform: [ubuntu-latest] + go-version: [1.18] + name: Release + runs-on: ${{ matrix.platform }} + steps: + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: ${{ matrix.go-version }} + + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Install dependencies + run: | + docker pull techknowlogick/xgo:latest + go install src.techknowlogick.com/xgo@latest + sudo apt install upx + + - name: Build + run: | + bash build.sh release + + - name: Release + uses: softprops/action-gh-release@v1 + with: + files: alist/build/compress/* \ No newline at end of file diff --git a/.github/workflows/release_docker.yml b/.github/workflows/release_docker.yml new file mode 100644 index 00000000..6c2fcf3c --- /dev/null +++ b/.github/workflows/release_docker.yml @@ -0,0 +1,42 @@ +name: build_docker + +on: + push: + tags: + - '*' + +jobs: + build_docker: + name: Docker + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + images: xhofe/alist + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: xhofe + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v2 + with: + context: . + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/386,linux/arm/v6,linux/s390x \ No newline at end of file diff --git a/build.sh b/build.sh index 04ca99ed..cb2c01f5 100644 --- a/build.sh +++ b/build.sh @@ -32,6 +32,13 @@ FetchWebDev() { rm -rf web-dist-main web-dist-main.tar.gz } +FetchWebRelease() { + curl -L https://github.com/alist-org/web-v2/releases/latest/download/dist.tar.gz -o dist.tar.gz + tar -zxvf dist.tar.gz + mv -f dist public + rm -rf dist.tar.gz +} + BuildDev() { rm -rf .git/ xgo -targets=linux/amd64,windows/amd64,darwin/amd64 -out "$appName" -ldflags="$ldflags" -tags=jsoniter . @@ -42,13 +49,65 @@ BuildDev() { upx -9 ./alist-windows* find . -type f -print0 | xargs -0 md5sum >md5.txt cat md5.txt - cd .. || exit } BuildDocker() { go build -o ./bin/alist -ldflags="$ldflags" -tags=jsoniter . } +BuildRelease() { + rm -rf .git/ + xgo -out "$appName" -ldflags="$ldflags" -tags=jsoniter . + # why? Because some target platforms seem to have issues with upx compression + upx -9 ./alist-linux-amd64 + upx -9 ./alist-windows* + mkdir -p "build" + mv alist-* build + 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) + 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 + 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) + for i in "${!OS_ARCHES[@]}"; do + os_arch=${OS_ARCHES[$i]} + cgo_cc=${CGO_ARGS[$i]} + echo building for ${os_arch} + export GOOS=${os_arch%%-*} + export GOARCH=${os_arch##*-} + export CC=${cgo_cc} + export CGO_ENABLED=1 + go build -o ./build/$appName-$os_arch -ldflags="$ldflags" -tags=jsoniter . + done +} + +MakeRelease() { + cd build + mkdir compress + for i in $(find . -type f -name "$appName-linux-*"); do + cp "$i" alist + tar -czvf compress/"$i".tar.gz alist + rm -f alist + done + for i in $(find . -type f -name "$appName-darwin-*"); do + cp "$i" alist + tar -czvf compress/"$i".tar.gz "$i" + rm -f alist + done + for i in $(find . -type f -name "$appName-windows-*"); do + cp "$i" alist.exe + zip compress/$(echo $i | sed 's/\.[^.]*$//').zip "$i" + rm -f alist.exe + done + cd compress + find . -type f -print0 | xargs -0 md5sum >md5.txt + cat md5.txt + cd ../.. +} + if [ "$1" = "dev" ]; then FetchWebDev if [ "$2" = "docker" ]; then @@ -57,7 +116,13 @@ if [ "$1" = "dev" ]; then BuildDev fi elif [ "$1" = "release" ]; then - echo -e "To be implement" + FetchWebRelease + if [ "$2" = "docker" ]; then + BuildDocker + else + BuildRelease + MakeRelease + fi else echo -e "Parameter error" -fi \ No newline at end of file +fi