diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +/target diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml new file mode 100644 index 0000000..89fdf58 --- /dev/null +++ b/.github/workflows/docker.yml @@ -0,0 +1,49 @@ +name: Docker + +on: + push: + tags: + - "v*.*.*" + +jobs: + build_deploy: + name: Build and Deploy + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v3 + with: + images: ekzhang/bore + tags: | + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: arm64 + + - 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 and push + id: docker_build + uses: docker/build-push-action@v2 + with: + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Image digest + run: echo ${{ steps.docker_build.outputs.digest }} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..379656f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM rust:alpine as builder +WORKDIR /home/rust/src +RUN apk --no-cache add musl-dev +COPY . . +RUN cargo install --path . + +FROM scratch +COPY --from=builder /usr/local/cargo/bin/bore . +USER 1000:1000 +ENTRYPOINT ["./bore"] diff --git a/README.md b/README.md index 2c430b6..cf582fc 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,22 @@ Similar to [localtunnel](https://github.com/localtunnel/localtunnel) and [ngrok] (`bore` totals less than 400 lines of safe, async Rust code and is trivial to set up — just run a single binary for the client and server.) +## Installation + +You can build the `bore` CLI command from source using [Cargo](https://crates.io/), which is bundled with the latest stable Rust toolchain. This command and will install the release `bore` binary at a user-accessible path. + +```shell +cargo install bore-cli +``` + +If you have Docker installed on your computer, you can alternatively run the `bore` binary from a minimal "scratch" container. + +```shell +docker run -it --init --rm --network host ekzhang/bore +``` + +We publish versioned Docker images for each release, in addition to the `latest` tag. Each image is built for AMD 64-bit, Arm 64-bit, and Armv7 architectures. + ## Detailed Usage This section describes detailed usage for the `bore` CLI command.