From 416b61cb46e8f9d30a5fc85ac685cf64c377a7ad Mon Sep 17 00:00:00 2001 From: Sergei Turukin Date: Sat, 8 Nov 2025 05:42:14 -0800 Subject: [PATCH 1/3] Build only single full featured docker image --- .github/workflows/build-and-release.yml.yml | 134 +----------------- Dockerfile | 12 +- README.md | 3 +- docker-compose.yml | 2 +- .../content/docs/essentials/quick-start.mdx | 2 +- docs/src/content/docs/guides/load-spark.mdx | 4 +- .../src/content/docs/guides/snowflake-cli.mdx | 2 +- .../dbt-snowplow-web/setup_docker.sh | 4 +- 8 files changed, 14 insertions(+), 149 deletions(-) diff --git a/.github/workflows/build-and-release.yml.yml b/.github/workflows/build-and-release.yml.yml index e1dac98e2..b5914fbac 100644 --- a/.github/workflows/build-and-release.yml.yml +++ b/.github/workflows/build-and-release.yml.yml @@ -14,15 +14,13 @@ on: types: [created] env: - REGISTRY_IMAGE: embucket/embucket + REGISTRY_IMAGE: embucket/embucket-labs jobs: # This job builds and pushes a multi-arch Docker image to GitHub Container Registry. build-docker: runs-on: ${{ matrix.runner }} - env: - VARIANT: default strategy: fail-fast: true matrix: @@ -73,8 +71,6 @@ jobs: platforms: ${{ matrix.platform }} labels: ${{ steps.meta.outputs.labels }} outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true - build-args: | - ENABLE_EXPERIMENTAL=false cache-from: type=gha cache-to: type=gha,mode=max @@ -87,87 +83,7 @@ jobs: - name: Upload digest uses: actions/upload-artifact@v5 with: - name: digests-${{ env.VARIANT }}-${{ matrix.platform_pair }} - path: ${{ runner.temp }}/digests/* - if-no-files-found: error - retention-days: 1 - - build-docker-experimental: - runs-on: ${{ matrix.runner }} - env: - VARIANT: experimental - strategy: - fail-fast: true - matrix: - platform: - - linux/amd64 - - linux/arm64 - include: - - platform: linux/amd64 - runner: ubuntu-latest - platform_pair: linux-amd64 - - platform: linux/arm64 - runner: ubuntu-24.04-arm - platform_pair: linux-arm64 - name: Build and Push Experimental Docker Image - steps: - - name: Checkout code - uses: actions/checkout@v5 - - - name: Prepare - run: | - echo "PLATFORM_PAIR=${{ matrix.platform_pair }}" >> $GITHUB_ENV - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY_IMAGE }} - tags: | - type=ref,event=branch,suffix=-experimental - type=ref,event=pr,suffix=-experimental - type=semver,pattern={{version}},suffix=-experimental - type=semver,pattern={{major}}.{{minor}},suffix=-experimental - type=raw,value=experimental - type=raw,value=latest-experimental,enable={{is_default_branch}} - - - name: Set up QEMU for multi-arch builds - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Log in to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: docker.io - username: ${{ vars.DOCKERHUB_USER }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Build and push experimental Docker image - uses: docker/build-push-action@v6 - id: build - with: - context: . - file: ./Dockerfile - platforms: ${{ matrix.platform }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - ENABLE_EXPERIMENTAL=true - outputs: type=image,name=${{ env.REGISTRY_IMAGE }},push-by-digest=true,name-canonical=true,push=true - cache-from: type=gha - cache-to: type=gha,mode=max - - - name: Export digest - run: | - mkdir -p ${{ runner.temp }}/digests - digest="${{ steps.build.outputs.digest }}" - touch "${{ runner.temp }}/digests/${digest#sha256:}" - - - name: Upload digest - uses: actions/upload-artifact@v5 - with: - name: digests-${{ env.VARIANT }}-${{ matrix.platform_pair }} + name: digests-${{ matrix.platform_pair }} path: ${{ runner.temp }}/digests/* if-no-files-found: error retention-days: 1 @@ -181,7 +97,7 @@ jobs: uses: actions/download-artifact@v6 with: path: ${{ runner.temp }}/digests - pattern: digests-default-* + pattern: digests-* merge-multiple: true - name: Login to Docker Hub @@ -214,47 +130,3 @@ jobs: - name: Inspect image run: | docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:${{ steps.meta.outputs.version }} - - merge-experimental: - runs-on: ubuntu-latest - needs: - - build-docker-experimental - steps: - - name: Download digests - uses: actions/download-artifact@v6 - with: - path: ${{ runner.temp }}/digests - pattern: digests-experimental-* - merge-multiple: true - - - name: Login to Docker Hub - uses: docker/login-action@v3 - with: - username: ${{ vars.DOCKERHUB_USER }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ${{ env.REGISTRY_IMAGE }} - tags: | - type=ref,event=branch,suffix=-experimental - type=ref,event=pr,suffix=-experimental - type=semver,pattern={{version}},suffix=-experimental - type=semver,pattern={{major}}.{{minor}},suffix=-experimental - type=raw,value=experimental - type=raw,value=latest-experimental,enable={{is_default_branch}} - - - name: Create manifest list and push - working-directory: ${{ runner.temp }}/digests - run: | - docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ - $(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *) - - - name: Inspect image - run: | - docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:experimental diff --git a/Dockerfile b/Dockerfile index 1b3a3eb71..13e8afd4d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -14,15 +14,9 @@ RUN apt-get update && apt-get install -y \ # Copy source code COPY . . -# Build the application, optionally enabling experimental features -ARG ENABLE_EXPERIMENTAL=false -RUN if [ "$ENABLE_EXPERIMENTAL" = "true" ]; then \ - echo "Building embucketd with experimental features enabled"; \ - cargo build --release --bin embucketd --features experimental; \ - else \ - echo "Building embucketd without experimental features"; \ - cargo build --release --bin embucketd --no-default-features; \ - fi +# Build the application with every feature enabled so the final image ships +# with a single, fully-capable binary. +RUN cargo build --release --bin embucketd --all-features # Stage 4: Final runtime image FROM gcr.io/distroless/cc-debian12 AS runtime diff --git a/README.md b/README.md index 4bca33c2d..931f407fa 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Start Embucket and run your first query in 30 seconds: ```bash -docker run --name embucket --rm -p 8080:8080 -p 3000:3000 embucket/embucket +docker run --name embucket --rm -p 8080:8080 -p 3000:3000 embucket/embucket-labs ``` Open [localhost:8080](http://localhost:8080)—login: `embucket`/`embucket`—and run: @@ -85,4 +85,3 @@ For more details, see [CONTRIBUTING.md](CONTRIBUTING.md). ## License This project uses the **Apache 2.0 License**. See [LICENSE](LICENSE) for details. - diff --git a/docker-compose.yml b/docker-compose.yml index d03c1b7c9..91145b88f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -46,7 +46,7 @@ services: \" > /opt/spark/conf/spark-defaults.conf && ./entrypoint.sh notebook " embucket: - image: embucket/embucket + image: embucket/embucket-labs container_name: embucket depends_on: - mc diff --git a/docs/src/content/docs/essentials/quick-start.mdx b/docs/src/content/docs/essentials/quick-start.mdx index f449ccf6d..662cefdbd 100644 --- a/docs/src/content/docs/essentials/quick-start.mdx +++ b/docs/src/content/docs/essentials/quick-start.mdx @@ -22,7 +22,7 @@ This guide doesn't cover production deployment or advanced configuration options Start the Embucket server: ```bash -docker run --name embucket --rm -p 8080:8080 -p 3000:3000 embucket/embucket +docker run --name embucket --rm -p 8080:8080 -p 3000:3000 embucket/embucket-labs ``` **Done.** You need no external dependencies, databases, or complex configuration. Embucket runs everything in-memory for this quick start. This zero-disk architecture requires no external storage. diff --git a/docs/src/content/docs/guides/load-spark.mdx b/docs/src/content/docs/guides/load-spark.mdx index 9132afed4..18c908ebb 100644 --- a/docs/src/content/docs/guides/load-spark.mdx +++ b/docs/src/content/docs/guides/load-spark.mdx @@ -75,7 +75,7 @@ services: # Embucket server providing Iceberg catalog and web interface embucket: - image: embucket/embucket + image: embucket/embucket-labs container_name: embucket depends_on: mc: @@ -202,7 +202,7 @@ Expected output: ``` NAME IMAGE STATUS PORTS -embucket embucket/embucket Up 0.0.0.0:3000->3000/tcp, 0.0.0.0:8080->8080/tcp +embucket embucket/embucket-labs Up 0.0.0.0:3000->3000/tcp, 0.0.0.0:8080->8080/tcp mc minio/mc Up (healthy) minio minio/minio Up 0.0.0.0:9000->9000/tcp, 0.0.0.0:9001->9001/tcp spark-iceberg tabulario/spark-iceberg Up 0.0.0.0:8888->8888/tcp diff --git a/docs/src/content/docs/guides/snowflake-cli.mdx b/docs/src/content/docs/guides/snowflake-cli.mdx index 0aab1fb95..5ace07962 100644 --- a/docs/src/content/docs/guides/snowflake-cli.mdx +++ b/docs/src/content/docs/guides/snowflake-cli.mdx @@ -93,7 +93,7 @@ pip install snowflake-cli Launch the Embucket container: ```bash -docker run --name embucket --rm -p 8080:8080 -p 3000:3000 embucket/embucket +docker run --name embucket --rm -p 8080:8080 -p 3000:3000 embucket/embucket-labs ```