mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-26 23:39:13 +00:00
fix(config/preset): readd subpreset support (#12733)
This commit is contained in:
@@ -54,40 +54,44 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c
|
||||
|
||||
#### GitHub
|
||||
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------- | ------------------------------- | --------- | ---------------------------- | --------------- | -------------- |
|
||||
| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch |
|
||||
| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| GitHub with preset name and path with a tag | `github>abc/foo:path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------- | -------------------------------- | --------- | ---------------------------- | --------------- | -------------- |
|
||||
| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch |
|
||||
| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| GitHub with preset name and path with a tag | `github>abc/foo//path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| GitHub with subpreset name and tag | `github>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
#### GitLab
|
||||
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------- | ------------------------------- | --------- | ---------------------------- | --------------- | -------------- |
|
||||
| GitLab default | `gitlab>abc/foo` | `default` | `https://gitlab.com/abc/foo` | `default.json` | Default branch |
|
||||
| GitLab with preset name | `gitlab>abc/foo:xyz` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| GitLab default with a tag | `gitlab>abc/foo#1.5.4` | `default` | `https://gitlab.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| GitLab with preset name with a tag | `gitlab>abc/foo:xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| GitLab with preset name and path with a tag | `gitlab>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------- | -------------------------------- | --------- | ---------------------------- | --------------- | -------------- |
|
||||
| GitLab default | `gitlab>abc/foo` | `default` | `https://gitlab.com/abc/foo` | `default.json` | Default branch |
|
||||
| GitLab with preset name | `gitlab>abc/foo:xyz` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| GitLab default with a tag | `gitlab>abc/foo#1.5.4` | `default` | `https://gitlab.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| GitLab with preset name with a tag | `gitlab>abc/foo:xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| GitLab with preset name and path with a tag | `gitlab>abc/foo//path/xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| GitLab with subpreset name and tag | `gitlab>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
#### Gitea
|
||||
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------ | ------------------------------ | --------- | --------------------------- | --------------- | -------------- |
|
||||
| Gitea default | `gitea>abc/foo` | `default` | `https://gitea.com/abc/foo` | `default.json` | Default branch |
|
||||
| Gitea with preset name | `gitea>abc/foo:xyz` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| Gitea default with a tag | `gitea>abc/foo#1.5.4` | `default` | `https://gitea.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| Gitea with preset name with a tag | `gitea>abc/foo:xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| Gitea with preset name and path with a tag | `gitea>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------ | ------------------------------- | --------- | --------------------------- | --------------- | -------------- |
|
||||
| Gitea default | `gitea>abc/foo` | `default` | `https://gitea.com/abc/foo` | `default.json` | Default branch |
|
||||
| Gitea with preset name | `gitea>abc/foo:xyz` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| Gitea default with a tag | `gitea>abc/foo#1.5.4` | `default` | `https://gitea.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| Gitea with preset name with a tag | `gitea>abc/foo:xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| Gitea with preset name and path with a tag | `gitea>abc/foo//path/xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| Gitea with subpreset name and tag | `gitea>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
#### Self-hosted Git
|
||||
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------ | ------------------------------ | --------- | ------------------------------------ | --------------- | -------------- |
|
||||
| Local default | `local>abc/foo` | `default` | `https://github.company.com/abc/foo` | `default.json` | Default branch |
|
||||
| Local with preset path | `local>abc/foo:path/xyz` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | Default branch |
|
||||
| Local default with a tag | `local>abc/foo#1.5.4` | `default` | `https://github.company.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| Local with preset name with a tag | `local>abc/foo:xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| Local with preset name and path with a tag | `local>abc/foo:path/xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------ | ------------------------------- | --------- | ------------------------------------ | --------------- | -------------- |
|
||||
| Local default | `local>abc/foo` | `default` | `https://github.company.com/abc/foo` | `default.json` | Default branch |
|
||||
| Local with preset path | `local>abc/foo:path/xyz` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | Default branch |
|
||||
| Local default with a tag | `local>abc/foo#1.5.4` | `default` | `https://github.company.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| Local with preset name with a tag | `local>abc/foo:xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| Local with preset name and path with a tag | `local>abc/foo//path/xyz#1.5.4` | `default` | `https://github.company.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| Local with subpreset name and tag | `local>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
@@ -45,13 +45,14 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c
|
||||
|
||||
### GitHub
|
||||
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------- | ------------------------------- | --------- | ---------------------------- | --------------- | -------------- |
|
||||
| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch |
|
||||
| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| GitHub with preset name and path with a tag | `github>abc/foo:path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| name | example use | preset | resolves as | filename | Git tag |
|
||||
| ------------------------------------------- | -------------------------------- | --------- | ---------------------------- | --------------- | -------------- |
|
||||
| GitHub default | `github>abc/foo` | `default` | `https://github.com/abc/foo` | `default.json` | Default branch |
|
||||
| GitHub with preset name | `github>abc/foo:xyz` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | Default branch |
|
||||
| GitHub default with a tag | `github>abc/foo#1.5.4` | `default` | `https://github.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| GitHub with preset name with a tag | `github>abc/foo:xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| GitHub with preset name and path with a tag | `github>abc/foo//path/xyz#1.5.4` | `xyz` | `https://github.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| GitHub with subpreset name and tag | `github>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
### GitLab
|
||||
|
||||
@@ -62,6 +63,7 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c
|
||||
| GitLab default with a tag | `gitlab>abc/foo#1.5.4` | `default` | `https://gitlab.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| GitLab with preset name with a tag | `gitlab>abc/foo:xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| GitLab with preset name and path with a tag | `gitlab>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitlab.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| GitLab with subpreset name and tag | `gitlab>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitlab.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
### Gitea
|
||||
|
||||
@@ -72,6 +74,7 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c
|
||||
| Gitea default with a tag | `gitea>abc/foo#1.5.4` | `default` | `https://gitea.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| Gitea with preset name with a tag | `gitea>abc/foo:xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| Gitea with preset name and path with a tag | `gitea>abc/foo:path/xyz#1.5.4` | `xyz` | `https://gitea.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| Gitea with subpreset name and tag | `gitea>abc/foo:xyz/sub#1.5.4` | `sub` | `https://gitea.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
### Self-hosted Git
|
||||
|
||||
@@ -82,6 +85,7 @@ You can set a Git tag (like a SemVer) to use a specific release of your shared c
|
||||
| Local default with a tag | `local>abc/foo#1.5.4` | `default` | `https://github.company.com/abc/foo` | `default.json` | `1.5.4` |
|
||||
| Local with preset name with a tag | `local>abc/foo:xyz#1.5.4` | `xyz` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
| Local with preset name and path with a tag | `local>abc/foo:path/xyz#1.5.4` | `xyz` | `https://github.company.com/abc/foo` | `path/xyz.json` | `1.5.4` |
|
||||
| Local with subpreset name and tag | `local>abc/foo:xyz/sub#1.5.4` | `sub` | `https://github.company.com/abc/foo` | `xyz.json` | `1.5.4` |
|
||||
|
||||
Note that you can't combine the path and sub-preset syntaxes.
|
||||
This means that anything in the form `provider>owner/repo//path/to/file:subsubpreset` is not supported.
|
||||
|
||||
@@ -342,8 +342,8 @@ describe('config/presets/index', () => {
|
||||
).toEqual({
|
||||
packageName: 'some/repo',
|
||||
params: undefined,
|
||||
presetName: 'somepreset',
|
||||
presetPath: 'somefile',
|
||||
presetName: 'somefile/somepreset',
|
||||
presetPath: undefined,
|
||||
presetSource: 'github',
|
||||
});
|
||||
});
|
||||
@@ -355,8 +355,8 @@ describe('config/presets/index', () => {
|
||||
).toEqual({
|
||||
packageName: 'some/repo',
|
||||
params: undefined,
|
||||
presetName: 'somesubpreset',
|
||||
presetPath: 'somefile/somepreset',
|
||||
presetName: 'somefile/somepreset/somesubpreset',
|
||||
presetPath: undefined,
|
||||
presetSource: 'github',
|
||||
});
|
||||
});
|
||||
@@ -427,6 +427,34 @@ describe('config/presets/index', () => {
|
||||
presetSource: 'local',
|
||||
});
|
||||
});
|
||||
it('parses local with sub preset and tag', () => {
|
||||
expect(
|
||||
presets.parsePreset(
|
||||
'local>some-group/some-repo:some-file/subpreset#1.2.3'
|
||||
)
|
||||
).toEqual({
|
||||
packageName: 'some-group/some-repo',
|
||||
params: undefined,
|
||||
presetName: 'some-file/subpreset',
|
||||
presetPath: undefined,
|
||||
presetSource: 'local',
|
||||
packageTag: '1.2.3',
|
||||
});
|
||||
});
|
||||
it('parses local with subdirectory and tag', () => {
|
||||
expect(
|
||||
presets.parsePreset(
|
||||
'local>some-group/some-repo//some-dir/some-file#1.2.3'
|
||||
)
|
||||
).toEqual({
|
||||
packageName: 'some-group/some-repo',
|
||||
params: undefined,
|
||||
presetName: 'some-file',
|
||||
presetPath: 'some-dir',
|
||||
presetSource: 'local',
|
||||
packageTag: '1.2.3',
|
||||
});
|
||||
});
|
||||
it('parses no prefix as local', () => {
|
||||
expect(presets.parsePreset('some/repo')).toEqual({
|
||||
packageName: 'some/repo',
|
||||
|
||||
@@ -40,7 +40,7 @@ const nonScopedPresetWithSubdirRegex = regEx(
|
||||
/^(?<packageName>~?[\w\-./]+?)\/\/(?:(?<presetPath>[\w\-./]+)\/)?(?<presetName>[\w\-.]+)(?:#(?<packageTag>[\w\-.]+?))?$/
|
||||
);
|
||||
const gitPresetRegex = regEx(
|
||||
/^(?<packageName>[\w\-. /]+)(?::(?<presetPath>[\w-./]+\/))?(?::?(?<presetName>[\w\-.+]+))?(?:#(?<packageTag>[\w\-.]+?))?$/
|
||||
/^(?<packageName>[\w\-. /]+)(?::(?<presetName>[\w\-.+/]+))?(?:#(?<packageTag>[\w\-.]+?))?$/
|
||||
);
|
||||
|
||||
export function replaceArgs(
|
||||
@@ -75,10 +75,10 @@ export function replaceArgs(
|
||||
export function parsePreset(input: string): ParsedPreset {
|
||||
let str = input;
|
||||
let presetSource: string;
|
||||
let presetPath: string;
|
||||
let presetPath: string | undefined;
|
||||
let packageName: string;
|
||||
let presetName: string;
|
||||
let packageTag: string;
|
||||
let packageTag: string | undefined;
|
||||
let params: string[];
|
||||
if (str.startsWith('github>')) {
|
||||
presetSource = 'github';
|
||||
@@ -159,13 +159,9 @@ export function parsePreset(input: string): ParsedPreset {
|
||||
({ packageName, presetPath, presetName, packageTag } =
|
||||
nonScopedPresetWithSubdirRegex.exec(str)?.groups || {});
|
||||
} else {
|
||||
({ packageName, presetPath, presetName, packageTag } =
|
||||
({ packageName, presetName, packageTag } =
|
||||
gitPresetRegex.exec(str)?.groups || {});
|
||||
|
||||
if (is.nonEmptyString(presetPath) && presetPath.endsWith('/')) {
|
||||
presetPath = presetPath.slice(0, -1);
|
||||
}
|
||||
|
||||
if (presetSource === 'npm' && !packageName.startsWith('renovate-config-')) {
|
||||
packageName = `renovate-config-${packageName}`;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user