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

Set up environment during build preparations #1766

Merged
merged 2 commits into from
Oct 8, 2024
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
6 changes: 4 additions & 2 deletions src/alire/alire-roots.adb
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,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 @@ -279,8 +283,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: {}
Loading