diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml deleted file mode 100644 index fc05376f..00000000 --- a/.github/workflows/docker.yaml +++ /dev/null @@ -1,65 +0,0 @@ -name: Docker - -on: - push: - paths-ignore: - - 'docs/**' - - 'README.md' - branches: - - Beta - - Alpha - tags: - - "v*" -env: - REGISTRY: docker.io -jobs: - build: - runs-on: ubuntu-latest - permissions: - contents: read - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - - - 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 - - name: Extract Docker metadata - id: meta - uses: docker/metadata-action@v3 - with: - images: ${{ env.REGISTRY }}/${{ secrets.DOCKERHUB_ACCOUNT }}/${{secrets.DOCKERHUB_REPO}} - - - name: Log into registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v1 - with: - registry: ${{ env.REGISTRY }} - 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 - - name: Build and push Docker image - id: build-and-push - uses: docker/build-push-action@v2 - with: - context: . - file: ./Dockerfile - push: ${{ github.event_name != 'pull_request' }} - platforms: | - linux/386 - linux/amd64 - linux/arm64/v8 - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/.github/workflows/prerelease.yml b/.github/workflows/prerelease.yml index 41558baf..5d1e0e25 100644 --- a/.github/workflows/prerelease.yml +++ b/.github/workflows/prerelease.yml @@ -3,8 +3,8 @@ on: workflow_dispatch: push: paths-ignore: - - 'docs/**' - - 'README.md' + - "docs/**" + - "README.md" branches: - Alpha - Beta @@ -12,6 +12,8 @@ on: branches: - Alpha - Beta +env: + REGISTRY: docker.io jobs: Build: permissions: write-all @@ -20,18 +22,54 @@ jobs: fail-fast: false matrix: job: - - { type: "WithoutCGO", target: "linux-amd64 linux-amd64-compatible", id: "1" } - - { type: "WithoutCGO", target: "linux-armv5 linux-armv6 linux-armv7", id: "2" } - - { type: "WithoutCGO", target: "linux-arm64 linux-mips64 linux-mips64le", id: "3" } - - { type: "WithoutCGO", target: "linux-mips-softfloat linux-mips-hardfloat linux-mipsle-softfloat linux-mipsle-hardfloat", id: "4" } - - { type: "WithoutCGO", target: "freebsd-386 freebsd-amd64 freebsd-arm64", id: "5" } - - { type: "WithoutCGO", target: "windows-amd64-compatible windows-amd64 windows-386", id: "6" } - - { type: "WithoutCGO", target: "windows-arm64 windows-arm32v7", id: "7" } - - { type: "WithoutCGO", target: "darwin-amd64 darwin-arm64 android-arm64", id: "8" } + - { + type: "WithoutCGO", + target: "linux-amd64 linux-amd64-compatible", + id: "1", + } + - { + type: "WithoutCGO", + target: "linux-armv5 linux-armv6 linux-armv7", + id: "2", + } + - { + type: "WithoutCGO", + target: "linux-arm64 linux-mips64 linux-mips64le", + id: "3", + } + - { + type: "WithoutCGO", + target: "linux-mips-softfloat linux-mips-hardfloat linux-mipsle-softfloat linux-mipsle-hardfloat", + id: "4", + } + - { + type: "WithoutCGO", + target: "freebsd-386 freebsd-amd64 freebsd-arm64", + id: "5", + } + - { + type: "WithoutCGO", + target: "windows-amd64-compatible windows-amd64 windows-386", + id: "6", + } + - { + type: "WithoutCGO", + target: "windows-arm64 windows-arm32v7", + id: "7", + } + - { + type: "WithoutCGO", + target: "darwin-amd64 darwin-arm64 android-arm64", + id: "8", + } - { type: "WithCGO", target: "windows/*", id: "1" } - { type: "WithCGO", target: "linux/386,linux/amd64", id: "2" } - { type: "WithCGO", target: "linux/arm64,linux/riscv64", id: "3" } - - { type: "WithCGO", target: "linux/arm,linux/arm-6,linux/arm-7", id: "4" } + - { + type: "WithCGO", + target: "linux/arm,linux/arm-6,linux/arm-7", + id: "4", + } - { type: "WithCGO", target: "linux/mips,linux/mipsle", id: "5" } - { type: "WithCGO", target: "linux/mips64,linux/mips64le", id: "6" } - { type: "WithCGO", target: "darwin-10.16/*", id: "7" } @@ -77,7 +115,7 @@ jobs: - name: Setup Go uses: actions/setup-go@v3 with: - go-version: '1.19' + go-version: "1.19" check-latest: true - name: Test @@ -152,10 +190,9 @@ jobs: name: artifact path: bin/ - Upload: permissions: write-all - needs: [ Build ] + needs: [Build] runs-on: ubuntu-latest steps: - uses: actions/download-artifact@v3 @@ -190,3 +227,64 @@ jobs: files: bin/* prerelease: true generate_release_notes: true + Docker: + permissions: write-all + needs: [Build] + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v3 + with: + fetch-depth: 0 + + - uses: actions/download-artifact@v3 + with: + name: artifact + path: bin/ + + - name: Display structure of downloaded files + run: ls -R + working-directory: bin + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + + - 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 + - name: Extract Docker metadata + id: meta + uses: docker/metadata-action@v3 + with: + images: ${{ env.REGISTRY }}/${{ secrets.DOCKERHUB_ACCOUNT }}/${{secrets.DOCKERHUB_REPO}} + - name: Show files + run: | + ls . + ls bin/ + - name: Log into registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v1 + with: + registry: ${{ env.REGISTRY }} + 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 + - name: Build and push Docker image + id: build-and-push + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + push: ${{ github.event_name != 'pull_request' }} + platforms: | + linux/386 + linux/amd64 + linux/arm64/v8 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 10f961a3..9c2e44c7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,18 +1,17 @@ -FROM golang:alpine as builder +FROM alpine:latest as builder -RUN apk add --no-cache make git && \ +RUN apk add --no-cache gzip && \ 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 - -COPY . /clash-src -WORKDIR /clash-src -RUN go mod download &&\ - make docker &&\ - mv ./bin/clash.meta-docker /clash - +COPY docker/file-name.sh /clash/file-name.sh +WORKDIR /clash +COPY bin/ bin/ +RUN FILE_NAME=`sh file-name.sh` && echo $FILE_NAME && \ + FILE_NAME=`ls bin/ | egrep "$FILE_NAME.*"|awk NR==1` && \ + mv bin/$FILE_NAME clash.gz && gzip -d clash.gz && echo "$FILE_NAME" > /clash-config/test FROM alpine:latest LABEL org.opencontainers.image.source="https://github.com/MetaCubeX/Clash.Meta" @@ -21,6 +20,6 @@ RUN apk add --no-cache ca-certificates tzdata iptables VOLUME ["/root/.config/clash/"] COPY --from=builder /clash-config/ /root/.config/clash/ -COPY --from=builder /clash /clash +COPY --from=builder /clash/clash /clash RUN chmod +x /clash ENTRYPOINT [ "/clash" ] diff --git a/docker/file-name.sh b/docker/file-name.sh new file mode 100644 index 00000000..fb87cad0 --- /dev/null +++ b/docker/file-name.sh @@ -0,0 +1,26 @@ +#!/bin/sh +os="clash.meta-linux-" +arch=`uname -m` +case $arch in + "x86_64") + arch="amd64-compatible" + ;; + "x86") + arch="386-cgo" + ;; + "aarch64") + arch="arm64" + ;; + "armv7l") + arch="armv7" + ;; + "riscv64") + arch="riscv64-cgo" + ;; + *) + echo "Unknown architecture" + exit 1 + ;; +esac +file_name="$os$arch" +echo $file_name \ No newline at end of file