From a8640d312f5271bdd4f0a982379a54af21108596 Mon Sep 17 00:00:00 2001 From: Toby Date: Wed, 6 Sep 2023 13:51:18 -0700 Subject: [PATCH] ci: docker image --- .github/workflows/docker.yml | 44 ++++++++++++++++++++++++++++++++++++ Dockerfile | 39 ++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+) create mode 100644 .github/workflows/docker.yml create mode 100644 Dockerfile diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..7fbe3dc --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,44 @@ +name: Build Docker Image + +on: + push: + tags: + - app/v*.*.* + +jobs: + docker: + runs-on: ubuntu-latest + env: + ACTIONS_ALLOW_UNSECURE_COMMANDS: true + + steps: + - name: Check out + uses: actions/checkout@v3 + + - name: Get tag + id: get_tag + run: echo "TAG=$(git describe --tags --always --match 'app/v*' | sed -n 's|app/\([^/-]*\)\(-.*\)\{0,1\}|\1|p')" >> $GITHUB_OUTPUT + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to DockerHub + uses: docker/login-action@v2.1.0 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Build and push + id: docker_build + uses: docker/build-push-action@v4.0.0 + with: + context: . + push: true + platforms: linux/amd64,linux/arm64 + tags: tobyxdd/hysteria:latest,tobyxdd/hysteria:v2,tobyxdd/hysteria:${{ steps.get_tag.outputs.TAG }} + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..e49ad63 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,39 @@ +FROM golang:1-alpine AS builder + +# GOPROXY is disabled by default, use: +# docker build --build-arg GOPROXY="https://goproxy.io" ... +# to enable GOPROXY. +ARG GOPROXY="" + +ENV GOPROXY ${GOPROXY} + +COPY . /go/src/github.com/apernet/hysteria + +WORKDIR /go/src/github.com/apernet/hysteria + +RUN set -ex \ + && apk add git build-base bash python3 \ + && python hyperbole.py build -r \ + && mv ./build/hysteria-* /go/bin/hysteria + +# multi-stage builds to create the final image +FROM alpine AS dist + +# set up nsswitch.conf for Go's "netgo" implementation +# - https://github.com/golang/go/blob/go1.9.1/src/net/conf.go#L194-L275 +# - docker run --rm debian:stretch grep '^hosts:' /etc/nsswitch.conf +RUN if [ ! -e /etc/nsswitch.conf ]; then echo 'hosts: files dns' > /etc/nsswitch.conf; fi + +# bash is used for debugging, tzdata is used to add timezone information. +# Install ca-certificates to ensure no CA certificate errors. +# +# Do not try to add the "--no-cache" option when there are multiple "apk" +# commands, this will cause the build process to become very slow. +RUN set -ex \ + && apk upgrade \ + && apk add bash tzdata ca-certificates \ + && rm -rf /var/cache/apk/* + +COPY --from=builder /go/bin/hysteria /usr/local/bin/hysteria + +ENTRYPOINT ["hysteria"] \ No newline at end of file