Skip to content
Snippets Groups Projects
Unverified Commit 2b7ab400 authored by Bernardo's avatar Bernardo Committed by GitHub
Browse files

feat(mix): handle hex package aliases (#32984)


Co-authored-by: default avatarRhys Arkins <rhys@arkins.net>
Co-authored-by: default avatarMichael Kriese <michael.kriese@gmx.de>
parent df8bbff6
No related branches found
No related tags found
No related merge requests found
......@@ -32,6 +32,8 @@ defmodule MyProject.MixProject do
optional: true},
{:hammer_backend_redis, "~> 6.1"},
{:public, "== 1.6.14"},
{:gun, "~> 2.0.0", hex: "grpc_gun"},
{:another_gun, "~> 1.0.0", hex: :gun_atom},
]
end
end
......@@ -12,5 +12,7 @@
"mason": {:hex, :mason, "1.1.0", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"},
"hammer_backend_redis": {:hex, :hammer_backend_redis, "6.1.5", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"},
"public": {:hex, :public, "1.6.14", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"},
"a_transient_dependency": {:hex, :a_transient_dependency, "1.6.14", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"}
"a_transient_dependency": {:hex, :a_transient_dependency, "1.6.14", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"},
"gun": {:hex, :grpc_gun, "2.0.0", "f99678a2ab975e74372a756c86ec30a8384d3ac8a8b86c7ed6243ef4e61d2729", [:rebar3], [{:cowlib, "~> 2.8.0", [hex: :cowlib, repo: "hexpm", optional: false]}], "hexpm", "03dbbca1a9c604a0267a40ea1d69986225091acb822de0b2dbea21d5815e410b"},
"another_gun": {:hex, :gun_atom, "1.0.0", "344dbbf6610d205760ec37e2848bff2aab5a2de182bb5cdaa72cc2fd19d74535", [:mix], [{:decimal, "~> 1.0", [hex: :decimal, repo: "hexpm", optional: false]}], "hexpm", "19c205c8de0e2e5817f2250100281c58e717cb11ff1bb410bf661ee78c24e79b"}
}
......@@ -92,6 +92,18 @@ describe('modules/manager/mix/extract', () => {
depName: 'public',
packageName: 'public',
},
{
currentValue: '~> 2.0.0',
datasource: 'hex',
depName: 'gun',
packageName: 'grpc_gun',
},
{
currentValue: '~> 1.0.0',
datasource: 'hex',
depName: 'another_gun',
packageName: 'gun_atom',
},
]);
});
......@@ -188,6 +200,20 @@ describe('modules/manager/mix/extract', () => {
packageName: 'public',
lockedVersion: '1.6.14',
},
{
currentValue: '~> 2.0.0',
datasource: 'hex',
depName: 'gun',
packageName: 'grpc_gun',
lockedVersion: '2.0.0',
},
{
currentValue: '~> 1.0.0',
datasource: 'hex',
depName: 'another_gun',
packageName: 'gun_atom',
lockedVersion: '1.0.0',
},
]);
});
});
......
......@@ -19,6 +19,7 @@ const commentMatchRegExp = regEx(/#.*$/);
const lockedVersionRegExp = regEx(
/^\s+"(?<app>\w+)".*?"(?<lockedVersion>\d+\.\d+\.\d+)"/,
);
const hexRegexp = regEx(/hex:\s*(?:"(?<strValue>[^"]+)"|:(?<atomValue>\w+))/);
export async function extractPackageFile(
content: string,
......@@ -44,6 +45,8 @@ export async function extractPackageFile(
const ref = refRegexp.exec(opts)?.groups?.value;
const branchOrTag = branchOrTagRegexp.exec(opts)?.groups?.value;
const organization = organizationRegexp.exec(opts)?.groups?.value;
const hexGroups = hexRegexp.exec(opts)?.groups;
const hex = hexGroups?.strValue ?? hexGroups?.atomValue;
let dep: PackageDependency;
......@@ -60,8 +63,14 @@ export async function extractPackageFile(
depName: app,
currentValue: requirement,
datasource: HexDatasource.id,
packageName: organization ? `${app}:${organization}` : app,
};
if (organization) {
dep.packageName = `${app}:${organization}`;
} else if (hex) {
dep.packageName = hex;
} else {
dep.packageName = app;
}
if (requirement?.startsWith('==')) {
dep.currentVersion = requirement.replace(regEx(/^==\s*/), '');
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment