From 80cdda202ea6875be47482212a0fefcf87f9c2e1 Mon Sep 17 00:00:00 2001 From: Joe Groocock Date: Fri, 17 Jun 2022 13:29:39 +0100 Subject: [PATCH] Build amd64/arm64 multiarch images Signed-off-by: Adam Dodman Signed-off-by: Joe Groocock --- .drone.star | 87 ++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 72 insertions(+), 15 deletions(-) diff --git a/.drone.star b/.drone.star index b675358..e3f9be8 100644 --- a/.drone.star +++ b/.drone.star @@ -1,15 +1,37 @@ -def main(ctx): - return [ - step("3.15"), - step("3.16",["latest"]), - step("edge"), - ] +repo = "spritsail/alpine" +archs = ["amd64", "arm64"] +versions = ["edge", "3.14", "3.15", "3.16"] +branches = ["master"] -def step(alpinever,tags=[]): - vertest = "grep -q '%s' /etc/alpine-release && " % alpinever if alpinever != "edge" else "" +def main(ctx): + builds = [] + + for ver in versions: + depends_on = [] + srctpl = "drone/%s/${DRONE_BUILD_NUMBER}:%s-ARCH" % (ctx.repo.slug, ver) + for arch in archs: + key = "build-%s-%s" % (ver, arch) + tmprepo = "drone/%s/${DRONE_BUILD_NUMBER}:%s-%s" % (ctx.repo.slug, ver, arch) + builds.append(step(ver, arch, key, tmprepo)) + depends_on.append(key) + + if ctx.build.branch in branches: + tags = [] + if ver == versions[-1]: + tags.append("latest") + builds.append(publish(ver, srctpl, depends_on, tags)) + + return builds + +def step(ver, arch, key, tmprepo): + 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, + }, "steps": [ { "name": "build", @@ -17,8 +39,9 @@ def step(alpinever,tags=[]): "pull": "always", "settings": { "build_args": [ - "ALPINE_TAG=%s" % alpinever, + "ALPINE_TAG=%s" % ver, ], + "repo": tmprepo, }, }, { @@ -27,6 +50,7 @@ def step(alpinever,tags=[]): "pull": "always", "settings": { "run": vertest + "su-exec nobody apk --version", + "repo": tmprepo, }, }, { @@ -34,16 +58,49 @@ 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"}, + "from": tmprepo, + "repo": tmprepo, + "registry": {"from_secret": "registry_url"}, + "username": {"from_secret": "registry_username"}, + "password": {"from_secret": "registry_password"}, }, "when": { - "branch": ["master"], + "branch": branches, "event": ["push"], }, }, ] } +def publish(ver, srctpl, depends, tags=[]): + return { + "kind": "pipeline", + "name": "publish-%s" % ver, + "depends_on": depends, + "platform": { + "os": "linux", + }, + "steps": [ + { + "name": "publish", + "image": "spritsail/docker-multiarch-publish", + "pull": "always", + "settings": { + "src_template": srctpl, + "src_registry": {"from_secret": "registry_url"}, + "src_username": {"from_secret": "registry_username"}, + "src_password": {"from_secret": "registry_password"}, + "dest_repo": repo, + "dest_username": {"from_secret": "docker_username"}, + "dest_password": {"from_secret": "docker_password"}, + "tags": [ver] + tags, + }, + "when": { + "branch": branches, + "event": ["push"], + }, + }, + ] + } + +# vim: ft=python sw=2