diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index ad930bd0..c506bf9c 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,9 +34,9 @@ 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: @@ -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/alpha.yml b/.github/workflows/prerelease.yml similarity index 63% rename from .github/workflows/alpha.yml rename to .github/workflows/prerelease.yml index ea859c42..9a4b370a 100644 --- a/.github/workflows/alpha.yml +++ b/.github/workflows/prerelease.yml @@ -1,8 +1,15 @@ -name: alpha -on: [push] +name: prerelease +on: + push: + branches: + - Alpha + - Beta + pull_request: + branches: + - Alpha + - Beta jobs: Build: - if: ${{ !contains(github.event.head_commit.message, '[Skip CI]') }} runs-on: ubuntu-latest steps: - name: Get latest go version @@ -24,9 +31,10 @@ jobs: key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - # - name: Get dependencies, run test - # run: | - # go test ./... + - name: Test + if: ${{env.GITHUB_REF_NAME=='Beta'}} + run: | + go test ./... - name: Build if: success() env: @@ -38,34 +46,22 @@ jobs: uses: andreaswilli/delete-release-assets-action@v2.0.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} - tag: alpha + tag: ${{ env.GITHUB_REF_NAME }} deleteOnlyFromDrafts: false - name: Tag Repo uses: richardsimko/update-tag@v1 with: - tag_name: alpha + tag_name: ${{env.GITHUB_REF_NAME}} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload Alpha uses: softprops/action-gh-release@v1 - if: ${{ env.GIT_BRANCH != 'Meta' && success() }} + if: ${{ success() }} with: - tag: ${{ github.ref }} - tag_name: alpha + tag: ${{env.GITHUB_REF_NAME}} + tag_name: ${{env.GITHUB_REF_NAME}} 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/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 00000000..2b7b70a7 --- /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) } }