kicad_auto/do_tag.py

99 lines
3.7 KiB
Python
Executable File

#!/usr/bin/python3
import os
import re
import stat
import subprocess
CUR_VERSION = '1.4.0'
CUR_K5 = '5.1.9'
CUR_K6 = '6.0.8'
CUR_DEB = '11.5'
ITERA = '4'
TAGS = {'latest': CUR_DEB+'-'+CUR_K5, 'ki6': 'ki'+CUR_K6+'_Debian'}
NEW_TAGS = {'latest': '-'+ITERA+'_k'+CUR_K5+'_d'+CUR_DEB, 'ki6': '-'+ITERA+'_k'+CUR_K6+'_d'+CUR_DEB}
NEW_DEB1 = {'latest': CUR_K5, 'ki6': CUR_K6}
NEW_DEB2 = {'latest': CUR_K5+'_d'+CUR_DEB, 'ki6': CUR_K6+'_d'+CUR_DEB}
IMAGES = ['kicad_debian', 'kicad_auto', 'kicad_auto_test']
NEW_NAMES = {'kicad_auto:latest': 'kicad5_auto',
'kicad_auto:ki6': 'kicad6_auto',
'kicad_auto_test:latest': 'kicad5_auto_full',
'kicad_auto_test:ki6': 'kicad6_auto_full'}
NEW_NAMES_D = {'kicad_debian:latest': 'kicad5_debian',
'kicad_debian:ki6': 'kicad6_debian'}
OWNER = 'setsoft'
OWNER2 = 'ghcr.io/inti-cmnb'
DEBUG = False
def do_tag(name, hash, current):
cmd = ['docker', 'tag', hash, name]
print('{} -> {}'.format(current, cmd))
if not DEBUG:
subprocess.run(cmd, check=True)
res = subprocess.run(['docker', 'images'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, check=True)
reg = re.compile(r'^(\S+)\s+(\S+)\s+([0-9a-z]+)\s+')
if 1:
for ln in res.stdout.decode().split('\n'):
r = reg.search(ln)
if r is None:
continue
r = r.groups()
tag = r[1]
if tag not in TAGS:
continue
r1 = r[0].split('/')
if len(r1) != 2 or r1[0] != OWNER:
continue
img = r1[1]
if img not in IMAGES:
continue
hash = r[2]
current = r[0]+':'+tag
do_tag('{}/{}:{}'.format(OWNER, img, TAGS[tag]), hash, current)
do_tag('{}/{}:{}'.format(OWNER2, img, TAGS[tag]), hash, current)
do_tag('{}/{}:{}'.format(OWNER2, img, tag), hash, current)
old_lu = img+':'+tag
try:
new_img = NEW_NAMES[old_lu]
do_tag('{}/{}:{}'.format(OWNER2, new_img, 'latest'), hash, current)
do_tag('{}/{}:{}'.format(OWNER2, new_img, CUR_VERSION), hash, current)
do_tag('{}/{}:{}'.format(OWNER2, new_img, CUR_VERSION+NEW_TAGS[tag]), hash, current)
except KeyError:
pass
try:
new_img = NEW_NAMES_D[old_lu]
do_tag('{}/{}:{}'.format(OWNER2, new_img, 'latest'), hash, current)
do_tag('{}/{}:{}'.format(OWNER2, new_img, NEW_DEB1[tag]), hash, current)
do_tag('{}/{}:{}'.format(OWNER2, new_img, NEW_DEB2[tag]), hash, current)
except KeyError:
pass
with open('push.sh', 'wt') as f:
f.write('#!/bin/sh\n')
for o in [OWNER, OWNER2]:
for i in IMAGES:
for t in TAGS.values():
f.write('docker push {}/{}:{}\n'.format(o, i, t))
if o == OWNER2:
for i in IMAGES:
f.write('docker push {}/{}:latest\n'.format(o, i))
f.write('docker push {}/{}:ki6\n'.format(o, i))
if i == 'kicad_debian':
for t in TAGS.keys():
new_name = NEW_NAMES_D[i+':'+t]
f.write('docker push {}/{}:latest\n'.format(o, new_name))
f.write('docker push {}/{}:{}\n'.format(o, new_name, NEW_DEB1[t]))
f.write('docker push {}/{}:{}\n'.format(o, new_name, NEW_DEB2[t]))
else:
for t in TAGS.keys():
new_name = NEW_NAMES[i+':'+t]
f.write('docker push {}/{}:latest\n'.format(o, new_name))
f.write('docker push {}/{}:{}\n'.format(o, new_name, CUR_VERSION))
f.write('docker push {}/{}:{}\n'.format(o, new_name, CUR_VERSION+NEW_TAGS[t]))
os.chmod('push.sh', stat.S_IRWXU)