Add support for arbitrary postBuild scripts

Fixes #31
pull/42/head
yuvipanda 2017-07-28 20:39:41 -07:00
rodzic 5225cfc1d4
commit c1816a82d4
1 zmienionych plików z 29 dodań i 1 usunięć

Wyświetl plik

@ -9,6 +9,7 @@ import jinja2
import tarfile
import io
import os
import stat
import re
import json
import docker
@ -108,6 +109,12 @@ LABEL {{k}}={{v}}
# We always want containers to run as non-root
USER ${NB_USER}
{% if post_build_scripts -%}
{% for s in post_build_scripts -%}
RUN ./{{ s }}
{% endfor %}
{% endif -%}
"""
@ -286,6 +293,19 @@ class BuildPack(LoggingConfigurable):
"""
)
post_build_scripts = List(
[],
help="""
An ordered list of executable scripts that should be executed after build.
Is run as a non-root user, and must be executable. Used for doing things
that are currently not supported by other means!
The scripts should be as deterministic as possible - running it twice
should not produce different results!
"""
)
name = Unicode(
help="""
Name of the BuildPack!
@ -315,6 +335,7 @@ class BuildPack(LoggingConfigurable):
result.env = self.env + other.env
result.build_scripts = self.build_scripts + other.build_scripts
result.assemble_scripts = self.assemble_scripts + other.assemble_scripts
result.post_build_scripts = self.post_build_scripts + other.post_build_scripts
build_script_files = {}
build_script_files.update(self.build_script_files)
@ -363,7 +384,8 @@ class BuildPack(LoggingConfigurable):
build_script_directives=build_script_directives,
assemble_script_directives=assemble_script_directives,
build_script_files=self.build_script_files,
base_packages=sorted(self.base_packages)
base_packages=sorted(self.base_packages),
post_build_scripts=self.post_build_scripts,
)
def build(self, image_spec):
@ -434,6 +456,12 @@ class BaseImage(BuildPack):
pass
return assemble_scripts
@default('post_build_scripts')
def setup_post_build_scripts(self):
if os.path.exists('postBuild'):
if stat.S_IXUSR & os.stat('postBuild')[stat.ST_MODE]:
return ['postBuild']
return []
class PythonBuildPack(BuildPack):
name = "python3.5"