docker : add OCI image labels for version and build date (#21653)
* docker: add OCI image labels to all published images * docker: propagate OCI labels as manifest and index annotations * docker: drop hardcoded org URL and revert accidental intel version bump The OCI image url and source are now driven by build args with a sensible default. The workflow passes the actual repository url so fork builds get labels pointing at the fork instead of upstream. Also restores the IGC, compute runtime, and IGDGMM versions in the intel Dockerfile labeled stage which I accidentally bumped in the first commit. * docker: add skip_s390x workflow_dispatch input for fast test runs Lets maintainers and PR authors trigger the docker workflow without the s390x build target, which depends on the IBM Z runner and is by far the slowest job in the matrix. The flag filters the s390x row out of the build matrix before merge_matrix is derived, so the merge job sees a consistent shape too. Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com> --------- Signed-off-by: Samaresh Kumar Singh <ssam3003@gmail.com>
This commit is contained in:
@@ -5,6 +5,9 @@
|
|||||||
# Define the CANN base image for easier version updates later
|
# Define the CANN base image for easier version updates later
|
||||||
ARG CHIP_TYPE=910b
|
ARG CHIP_TYPE=910b
|
||||||
ARG CANN_BASE_IMAGE=quay.io/ascend/cann:8.5.0-${CHIP_TYPE}-openeuler24.03-py3.11
|
ARG CANN_BASE_IMAGE=quay.io/ascend/cann:8.5.0-${CHIP_TYPE}-openeuler24.03-py3.11
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
# BUILD STAGE
|
# BUILD STAGE
|
||||||
@@ -67,6 +70,19 @@ RUN mkdir -p /app/full && \
|
|||||||
# ==============================================================================
|
# ==============================================================================
|
||||||
FROM ${CANN_BASE_IMAGE} AS base
|
FROM ${CANN_BASE_IMAGE} AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
# -- Install runtime dependencies --
|
# -- Install runtime dependencies --
|
||||||
RUN yum install -y libgomp curl && \
|
RUN yum install -y libgomp curl && \
|
||||||
yum clean all && \
|
yum clean all && \
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
ARG UBUNTU_VERSION=24.04
|
ARG UBUNTU_VERSION=24.04
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
FROM ubuntu:$UBUNTU_VERSION AS build
|
FROM ubuntu:$UBUNTU_VERSION AS build
|
||||||
|
|
||||||
@@ -35,6 +38,19 @@ RUN mkdir -p /app/full \
|
|||||||
## Base image
|
## Base image
|
||||||
FROM ubuntu:$UBUNTU_VERSION AS base
|
FROM ubuntu:$UBUNTU_VERSION AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y libgomp1 curl \
|
&& apt-get install -y libgomp1 curl \
|
||||||
&& apt autoremove -y \
|
&& apt autoremove -y \
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ ARG BASE_CUDA_DEV_CONTAINER=nvidia/cuda:${CUDA_VERSION}-devel-ubuntu${UBUNTU_VER
|
|||||||
|
|
||||||
ARG BASE_CUDA_RUN_CONTAINER=nvidia/cuda:${CUDA_VERSION}-runtime-ubuntu${UBUNTU_VERSION}
|
ARG BASE_CUDA_RUN_CONTAINER=nvidia/cuda:${CUDA_VERSION}-runtime-ubuntu${UBUNTU_VERSION}
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
FROM ${BASE_CUDA_DEV_CONTAINER} AS build
|
FROM ${BASE_CUDA_DEV_CONTAINER} AS build
|
||||||
|
|
||||||
# CUDA architecture to build for (defaults to all supported archs)
|
# CUDA architecture to build for (defaults to all supported archs)
|
||||||
@@ -40,6 +44,19 @@ RUN mkdir -p /app/full \
|
|||||||
## Base image
|
## Base image
|
||||||
FROM ${BASE_CUDA_RUN_CONTAINER} AS base
|
FROM ${BASE_CUDA_RUN_CONTAINER} AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y libgomp1 curl \
|
&& apt-get install -y libgomp1 curl \
|
||||||
&& apt autoremove -y \
|
&& apt autoremove -y \
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
ARG ONEAPI_VERSION=2025.3.3-0-devel-ubuntu24.04
|
ARG ONEAPI_VERSION=2025.3.3-0-devel-ubuntu24.04
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
## Build Image
|
## Build Image
|
||||||
|
|
||||||
@@ -40,6 +43,19 @@ RUN mkdir -p /app/full \
|
|||||||
|
|
||||||
FROM intel/deep-learning-essentials:$ONEAPI_VERSION AS base
|
FROM intel/deep-learning-essentials:$ONEAPI_VERSION AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
ARG IGC_VERSION=v2.20.5
|
ARG IGC_VERSION=v2.20.5
|
||||||
ARG IGC_VERSION_FULL=2_2.20.5+19972
|
ARG IGC_VERSION_FULL=2_2.20.5+19972
|
||||||
ARG COMPUTE_RUNTIME_VERSION=25.40.35563.10
|
ARG COMPUTE_RUNTIME_VERSION=25.40.35563.10
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
ARG ASCEND_VERSION=8.5.0-910b-openeuler22.03-py3.10
|
ARG ASCEND_VERSION=8.5.0-910b-openeuler22.03-py3.10
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
FROM ascendai/cann:$ASCEND_VERSION AS build
|
FROM ascendai/cann:$ASCEND_VERSION AS build
|
||||||
|
|
||||||
@@ -28,6 +31,20 @@ RUN echo "Building with static libs" && \
|
|||||||
|
|
||||||
# TODO: use image with NNRT
|
# TODO: use image with NNRT
|
||||||
FROM ascendai/cann:$ASCEND_VERSION AS runtime
|
FROM ascendai/cann:$ASCEND_VERSION AS runtime
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
COPY --from=build /app/build/bin/llama-cli /app/build/bin/llama-completion /
|
COPY --from=build /app/build/bin/llama-cli /app/build/bin/llama-completion /
|
||||||
|
|
||||||
ENV LC_ALL=C.utf8
|
ENV LC_ALL=C.utf8
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ ARG BASE_MUSA_DEV_CONTAINER=mthreads/musa:${MUSA_VERSION}-devel-ubuntu${UBUNTU_V
|
|||||||
|
|
||||||
ARG BASE_MUSA_RUN_CONTAINER=mthreads/musa:${MUSA_VERSION}-runtime-ubuntu${UBUNTU_VERSION}-amd64
|
ARG BASE_MUSA_RUN_CONTAINER=mthreads/musa:${MUSA_VERSION}-runtime-ubuntu${UBUNTU_VERSION}-amd64
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
FROM ${BASE_MUSA_DEV_CONTAINER} AS build
|
FROM ${BASE_MUSA_DEV_CONTAINER} AS build
|
||||||
|
|
||||||
# MUSA architecture to build for (defaults to all supported archs)
|
# MUSA architecture to build for (defaults to all supported archs)
|
||||||
@@ -45,6 +49,19 @@ RUN mkdir -p /app/full \
|
|||||||
## Base image
|
## Base image
|
||||||
FROM ${BASE_MUSA_RUN_CONTAINER} AS base
|
FROM ${BASE_MUSA_RUN_CONTAINER} AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y libgomp1 curl \
|
&& apt-get install -y libgomp1 curl \
|
||||||
&& apt autoremove -y \
|
&& apt autoremove -y \
|
||||||
|
|||||||
@@ -18,6 +18,10 @@ ARG LIBZE1_VERSION=1.27.0-1~24.04~ppa2
|
|||||||
ARG http_proxy=
|
ARG http_proxy=
|
||||||
ARG https_proxy=
|
ARG https_proxy=
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
## Build Image
|
## Build Image
|
||||||
FROM ubuntu:${UBUNTU_VERSION} AS build
|
FROM ubuntu:${UBUNTU_VERSION} AS build
|
||||||
|
|
||||||
@@ -88,6 +92,18 @@ FROM ubuntu:${UBUNTU_VERSION} AS base
|
|||||||
# Pass proxy args to runtime stage
|
# Pass proxy args to runtime stage
|
||||||
ARG http_proxy
|
ARG http_proxy
|
||||||
ARG https_proxy
|
ARG https_proxy
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y libgomp1 libtbb12 curl wget ocl-icd-libopencl1 \
|
&& apt-get install -y libgomp1 libtbb12 curl wget ocl-icd-libopencl1 \
|
||||||
|
|||||||
@@ -7,6 +7,10 @@ ARG AMDGPU_VERSION=7.2.1
|
|||||||
# Target the ROCm build image
|
# Target the ROCm build image
|
||||||
ARG BASE_ROCM_DEV_CONTAINER=rocm/dev-ubuntu-${UBUNTU_VERSION}:${ROCM_VERSION}-complete
|
ARG BASE_ROCM_DEV_CONTAINER=rocm/dev-ubuntu-${UBUNTU_VERSION}:${ROCM_VERSION}-complete
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
### Build image
|
### Build image
|
||||||
FROM ${BASE_ROCM_DEV_CONTAINER} AS build
|
FROM ${BASE_ROCM_DEV_CONTAINER} AS build
|
||||||
|
|
||||||
@@ -57,6 +61,19 @@ RUN mkdir -p /app/full \
|
|||||||
## Base image
|
## Base image
|
||||||
FROM ${BASE_ROCM_DEV_CONTAINER} AS base
|
FROM ${BASE_ROCM_DEV_CONTAINER} AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y libgomp1 curl \
|
&& apt-get install -y libgomp1 curl \
|
||||||
&& apt autoremove -y \
|
&& apt autoremove -y \
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
ARG GCC_VERSION=15.2.0
|
ARG GCC_VERSION=15.2.0
|
||||||
ARG UBUNTU_VERSION=24.04
|
ARG UBUNTU_VERSION=24.04
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
### Build Llama.cpp stage
|
### Build Llama.cpp stage
|
||||||
FROM gcc:${GCC_VERSION} AS build
|
FROM gcc:${GCC_VERSION} AS build
|
||||||
@@ -52,6 +55,19 @@ COPY --from=build /opt/llama.cpp/gguf-py /llama.cpp/gguf-py
|
|||||||
### Base image
|
### Base image
|
||||||
FROM ubuntu:${UBUNTU_VERSION} AS base
|
FROM ubuntu:${UBUNTU_VERSION} AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
|
||||||
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
|
--mount=type=cache,target=/var/lib/apt/lists,sharing=locked \
|
||||||
apt update -y && \
|
apt update -y && \
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
ARG UBUNTU_VERSION=26.04
|
ARG UBUNTU_VERSION=26.04
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
|
||||||
FROM ubuntu:$UBUNTU_VERSION AS build
|
FROM ubuntu:$UBUNTU_VERSION AS build
|
||||||
|
|
||||||
@@ -31,6 +34,19 @@ RUN mkdir -p /app/full \
|
|||||||
## Base image
|
## Base image
|
||||||
FROM ubuntu:$UBUNTU_VERSION AS base
|
FROM ubuntu:$UBUNTU_VERSION AS base
|
||||||
|
|
||||||
|
ARG BUILD_DATE=N/A
|
||||||
|
ARG APP_VERSION=N/A
|
||||||
|
ARG APP_REVISION=N/A
|
||||||
|
ARG IMAGE_URL=https://github.com/ggml-org/llama.cpp
|
||||||
|
ARG IMAGE_SOURCE=https://github.com/ggml-org/llama.cpp
|
||||||
|
LABEL org.opencontainers.image.created=$BUILD_DATE \
|
||||||
|
org.opencontainers.image.version=$APP_VERSION \
|
||||||
|
org.opencontainers.image.revision=$APP_REVISION \
|
||||||
|
org.opencontainers.image.title="llama.cpp" \
|
||||||
|
org.opencontainers.image.description="LLM inference in C/C++" \
|
||||||
|
org.opencontainers.image.url=$IMAGE_URL \
|
||||||
|
org.opencontainers.image.source=$IMAGE_SOURCE
|
||||||
|
|
||||||
RUN apt-get update \
|
RUN apt-get update \
|
||||||
&& apt-get install -y libgomp1 curl libvulkan1 mesa-vulkan-drivers \
|
&& apt-get install -y libgomp1 curl libvulkan1 mesa-vulkan-drivers \
|
||||||
libglvnd0 libgl1 libglx0 libegl1 libgles2 \
|
libglvnd0 libgl1 libglx0 libegl1 libgles2 \
|
||||||
|
|||||||
@@ -11,6 +11,11 @@ name: Publish Docker image
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
workflow_dispatch: # allows manual triggering
|
workflow_dispatch: # allows manual triggering
|
||||||
|
inputs:
|
||||||
|
skip_s390x:
|
||||||
|
description: "Skip the s390x build target (useful for fast test runs that do not need the IBM Z runner)"
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
schedule:
|
schedule:
|
||||||
# Rebuild daily rather than on every push because it is expensive
|
# Rebuild daily rather than on every push because it is expensive
|
||||||
- cron: '12 4 * * *'
|
- cron: '12 4 * * *'
|
||||||
@@ -64,6 +69,8 @@ jobs:
|
|||||||
- name: Generate build and merge matrices
|
- name: Generate build and merge matrices
|
||||||
id: matrices
|
id: matrices
|
||||||
shell: bash
|
shell: bash
|
||||||
|
env:
|
||||||
|
SKIP_S390X: ${{ inputs.skip_s390x || 'false' }}
|
||||||
run: |
|
run: |
|
||||||
set -euo pipefail
|
set -euo pipefail
|
||||||
|
|
||||||
@@ -86,6 +93,11 @@ jobs:
|
|||||||
]
|
]
|
||||||
JSON
|
JSON
|
||||||
|
|
||||||
|
if [ "${SKIP_S390X}" = "true" ]; then
|
||||||
|
jq 'map(select(.platforms != "linux/s390x"))' build-matrix.json > build-matrix.json.tmp
|
||||||
|
mv build-matrix.json.tmp build-matrix.json
|
||||||
|
fi
|
||||||
|
|
||||||
BUILD_MATRIX="$(jq -c . build-matrix.json)"
|
BUILD_MATRIX="$(jq -c . build-matrix.json)"
|
||||||
MERGE_MATRIX="$(jq -c '
|
MERGE_MATRIX="$(jq -c '
|
||||||
reduce .[] as $entry ({}; .[$entry.tag] |= (
|
reduce .[] as $entry ({}; .[$entry.tag] |= (
|
||||||
@@ -132,6 +144,7 @@ jobs:
|
|||||||
config: ${{ fromJSON(needs.prepare_matrices.outputs.build_matrix) }}
|
config: ${{ fromJSON(needs.prepare_matrices.outputs.build_matrix) }}
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
|
id: checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
@@ -187,6 +200,10 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
GITHUB_REPOSITORY_OWNER: '${{ github.repository_owner }}'
|
GITHUB_REPOSITORY_OWNER: '${{ github.repository_owner }}'
|
||||||
|
|
||||||
|
- name: Get build date
|
||||||
|
id: build_date
|
||||||
|
run: echo "date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Free Disk Space (Ubuntu)
|
- name: Free Disk Space (Ubuntu)
|
||||||
if: ${{ matrix.config.free_disk_space == true }}
|
if: ${{ matrix.config.free_disk_space == true }}
|
||||||
uses: ggml-org/free-disk-space@v1.3.1
|
uses: ggml-org/free-disk-space@v1.3.1
|
||||||
@@ -211,13 +228,26 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: ${{ matrix.config.platforms }}
|
platforms: ${{ matrix.config.platforms }}
|
||||||
outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true
|
outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true,oci-mediatypes=true
|
||||||
file: ${{ matrix.config.dockerfile }}
|
file: ${{ matrix.config.dockerfile }}
|
||||||
target: full
|
target: full
|
||||||
provenance: false
|
provenance: false
|
||||||
build-args: |
|
build-args: |
|
||||||
|
BUILD_DATE=${{ steps.build_date.outputs.date }}
|
||||||
|
APP_VERSION=${{ needs.create_tag.outputs.source_tag }}
|
||||||
|
APP_REVISION=${{ steps.checkout.outputs.commit }}
|
||||||
|
IMAGE_URL=${{ github.server_url }}/${{ github.repository }}
|
||||||
|
IMAGE_SOURCE=${{ github.server_url }}/${{ github.repository }}
|
||||||
${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}
|
${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}
|
||||||
${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}
|
${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}
|
||||||
|
annotations: |
|
||||||
|
manifest:org.opencontainers.image.created=${{ steps.build_date.outputs.date }}
|
||||||
|
manifest:org.opencontainers.image.version=${{ needs.create_tag.outputs.source_tag }}
|
||||||
|
manifest:org.opencontainers.image.revision=${{ steps.checkout.outputs.commit }}
|
||||||
|
manifest:org.opencontainers.image.title=llama.cpp
|
||||||
|
manifest:org.opencontainers.image.description=LLM inference in C/C++
|
||||||
|
manifest:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}
|
||||||
|
manifest:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
|
||||||
# using github experimental cache
|
# using github experimental cache
|
||||||
#cache-from: type=gha
|
#cache-from: type=gha
|
||||||
#cache-to: type=gha,mode=max
|
#cache-to: type=gha,mode=max
|
||||||
@@ -235,13 +265,26 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: ${{ matrix.config.platforms }}
|
platforms: ${{ matrix.config.platforms }}
|
||||||
outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true
|
outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true,oci-mediatypes=true
|
||||||
file: ${{ matrix.config.dockerfile }}
|
file: ${{ matrix.config.dockerfile }}
|
||||||
target: light
|
target: light
|
||||||
provenance: false
|
provenance: false
|
||||||
build-args: |
|
build-args: |
|
||||||
|
BUILD_DATE=${{ steps.build_date.outputs.date }}
|
||||||
|
APP_VERSION=${{ needs.create_tag.outputs.source_tag }}
|
||||||
|
APP_REVISION=${{ steps.checkout.outputs.commit }}
|
||||||
|
IMAGE_URL=${{ github.server_url }}/${{ github.repository }}
|
||||||
|
IMAGE_SOURCE=${{ github.server_url }}/${{ github.repository }}
|
||||||
${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}
|
${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}
|
||||||
${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}
|
${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}
|
||||||
|
annotations: |
|
||||||
|
manifest:org.opencontainers.image.created=${{ steps.build_date.outputs.date }}
|
||||||
|
manifest:org.opencontainers.image.version=${{ needs.create_tag.outputs.source_tag }}
|
||||||
|
manifest:org.opencontainers.image.revision=${{ steps.checkout.outputs.commit }}
|
||||||
|
manifest:org.opencontainers.image.title=llama.cpp
|
||||||
|
manifest:org.opencontainers.image.description=LLM inference in C/C++
|
||||||
|
manifest:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}
|
||||||
|
manifest:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
|
||||||
# using github experimental cache
|
# using github experimental cache
|
||||||
#cache-from: type=gha
|
#cache-from: type=gha
|
||||||
#cache-to: type=gha,mode=max
|
#cache-to: type=gha,mode=max
|
||||||
@@ -259,13 +302,26 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
context: .
|
context: .
|
||||||
platforms: ${{ matrix.config.platforms }}
|
platforms: ${{ matrix.config.platforms }}
|
||||||
outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true
|
outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true,oci-mediatypes=true
|
||||||
file: ${{ matrix.config.dockerfile }}
|
file: ${{ matrix.config.dockerfile }}
|
||||||
target: server
|
target: server
|
||||||
provenance: false
|
provenance: false
|
||||||
build-args: |
|
build-args: |
|
||||||
|
BUILD_DATE=${{ steps.build_date.outputs.date }}
|
||||||
|
APP_VERSION=${{ needs.create_tag.outputs.source_tag }}
|
||||||
|
APP_REVISION=${{ steps.checkout.outputs.commit }}
|
||||||
|
IMAGE_URL=${{ github.server_url }}/${{ github.repository }}
|
||||||
|
IMAGE_SOURCE=${{ github.server_url }}/${{ github.repository }}
|
||||||
${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}
|
${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}
|
||||||
${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}
|
${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}
|
||||||
|
annotations: |
|
||||||
|
manifest:org.opencontainers.image.created=${{ steps.build_date.outputs.date }}
|
||||||
|
manifest:org.opencontainers.image.version=${{ needs.create_tag.outputs.source_tag }}
|
||||||
|
manifest:org.opencontainers.image.revision=${{ steps.checkout.outputs.commit }}
|
||||||
|
manifest:org.opencontainers.image.title=llama.cpp
|
||||||
|
manifest:org.opencontainers.image.description=LLM inference in C/C++
|
||||||
|
manifest:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}
|
||||||
|
manifest:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}
|
||||||
# using github experimental cache
|
# using github experimental cache
|
||||||
#cache-from: type=gha
|
#cache-from: type=gha
|
||||||
#cache-to: type=gha,mode=max
|
#cache-to: type=gha,mode=max
|
||||||
@@ -330,10 +386,15 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the repo
|
- name: Check out the repo
|
||||||
|
id: checkout
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Get build date
|
||||||
|
id: build_date
|
||||||
|
run: echo "date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Download digest metadata
|
- name: Download digest metadata
|
||||||
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
||||||
with:
|
with:
|
||||||
@@ -361,6 +422,8 @@ jobs:
|
|||||||
IMAGE_REPO="ghcr.io/${REPO_OWNER}/${REPO_NAME}"
|
IMAGE_REPO="ghcr.io/${REPO_OWNER}/${REPO_NAME}"
|
||||||
PREFIX="${IMAGE_REPO}:"
|
PREFIX="${IMAGE_REPO}:"
|
||||||
SRC_TAG="${{ needs.create_tag.outputs.source_tag }}"
|
SRC_TAG="${{ needs.create_tag.outputs.source_tag }}"
|
||||||
|
BUILD_DATE="${{ steps.build_date.outputs.date }}"
|
||||||
|
COMMIT_SHA="${{ steps.checkout.outputs.commit }}"
|
||||||
TAGS="${{ matrix.config.tag }}"
|
TAGS="${{ matrix.config.tag }}"
|
||||||
ARCHES="${{ matrix.config.arches }}"
|
ARCHES="${{ matrix.config.arches }}"
|
||||||
DIGEST_GLOB="/tmp/digests/*.tsv"
|
DIGEST_GLOB="/tmp/digests/*.tsv"
|
||||||
@@ -412,11 +475,21 @@ jobs:
|
|||||||
refs+=("${IMAGE_REPO}@${digest}")
|
refs+=("${IMAGE_REPO}@${digest}")
|
||||||
done
|
done
|
||||||
|
|
||||||
|
local annotations=(
|
||||||
|
--annotation "index:org.opencontainers.image.created=${BUILD_DATE}"
|
||||||
|
--annotation "index:org.opencontainers.image.version=${SRC_TAG}"
|
||||||
|
--annotation "index:org.opencontainers.image.revision=${COMMIT_SHA}"
|
||||||
|
--annotation "index:org.opencontainers.image.title=llama.cpp"
|
||||||
|
--annotation "index:org.opencontainers.image.description=LLM inference in C/C++"
|
||||||
|
--annotation "index:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}"
|
||||||
|
--annotation "index:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}"
|
||||||
|
)
|
||||||
|
|
||||||
echo "Creating ${merged_tag} from ${refs[*]}"
|
echo "Creating ${merged_tag} from ${refs[*]}"
|
||||||
docker buildx imagetools create --tag "${merged_tag}" "${refs[@]}"
|
docker buildx imagetools create "${annotations[@]}" --tag "${merged_tag}" "${refs[@]}"
|
||||||
|
|
||||||
echo "Creating ${merged_versioned_tag} from ${refs[*]}"
|
echo "Creating ${merged_versioned_tag} from ${refs[*]}"
|
||||||
docker buildx imagetools create --tag "${merged_versioned_tag}" "${refs[@]}"
|
docker buildx imagetools create "${annotations[@]}" --tag "${merged_versioned_tag}" "${refs[@]}"
|
||||||
}
|
}
|
||||||
|
|
||||||
for tag in $TAGS; do
|
for tag in $TAGS; do
|
||||||
|
|||||||
Reference in New Issue
Block a user