in support/retro_contest/docker.py [0:0]
def build(path, tag, install=None, pass_env=False):
from pkg_resources import EntryPoint
import tarfile
if install:
destination = 'module'
else:
destination = 'agent.py'
docker_file = ['FROM openai/retro-agent',
'COPY context %s' % destination]
if not install:
docker_file.append('CMD ["python", "-u", "/root/compo/agent.py"]')
else:
docker_file.append('RUN . ~/venv/bin/activate && pip install -e module')
valid = not any(c in install for c in ' "\\')
if pass_env:
try:
EntryPoint.parse('entry=' + install)
except ValueError:
valid = False
if not valid:
raise ValueError('Invalid entry point')
docker_file.append('CMD ["retro-contest-agent", "%s"]' % install)
else:
if not valid:
raise ValueError('Invalid module name')
docker_file.append('CMD ["python", "-u", "-m", "%s"]' % install)
print('Creating Docker image...')
docker_file_full = io.BytesIO('\n'.join(docker_file).encode('utf-8'))
client = docker.from_env()
with tempfile.NamedTemporaryFile() as f:
tf = tarfile.open(mode='w:gz', fileobj=f)
docker_file_info = tarfile.TarInfo('Dockerfile')
docker_file_info.size = len(docker_file_full.getvalue())
tf.addfile(docker_file_info, docker_file_full)
tf.add(path, arcname='context', exclude=lambda fname: fname.endswith('/.git'))
tf.close()
f.seek(0)
client.images.build(fileobj=f, custom_context=True, tag=tag, gzip=True)
print('Done!')