From 6f59f4c110027b936425774e719ae3f2589ac620 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20Gonz=C3=A1lez?= <7822554+AlexTMjugador@users.noreply.github.com> Date: Sat, 16 Aug 2025 17:47:11 +0200 Subject: [PATCH] fix: tag Labrinth and Daedalus Docker builds with the right metadata (#4147) * fix: tag Labrinth and Daedalus Docker builds with the right metadata * chore: make it clear that Labrinth license is AGPL-3.0-only --- .github/workflows/daedalus-docker.yml | 25 ++++++++++++--- .github/workflows/labrinth-docker.yml | 31 +++++++++++++++--- COPYING.md | 2 +- apps/daedalus_client/Dockerfile | 5 +++ apps/labrinth/Cargo.toml | 2 +- apps/labrinth/Dockerfile | 4 ++- apps/labrinth/build.rs | 45 ++++++++------------------- apps/labrinth/src/routes/index.rs | 2 +- 8 files changed, 70 insertions(+), 46 deletions(-) diff --git a/.github/workflows/daedalus-docker.yml b/.github/workflows/daedalus-docker.yml index b0f72c96..ad666113 100644 --- a/.github/workflows/daedalus-docker.yml +++ b/.github/workflows/daedalus-docker.yml @@ -21,27 +21,42 @@ jobs: docker: runs-on: ubuntu-latest steps: - - name: Checkout + - name: 📥 Check out code uses: actions/checkout@v4 - - name: Set up Docker Buildx + + - name: 🧰 Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Fetch docker metadata + + - name: ⚙️ Generate Docker image metadata id: docker_meta uses: docker/metadata-action@v5 + env: + DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index with: images: ghcr.io/modrinth/daedalus - - name: Login to GitHub Images + labels: | + org.opencontainers.image.title=daedalus + org.opencontainers.image.description=Modrinth game metadata query client + org.opencontainers.image.licenses=MIT + annotations: | + org.opencontainers.image.title=daedalus + org.opencontainers.image.description=Modrinth game metadata query client + org.opencontainers.image.licenses=MIT + + - name: 🔑 Login to GitHub Packages uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push + + - name: 🔨 Build and push uses: docker/build-push-action@v6 with: file: ./apps/daedalus_client/Dockerfile push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} + annotations: ${{ steps.docker_meta.outputs.annotations }} cache-from: type=registry,ref=ghcr.io/modrinth/daedalus:main cache-to: type=inline diff --git a/.github/workflows/labrinth-docker.yml b/.github/workflows/labrinth-docker.yml index 43577e66..6d368659 100644 --- a/.github/workflows/labrinth-docker.yml +++ b/.github/workflows/labrinth-docker.yml @@ -19,27 +19,48 @@ jobs: docker: runs-on: ubuntu-latest steps: - - name: Checkout + - name: 📥 Check out code uses: actions/checkout@v4 - - name: Set up Docker Buildx + + - name: 🧰 Set up Docker Buildx uses: docker/setup-buildx-action@v2 - - name: Fetch docker metadata + + - name: ⚙️ Generate Docker image metadata id: docker_meta uses: docker/metadata-action@v5 + env: + # GitHub Packages requires annotations metadata in at least the index descriptor to show them + # up properly in its UI it seems, but it's not clear about it, because the docs refer to the + # image manifest only. See: + # https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#adding-a-description-to-multi-arch-images + DOCKER_METADATA_ANNOTATIONS_LEVELS: manifest,index with: images: ghcr.io/modrinth/labrinth - - name: Login to GitHub Images + labels: | + org.opencontainers.image.title=labrinth + org.opencontainers.image.description=Modrinth API + org.opencontainers.image.licenses=AGPL-3.0-only + annotations: | + org.opencontainers.image.title=labrinth + org.opencontainers.image.description=Modrinth API + org.opencontainers.image.licenses=AGPL-3.0-only + + - name: 🔑 Login to GitHub Packages uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Build and push + + - name: 🔨 Build and push uses: docker/build-push-action@v6 with: file: ./apps/labrinth/Dockerfile push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} labels: ${{ steps.docker_meta.outputs.labels }} + annotations: ${{ steps.docker_meta.outputs.annotations }} + build-args: | + GIT_HASH=${{ fromJSON(steps.docker_meta.outputs.json).labels['org.opencontainers.image.revision'] }} cache-from: type=registry,ref=ghcr.io/modrinth/labrinth:main cache-to: type=inline diff --git a/COPYING.md b/COPYING.md index 37aed2dd..1b18b36c 100644 --- a/COPYING.md +++ b/COPYING.md @@ -2,7 +2,7 @@ All packages in this repository are licensed under their respective licenses. For more information, refer to the LICENSE file in each package. -For detailed information, consult each package's COPYING.md file, if available. +For detailed information, consult each package's COPYING.md, LICENSE.txt, or LICENSE file, if available. ## Modrinth Branding diff --git a/apps/daedalus_client/Dockerfile b/apps/daedalus_client/Dockerfile index 8cb643a8..e5f083fc 100644 --- a/apps/daedalus_client/Dockerfile +++ b/apps/daedalus_client/Dockerfile @@ -17,6 +17,11 @@ RUN --mount=type=cache,target=/usr/src/daedalus/target \ FROM debian:bookworm-slim +LABEL org.opencontainers.image.source=https://github.com/modrinth/code +LABEL org.opencontainers.image.title=daedalus +LABEL org.opencontainers.image.description="Modrinth game metadata query client" +LABEL org.opencontainers.image.licenses=MIT + RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates openssl \ && rm -rf /var/lib/apt/lists/* diff --git a/apps/labrinth/Cargo.toml b/apps/labrinth/Cargo.toml index b41b0fe9..a046293f 100644 --- a/apps/labrinth/Cargo.toml +++ b/apps/labrinth/Cargo.toml @@ -3,7 +3,7 @@ name = "labrinth" version = "2.7.0" authors = ["geometrically "] edition.workspace = true -license = "AGPL-3.0" +license = "AGPL-3.0-only" # This seems redundant, but it's necessary for Docker to work [[bin]] diff --git a/apps/labrinth/Dockerfile b/apps/labrinth/Dockerfile index 48c20814..5351c508 100644 --- a/apps/labrinth/Dockerfile +++ b/apps/labrinth/Dockerfile @@ -4,6 +4,7 @@ FROM rust:1.89.0 AS build WORKDIR /usr/src/labrinth COPY . . +ARG GIT_HASH RUN --mount=type=cache,target=/usr/src/labrinth/target \ --mount=type=cache,target=/usr/local/cargo/git/db \ --mount=type=cache,target=/usr/local/cargo/registry \ @@ -20,8 +21,9 @@ RUN --mount=type=cache,target=/usr/src/labrinth/target \ FROM debian:bookworm-slim LABEL org.opencontainers.image.source=https://github.com/modrinth/code +LABEL org.opencontainers.image.title=labrinth LABEL org.opencontainers.image.description="Modrinth API" -LABEL org.opencontainers.image.licenses=AGPL-3.0 +LABEL org.opencontainers.image.licenses=AGPL-3.0-only RUN apt-get update \ && apt-get install -y --no-install-recommends ca-certificates dumb-init curl \ diff --git a/apps/labrinth/build.rs b/apps/labrinth/build.rs index 2b2ff68b..115627de 100644 --- a/apps/labrinth/build.rs +++ b/apps/labrinth/build.rs @@ -1,40 +1,23 @@ use std::path::Path; -use std::process::Command; use chrono::Local; use dotenv_build::Config; fn main() { - let output = Command::new("git") - .arg("rev-parse") - .arg("HEAD") - .output() - .expect("`git` invocation to succeed"); + println!("cargo:rerun-if-changed=migrations"); - let git_hash = String::from_utf8(output.stdout) - .expect("valid UTF-8 output from `git` invocation"); - - println!("cargo::rerun-if-changed=../../.git/HEAD"); - println!("cargo::rustc-env=GIT_HASH={}", git_hash.trim()); - - let timedate_fmt = Local::now().format("%F @ %I:%M %p"); - let timezone_fmt = iana_time_zone::get_timezone() - .map(|tz| format!(" ({tz})")) - .unwrap_or_default(); - - let comptime = timedate_fmt.to_string() + timezone_fmt.as_str(); - - println!("cargo::rustc-env=COMPILATION_DATE={comptime}"); - - // trick to get compilation profile - let profile = std::env::var("OUT_DIR") - .expect("OUT_DIR to be set") - .split(std::path::MAIN_SEPARATOR) - .nth_back(3) - .unwrap_or("unknown") - .to_string(); - - println!("cargo::rustc-env=COMPILATION_PROFILE={profile}"); + println!( + "cargo::rustc-env=COMPILATION_DATE={}", + format_args!( + "{date} ({tz})", + date = Local::now().format("%F @ %I:%M %p"), + tz = iana_time_zone::get_timezone().unwrap_or_default() + ) + ); + println!( + "cargo::rustc-env=COMPILATION_PROFILE={}", + std::env::var("PROFILE").as_deref().unwrap_or("unknown") + ); dotenv_build::output(Config { filename: Path::new(".build.env"), @@ -42,6 +25,4 @@ fn main() { fail_if_missing_dotenv: false, }) .unwrap(); - - println!("cargo:rerun-if-changed=migrations"); } diff --git a/apps/labrinth/src/routes/index.rs b/apps/labrinth/src/routes/index.rs index cd0e48aa..9a0f7ae5 100644 --- a/apps/labrinth/src/routes/index.rs +++ b/apps/labrinth/src/routes/index.rs @@ -11,7 +11,7 @@ pub async fn index_get() -> HttpResponse { "build_info": { "comp_date": env!("COMPILATION_DATE"), - "git_hash": env!("GIT_HASH", "unknown"), + "git_hash": option_env!("GIT_HASH").unwrap_or("unknown"), "profile": env!("COMPILATION_PROFILE"), } });