From 032b6a2cc55278c2fe8eee903e754bebb16259cf Mon Sep 17 00:00:00 2001 From: Skyxim Date: Mon, 2 May 2022 00:59:41 +0800 Subject: [PATCH] chore: workflow --- .github/workflows/alpha.yml | 33 ++++------ .github/workflows/beta.yaml | 64 +++++++++++++++++++ .github/workflows/docker.yaml | 21 +++--- .github/workflows/release.yaml | 44 +++++++++++++ Dockerfile | 31 +++------ Makefile | 13 +++- listener/tun/ipstack/system/mars/nat/nat.go | 2 +- .../system/mars/tcpip/tcpip_arm64_test.go | 4 +- 8 files changed, 155 insertions(+), 57 deletions(-) create mode 100644 .github/workflows/beta.yaml create mode 100644 .github/workflows/release.yaml diff --git a/.github/workflows/alpha.yml b/.github/workflows/alpha.yml index ea859c42..ed245f94 100644 --- a/.github/workflows/alpha.yml +++ b/.github/workflows/alpha.yml @@ -1,8 +1,13 @@ -name: alpha -on: [push] +name: Alpha +on: + push: + branches: + - Alpha + pull_request: + branches: + - Alpha jobs: Build: - if: ${{ !contains(github.event.head_commit.message, '[Skip CI]') }} runs-on: ubuntu-latest steps: - name: Get latest go version @@ -24,9 +29,7 @@ jobs: key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - # - name: Get dependencies, run test - # run: | - # go test ./... + - name: Build if: success() env: @@ -50,22 +53,10 @@ jobs: - name: Upload Alpha uses: softprops/action-gh-release@v1 - if: ${{ env.GIT_BRANCH != 'Meta' && success() }} + if: ${{ success() }} with: - tag: ${{ github.ref }} + tag: ${{env.GITHUB_REF_NAME}} tag_name: alpha files: bin/* prerelease: true - -# - name: send telegram message on push -# uses: appleboy/telegram-action@master -# with: -# to: ${{ secrets.TTELEGRAM_CHAT_ID }} -# token: ${{ secrets.TELEGRAM_TOKEN }} -# message: | -# ${{ github.actor }} created commit: -# Commit message: ${{ github.event.commits[0].message }} -# -# Repository: ${{ github.repository }} -# -# See changes: https://github.com/${{ github.repository }}/commit/${{github.sha}} \ No newline at end of file + generate_release_notes: true diff --git a/.github/workflows/beta.yaml b/.github/workflows/beta.yaml new file mode 100644 index 00000000..fabab86f --- /dev/null +++ b/.github/workflows/beta.yaml @@ -0,0 +1,64 @@ +name: Beta +on: + push: + branches: + - Beta + pull_request: + branches: + - Beta +jobs: + Build: + runs-on: ubuntu-latest + steps: + - name: Get latest go version + id: version + run: | + echo ::set-output name=go_version::$(curl -s https://raw.githubusercontent.com/actions/go-versions/main/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') + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: ${{ steps.version.outputs.go_version }} + + - name: Check out code into the Go module directory + uses: actions/checkout@v3 + + - name: Cache go module + uses: actions/cache@v2 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + - name: Test + run: | + go test ./... + - name: Build + if: success() + env: + NAME: Clash.Meta + BINDIR: bin + run: make -j releases + + - name: Delete current release assets + uses: andreaswilli/delete-release-assets-action@v2.0.0 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + tag: beta + deleteOnlyFromDrafts: false + + - name: Tag Repo + uses: richardsimko/update-tag@v1 + with: + tag_name: beta + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload Alpha + uses: softprops/action-gh-release@v1 + if: ${{ success() }} + with: + tag: ${{env.GITHUB_REF_NAME}} + tag_name: beta + files: bin/* + prerelease: true + generate_release_notes: true diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index ad930bd0..e02d5d01 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -1,11 +1,13 @@ name: Docker -on: [push] - +on: + push: + branches: + - Beta + tags: + - "v*" env: REGISTRY: docker.io - IMAGE_NAME: '{{ env.DOCKERHUB_ACCOUNT }}/{{ env.DOCKERHUB_REPO }}' - jobs: build: runs-on: ubuntu-latest @@ -23,6 +25,8 @@ jobs: - name: Setup Docker buildx uses: docker/setup-buildx-action@v1 + with: + version: latest # Extract metadata (tags, labels) for Docker # https://github.com/docker/metadata-action @@ -30,15 +34,15 @@ jobs: id: meta uses: docker/metadata-action@v3 with: - images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + images: ${{ env.REGISTRY }}/${{ secrets.DOCKERHUB_ACCOUNT }}/${{secrets.DOCKERHUB_REPO}} - - name: Log into registry ${{ env.REGISTRY }} + - name: Log into registry if: github.event_name != 'pull_request' uses: docker/login-action@v1 with: registry: ${{ env.REGISTRY }} - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} + 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 @@ -47,6 +51,7 @@ jobs: uses: docker/build-push-action@v2 with: context: . + file: ./Dockerfile push: ${{ github.event_name != 'pull_request' }} platforms: | linux/386 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..45d0841f --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,44 @@ +name: Release +on: + push: + tags: + - "v*" +jobs: + Build: + runs-on: ubuntu-latest + steps: + - name: Get latest go version + id: version + run: | + echo ::set-output name=go_version::$(curl -s https://raw.githubusercontent.com/actions/go-versions/main/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') + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: ${{ steps.version.outputs.go_version }} + + - name: Check out code into the Go module directory + uses: actions/checkout@v3 + - name: Cache go module + uses: actions/cache@v2 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + - name: Test + run: | + go test ./... + - name: Build + if: success() + env: + NAME: Clash.Meta + BINDIR: bin + run: make -j releases + + - name: Upload Release + uses: softprops/action-gh-release@v1 + if: ${{ success() && startsWith(github.ref, 'refs/tags/')}} + with: + tag: ${{ github.ref }} + files: bin/* + generate_release_notes: true diff --git a/Dockerfile b/Dockerfile index 498fbd44..44dc3b52 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,41 +1,26 @@ FROM golang:alpine as builder -ARG TARGETOS -ARG TARGETARCH - RUN apk add --no-cache make git && \ mkdir /clash-config && \ wget -O /clash-config/Country.mmdb https://raw.githubusercontent.com/Loyalsoldier/geoip/release/Country.mmdb && \ wget -O /clash-config/geosite.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geosite.dat && \ wget -O /clash-config/geoip.dat https://github.com/Loyalsoldier/v2ray-rules-dat/releases/latest/download/geoip.dat -WORKDIR /clash-src + COPY . /clash-src -RUN go mod download -RUN /bin/ash -c 'set -ex && \ - if [ "$TARGETARCH" == "amd64" ]; then \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GOAMD64=v1 make docker && \ - mv ./bin/Clash.Meta-docker ./bin/clash-amd64v1 && \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GOAMD64=v2 make docker && \ - mv ./bin/Clash.Meta-docker ./bin/clash-amd64v2 && \ - GOOS=$TARGETOS GOARCH=$TARGETARCH GOAMD64=v3 make docker && \ - mv ./bin/Clash.Meta-docker ./bin/clash-amd64v3 && \ - ln -s clash-amd64v3 ./bin/clash-amd64v4 && \ - mv check_amd64.sh ./bin/ && \ - printf "#!/bin/sh\\nsh ./check_amd64.sh\\nexec ./clash-amd64v\$? \$@" > ./bin/clash && \ - chmod +x ./bin/check_amd64.sh ./bin/clash; \ - else \ - GOOS=$TARGETOS GOARCH=$TARGETARCH make docker && \ - mv ./bin/Clash.Meta-docker ./bin/clash; \ - fi' +WORKDIR /clash-src +RUN go mod download &&\ + make docker &&\ + mv ./bin/Clash.Meta-docker /clash + FROM alpine:latest LABEL org.opencontainers.image.source="https://github.com/MetaCubeX/Clash.Meta" RUN apk add --no-cache ca-certificates tzdata VOLUME ["/root/.config/clash/"] -EXPOSE 7890/tcp COPY --from=builder /clash-config/ /root/.config/clash/ -COPY --from=builder /clash-src/bin/ / +COPY --from=builder /clash /clash +RUN chmod +x /clash ENTRYPOINT [ "/clash" ] \ No newline at end of file diff --git a/Makefile b/Makefile index 365ecf35..edb5be99 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,16 @@ NAME=Clash.Meta BINDIR=bin -BRANCH=$(shell git rev-parse --abbrev-ref HEAD) +BRANCH=$(shell git branch --show-current) +ifeq ($(BRANCH),Alpha) VERSION=alpha-$(shell git rev-parse --short HEAD) +else ifeq ($(BRANCH),Beta) +VERSION=beta-$(shell git rev-parse --short HEAD) +else ifeq ($(BRANCH),HEAD) +VERSION=$(shell git describe --tags) +else +VERSION=unknown +endif + BUILDTIME=$(shell date -u) GOBUILD=CGO_ENABLED=0 go build -trimpath -ldflags '-X "github.com/Dreamacro/clash/constant.Version=$(VERSION)" \ -X "github.com/Dreamacro/clash/constant.BuildTime=$(BUILDTIME)" \ @@ -43,7 +52,7 @@ all:linux-amd64 linux-arm64\ windows-amd64 windows-arm64\ docker: - $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ + GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ darwin-amd64v3: GOARCH=amd64 GOOS=darwin GOAMD64=v3 $(GOBUILD) -o $(BINDIR)/$(NAME)-$@ diff --git a/listener/tun/ipstack/system/mars/nat/nat.go b/listener/tun/ipstack/system/mars/nat/nat.go index 6b809bb2..7954ace1 100644 --- a/listener/tun/ipstack/system/mars/nat/nat.go +++ b/listener/tun/ipstack/system/mars/nat/nat.go @@ -44,7 +44,7 @@ func Start(device io.ReadWriter, gateway, portal, broadcast netip.Addr) (*TCP, * for { n, err := device.Read(buf) if err != nil { - log.Warnln("system error:%s", err.Error()) + log.Errorf("system error:%s", err.Error()) return } diff --git a/listener/tun/ipstack/system/mars/tcpip/tcpip_arm64_test.go b/listener/tun/ipstack/system/mars/tcpip/tcpip_arm64_test.go index 131a8266..20a89095 100644 --- a/listener/tun/ipstack/system/mars/tcpip/tcpip_arm64_test.go +++ b/listener/tun/ipstack/system/mars/tcpip/tcpip_arm64_test.go @@ -22,7 +22,7 @@ func Test_SumNeon(t *testing.T) { } compat := SumCompat(bytes[:size]) - neon := sumNeon(bytes[:size]) + neon := SumNeon(bytes[:size]) if compat != neon { t.Errorf("Sum of length=%d mismatched", size) @@ -46,6 +46,6 @@ func Benchmark_SumNeon(b *testing.B) { b.ResetTimer() for i := 0; i < b.N; i++ { - sumNeon(bytes) + SumNeon(bytes) } }