1
0

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
This commit is contained in:
Alejandro González
2025-08-16 17:47:11 +02:00
committed by GitHub
parent 8e0732bf01
commit 6f59f4c110
8 changed files with 70 additions and 46 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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/*

View File

@@ -3,7 +3,7 @@ name = "labrinth"
version = "2.7.0"
authors = ["geometrically <jai@modrinth.com>"]
edition.workspace = true
license = "AGPL-3.0"
license = "AGPL-3.0-only"
# This seems redundant, but it's necessary for Docker to work
[[bin]]

View File

@@ -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 \

View File

@@ -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");
}

View File

@@ -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"),
}
});