Files
julia-runtest/test_harness.jl
2025-11-23 10:24:12 -05:00

92 lines
3.6 KiB
Julia

import Pkg
include("kwargs.jl")
kwargs = Kwargs.kwargs(; coverage=ENV["COVERAGE"],
force_latest_compatible_version=ENV["FORCE_LATEST_COMPATIBLE_VERSION"],
allow_reresolve=ENV["ALLOW_RERESOLVE"],
julia_args=[string("--check-bounds=", ENV["CHECK_BOUNDS"]),
string("--compiled-modules=", ENV["COMPILED_MODULES"]),
# Needs to be done via `julia_args` to ensure `depwarn: no` is respected:
# https://github.com/JuliaLang/Pkg.jl/pull/1763#discussion_r406819660
string("--depwarn=", ENV["DEPWARN"]),],
test_args=ARGS,
)
kwargs_reprs = map(kv -> string(kv[1], "=", repr(kv[2])), collect(kwargs))
kwargs_repr = join(kwargs_reprs, ", ")
# Warn if running on a merge commit (different from branch HEAD)
git_note = ""
if haskey(ENV, "GITHUB_SHA") && get(ENV, "GITHUB_EVENT_NAME", "") == "pull_request" && haskey(ENV, "GITHUB_HEAD_REF")
# For pull_request events, GITHUB_SHA is the merge commit, not the PR head commit
try
merge_commit = ENV["GITHUB_SHA"]
pr_branch = ENV["GITHUB_HEAD_REF"]
base_branch_name = get(ENV, "GITHUB_BASE_REF", "")
# Check if there's any difference between the merge commit and the PR head
# In GitHub Actions, HEAD^2 is the PR head (second parent of merge commit)
# First check if HEAD^2 exists (i.e., this is actually a merge commit)
if success(`git rev-parse --verify --quiet HEAD^2`)
# Compare tree hashes to check if content actually differs
merge_tree = chomp(read(`git rev-parse HEAD^\{tree\}`, String))
pr_tree = chomp(read(`git rev-parse HEAD^2^\{tree\}`, String))
has_diff = merge_tree != pr_tree
else
# Not a merge commit, so no difference to report
has_diff = false
end
if has_diff
base_branch = isempty(base_branch_name) ? "the base branch" : "'$base_branch_name'"
global git_note = """
│ Note: This is being run on merge commit $merge_commit (merge of PR branch '$pr_branch' into $base_branch).
│ The content differs from the actual commit on your PR branch.
│ To reproduce locally, update your branch with $base_branch first.
"""
end
catch e
@warn "Error while checking git diff" exception=(e, catch_backtrace())
end
end
print("""
│ To reproduce this CI run locally run the following from the same repository state on julia version $VERSION:
│ `import Pkg; Pkg.test(;$kwargs_repr)`
""")
print(git_note)
if parse(Bool, ENV["ANNOTATE"]) && v"1.8pre" < VERSION < v"1.9.0-beta3"
push!(LOAD_PATH, "@tests-logger-env") # access dependencies
using GitHubActions, Logging
global_logger(GitHubActionsLogger())
include("test_logger.jl")
pop!(LOAD_PATH)
try
TestLogger.test(; kwargs...)
catch e
if e isa Pkg.Types.PkgError
# don't show the stacktrace of the test harness because it's not useful
showerror(stderr, e)
exit(1)
else
rethrow()
end
end
else
try
Pkg.test(; kwargs...)
catch e
if e isa Pkg.Types.PkgError
# don't show the stacktrace of the test harness because it's not useful
showerror(stderr, e)
exit(1)
else
rethrow()
end
end
end