diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 00000000..047c3767 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,43 @@ +name: Build Docker Images +on: + push: + tags: + - v* + workflow_dispatch: + inputs: + tag: + description: "The tag version you want to build" +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + - name: Docker metadata + id: metadata + uses: docker/metadata-action@v3 + with: + images: ghcr.io/sagernet/sing-box + - name: Get tag to build + id: tag + run: | + if [[ -z "${{ github.event.inputs.tag }}" ]]; then + echo ::set-output name=tag::ghcr.io/sagernet/sing-box:${{ github.ref_name }} + else + echo ::set-output name=tag::ghcr.io/sagernet/sing-box:${{ github.event.inputs.tag }} + fi + - name: Build and release Docker images + uses: docker/build-push-action@v2 + with: + platforms: linux/386,linux/amd64 + target: dist + tags: ${{ steps.tag.outputs.tag }} + push: true \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..7c7bf344 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM golang:1.19-alpine AS builder +LABEL maintainer="nekohasekai " +COPY . /go/src/github.com/sagernet/sing-box +WORKDIR /go/src/github.com/sagernet/sing-box +ARG GOPROXY="" +ENV GOPROXY ${GOPROXY} +ENV CGO_ENABLED=0 +RUN set -ex \ + && apk add git build-base \ + && export COMMIT=$(git rev-parse HEAD) \ + && go build -v -trimpath -tags 'with_quic,with_wireguard,with_clash_api' \ + -o /go/bin/sing-box \ + -ldflags "-X github.com/sagernet/sing-box/constant.Commit=${COMMIT} -w -s -buildid=" \ + ./cmd/sing-box +FROM alpine AS dist +LABEL maintainer="nekohasekai " +RUN [ ! -e /etc/nsswitch.conf ] && echo 'hosts: files dns' > /etc/nsswitch.conf +RUN set -ex \ + && apk upgrade \ + && apk add bash tzdata ca-certificates \ + && rm -rf /var/cache/apk/* +COPY --from=builder /go/bin/sing-box /usr/local/bin/sing-box +ENTRYPOINT ["sing-box"] \ No newline at end of file