From e50739bb3253b1aa9d3c05ad2d30630f709715c3 Mon Sep 17 00:00:00 2001 From: Joe Groocock Date: Thu, 7 Jul 2022 11:49:16 +0100 Subject: [PATCH] Build amd64/arm64 multiarch images Signed-off-by: Adam Dodman Signed-off-by: Joe Groocock Signed-off-by: Joe Groocock --- .drone.star | 90 +++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 73 insertions(+), 17 deletions(-) diff --git a/.drone.star b/.drone.star index b675358..1a74a07 100644 --- a/.drone.star +++ b/.drone.star @@ -1,15 +1,40 @@ -def main(ctx): - return [ - step("3.15"), - step("3.16",["latest"]), - step("edge"), - ] +repo = "spritsail/alpine" +archs = ["amd64", "arm64"] +branches = ["master"] +versions = { + "3.14": [], + "3.15": [], + "3.16": ["latest"], + "edge": [], +} -def step(alpinever,tags=[]): - vertest = "grep -q '%s' /etc/alpine-release && " % alpinever if alpinever != "edge" else "" +def main(ctx): + builds = [] + + for ver, tags in versions.items(): + depends_on = [] + for arch in archs: + key = "build-%s-%s" % (ver, arch) + builds.append(step(ver, arch, key)) + depends_on.append(key) + + if ctx.build.branch in branches: + builds.append(publish(ver, depends_on, tags)) + + return builds + +def step(ver, arch, key): + vertest = "grep -q '%s' /etc/alpine-release && " % ver if ver != "edge" else "" return { "kind": "pipeline", - "name": "build-%s" % alpinever, + "name": key, + "platform": { + "os": "linux", + "arch": arch, + }, + "environment": { + "DOCKER_IMAGE_TOKEN": ver, + }, "steps": [ { "name": "build", @@ -17,16 +42,17 @@ def step(alpinever,tags=[]): "pull": "always", "settings": { "build_args": [ - "ALPINE_TAG=%s" % alpinever, - ], + "ALPINE_TAG=%s" % ver, + ], + }, }, - }, { "name": "test", "image": "spritsail/docker-test", "pull": "always", "settings": { "run": vertest + "su-exec nobody apk --version", + "verbose": "true", }, }, { @@ -34,16 +60,46 @@ def step(alpinever,tags=[]): "image": "spritsail/docker-publish", "pull": "always", "settings": { - "repo": "spritsail/alpine", - "tags": [alpinever] + tags, - "username": {"from_secret": "docker_username"}, - "password": {"from_secret": "docker_password"}, + "registry": {"from_secret": "registry_url"}, + "login": {"from_secret": "registry_login"}, }, "when": { - "branch": ["master"], + "branch": branches, "event": ["push"], }, }, ] } +def publish(ver, depends, tags=[]): + return { + "kind": "pipeline", + "name": "publish-%s" % ver, + "depends_on": depends, + "platform": { + "os": "linux", + }, + "environment": { + "DOCKER_IMAGE_TOKEN": ver, + }, + "steps": [ + { + "name": "publish", + "image": "spritsail/docker-multiarch-publish", + "pull": "always", + "settings": { + "src_registry": {"from_secret": "registry_url"}, + "src_login": {"from_secret": "registry_login"}, + "dest_repo": repo, + "dest_login": {"from_secret": "docker_login"}, + "tags": [ver] + tags, + }, + "when": { + "branch": branches, + "event": ["push"], + }, + }, + ] + } + +# vim: ft=python sw=2