@@ -35,7 +35,16 @@ def docker_header(image: str, image_tag: str, geant4_tag: str) -> str:
3535 return commands
3636
3737
38- def install_gemc (geant4_version : str , gemc_version : str ) -> str :
38+ def install_gemc (geant4_version : str , gemc_version : str , source : str ) -> str :
39+ if source == "context" :
40+ commands = f'\n COPY . /root/src \n '
41+ commands += f'RUN cd /root/src \\ \n '
42+ commands += f" && DOCKER_ENTRYPOINT_SOURCE_ONLY=1 . { remote_entrypoint ()} \\ \n "
43+ commands += f' && module load geant4/{ geant4_version } \\ \n '
44+ commands += f' && ./ci/build.sh \\ \n '
45+ commands += f' && echo "export PATH=\\ ${{SIM_HOME}}/gemc/dev/bin:\\ ${{SIM_HOME}}/gemc/dev/python_env/bin:\\ ${{PATH}}" >> { remote_entrypoint_addon ()} \n '
46+ return commands
47+
3948 clone_arguments = f'-c advice.detachedHead=false --recurse-submodules --single-branch'
4049 if gemc_version == "dev" :
4150 clone_arguments += ' --depth 1'
@@ -50,18 +59,48 @@ def install_gemc(geant4_version: str, gemc_version: str) -> str:
5059 return commands
5160
5261
62+ def package_install (geant4_version : str , gemc_version : str , image : str , image_tag : str , package_arch : str ) -> str :
63+ package_name = f'gemc-{ gemc_version } -geant4-{ geant4_version } -{ image } -{ image_tag } -{ package_arch } '
64+ commands = '\n # release tarball build \n '
65+ commands += 'FROM final AS package-build \n '
66+ commands += f'RUN cd /root/src \\ \n '
67+ commands += f" && DOCKER_ENTRYPOINT_SOURCE_ONLY=1 . { remote_entrypoint ()} \\ \n "
68+ commands += f' && module load geant4/{ geant4_version } \\ \n '
69+ commands += f' && GEANT4_VERSION={ geant4_version } GEMC_PACKAGE_VERSION={ gemc_version } \\ \n '
70+ commands += f' ./ci/package_install.sh "${{SIM_HOME}}/gemc/dev" /root/src/dist "{ package_name } " \n '
71+ return commands
72+
73+
5374def log_exporters () -> str :
5475 commands = '\n # logs exporter \n '
5576 commands += 'FROM scratch AS logs-export \n '
5677 commands += 'COPY --from=final /root/src/logs /logs \n '
5778 return commands
5879
5980
60- def create_dockerfile (image : str , image_tag : str , geant4_version : str , gemc_version : str ) -> str :
81+ def package_exporters () -> str :
82+ commands = '\n # release package exporter \n '
83+ commands += 'FROM scratch AS package-export \n '
84+ commands += 'COPY --from=package-build /root/src/dist / \n '
85+ return commands
86+
87+
88+ def create_dockerfile (
89+ image : str ,
90+ image_tag : str ,
91+ geant4_version : str ,
92+ gemc_version : str ,
93+ with_package : bool = False ,
94+ source : str = "clone" ,
95+ package_arch : str = "amd64" ,
96+ ) -> str :
6197 commands = ""
6298 commands += docker_header (image , image_tag , geant4_version )
63- commands += install_gemc (geant4_version , gemc_version )
99+ commands += install_gemc (geant4_version , gemc_version , source )
64100 commands += log_exporters ()
101+ if with_package :
102+ commands += package_install (geant4_version , gemc_version , image , image_tag , package_arch )
103+ commands += package_exporters ()
65104
66105 return commands
67106
@@ -92,6 +131,18 @@ def main():
92131 "--gemc-version" , default = "dev" ,
93132 help = "Version of GEMC to install (default: %(default)s)"
94133 )
134+ parser .add_argument (
135+ "--with-package" , action = "store_true" ,
136+ help = "Add a package-export stage that emits a GEMC install tarball"
137+ )
138+ parser .add_argument (
139+ "--source" , choices = ["clone" , "context" ], default = "clone" ,
140+ help = "Build GEMC from a GitHub clone or from the Docker build context"
141+ )
142+ parser .add_argument (
143+ "--package-arch" , choices = ["amd64" , "arm64" ], default = "amd64" ,
144+ help = "Architecture suffix to use in the package artifact name"
145+ )
95146
96147 args = parser .parse_args ()
97148
@@ -107,6 +158,9 @@ def main():
107158 args .image_tag ,
108159 args .geant4_version ,
109160 args .gemc_version ,
161+ args .with_package ,
162+ args .source ,
163+ args .package_arch ,
110164 )
111165 print (dockerfile )
112166
0 commit comments