Files

40 lines
1.9 KiB
Python

#!/usr/bin/env python3
"""Remove only temporary smoke-test resources labeled by this workflow attempt."""
import argparse
import subprocess
def cleanup(label, client=None, image=None):
if not label.startswith('io.rawmark.ci.run=') or not label.removeprefix('io.rawmark.ci.run='):
raise ValueError('Expected a nonempty RawMark CI run label')
def docker(*args):
return subprocess.check_output(['docker', *args], text=True).split()
for identifier in docker('ps', '-aq', '--filter', 'label=' + label):
docker('rm', '--force', '--volumes', identifier)
for identifier in docker('network', 'ls', '-q', '--filter', 'label=' + label):
if client:
# The client may already have been detached by normal test cleanup.
attached = subprocess.check_output(['docker', 'network', 'inspect', identifier,
'--format', '{{range .Containers}}{{.Name}} {{end}}'], text=True).split()
client_name = subprocess.check_output(['docker', 'inspect', client, '--format', '{{.Name}}'], text=True).strip().lstrip('/')
if client_name in attached:
docker('network', 'disconnect', identifier, client)
docker('network', 'rm', identifier)
for identifier in docker('volume', 'ls', '-q', '--filter', 'label=' + label):
docker('volume', 'rm', identifier)
if image:
if not image.startswith('rawmark-ci:'):
raise ValueError('Refusing to remove a deployment image tag')
if docker('image', 'ls', '-q', image):
docker('image', 'rm', image)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument('label')
parser.add_argument('--client-container')
parser.add_argument('--image')
args = parser.parse_args()
cleanup(args.label, args.client_container, args.image)