Skip to content

Commit

Permalink
add postinstallmsgs, fixes #542
Browse files Browse the repository at this point in the history
  • Loading branch information
PetrKralCZ committed Dec 20, 2022
1 parent 04c7161 commit 3c88d6b
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 0 deletions.
7 changes: 7 additions & 0 deletions easybuild/framework/easyblock.py
Original file line number Diff line number Diff line change
Expand Up @@ -2952,6 +2952,12 @@ def apply_post_install_patches(self, patches=None):
# To allow postinstallpatches for Bundle, and derived, easyblocks we directly call EasyBlock.patch_step
EasyBlock.patch_step(self, beginpath=self.installdir, patches=patches)

def log_post_install_messages(self):
messages = self.cfg["postinstallmsgs"]
if messages:
for message in messages:
print_msg(message)

def post_install_step(self):
"""
Do some postprocessing
Expand All @@ -2960,6 +2966,7 @@ def post_install_step(self):

self.run_post_install_commands()
self.apply_post_install_patches()
self.log_post_install_messages()

self.fix_shebang()

Expand Down
1 change: 1 addition & 0 deletions easybuild/framework/easyconfig/default.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@
'pretestopts': ['', 'Extra prefix options for test.', BUILD],
'postinstallcmds': [[], 'Commands to run after the install step.', BUILD],
'postinstallpatches': [[], 'Patch files to apply after running the install step.', BUILD],
'postinstallmsgs': [[], 'Messages to print after running the install step.', BUILD],
'required_linked_shared_libs': [[], "List of shared libraries (names, file names, or paths) which must be "
"linked in all installed binaries/libraries", BUILD],
'runtest': [None, ('Indicates if a test should be run after make; should specify argument '
Expand Down
29 changes: 29 additions & 0 deletions test/framework/toy_build.py
Original file line number Diff line number Diff line change
Expand Up @@ -3778,6 +3778,35 @@ def test_toy_unavailable_os_dep(self):
regex = re.compile(pattern, re.M)
self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout))

def test_toy_post_install_messages(self):
"""
Test use of post-install messages
"""
test_ecs = os.path.join(os.path.dirname(__file__), 'easyconfigs', 'test_ecs')
toy_ec = os.path.join(test_ecs, 't', 'toy', 'toy-0.0.eb')

test_ec_txt = read_file(toy_ec)
test_ec_txt += "\npostinstallmsgs = ['This is post install message 1', 'This is post install message 2']"
test_ec = os.path.join(self.test_prefix, 'test.eb')
write_file(test_ec, test_ec_txt)

test_report_fp = os.path.join(self.test_buildpath, 'full_test_report.md')

self.mock_stderr(True)
self.mock_stdout(True)
self.test_toy_build(ec_file=test_ec, test_report=test_report_fp)
stdout = self.get_stdout()
self.mock_stderr(False)
self.mock_stdout(False)

patterns = [
r"== This is post install message 1",
r"== This is post install message 2",
]
for pattern in patterns:
regex = re.compile(pattern, re.M)
self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout))


def suite():
""" return all the tests in this file """
Expand Down

0 comments on commit 3c88d6b

Please sign in to comment.