-
Notifications
You must be signed in to change notification settings - Fork 0
152 lines (136 loc) · 4.89 KB
/
Copy pathbuild-container.yml
File metadata and controls
152 lines (136 loc) · 4.89 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
name: Build and Push Container
on:
workflow_call:
inputs:
context:
required: true
type: string
dockerfile:
default: Dockerfile
type: string
image:
default: database-development
type: string
tag:
required: true
type: string
latest:
default: false
type: boolean
push:
default: false
type: boolean
architectures:
description: "List of architectures as JSON-array"
type: string
default: '["amd64","arm64"]'
permissions:
contents: read
packages: write
jobs:
build:
name: Build image
runs-on: ubuntu-24.04
strategy:
matrix:
platform: ${{ fromJSON(inputs.architectures) }}
steps:
- name: Install qemu dependency
run: |
sudo apt-get update
sudo apt-get install -y qemu-user-static
- name: Checkout repository
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup environment variables
run: |
echo "CONTEXT=${CONTEXT}" >> ${GITHUB_ENV}
echo "IMAGE=${IMAGE}" >> ${GITHUB_ENV}
echo "PLATFORM=${PLATFORM}" >> ${GITHUB_ENV}
[ "${PLATFORM}" = "amd64" ] && echo "BUILDAH_ARCH=linux/amd64" >> ${GITHUB_ENV} || true
[ "${PLATFORM}" = "arm64" ] && echo "BUILDAH_ARCH=linux/arm64/v8" >> ${GITHUB_ENV} || true
echo "DOCKERFILE=${DOCKERFILE}" >> ${GITHUB_ENV}
echo "TAG=${TAG}" >> ${GITHUB_ENV}
env:
PLATFORM: ${{ matrix.platform }}
CONTEXT: ${{ inputs.context }}
IMAGE: ${{ inputs.image }}
DOCKERFILE: ${{ inputs.dockerfile }}
TAG: ${{ inputs.tag }}
- name: Build image with buildah
uses: redhat-actions/buildah-build@7a95fa7ee0f02d552a32753e7414641a04307056 # v2
with:
image: erhardtconsulting/${{ env.IMAGE }}
tags: ${{ env.TAG }}-${{ env.PLATFORM }}
platform: ${{ env.BUILDAH_ARCH }}
context: ${{ env.CONTEXT }}
containerfiles: |
${{ env.DOCKERFILE }}
- name: Create tar image
run: |
buildah push erhardtconsulting/${IMAGE}:${TAG}-${PLATFORM} oci-archive:/tmp/${IMAGE}-${TAG}-${PLATFORM}.tar
- name: Upload container
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: ${{ env.IMAGE }}-${{ env.TAG }}-${{ env.PLATFORM }}
path: /tmp/${{ env.IMAGE }}-${{ env.TAG }}-${{ env.PLATFORM }}.tar
if-no-files-found: error
retention-days: 3
push:
if: ${{ inputs.push }}
name: Push image
runs-on: ubuntu-24.04
needs: build
steps:
- name: Setup environment variables
run: |
echo "IMAGE=${IMAGE}" >> ${GITHUB_ENV}
echo "TAG=${TAG}" >> ${GITHUB_ENV}
echo "DATE=$(date +'%Y-%m-%d')" >> $GITHUB_ENV
env:
IMAGE: ${{ inputs.image }}
TAG: ${{ inputs.tag }}
- name: Download all artifacts
run: |
ARCHS=$(echo '${{ inputs.architectures }}' | jq -r '.[]')
mkdir -p /tmp
for arch in $ARCHS; do
echo "==> Downloading artifact: $arch"
gh run --repo github.com/erhardtconsulting/database-development download ${GITHUB_RUN_ID} --name "${IMAGE}-${TAG}-$arch" --dir /tmp
done
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: List images
run: ls -lh /tmp
- name: Create multiarch-manifest
run: |
ARCHS=$(echo '${{ inputs.architectures }}' | jq -r '.[]')
buildah manifest create erhardtconsulting/${IMAGE}:${TAG}
for arch in $ARCHS; do
echo "==> Adding: $arch"
buildah manifest add erhardtconsulting/${IMAGE}:${TAG} oci-archive:/tmp/${IMAGE}-${TAG}-${arch}.tar
done
- name: Add tags
run: |
for registry in "ghcr.io"; do
buildah tag erhardtconsulting/${IMAGE}:${TAG} ${registry}/erhardtconsulting/${IMAGE}:${TAG}
done
echo "PUSH_TAGS=${TAG}" >> $GITHUB_ENV
- name: Tag image as latest
if: ${{ inputs.latest }}
run: |
for registry in "ghcr.io"; do
buildah tag erhardtconsulting/${IMAGE}:${TAG} ${registry}/erhardtconsulting/${IMAGE}:latest
done
echo "PUSH_TAGS=${TAG} latest" >> $GITHUB_ENV
- name: Log in to ghcr.io
uses: redhat-actions/podman-login@4934294ad0449894bcd1e9f191899d7292469603 # v1
with:
registry: ghcr.io/erhardtconsulting
username: ${{ github.actor }}
password: ${{ github.token }}
- name: Push image to ghcr.io
uses: redhat-actions/push-to-registry@5ed88d269cf581ea9ef6dd6806d01562096bee9c # v2
with:
registry: ghcr.io/erhardtconsulting
image: ${{ env.IMAGE }}
tags: ${{ env.PUSH_TAGS }}