diff --git a/.github/workflows/publish-netclient-docker.yml b/.github/workflows/publish-netclient-docker.yml new file mode 100644 index 00000000..850be1f3 --- /dev/null +++ b/.github/workflows/publish-netclient-docker.yml @@ -0,0 +1,79 @@ +name: Publish Netclient 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 + tags: ${{ env.TAG }} + - + name: Test x86 + run: | + docker run --rm ${{ env.TAG }}& + sleep 10 + kill %1 + - + name: Build arm and export to Docker + uses: docker/build-push-action@v2 + with: + context: . + load: true + platforms: linux/arm64 + file: docker/Dockerfile-netclient-multiarch + tags: ${{ env.TAG }} + - + name: Test arm + run: | + docker run --rm ${{ env.TAG }}& + sleep 10 + kill %1 + - + name: Build and push + uses: docker/build-push-action@v2 + with: + context: . + platforms: linux/amd64, linux/arm64 + push: true + tags: gravitl/netclient:${{ env.TAG }} diff --git a/docker/Dockerfile-netclient-multiarch b/docker/Dockerfile-netclient-multiarch new file mode 100644 index 00000000..907bc8d5 --- /dev/null +++ b/docker/Dockerfile-netclient-multiarch @@ -0,0 +1,39 @@ +FROM gravitl/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"]