11#!/usr/bin/env python3
22from plumbum import FG , local
3- from plumbum .cmd import docker
3+ from plumbum .cmd import date , docker
44
55REGISTRY = local .env .get ("REGISTRY_HOST" , "docker.io" )
66REPO = local .env ["DOCKER_REPO" ]
77SUFFIX = local .env .get ("DOCKER_REPO_SUFFIX" , "" )
88VERSION = local .env ["DOCKER_TAG" ]
99
10+ PLATFORMS = local .env .get ("DOCKER_PLATFORM" )
11+ PG_VERSION = local .env .get ("PG_VERSION" , VERSION .split ("-" )[0 ])
12+ GIT_SHA1 = local .env .get ("GIT_SHA1" , "" )
13+
1014# Log all locally available images; will help to pin images
1115docker ["image" , "ls" , "--digests" , REPO ] & FG
1216
@@ -20,13 +24,39 @@ docker(
2024 REGISTRY ,
2125)
2226
23- # Push built images
24- local_image = "%s:%s" % (REPO , VERSION )
25- public_image = "%s/%s%s:%s" % (REGISTRY , REPO , SUFFIX , VERSION )
26- docker ["image" , "tag" , local_image , public_image ] & FG
27- docker ["image" , "push" , public_image ] & FG
28- if VERSION == local .env .get ("LATEST_RELEASE" ):
29- latest_version = "alpine" if VERSION .endswith ("-alpine" ) else "latest"
30- public_image = "%s/%s%s:%s" % (REGISTRY , REPO , SUFFIX , latest_version )
31- docker ["image" , "tag" , local_image , public_image ] & FG
32- docker ["image" , "push" , public_image ] & FG
27+
28+ def public_image (tag ):
29+ return "%s/%s%s:%s" % (REGISTRY , REPO , SUFFIX , tag )
30+
31+
32+ def tags_to_push ():
33+ tags = [VERSION ]
34+ if VERSION == local .env .get ("LATEST_RELEASE" ):
35+ latest_version = "alpine" if VERSION .endswith ("-alpine" ) else "latest"
36+ tags .append (latest_version )
37+ return tags
38+
39+
40+ if PLATFORMS :
41+ BUILD_DATE = date ("--rfc-3339" , "ns" )
42+ cmd = docker [
43+ "buildx" ,
44+ "build" ,
45+ "--platform" ,
46+ PLATFORMS ,
47+ "--build-arg" ,
48+ "BASE_TAG={}-alpine" .format (PG_VERSION ),
49+ "--build-arg" ,
50+ "VCS_REF={}" .format (GIT_SHA1 ),
51+ "--build-arg" ,
52+ "BUILD_DATE={}" .format (BUILD_DATE ),
53+ ]
54+ for tag in tags_to_push ():
55+ cmd = cmd ["--tag" , public_image (tag )]
56+ (cmd ["--push" , "." ] & FG )
57+ else :
58+ local_image = "%s:%s" % (REPO , VERSION )
59+ for tag in tags_to_push ():
60+ image = public_image (tag )
61+ docker ["image" , "tag" , local_image , image ] & FG
62+ docker ["image" , "push" , image ] & FG
0 commit comments