Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add support for postinstallmsgs #4145

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions easybuild/framework/easyblock.py
Original file line number Diff line number Diff line change
Expand Up @@ -2952,6 +2952,14 @@ 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 print_post_install_messages(self):
"""
Print post-install messages that are specified via the 'postinstallmsgs' easyconfig parameter.
"""
msgs = self.cfg['postinstallmsgs'] or []
for msg in msgs:
print_msg(msg, log=self.log)

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

self.run_post_install_commands()
self.apply_post_install_patches()
self.print_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