Brunobkr/llama.cpp_AlgMor24_github
ΩFFFΣLLIa • llama.cpp • AlgMor24 ██████╗ ███████╗███████╗███████╗██╗ ██╗ ██╗ █████╗ ██╔═══██╗██╔════╝██╔════╝██╔════╝██║ ██║ ██║██╔══██╗ ██║ ██║█████╗ █████╗ █████╗ ██║ ██║ ██║███████║ ██║ ██║██╔══╝ ██╔══╝ ██╔══╝ ██║ ██║ ██║██╔══██║ ╚██████╔╝██║ ██║ ███████╗███████╗███████╗██║██║ ██║ ╚═════╝ ╚═╝ ╚═╝ ╚══════╝╚══════╝╚══════╝╚═╝╚═╝ ╚═╝ High-Performance LLM / VLM Inference & Autonomous Agentic Ecosystem… See the full description on the dataset page: https://huggingface.co/datasets/Brunobkr/llama.cpp_AlgMor24_github.
03k
1# This workflow uses actions that are not certified by GitHub.2# They are provided by a third-party and are governed by3# separate terms of service, privacy policy, and support4# documentation.5 6# GitHub recommends pinning actions to a commit SHA.7# To get a newer version, you will need to update the SHA.8# You can also reference a tag or branch, but the action may change without warning.9 10name: Publish Docker image11 12on:13 workflow_dispatch: # allows manual triggering14 inputs:15 skip_s390x:16 description: "Skip the s390x build target (useful for fast test runs that do not need the IBM Z runner)"17 type: boolean18 default: false19 schedule:20 # Rebuild daily rather than on every push because it is expensive21 - cron: '12 4 * * *'22 23concurrency:24 group: ${{ github.workflow }}-${{ github.head_ref && github.ref || github.run_id }}25 cancel-in-progress: true26 27# Fine-grant permission28# https://docs.github.com/en/actions/security-for-github-actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token29permissions:30 packages: write31 32jobs:33 create_tag:34 name: Create and push git tag35 runs-on: ubuntu-slim36 permissions:37 contents: write38 outputs:39 source_tag: ${{ steps.srctag.outputs.name }}40 41 steps:42 - name: Clone43 id: checkout44 uses: actions/checkout@v645 with:46 fetch-depth: 047 48 - name: Determine source tag name49 id: srctag50 uses: ./.github/actions/get-tag-name51 env:52 BRANCH_NAME: ${{ github.head_ref || github.ref_name }}53 54 - name: Create and push git tag55 env:56 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}57 run: |58 git tag ${{ steps.srctag.outputs.name }} || exit 059 git push origin ${{ steps.srctag.outputs.name }} || exit 060 61 build_ui:62 name: Build UI63 needs: create_tag64 uses: ./.github/workflows/ui-build.yml65 with:66 hf_ui_version: ${{ needs.create_tag.outputs.source_tag }}67 68 prepare_matrices:69 name: Prepare Docker matrices70 runs-on: ubuntu-24.0471 outputs:72 build_matrix: ${{ steps.matrices.outputs.build_matrix }}73 merge_matrix: ${{ steps.matrices.outputs.merge_matrix }}74 75 steps:76 - name: Generate build and merge matrices77 id: matrices78 shell: bash79 env:80 SKIP_S390X: ${{ inputs.skip_s390x || 'false' }}81 run: |82 set -euo pipefail83 84 # Keep all build targets in one place and derive merge targets from it.85 cat > build-matrix.json <<'JSON'86 [87 { "tag": "cpu", "dockerfile": ".devops/cpu.Dockerfile", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": false, "runs_on": "ubuntu-24.04" },88 { "tag": "cpu", "dockerfile": ".devops/cpu.Dockerfile", "platforms": "linux/arm64", "full": true, "light": true, "server": true, "free_disk_space": false, "runs_on": "ubuntu-24.04-arm" },89 { "tag": "cpu", "dockerfile": ".devops/s390x.Dockerfile", "platforms": "linux/s390x", "full": true, "light": true, "server": true, "free_disk_space": false, "runs_on": "ubuntu-24.04-s390x", "prebuilt_ui": true },90 { "tag": "cuda cuda12", "dockerfile": ".devops/cuda.Dockerfile", "cuda_version": "12.8.1", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": true, "runs_on": "ubuntu-24.04" },91 { "tag": "cuda cuda12", "dockerfile": ".devops/cuda.Dockerfile", "cuda_version": "12.8.1", "platforms": "linux/arm64", "full": true, "light": true, "server": true, "free_disk_space": true, "runs_on": "ubuntu-24.04-arm" },92 { "tag": "cuda13", "dockerfile": ".devops/cuda.Dockerfile", "cuda_version": "13.3.0", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": true, "runs_on": "ubuntu-24.04" },93 { "tag": "cuda13", "dockerfile": ".devops/cuda.Dockerfile", "cuda_version": "13.3.0", "platforms": "linux/arm64", "full": true, "light": true, "server": true, "free_disk_space": true, "runs_on": "ubuntu-24.04-arm" },94 { "tag": "musa", "dockerfile": ".devops/musa.Dockerfile", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": true, "runs_on": "ubuntu-24.04" },95 { "tag": "intel", "dockerfile": ".devops/intel.Dockerfile", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": true, "runs_on": "ubuntu-24.04" },96 { "tag": "vulkan", "dockerfile": ".devops/vulkan.Dockerfile", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": false, "runs_on": "ubuntu-24.04" },97 { "tag": "vulkan", "dockerfile": ".devops/vulkan.Dockerfile", "platforms": "linux/arm64", "full": true, "light": true, "server": true, "free_disk_space": false, "runs_on": "ubuntu-24.04-arm" },98 { "tag": "rocm", "dockerfile": ".devops/rocm.Dockerfile", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": true, "runs_on": "ubuntu-24.04" },99 { "tag": "openvino", "dockerfile": ".devops/openvino.Dockerfile", "platforms": "linux/amd64", "full": true, "light": true, "server": true, "free_disk_space": false, "runs_on": "ubuntu-24.04" }100 ]101 JSON102 103 if [ "${SKIP_S390X}" = "true" ]; then104 jq 'map(select(.platforms != "linux/s390x"))' build-matrix.json > build-matrix.json.tmp105 mv build-matrix.json.tmp build-matrix.json106 fi107 108 BUILD_MATRIX="$(jq -c . build-matrix.json)"109 MERGE_MATRIX="$(jq -c '110 reduce .[] as $entry ({}; .[$entry.tag] |= (111 . // {112 tag: $entry.tag,113 arches: [],114 full: false,115 light: false,116 server: false117 }118 | .full = (.full or ($entry.full // false))119 | .light = (.light or ($entry.light // false))120 | .server = (.server or ($entry.server // false))121 | .arches += [($entry.platforms | sub("^linux/"; ""))]122 ))123 # Backward compatibility: s390x tags are aliases of cpu for the linux/s390x platform.124 | if (has("cpu") and (((.cpu.arches // []) | index("s390x")) != null)) then125 . + {126 s390x: {127 tag: "s390x",128 arches: ["s390x"],129 full: .cpu.full,130 light: .cpu.light,131 server: .cpu.server132 }133 }134 else135 .136 end137 | [.[] | .arches = (.arches | unique | sort | join(" "))]138 ' build-matrix.json)"139 140 echo "build_matrix=$BUILD_MATRIX" >> "$GITHUB_OUTPUT"141 echo "merge_matrix=$MERGE_MATRIX" >> "$GITHUB_OUTPUT"142 143 push_to_registry:144 name: Push Docker image to Docker Registry145 needs: [prepare_matrices, create_tag, build_ui]146 147 runs-on: ${{ matrix.config.runs_on }}148 strategy:149 fail-fast: false150 matrix:151 config: ${{ fromJSON(needs.prepare_matrices.outputs.build_matrix) }}152 steps:153 - name: Check out the repo154 id: checkout155 uses: actions/checkout@v6156 with:157 fetch-depth: 0158 ref: ${{ needs.create_tag.outputs.source_tag }}159 160 - name: Download prebuilt UI161 if: ${{ matrix.config.prebuilt_ui == true }}162 uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8163 with:164 name: ui-build165 path: tools/ui/dist166 167 - name: Set up QEMU168 if: ${{ contains(matrix.config.platforms, 'linux/amd64') }}169 uses: docker/setup-qemu-action@ce360397dd3f832beb865e1373c09c0e9f86d70a # v4170 with:171 image: tonistiigi/binfmt:qemu-v10.2.1172 173 - name: Set up Docker Buildx174 uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4175 176 - name: Log in to Docker Registry177 uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4178 with:179 registry: ghcr.io180 username: ${{ github.repository_owner }}181 password: ${{ secrets.GITHUB_TOKEN }}182 183 - name: Determine image metadata184 id: meta185 shell: bash186 run: |187 set -euo pipefail188 189 REPO_OWNER="${GITHUB_REPOSITORY_OWNER@L}" # to lower case190 REPO_NAME="${{ github.event.repository.name }}"191 IMAGE_REPO="ghcr.io/${REPO_OWNER}/${REPO_NAME}"192 PREFIX="${IMAGE_REPO}:"193 PLATFORM="${{ matrix.config.platforms }}"194 ARCH_SUFFIX="${PLATFORM#linux/}"195 196 # list all tags possible197 tags="${{ matrix.config.tag }}"198 for tag in $tags; do199 if [[ "$tag" == "cpu" ]]; then200 TYPE=""201 else202 TYPE="-$tag"203 fi204 CACHETAG="${PREFIX}buildcache${TYPE}-${ARCH_SUFFIX}"205 done206 207 SAFE_TAGS="$(echo "$tags" | tr ' ' '_')"208 209 echo "image_repo=$IMAGE_REPO" >> $GITHUB_OUTPUT210 echo "arch_suffix=$ARCH_SUFFIX" >> $GITHUB_OUTPUT211 echo "cache_output_tag=$CACHETAG" >> $GITHUB_OUTPUT212 echo "digest_artifact_suffix=${SAFE_TAGS}-${ARCH_SUFFIX}" >> $GITHUB_OUTPUT213 echo "cache_output_tag=$CACHETAG" # print out for debugging214 env:215 GITHUB_REPOSITORY_OWNER: '${{ github.repository_owner }}'216 217 - name: Get build date218 id: build_date219 run: echo "date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT220 221 - name: Free Disk Space (Ubuntu)222 if: ${{ matrix.config.free_disk_space == true }}223 uses: ggml-org/free-disk-space@v1.3.1224 with:225 # this might remove tools that are actually needed,226 # if set to "true" but frees about 6 GB227 tool-cache: false228 229 # all of these default to true, but feel free to set to230 # "false" if necessary for your workflow231 android: true232 dotnet: true233 haskell: true234 large-packages: true235 docker-images: true236 swap-storage: true237 238 - name: Build and push Full Docker image by digest239 id: build_full240 if: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && matrix.config.full == true }}241 uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7242 with:243 context: .244 platforms: ${{ matrix.config.platforms }}245 outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true,oci-mediatypes=true246 file: ${{ matrix.config.dockerfile }}247 target: full248 provenance: false249 build-args: |250 BUILD_DATE=${{ steps.build_date.outputs.date }}251 APP_VERSION=${{ needs.create_tag.outputs.source_tag }}252 APP_REVISION=${{ steps.checkout.outputs.commit }}253 IMAGE_URL=${{ github.server_url }}/${{ github.repository }}254 IMAGE_SOURCE=${{ github.server_url }}/${{ github.repository }}255 ${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}256 ${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}257 annotations: |258 manifest:org.opencontainers.image.created=${{ steps.build_date.outputs.date }}259 manifest:org.opencontainers.image.version=${{ needs.create_tag.outputs.source_tag }}260 manifest:org.opencontainers.image.revision=${{ steps.checkout.outputs.commit }}261 manifest:org.opencontainers.image.title=llama.cpp262 manifest:org.opencontainers.image.description=LLM inference in C/C++263 manifest:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}264 manifest:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}265 # using github experimental cache266 #cache-from: type=gha267 #cache-to: type=gha,mode=max268 # return to this if the experimental github cache is having issues269 #cache-to: type=local,dest=/tmp/.buildx-cache270 #cache-from: type=local,src=/tmp/.buildx-cache271 # using registry cache (no storage limit)272 cache-from: type=registry,ref=${{ steps.meta.outputs.cache_output_tag }}273 cache-to: type=registry,ref=${{ steps.meta.outputs.cache_output_tag }},mode=max274 275 - name: Build and push Light Docker image by digest276 id: build_light277 if: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && matrix.config.light == true }}278 uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7279 with:280 context: .281 platforms: ${{ matrix.config.platforms }}282 outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true,oci-mediatypes=true283 file: ${{ matrix.config.dockerfile }}284 target: light285 provenance: false286 build-args: |287 BUILD_DATE=${{ steps.build_date.outputs.date }}288 APP_VERSION=${{ needs.create_tag.outputs.source_tag }}289 APP_REVISION=${{ steps.checkout.outputs.commit }}290 IMAGE_URL=${{ github.server_url }}/${{ github.repository }}291 IMAGE_SOURCE=${{ github.server_url }}/${{ github.repository }}292 ${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}293 ${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}294 annotations: |295 manifest:org.opencontainers.image.created=${{ steps.build_date.outputs.date }}296 manifest:org.opencontainers.image.version=${{ needs.create_tag.outputs.source_tag }}297 manifest:org.opencontainers.image.revision=${{ steps.checkout.outputs.commit }}298 manifest:org.opencontainers.image.title=llama.cpp299 manifest:org.opencontainers.image.description=LLM inference in C/C++300 manifest:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}301 manifest:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}302 # using github experimental cache303 #cache-from: type=gha304 #cache-to: type=gha,mode=max305 # return to this if the experimental github cache is having issues306 #cache-to: type=local,dest=/tmp/.buildx-cache307 #cache-from: type=local,src=/tmp/.buildx-cache308 # using registry cache (no storage limit)309 cache-from: type=registry,ref=${{ steps.meta.outputs.cache_output_tag }}310 cache-to: type=registry,ref=${{ steps.meta.outputs.cache_output_tag }},mode=max311 312 - name: Build and push Server Docker image by digest313 id: build_server314 if: ${{ (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch') && matrix.config.server == true }}315 uses: docker/build-push-action@d08e5c354a6adb9ed34480a06d141179aa583294 # v7316 with:317 context: .318 platforms: ${{ matrix.config.platforms }}319 outputs: type=image,name=${{ steps.meta.outputs.image_repo }},push-by-digest=true,name-canonical=true,push=true,oci-mediatypes=true320 file: ${{ matrix.config.dockerfile }}321 target: server322 provenance: false323 build-args: |324 BUILD_DATE=${{ steps.build_date.outputs.date }}325 APP_VERSION=${{ needs.create_tag.outputs.source_tag }}326 APP_REVISION=${{ steps.checkout.outputs.commit }}327 IMAGE_URL=${{ github.server_url }}/${{ github.repository }}328 IMAGE_SOURCE=${{ github.server_url }}/${{ github.repository }}329 ${{ matrix.config.ubuntu_version && format('UBUNTU_VERSION={0}', matrix.config.ubuntu_version) || '' }}330 ${{ matrix.config.cuda_version && format('CUDA_VERSION={0}', matrix.config.cuda_version) || '' }}331 annotations: |332 manifest:org.opencontainers.image.created=${{ steps.build_date.outputs.date }}333 manifest:org.opencontainers.image.version=${{ needs.create_tag.outputs.source_tag }}334 manifest:org.opencontainers.image.revision=${{ steps.checkout.outputs.commit }}335 manifest:org.opencontainers.image.title=llama.cpp336 manifest:org.opencontainers.image.description=LLM inference in C/C++337 manifest:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}338 manifest:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}339 # using github experimental cache340 #cache-from: type=gha341 #cache-to: type=gha,mode=max342 # return to this if the experimental github cache is having issues343 #cache-to: type=local,dest=/tmp/.buildx-cache344 #cache-from: type=local,src=/tmp/.buildx-cache345 # using registry cache (no storage limit)346 cache-from: type=registry,ref=${{ steps.meta.outputs.cache_output_tag }}347 cache-to: type=registry,ref=${{ steps.meta.outputs.cache_output_tag }},mode=max348 349 - name: Export digest metadata350 shell: bash351 run: |352 set -euo pipefail353 354 TAGS="${{ matrix.config.tag }}"355 ARCH_SUFFIX="${{ steps.meta.outputs.arch_suffix }}"356 DIGEST_FILE="/tmp/digests/${{ steps.meta.outputs.digest_artifact_suffix }}.tsv"357 mkdir -p /tmp/digests358 359 add_digest_rows() {360 local image_type="$1"361 local digest="$2"362 363 if [[ -z "$digest" ]]; then364 echo "Missing digest for image_type=${image_type}" >&2365 exit 1366 fi367 368 for tag in $TAGS; do369 printf '%s\t%s\t%s\t%s\n' "$tag" "$ARCH_SUFFIX" "$image_type" "$digest" >> "$DIGEST_FILE"370 done371 }372 373 if [[ "${{ matrix.config.full }}" == "true" ]]; then374 add_digest_rows "full" "${{ steps.build_full.outputs.digest }}"375 fi376 377 if [[ "${{ matrix.config.light }}" == "true" ]]; then378 add_digest_rows "light" "${{ steps.build_light.outputs.digest }}"379 fi380 381 if [[ "${{ matrix.config.server }}" == "true" ]]; then382 add_digest_rows "server" "${{ steps.build_server.outputs.digest }}"383 fi384 385 - name: Upload digest metadata386 uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7387 with:388 name: digests-${{ steps.meta.outputs.digest_artifact_suffix }}389 path: /tmp/digests/${{ steps.meta.outputs.digest_artifact_suffix }}.tsv390 if-no-files-found: error391 392 merge_arch_tags:393 name: Create shared tags from digests394 needs: [prepare_matrices, push_to_registry, create_tag]395 runs-on: ubuntu-24.04396 strategy:397 fail-fast: false398 matrix:399 config: ${{ fromJSON(needs.prepare_matrices.outputs.merge_matrix) }}400 401 steps:402 - name: Check out the repo403 id: checkout404 uses: actions/checkout@v6405 with:406 fetch-depth: 0407 408 - name: Get build date409 id: build_date410 run: echo "date=$(date -u +"%Y-%m-%dT%H:%M:%SZ")" >> $GITHUB_OUTPUT411 412 - name: Download digest metadata413 uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8414 with:415 pattern: digests-*416 path: /tmp/digests417 merge-multiple: true418 419 - name: Set up Docker Buildx420 uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # v4421 422 - name: Log in to Docker Registry423 uses: docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2 # v4424 with:425 registry: ghcr.io426 username: ${{ github.repository_owner }}427 password: ${{ secrets.GITHUB_TOKEN }}428 429 - name: Create tags from digests430 shell: bash431 run: |432 set -euo pipefail433 434 REPO_OWNER="${GITHUB_REPOSITORY_OWNER@L}" # to lower case435 REPO_NAME="${{ github.event.repository.name }}"436 IMAGE_REPO="ghcr.io/${REPO_OWNER}/${REPO_NAME}"437 PREFIX="${IMAGE_REPO}:"438 SRC_TAG="${{ needs.create_tag.outputs.source_tag }}"439 BUILD_DATE="${{ steps.build_date.outputs.date }}"440 COMMIT_SHA="${{ steps.checkout.outputs.commit }}"441 TAGS="${{ matrix.config.tag }}"442 ARCHES="${{ matrix.config.arches }}"443 DIGEST_GLOB="/tmp/digests/*.tsv"444 445 if ! ls ${DIGEST_GLOB} >/dev/null 2>&1; then446 echo "No digest metadata found in /tmp/digests" >&2447 exit 1448 fi449 450 if [[ -z "$SRC_TAG" ]]; then451 echo "Missing source tag from create_tag" >&2452 exit 1453 fi454 455 find_digest() {456 local tag_name="$1"457 local arch="$2"458 local image_type="$3"459 local digest460 461 digest="$(awk -F '\t' -v t="$tag_name" -v a="$arch" -v i="$image_type" '$1 == t && $2 == a && $3 == i { print $4; exit }' ${DIGEST_GLOB})"462 463 # Backward compatibility: s390x tags are aliases of cpu for the linux/s390x platform.464 if [[ -z "$digest" && "$tag_name" == "s390x" && "$arch" == "s390x" ]]; then465 digest="$(awk -F '\t' -v t="cpu" -v a="$arch" -v i="$image_type" '$1 == t && $2 == a && $3 == i { print $4; exit }' ${DIGEST_GLOB})"466 fi467 468 if [[ -z "$digest" ]]; then469 echo "Missing digest for tag=${tag_name} arch=${arch} image_type=${image_type}" >&2470 exit 1471 fi472 473 echo "$digest"474 }475 476 create_manifest_tags() {477 local image_type="$1"478 local tag_name="$2"479 local suffix="$3"480 481 local merged_tag="${PREFIX}${image_type}${suffix}"482 local merged_versioned_tag="${merged_tag}-${SRC_TAG}"483 484 local refs=()485 486 for arch in $ARCHES; do487 local digest488 digest="$(find_digest "$tag_name" "$arch" "$image_type")"489 refs+=("${IMAGE_REPO}@${digest}")490 done491 492 local annotations=(493 --annotation "index:org.opencontainers.image.created=${BUILD_DATE}"494 --annotation "index:org.opencontainers.image.version=${SRC_TAG}"495 --annotation "index:org.opencontainers.image.revision=${COMMIT_SHA}"496 --annotation "index:org.opencontainers.image.title=llama.cpp"497 --annotation "index:org.opencontainers.image.description=LLM inference in C/C++"498 --annotation "index:org.opencontainers.image.url=${{ github.server_url }}/${{ github.repository }}"499 --annotation "index:org.opencontainers.image.source=${{ github.server_url }}/${{ github.repository }}"500 )501 502 echo "Creating ${merged_tag} from ${refs[*]}"503 docker buildx imagetools create "${annotations[@]}" --tag "${merged_tag}" "${refs[@]}"504 505 echo "Creating ${merged_versioned_tag} from ${refs[*]}"506 docker buildx imagetools create "${annotations[@]}" --tag "${merged_versioned_tag}" "${refs[@]}"507 }508 509 for tag in $TAGS; do510 if [[ "$tag" == "cpu" ]]; then511 TYPE=""512 else513 TYPE="-$tag"514 fi515 516 if [[ "${{ matrix.config.full }}" == "true" ]]; then517 create_manifest_tags "full" "$tag" "$TYPE"518 fi519 520 if [[ "${{ matrix.config.light }}" == "true" ]]; then521 create_manifest_tags "light" "$tag" "$TYPE"522 fi523 524 if [[ "${{ matrix.config.server }}" == "true" ]]; then525 create_manifest_tags "server" "$tag" "$TYPE"526 fi527 done528 env:529 GITHUB_REPOSITORY_OWNER: '${{ github.repository_owner }}'530 