diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5874b8c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +.git +target diff --git a/.forgejo/workflows/build.yml b/.forgejo/workflows/build.yml new file mode 100644 index 0000000..59e985a --- /dev/null +++ b/.forgejo/workflows/build.yml @@ -0,0 +1,54 @@ +name: ci + +on: + push: + branches: + - main + tags: + - '*' + +jobs: + docker-build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Forge Hub + uses: docker/login-action@v3 + with: + registry: forge.k3s.fr + username: ${{ secrets.FORGEHUB_USERNAME }} + password: ${{ secrets.FORGEHUB_PASSWORD }} + - name: Extract metadata (tags, labels) for Forge hub + id: metaforge + uses: https://github.com/docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: forge.k3s.fr/frank/opentsdb-auth-proxy + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ${{ steps.metaforge.outputs.tags }} + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + - name: Extract metadata (tags, labels) for Dockerhub + id: metadockerhub + uses: https://github.com/docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7 + with: + images: frankkkkk/opentsdb-auth-proxy + - name: Build and push + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: ${{ steps.metadockerhub.outputs.tags }} \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4e266a9 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +FROM rust:1.78 AS chef +# We only pay the installation cost once, +# it will be cached from the second build onwards +RUN cargo install cargo-chef +WORKDIR app + +FROM chef AS planner +COPY . . +RUN cargo chef prepare --recipe-path recipe.json + +FROM chef AS builder +COPY --from=planner /app/recipe.json recipe.json +# Build dependencies - this is the caching Docker layer! +RUN cargo chef cook --release --recipe-path recipe.json +# Build application +COPY . . +RUN cargo build --release --bin opentsdb-auth-proxy + +# We do not need the Rust toolchain to run the binary! +FROM ubuntu:22.04 +WORKDIR app +COPY --from=builder /app/target/release/opentsdb-auth-proxy /usr/local/bin +ENTRYPOINT ["/usr/local/bin/opentsdb-auth-proxy"] \ No newline at end of file