diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/bin/cgal_release.py b/Maintenance/infrastructure/cgal.geometryfactory.com/bin/cgal_release.py new file mode 100644 index 00000000000..d7656664faa --- /dev/null +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/bin/cgal_release.py @@ -0,0 +1,51 @@ +'''Python module to create and publish CGAL releases from a branch''' + +import os + +class Release: + '''class to create a CGAL release from a branch + optionally, the release can be internal + ''' + + def __init__(self, branch, internal=False) : + self.branch = branch + self.internal = internal + self.cwd = f'$HOME/CGAL/create_internal_release-{self.branch}-branch' + self.repo = f'$HOME/CGAL/branches/CGAL-{self.branch}-branch.git' + self.extra_options = ' --public' + + def command(self): + '''return the command to create and publish the release''' + return f"PATH=/home/lrineau/bin-cmake3:/bin:/usr/bin:/home/lrineau/bin; cd {self.cwd} && /usr/bin/time scl enable rh-git29 -- $HOME/bin/create_release {self.repo}{self.extra_options} --do-it" + + def __str__(self) : + msg = f"{'internal ' if self.internal else ''}release from {self.branch}\n" \ + f"cwd: {self.cwd}\nrepo: {self.repo}\n" \ + f"command:\n{self.command()}" + return msg + + def __call__(self) : + if os.system(self.command()) != 0 : + raise RuntimeError(f"Error while creating {'internal ' if self.internal else ''}release from {self.branch}") + + INTERNAL = True + +class InternalRelease(Release) : + '''class to create an internal CGAL release from a branch''' + def __init__(self, branch) : + super().__init__(branch, Release.INTERNAL) + self.extra_options = ' --integration' + +integration = InternalRelease("integration") +integration.repo = '$HOME/CGAL/branches/integration.git' +integration.cwd = '$HOME/CGAL/create_internal_release' +master = Release("master") +master.repo = '$HOME/CGAL/branches/master.git' +master.cwd = '$HOME/CGAL/create_internal_release' + +def release(branch) : + '''Convenience function to create a release from a branch''' + return Release(branch) + +if __name__ == '__main__': + print("This file is a Python module. Use create_internal_release_of_the_day.py instead.") diff --git a/Maintenance/infrastructure/cgal.geometryfactory.com/bin/create_internal_release_of_the_day.py b/Maintenance/infrastructure/cgal.geometryfactory.com/bin/create_internal_release_of_the_day.py new file mode 100644 index 00000000000..d27168dcc08 --- /dev/null +++ b/Maintenance/infrastructure/cgal.geometryfactory.com/bin/create_internal_release_of_the_day.py @@ -0,0 +1,39 @@ +#! /bin/python3 + +'''This script is called by a cron job every day. + It creates and publish a release tarball. +''' + +import sys +import os +import datetime +import locale +from pathlib import Path +sys.path.append(Path(__file__)) +from cgal_release import release, integration, master + +# Define a dictionary that maps day of the week to an action +actions = { + "Monday": integration, + "Tuesday": integration, + "Wednesday": integration, + "Thursday": integration, + "Friday": release("5.5"), + "Saturday": release("5.4"), + "Sunday": master +} + +if __name__ == '__main__': + # Get the current day of the week, or get it from the command line + locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') + try: + DAY_OF_THE_WEEK = sys.argv[1] + except IndexError: + DAY_OF_THE_WEEK = datetime.datetime.now().strftime("%A") + + # Look up the action for the current day of the week in the dictionary + create_release = actions[DAY_OF_THE_WEEK] + + # Then create the release tarball + if os.system(create_release.command() + " --dont-do-it") != 0 : + raise RuntimeError(f"ERROR while creating release tarball")