Skip to content
Open
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
16 changes: 13 additions & 3 deletions src/dependencies.jl
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,17 @@ function get_local_clone(
return local_path
end

function get_project_deps(project_file::AbstractString; include_jll::Bool=false)
function get_project_deps(project_file::AbstractString; include_jll::Bool, open_prs_for_extras::ExtrasType)
project_deps = Set{DepInfo}()
dep_section = Dict{DepInfo,String}()
project = TOML.parsefile(project_file)

for section in ["deps", "weakdeps"]
sections = if open_prs_for_extras isa NoExtras
["deps", "weakdeps"]
else
["deps", "weakdeps", "extras"]
end
for section in sections
if haskey(project, section)
deps = project[section]
add_compat_section!(project)
Expand All @@ -38,7 +43,12 @@ function get_project_deps(project_file::AbstractString; include_jll::Bool=false)
compat_entry = DepInfo(package)
dep_entry = convert(String, strip(get(compat, name, "")))

if !isempty(dep_entry)
if isempty(dep_entry)
# Ignore dependencies in `[extras]` without a compat entry if `open_prs_for_extras` is `IfExistingCompatExtras()`
if section == "extras" && open_prs_for_extras isa IfExistingCompatExtras
continue
end
else
compat_entry.version_spec = semver_spec(dep_entry)
compat_entry.version_verbatim = dep_entry
end
Expand Down
12 changes: 11 additions & 1 deletion src/main.jl
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
cc_user=false,
bump_version=false,
include_yanked=false,
open_prs_for_extras::CompatHelper.ExtrasType=CompatHelper.IfExistingCompatExtras(),
)

Main entry point for the package.
Expand All @@ -37,6 +38,15 @@ Main entry point for the package.
- `cc_user=false`: CC the user on the pull requests
- `bump_version=false`: When set to true, the version in Project.toml will be bumped if a pull request is made. Minor bump if >= 1.0, or patch bump if < 1.0
- `include_yanked=false`: When set to true, yanked versions will be included when calculating what the latest version of a package is
- `open_prs_for_extras::CompatHelper.ExtrasType=CompatHelper.IfExistingCompatExtras()`: How to handle dependencies in `[extras]`.
Can be `CompatHelper.IfExistingCompatExtras()` (only open a pull request for a dependency in `[extras]` if a compat entry for it exists),
`CompatHelper.AllExtras()` (open pull requests for all dependencies in `[extras]`),
or `CompatHelper.NoExtras()` (do not open pull requests for dependencies in `[extras]`).

!!! note
The `open_prs_for_extras` keyword argument and
the `CompatHelper.AllExtras`, `CompatHelper.IfExistingCompatExtras`, `CompatHelper.NoExtras`, and `CompatHelper.ExtrasType` types
are considered experimental (not public API) and may be changed or removed in a non-breaking release.
"""
function main(
env::AbstractDict=ENV, ci_cfg::CIService=auto_detect_ci_service(; env=env); kwargs...
Expand All @@ -51,7 +61,7 @@ function main(

for subdir in options.subdirs
project_file = @mock joinpath(local_clone_path, subdir, "Project.toml")
deps, dep_sections = get_project_deps(project_file; include_jll=options.include_jll)
deps, dep_sections = get_project_deps(project_file; include_jll=options.include_jll, open_prs_for_extras=options.open_prs_for_extras)

populate_dep_versions_from_reg!(deps; options)

Expand Down
6 changes: 6 additions & 0 deletions src/utilities/types.jl
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ mutable struct DepInfo
end
end

abstract type ExtrasType end
struct AllExtras <: ExtrasType end
struct IfExistingCompatExtras <: ExtrasType end
struct NoExtras <: ExtrasType end

function Base.in(p::Package, s::Set{DepInfo})
for i in s
if i.package == p
Expand Down Expand Up @@ -56,4 +61,5 @@ Base.@kwdef struct Options
cc_user::Bool = false
bump_version::Bool = false
include_yanked::Bool = false
open_prs_for_extras::ExtrasType = IfExistingCompatExtras()
end
74 changes: 68 additions & 6 deletions test/dependencies.jl
Original file line number Diff line number Diff line change
Expand Up @@ -14,24 +14,82 @@ end
@testset "get_project_deps" begin
project = joinpath(@__DIR__, "deps", "Project.toml")

deps, dep_section = CompatHelper.get_project_deps(project; include_jll=true)
deps, dep_section = CompatHelper.get_project_deps(project; include_jll=true, open_prs_for_extras = AllExtras())
@test length(deps) == 6
@test issetequal([dep.package.name for dep in deps], ["Baz", "Bex_jll", "Car", "Foobar_jll", "LinearAlgebra", "Skix"])
@test issetequal(keys(dep_section), deps)
for (k, s) in pairs(dep_section)
if k.package.name ∈ ["Bex_jll", "Skix"]
@test s == "weakdeps"
elseif k.package.name ∈ ["Baz", "Car"]
@test s == "extras"
else # k.package.name ∈ ["Foobar_jll", "LinearAlgebra"]
@test s == "deps"
end
end

deps, dep_section = CompatHelper.get_project_deps(project; include_jll=false, open_prs_for_extras = AllExtras())
@test length(deps) == 4
@test issetequal([dep.package.name for dep in deps], ["Baz", "Car", "LinearAlgebra", "Skix"])
@test issetequal(keys(dep_section), deps)
for (k, s) in pairs(dep_section)
if k.package.name == "Skix"
@test s == "weakdeps"
elseif k.package.name ∈ ["Baz", "Car"]
@test s == "extras"
else # k.package.name == "LinearAlgebra"
@test s == "deps"
end
end

deps, dep_section = CompatHelper.get_project_deps(project; include_jll=true, open_prs_for_extras = IfExistingCompatExtras())
@test length(deps) == 5
@test issetequal([dep.package.name for dep in deps], ["Baz", "Bex_jll", "Foobar_jll", "LinearAlgebra", "Skix"])
@test issetequal(keys(dep_section), deps)
for (k, s) in pairs(dep_section)
if k.package.name ∈ ["Bex_jll", "Skix"]
@test s == "weakdeps"
else
elseif k.package.name == "Baz"
@test s == "extras"
else # k.package.name ∈ ["Foobar_jll", "LinearAlgebra"]
@test s == "deps"
end
end

deps, dep_section = CompatHelper.get_project_deps(project; include_jll=false)
deps, dep_section = CompatHelper.get_project_deps(project; include_jll=false, open_prs_for_extras = IfExistingCompatExtras())
@test length(deps) == 3
@test issetequal([dep.package.name for dep in deps], ["Baz", "LinearAlgebra", "Skix"])
@test issetequal(keys(dep_section), deps)
for (k, s) in pairs(dep_section)
if k.package.name == "Skix"
@test s == "weakdeps"
else
elseif k.package.name == "Baz"
@test s == "extras"
else # k.package.name == "LinearAlgebra"
@test s == "deps"
end
end

deps, dep_section = CompatHelper.get_project_deps(project; include_jll=true, open_prs_for_extras = NoExtras())
@test length(deps) == 4
@test issetequal([dep.package.name for dep in deps], ["Bex_jll", "Foobar_jll", "LinearAlgebra", "Skix"])
@test issetequal(keys(dep_section), deps)
for (k, s) in pairs(dep_section)
if k.package.name ∈ ["Bex_jll", "Skix"]
@test s == "weakdeps"
else # k.package.name ∈ ["Foobar_jll", "LinearAlgebra"]
@test s == "deps"
end
end

deps, dep_section = CompatHelper.get_project_deps(project; include_jll=false, open_prs_for_extras = NoExtras())
@test length(deps) == 2
@test issetequal([dep.package.name for dep in deps], ["LinearAlgebra", "Skix"])
@test issetequal(keys(dep_section), deps)
for (k, s) in pairs(dep_section)
if k.package.name == "Skix"
@test s == "weakdeps"
else # k.package.name == "LinearAlgebra"
@test s == "deps"
end
end
Expand Down Expand Up @@ -142,13 +200,17 @@ end
project_file = joinpath(pkgdir(CompatHelper), "Project.toml")

# Just for this test, we hardcode this list
unregistered_stdlibs = ["Base64", "Dates", "Pkg", "UUIDs"]
unregistered_stdlibs = ["Base64", "Dates", "Pkg", "Random", "Test", "UUIDs"]

@test ispath(project_file)
@test isfile(project_file)
for use_existing_registries in [true, false]
options = CompatHelper.Options(; use_existing_registries)
deps, _ = CompatHelper.get_project_deps(project_file)
deps, _ = CompatHelper.get_project_deps(
project_file;
include_jll=false,
open_prs_for_extras=IfExistingCompatExtras(),
)
for dep in deps
@test dep.latest_version === nothing
end
Expand Down
5 changes: 4 additions & 1 deletion test/deps/Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ version = "1.0.0"

[deps]
Foobar_jll = "6ca821de-e512-569d-89d9-0b16ce691416"
Baz = "ea10d353-3f73-51f8-a26c-33c1cb351aa5"
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"

[weakdeps]
Expand All @@ -14,6 +13,10 @@ Skix = "3db6da90-6ed3-11ee-0779-f549c8e3e90d"
[extensions]
Ext = ["Bex_jll", "Skix"]

[extras]
Baz = "ea10d353-3f73-51f8-a26c-33c1cb351aa5"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Any particular reason for moving Baz from [deps] to [extras]?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I was just not creative enough and hence initially only moved around things. Only later I noticed that an additional dependency is needed to cover all cases.

Car = "0add4187-88db-462b-bf06-da4bec59fd54"

[compat]
Foobar_jll = "1"
Baz = "1"
Expand Down
2 changes: 1 addition & 1 deletion test/runtests.jl
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Aqua
using Base64
using CompatHelper
using CompatHelper: DepInfo, EntryType
using CompatHelper: DepInfo, EntryType, AllExtras, IfExistingCompatExtras, NoExtras
using Dates
using GitForge
using GitForge: GitForge, GitHub, GitLab
Expand Down
Loading