diff --git a/.github/workflows/publish-netclient-docker-go.yml b/.github/workflows/publish-netclient-docker-go.yml new file mode 100644 index 00000000..e626928e --- /dev/null +++ b/.github/workflows/publish-netclient-docker-go.yml @@ -0,0 +1,61 @@ +name: Publish Netclient-go Docker + +on: + workflow_dispatch: + inputs: + tag: + description: 'docker tag' + required: true + release: + types: [published] + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - + name: Set tag + run: | + if [[ -n "${{ github.event.inputs.tag }}" ]]; then + TAG=${{ github.event.inputs.tag }} + elif [[ "${{ github.ref_name }}" == 'master' ]]; then + TAG="latest" + else + TAG="${{ github.ref_name }}" + fi + echo "TAG=${TAG}" >> $GITHUB_ENV + - + name: Checkout + uses: actions/checkout@v2 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - + name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - + name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - + name: Build x86 and export to Docker + uses: docker/build-push-action@v2 + with: + context: . + load: true + platforms: linux/amd64 + file: ./docker/Dockerfile-netclient-multiarch-go + tags: ${{ env.TAG }} + build-args: version=${{ env.TAG }} + - + name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/amd64 + file: ./docker/Dockerfile-netclient-multiarch-go + push: true + tags: gravitl/netclient-go:${{ env.TAG }}, gravitl/netclient-go:latest + build-args: version=${{ env.TAG }} diff --git a/docker/Dockerfile-netclient-multiarch-go b/docker/Dockerfile-netclient-multiarch-go new file mode 100644 index 00000000..2157184f --- /dev/null +++ b/docker/Dockerfile-netclient-multiarch-go @@ -0,0 +1,39 @@ +FROM gravitl/go-builder:latest as builder +# add glib support daemon manager +WORKDIR /app + +COPY . . + +ENV GO111MODULE=auto + +RUN GOOS=linux GOARCH=arm64 CGO_ENABLED=0 /usr/local/go/bin/go build -ldflags="-w -s" -o netclient-app netclient/main.go + +WORKDIR /root/ + +RUN apk add --update git build-base libmnl-dev iptables + +RUN git clone https://git.zx2c4.com/wireguard-go && \ + cd wireguard-go && \ + make && \ + make install + +ENV WITH_WGQUICK=yes +RUN git clone https://git.zx2c4.com/wireguard-tools && \ + cd wireguard-tools && \ + cd src && \ + make && \ + make install + +FROM alpine:3.13.6 + +WORKDIR /root/ + +RUN apk add --no-cache --update bash libmnl gcompat iptables openresolv iproute2 +COPY --from=builder /usr/bin/wireguard-go /usr/bin/wg* /usr/bin/ +COPY --from=builder /app/netclient-app ./netclient +COPY --from=builder /app/scripts/netclient.sh . +RUN chmod 0755 netclient && chmod 0755 netclient.sh + +ENV WG_QUICK_USERSPACE_IMPLEMENTATION=wireguard-go + +ENTRYPOINT ["/bin/sh", "./netclient.sh"]