Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
125 commits
Select commit Hold shift + click to select a range
f7afe70
wip
jobcespedes Jul 27, 2025
c37e582
wip
jobcespedes Jul 27, 2025
3f9eadd
wip
jobcespedes Jul 27, 2025
eb54b57
wip2
jobcespedes Jul 27, 2025
a8a9e74
wip
jobcespedes Jul 27, 2025
5604711
wip
jobcespedes Jul 27, 2025
f3de0b7
wip
jobcespedes Jul 27, 2025
e3a5c00
wip
jobcespedes Jul 27, 2025
8d07269
wip
jobcespedes Jul 27, 2025
562a72e
wip
jobcespedes Jul 27, 2025
dd3877f
wip
jobcespedes Jul 27, 2025
fd37175
wip
jobcespedes Jul 27, 2025
c0d27e0
wip
jobcespedes Jul 27, 2025
74934cf
wip
jobcespedes Jul 27, 2025
f5751eb
wip
jobcespedes Jul 27, 2025
8b73169
wip
jobcespedes Jul 27, 2025
4e2aa8c
wip
jobcespedes Jul 27, 2025
2de75d1
wip
jobcespedes Jul 27, 2025
399fb36
wip
jobcespedes Jul 27, 2025
82208f8
wip
jobcespedes Jul 27, 2025
56b4d53
wip
jobcespedes Jul 27, 2025
a0328a7
wip
jobcespedes Jul 27, 2025
bb7a674
wip
jobcespedes Jul 27, 2025
9e879e0
wip
jobcespedes Jul 27, 2025
b0ecbca
wip
jobcespedes Jul 27, 2025
25b08e3
wip
jobcespedes Jul 27, 2025
382b4ef
wip
jobcespedes Jul 27, 2025
31ce897
wip
jobcespedes Jul 27, 2025
7a4a5ce
wip
jobcespedes Jul 27, 2025
92d6e9e
wip
jobcespedes Jul 27, 2025
4b69ee6
wip
jobcespedes Jul 27, 2025
b39b87b
wip
jobcespedes Jul 27, 2025
34b9331
wip
jobcespedes Jul 27, 2025
db1624f
wip
jobcespedes Jul 27, 2025
dfe31f4
wip
jobcespedes Jul 27, 2025
38056a4
wip
jobcespedes Jul 27, 2025
eebd94b
wip
jobcespedes Jul 27, 2025
2915ec6
wip
jobcespedes Jul 27, 2025
2a85954
wip
jobcespedes Jul 27, 2025
a0637f7
wip
jobcespedes Jul 27, 2025
2c7a2b5
wip
jobcespedes Jul 27, 2025
2c6eef7
wip
jobcespedes Jul 27, 2025
147b27d
wip
jobcespedes Jul 27, 2025
ecd1eea
wip
jobcespedes Jul 27, 2025
ede8f01
wip
jobcespedes Jul 27, 2025
be63935
wip
jobcespedes Jul 27, 2025
6d94865
wip
jobcespedes Jul 27, 2025
d1f007a
wip
jobcespedes Jul 27, 2025
1d7601a
wip
jobcespedes Jul 27, 2025
83043bd
wip
jobcespedes Jul 27, 2025
779de40
wip
jobcespedes Jul 27, 2025
6f368da
wip
jobcespedes Jul 27, 2025
557b0a6
wip
jobcespedes Jul 27, 2025
3d7d4dd
wip
jobcespedes Jul 27, 2025
9c6beb5
wip
jobcespedes Jul 27, 2025
5abdb1d
wip
jobcespedes Jul 27, 2025
34d99b4
wip
jobcespedes Jul 27, 2025
671da32
wip
jobcespedes Jul 27, 2025
a27b3c1
wip
jobcespedes Jul 27, 2025
1b5cdf7
wip
jobcespedes Jul 27, 2025
692761c
wip
jobcespedes Jul 28, 2025
6084c7e
wip
jobcespedes Jul 28, 2025
e81c0c9
wip
jobcespedes Jul 28, 2025
1759479
wip
jobcespedes Jul 28, 2025
5b50515
wip
jobcespedes Jul 28, 2025
d5876a4
wip
jobcespedes Jul 28, 2025
8658b3d
wip
jobcespedes Jul 28, 2025
179f023
wip
jobcespedes Jul 28, 2025
e6cd4d2
wip
jobcespedes Jul 28, 2025
cd04439
wip
jobcespedes Jul 28, 2025
9571782
wip
jobcespedes Jul 28, 2025
756eb04
wip
jobcespedes Jul 28, 2025
5de44b7
wip
jobcespedes Jul 28, 2025
69f70ef
wip
jobcespedes Jul 28, 2025
2f46472
wip
jobcespedes Jul 28, 2025
a9f5f5d
wip
jobcespedes Jul 28, 2025
2b079f7
wip
jobcespedes Jul 28, 2025
1fd8a08
wip
jobcespedes Jul 28, 2025
e575df8
wip
jobcespedes Jul 28, 2025
a5ae079
wip
jobcespedes Jul 28, 2025
c4a6b9a
wip
jobcespedes Jul 28, 2025
3717d56
wip
jobcespedes Jul 28, 2025
d184de0
wip
jobcespedes Jul 28, 2025
2be9046
wip
jobcespedes Jul 28, 2025
f075268
wip
jobcespedes Jul 28, 2025
0e5fde6
wip
jobcespedes Jul 28, 2025
c77ba01
wip
jobcespedes Jul 28, 2025
5bb089c
wip
jobcespedes Jul 28, 2025
72ef367
wip
jobcespedes Jul 28, 2025
ef5c0cd
wip
jobcespedes Jul 28, 2025
0997aaa
wip
jobcespedes Jul 28, 2025
90517be
wip
jobcespedes Jul 28, 2025
cef3d85
wip
jobcespedes Jul 28, 2025
ec0f6a9
wip
jobcespedes Jul 28, 2025
dc971b3
wip
jobcespedes Jul 28, 2025
7e271cd
wip
jobcespedes Jul 28, 2025
46d6e94
wip
jobcespedes Jul 28, 2025
cbf8485
wip
jobcespedes Jul 28, 2025
c2d6abc
wip
jobcespedes Jul 28, 2025
86bb477
wip
jobcespedes Jul 28, 2025
19fa9d8
wip
jobcespedes Jul 28, 2025
cf4f7c4
wip
jobcespedes Jul 28, 2025
4e3f18a
wip
jobcespedes Jul 28, 2025
75570a7
wip
jobcespedes Jul 28, 2025
44f486a
wip
jobcespedes Jul 28, 2025
a2d2294
wip
jobcespedes Jul 28, 2025
ed68718
wip
jobcespedes Jul 28, 2025
c758345
wip
jobcespedes Jul 28, 2025
2dcd801
wip
jobcespedes Jul 28, 2025
81872f0
wip
jobcespedes Jul 28, 2025
ca977f9
wip
jobcespedes Jul 28, 2025
f504dff
wip
jobcespedes Jul 28, 2025
34a5d04
wip
jobcespedes Jul 28, 2025
73f4395
wip
jobcespedes Jul 28, 2025
fa48a1a
wip
jobcespedes Jul 28, 2025
c34d36d
wip
jobcespedes Jul 28, 2025
b0be9f1
wip
jobcespedes Jul 28, 2025
e587445
wip
jobcespedes Jul 28, 2025
42ca82c
wip
jobcespedes Jul 28, 2025
86fd111
wip
jobcespedes Jul 28, 2025
e6dd858
wip
jobcespedes Jul 28, 2025
2d88cda
wip
jobcespedes Jul 29, 2025
6c1c090
wip
jobcespedes Jul 29, 2025
2327e19
wip
jobcespedes Jul 29, 2025
41e65ca
wip
jobcespedes Jul 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 90 additions & 0 deletions .github/actions/buildx-bake/build/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: "Build & Push Images"
description: "Download metadata, build multi‑arch images, push by digest, and upload per‑platform digests."
inputs:
bake-target:
description: 'Target name for `docker buildx bake`'
required: false
type: string
default: 'build'
registry:
description: 'The container registry'
required: false
default: 'ghcr.io'
registry-username:
description: 'The container registry username'
required: true
default: ${{ github.actor }}
registry-password:
description: 'The container registry password'
required: true
registry-image:
description: 'Container registry + image prefix'
required: false
type: string
free-disk-space:
description: 'Free disk space before build'
required: false
default: false
type: boolean
runs:
using: "composite"
steps:
- name: Prepare env
shell: bash
run: |
platform=${{ matrix.platform }}
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV

- name: Download meta bake file
uses: actions/download-artifact@v4
with:
name: bake-meta
path: ${{ runner.temp }}

- name: Login to registry
uses: docker/login-action@v3
with:
registry: ${{ inputs.registry }}
username: ${{ inputs.registry-username }}
password: ${{ inputs.registry-password }}

- name: Setup QEMU
uses: docker/setup-qemu-action@v3

- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Free Disk Space (Ubuntu)
uses: jlumbroso/free-disk-space@v1.3.1
if: ${{ inputs.free-disk-space == true }}
with:
tool-cache: true

- name: Build & push images
id: bake
uses: docker/bake-action@v6
env:
NO_TAG: true
with:
files: |
./docker-bake.hcl
cwd://${{ runner.temp }}/bake-meta.json
targets: ${{ inputs.bake-target }}
set: |
${{ inputs.registry-image != '' && format('*.tags={0}', inputs.registry-image) || '' }}
*.platform=${{ matrix.platform }}
*.output=type=image,push-by-digest=true,name-canonical=true,push=true

- name: Export container digests
shell: bash
run: |
mkdir -p ${{ runner.temp }}/digests
echo '${{ steps.bake.outputs.metadata }}' | jq 'with_entries(select(.value["containerimage.digest"]?) | .value |= {name: .["image.name"], digests:[.["containerimage.digest"]]})' > ${{ runner.temp }}/digests/${{ env.PLATFORM_PAIR }}.json

- name: Upload digest
uses: actions/upload-artifact@v4
with:
name: digests-${{ env.PLATFORM_PAIR }}
path: ${{ runner.temp }}/digests/*
if-no-files-found: error
retention-days: 1
71 changes: 71 additions & 0 deletions .github/actions/buildx-bake/merge/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
name: "Merge & Publish Manifests"
description: "Download digests, create manifest lists, push them, and inspect the published images."
inputs:
registry:
description: 'The container registry'
required: false
default: 'ghcr.io'
registry-username:
description: 'The container registry username'
required: true
default: ${{ github.actor }}
registry-password:
description: 'The container registry password'
required: true
runs:
using: "composite"
steps:
- name: Download meta bake file
uses: actions/download-artifact@v4
with:
name: bake-meta
path: ${{ runner.temp }}

- name: Download all digests
uses: actions/download-artifact@v4
with:
path: ${{ runner.temp }}/digests
pattern: digests-*
merge-multiple: true

- name: Login to registry
uses: docker/login-action@v3
with:
registry: ${{ inputs.registry }}
username: ${{ inputs.registry-username }}
password: ${{ inputs.registry-password }}

- name: Setup Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Create manifest lists & push
shell: bash
run: |
JSON_FILE=${{ runner.temp }}/digests/all.json
jq -s '
reduce .[] as $doc ({};
reduce ($doc|to_entries[]) as $kv (
.;
.[$kv.key].name = $kv.value.name
| .[$kv.key].digests = ((.[$kv.key].digests // []) + $kv.value.digests)
)
)
' ${{ runner.temp }}/digests/*.json > $JSON_FILE
for key in $(jq -r 'keys[]' "$JSON_FILE"); do
image_name=$(jq -r ".\"$key\".name" "$JSON_FILE")
image_digests=$(jq -r ".\"$key\".digests[]" "$JSON_FILE" | while read -r digest; do echo "${image_name}@${digest} "; done)
image_tags=$(jq -cr '(.target."docker-metadata-action".tags // [] ) | map("-t '${image_name}':" + sub(".*:"; "")) | join(" ")' ${{ runner.temp }}/bake-meta.json)
docker buildx imagetools create \
${image_tags} \
${image_digests}
done

- name: Inspect published images
shell: bash
run: |
JSON_FILE=${{ runner.temp }}/digests/all.json
version=$(jq -r '.target."docker-metadata-action".args.DOCKER_META_VERSION' ${{ runner.temp }}/bake-meta.json)
for key in $(jq -r 'keys[]' "$JSON_FILE"); do
image_name=$(jq -r ".\"$key\".name" "$JSON_FILE")
docker buildx imagetools inspect ${image_name}:${version}
done
57 changes: 57 additions & 0 deletions .github/actions/buildx-bake/prepare/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
name: "Prepare Build Matrix & Metadata"
description: "Generate platform matrix and bake metadata file for later steps."
inputs:
bake-target:
description: 'Target name for `docker buildx bake`'
required: false
type: string
default: 'build'
meta-tags:
description: 'The tags to add to the image'
required: false
meta-labels:
description: 'The labels to add to the image'
required: false
registry-image:
description: 'Container registry + image prefix (e.g. ghcr.io/org/repo)'
required: false
type: string
outputs:
matrix:
description: 'JSON array of platforms'
value: ${{ steps.platforms.outputs.matrix }}
runs:
using: "composite"
steps:
- name: Create matrix
id: platforms
shell: bash
run: |
MATRIX=$(docker buildx bake ${{ inputs.bake-target }} \
--print | jq -c '.target | to_entries | map(.value.platforms[]) | unique')
echo "matrix=$MATRIX" >>${GITHUB_OUTPUT}

- name: Show matrix
shell: bash
run: echo ${{ steps.platforms.outputs.matrix }}

- name: Docker metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ inputs.registry-image }}
tags: ${{ inputs.meta-tags }}
labels: ${{ inputs.meta-labels }}

- name: Rename meta file
shell: bash
run: |
mv "${{ steps.meta.outputs.bake-file }}" "${{ runner.temp }}/bake-meta.json"

- name: Upload meta bake file
uses: actions/upload-artifact@v4
with:
name: bake-meta
path: ${{ runner.temp }}/bake-meta.json
if-no-files-found: error
retention-days: 1
48 changes: 48 additions & 0 deletions .github/actions/command/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: "Run Command & Upload Artifact"
description: "Composite action to run a command and upload its output as an artifact."
inputs:
command:
description: 'Command to run'
required: true
type: string
artifact-name:
description: 'Name of the composite action'
required: false
type: string
artifact-path:
description: 'Path to the artifact to upload'
required: false
type: string
artifact-overwrite:
description: 'Whether to overwrite the artifact if it already exists'
required: false
type: boolean
default: false
artifact-if-no-files-found:
description: 'Action to take if no files are found to upload'
required: false
type: string
default: 'warn'
artifact-retention-days:
description: 'Number of days to retain the artifact'
required: false
type: number
default: 30

runs:
using: "composite"
steps:
- name: Run command
id: run-command
shell: bash
run: "${{ inputs.command }}"

- name: Upload command output as artifact
uses: eviden-actions/upload-artifact@v2
if: inputs.artifact-name != '' && inputs.artifact-path != ''
with:
name: ${{ inputs.artifact-name }}
path: ${{ inputs.artifact-path }}
overwrite: ${{ inputs.artifact-overwrite }}
if-no-files-found: ${{ inputs.artifact-if-no-files-found }}
retention-days: ${{ inputs.artifact-retention-days }}
Loading