Skip to content

Commit

Permalink
Set up environment during build preparations (alire-project#1766)
Browse files Browse the repository at this point in the history
* Set up environment during build preparations

* Test
  • Loading branch information
mosteo committed Oct 8, 2024
1 parent 7041dd0 commit 1510aa8
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/alire/alire-roots.adb
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ package body Alire.Roots is
-- Will regenerate on demand only those changed. For shared
-- dependencies, will also generate any missing configs not generated
-- during sync, such as for linked releases and the root release.

-- Set the environment to be used during build

This.Export_Build_Environment;
end Build_Prepare;

-----------
Expand Down Expand Up @@ -276,8 +280,6 @@ package body Alire.Roots is
return True;
end if;

This.Export_Build_Environment;

This.Traverse (Build_Single_Release'Access);

return True;
Expand Down
51 changes: 51 additions & 0 deletions testsuite/tests/action/environment/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
"""
Verify the proper environment is set up for the action. We create an executable
within a crate that will be run during pre-build. For it to be found, the
proper path must be set in the crate environment. This should work for a
regular build (as it did before) and for a manually triggered action (the bug
being fixed).
"""

import os
from shutil import which
from drivers.alr import run_alr, init_local_crate, add_action, alr_manifest
from drivers.asserts import assert_eq
from drivers.helpers import content_of, on_windows

tool_name = "myalrtestingtool"

# Tool crate to be used during build
init_local_crate(tool_name, enter=False)

# Ensure the tool is not found in path by pure chance!
assert not which(tool_name)

# Build the tool
run_alr("-C", tool_name, "build")

# Create the new crate that uses this tool during pre-build step
init_local_crate()

# Edit its manifest to require it during pre-build
add_action("pre-build", [tool_name + (".exe" if on_windows() else "")])

# Build should fail because the tool is not found in the path
run_alr("build", complain_on_error=False)

# Likewise, stand-alone running of the action should fail
run_alr("action", "pre-build", complain_on_error=False)

# Add the tool location to the crate environment
with open(alr_manifest(), "at") as f:
f.write(f"""
[environment]
PATH.prepend = "../{tool_name}/bin"
""")

# assert_eq(content_of(alr_manifest()), "XXX")

# Now both build and action should succeed
run_alr("build")
run_alr("action", "pre-build")

print("SUCCESS")
4 changes: 4 additions & 0 deletions testsuite/tests/action/environment/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
driver: python-script
build_mode: both
indexes:
compiler_only_index: {}

0 comments on commit 1510aa8

Please sign in to comment.