diff --git a/lib/modules/manager/asdf/extract.ts b/lib/modules/manager/asdf/extract.ts index 583db2043648f4..f2a9756814c5f9 100644 --- a/lib/modules/manager/asdf/extract.ts +++ b/lib/modules/manager/asdf/extract.ts @@ -21,8 +21,11 @@ export function extractPackageFile(content: string): PackageFile | null { const version = groups.version.trim(); const toolConfig = upgradeableTooling[depName]; - const toolDefinition = - typeof toolConfig === 'function' ? toolConfig(version) : toolConfig; + const toolDefinition = toolConfig + ? typeof toolConfig.config === 'function' + ? toolConfig.config(version) + : toolConfig.config + : undefined; if (toolDefinition) { const dep: PackageDependency = { diff --git a/lib/modules/manager/asdf/index.spec.ts b/lib/modules/manager/asdf/index.spec.ts index f567e867036446..6e6f8dc60ff237 100644 --- a/lib/modules/manager/asdf/index.spec.ts +++ b/lib/modules/manager/asdf/index.spec.ts @@ -4,9 +4,9 @@ import { extractPackageFile, supportedDatasources } from '.'; describe('modules/manager/asdf/index', () => { describe('supportedDatasources', () => { const toolConfigs = [ - ...Object.values(upgradeableTooling).filter( - (config): config is StaticTooling => 'datasource' in config - ), + ...Object.values(upgradeableTooling) + .map((definition) => definition.config) + .filter((config): config is StaticTooling => 'datasource' in config), ...extractPackageFile(`java adoptopenjdk-16.0.0+36 java adoptopenjdk-jre-16.0.0+36 scala 2.0.0 diff --git a/lib/modules/manager/asdf/readme.md b/lib/modules/manager/asdf/readme.md index e7132ebb091e71..a2c04b152a7d5d 100644 --- a/lib/modules/manager/asdf/readme.md +++ b/lib/modules/manager/asdf/readme.md @@ -3,44 +3,8 @@ Keeps the [asdf](https://asdf-vm.com/manage/configuration.html#tool-versions) `. Because `asdf` supports versioning for many different tools, specific tool support must be added one-by-one. The following tools are currently supported: -- [awscli](https://github.com/MetricMike/asdf-awscli) -- [bun](https://github.com/cometkim/asdf-bun) -- [cargo-make](https://github.com/kachick/asdf-cargo-make) -- [clojure](https://github.com/asdf-community/asdf-clojure) -- [crystal](https://github.com/asdf-community/asdf-crystal) -- [deno](https://github.com/asdf-community/asdf-deno) -- [direnv](https://github.com/asdf-community/asdf-direnv) -- [dprint](https://github.com/asdf-community/asdf-dprint) -- [elixir](https://github.com/asdf-vm/asdf-elixir) -- [elm](https://github.com/asdf-community/asdf-elm) -- [erlang](https://github.com/asdf-vm/asdf-erlang) -- [gauche](https://github.com/sakuro/asdf-gauche) -- [golang](https://github.com/kennyp/asdf-golang) -- [haskell](https://github.com/asdf-community/asdf-haskell) -- [helm](https://github.com/Antiarchitect/asdf-helm) -- [helmfile](https://github.com/feniix/asdf-helmfile) -- [hugo](https://github.com/NeoHsu/asdf-hugo) -- [idris](https://github.com/asdf-community/asdf-idris) -- [java](https://github.com/halcyon/asdf-java) -- [julia](https://github.com/rkyleg/asdf-julia) -- [just](https://github.com/olofvndrhr/asdf-just) -- [kotlin](https://github.com/asdf-community/asdf-kotlin) -- [kustomize](https://github.com/Banno/asdf-kustomize) -- [lua](https://github.com/Stratus3D/asdf-lua) -- [nim](https://github.com/asdf-community/asdf-nim) -- [nodejs](https://github.com/asdf-vm/asdf-nodejs) -- [ocaml](https://github.com/asdf-community/asdf-ocaml) -- [perl](https://github.com/ouest/asdf-perl) -- [php](https://github.com/asdf-community/asdf-php) -- [python](https://github.com/danhper/asdf-python) -- [ruby](https://github.com/asdf-vm/asdf-ruby) -- [rust](https://github.com/code-lever/asdf-rust) -- [scala](https://github.com/asdf-community/asdf-scala) -- [shellcheck](https://github.com/luizm/asdf-shellcheck) -- [shfmt](https://github.com/luizm/asdf-shfmt) -- [terraform](https://github.com/asdf-community/asdf-hashicorp) -- [trivy](https://github.com/zufardhiyaulhaq/asdf-trivy) -- [zig](https://github.com/cheetah/asdf-zig) + + !!! note diff --git a/lib/modules/manager/asdf/upgradeable-tooling.ts b/lib/modules/manager/asdf/upgradeable-tooling.ts index 19c2349d69407d..038de84f671c6b 100644 --- a/lib/modules/manager/asdf/upgradeable-tooling.ts +++ b/lib/modules/manager/asdf/upgradeable-tooling.ts @@ -18,255 +18,369 @@ export type DynamicTooling = (version: string) => StaticTooling | undefined; export const upgradeableTooling: Record< string, - StaticTooling | DynamicTooling + { config: StaticTooling | DynamicTooling; asdfPluginUrl: string } > = { awscli: { - datasource: GithubTagsDatasource.id, - packageName: 'aws/aws-cli', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/MetricMike/asdf-awscli', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'aws/aws-cli', + versioning: semverVersioning.id, + }, }, bun: { - datasource: GithubReleasesDatasource.id, - packageName: 'oven-sh/bun', - versioning: semverVersioning.id, - extractVersion: '^bun-v(?\\S+)', + asdfPluginUrl: 'https://github.com/cometkim/asdf-bun', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'oven-sh/bun', + versioning: semverVersioning.id, + extractVersion: '^bun-v(?\\S+)', + }, }, 'cargo-make': { - datasource: GithubReleasesDatasource.id, - packageName: 'sagiegurari/cargo-make', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/kachick/asdf-cargo-make', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'sagiegurari/cargo-make', + versioning: semverVersioning.id, + }, }, clojure: { - datasource: GithubTagsDatasource.id, - packageName: 'clojure/brew-install', - versioning: `${regexVersioning.id}:^(?\\d+?)\\.(?\\d+?)\\.(?\\d+)\\.(?\\d+)$`, + asdfPluginUrl: 'https://github.com/asdf-community/asdf-clojure', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'clojure/brew-install', + versioning: `${regexVersioning.id}:^(?\\d+?)\\.(?\\d+?)\\.(?\\d+)\\.(?\\d+)$`, + }, }, crystal: { - datasource: GithubReleasesDatasource.id, - packageName: 'crystal-lang/crystal', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/asdf-community/asdf-crystal', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'crystal-lang/crystal', + versioning: semverVersioning.id, + }, }, deno: { - datasource: GithubReleasesDatasource.id, - packageName: 'denoland/deno', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/asdf-community/asdf-deno', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'denoland/deno', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, direnv: { - datasource: GithubReleasesDatasource.id, - packageName: 'direnv/direnv', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/asdf-community/asdf-direnv', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'direnv/direnv', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, dprint: { - datasource: GithubReleasesDatasource.id, - packageName: 'dprint/dprint', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/asdf-community/asdf-dprint', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'dprint/dprint', + versioning: semverVersioning.id, + }, }, elixir: { - datasource: GithubTagsDatasource.id, - packageName: 'elixir-lang/elixir', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/asdf-vm/asdf-elixir', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'elixir-lang/elixir', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, elm: { - datasource: GithubReleasesDatasource.id, - packageName: 'elm/compiler', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/asdf-community/asdf-elm', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'elm/compiler', + versioning: semverVersioning.id, + }, }, erlang: { - datasource: GithubTagsDatasource.id, - packageName: 'erlang/otp', - extractVersion: '^OTP-(?\\S+)', - versioning: `${regexVersioning.id}:^(?\\d+?)\\.(?\\d+?)(\\.(?\\d+))?$`, + asdfPluginUrl: 'https://github.com/asdf-vm/asdf-erlang', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'erlang/otp', + extractVersion: '^OTP-(?\\S+)', + versioning: `${regexVersioning.id}:^(?\\d+?)\\.(?\\d+?)(\\.(?\\d+))?$`, + }, }, gauche: { - datasource: DockerDatasource.id, - packageName: 'practicalscheme/gauche', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/sakuro/asdf-gauche', + config: { + datasource: DockerDatasource.id, + packageName: 'practicalscheme/gauche', + versioning: semverVersioning.id, + }, }, golang: { - datasource: GithubTagsDatasource.id, - packageName: 'golang/go', - versioning: semverVersioning.id, - extractVersion: '^go(?\\S+)', + asdfPluginUrl: 'https://github.com/kennyp/asdf-golang', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'golang/go', + versioning: semverVersioning.id, + extractVersion: '^go(?\\S+)', + }, }, haskell: { - datasource: GithubTagsDatasource.id, - packageName: 'ghc/ghc', - versioning: semverVersioning.id, - extractVersion: '^ghc-(?\\S+?)-release', + asdfPluginUrl: 'https://github.com/asdf-community/asdf-haskell', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'ghc/ghc', + versioning: semverVersioning.id, + extractVersion: '^ghc-(?\\S+?)-release', + }, }, helm: { - datasource: GithubReleasesDatasource.id, - packageName: 'helm/helm', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/Antiarchitect/asdf-helm', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'helm/helm', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, helmfile: { - datasource: GithubReleasesDatasource.id, - packageName: 'helmfile/helmfile', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/feniix/asdf-helmfile', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'helmfile/helmfile', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, hugo: { - datasource: GithubReleasesDatasource.id, - packageName: 'gohugoio/hugo', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/NeoHsu/asdf-hugo', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'gohugoio/hugo', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, idris: { - datasource: GithubTagsDatasource.id, - packageName: 'idris-lang/Idris-dev', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', - }, - java: (version) => { - const adoptOpenJdkMatches = version.match( - /^adoptopenjdk-(?\d\S+)/ - ); - if (adoptOpenJdkMatches) { - return { - datasource: AdoptiumJavaDatasource.id, - packageName: 'java-jdk', - versioning: semverVersioning.id, - currentValue: adoptOpenJdkMatches.groups!.version, - }; - } - const adoptOpenJreMatches = version.match( - /^adoptopenjdk-jre-(?\d\S+)/ - ); - if (adoptOpenJreMatches) { - return { - datasource: AdoptiumJavaDatasource.id, - packageName: 'java-jre', - versioning: semverVersioning.id, - currentValue: adoptOpenJreMatches.groups!.version, - }; - } + asdfPluginUrl: 'https://github.com/asdf-community/asdf-idris', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'idris-lang/Idris-dev', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, + }, + java: { + asdfPluginUrl: 'https://github.com/halcyon/asdf-java', + config: (version) => { + const adoptOpenJdkMatches = version.match( + /^adoptopenjdk-(?\d\S+)/ + ); + if (adoptOpenJdkMatches) { + return { + datasource: AdoptiumJavaDatasource.id, + packageName: 'java-jdk', + versioning: semverVersioning.id, + currentValue: adoptOpenJdkMatches.groups!.version, + }; + } + const adoptOpenJreMatches = version.match( + /^adoptopenjdk-jre-(?\d\S+)/ + ); + if (adoptOpenJreMatches) { + return { + datasource: AdoptiumJavaDatasource.id, + packageName: 'java-jre', + versioning: semverVersioning.id, + currentValue: adoptOpenJreMatches.groups!.version, + }; + } - return undefined; + return undefined; + }, }, julia: { - datasource: GithubReleasesDatasource.id, - packageName: 'JuliaLang/julia', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/rkyleg/asdf-julia', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'JuliaLang/julia', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, just: { - datasource: GithubReleasesDatasource.id, - packageName: 'casey/just', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/olofvndrhr/asdf-just', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'casey/just', + versioning: semverVersioning.id, + }, }, kotlin: { - datasource: GithubReleasesDatasource.id, - packageName: 'JetBrains/kotlin', - versioning: semverVersioning.id, - extractVersion: '^(Kotlin |v)(?\\S+)', + asdfPluginUrl: 'https://github.com/asdf-community/asdf-kotlin', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'JetBrains/kotlin', + versioning: semverVersioning.id, + extractVersion: '^(Kotlin |v)(?\\S+)', + }, }, kustomize: { - datasource: GithubReleasesDatasource.id, - packageName: 'kubernetes-sigs/kustomize', - versioning: semverVersioning.id, - extractVersion: '^kustomize/v(?\\S+)', + asdfPluginUrl: 'https://github.com/Banno/asdf-kustomize', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'kubernetes-sigs/kustomize', + versioning: semverVersioning.id, + extractVersion: '^kustomize/v(?\\S+)', + }, }, lua: { - datasource: GithubReleasesDatasource.id, - packageName: 'lua/lua', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/Stratus3D/asdf-lua', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'lua/lua', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, nim: { - datasource: GithubTagsDatasource.id, - packageName: 'nim-lang/Nim', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/asdf-community/asdf-nim', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'nim-lang/Nim', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, nodejs: { - depName: 'node', - datasource: NodeDatasource.id, - packageName: 'node', - versioning: nodeVersioning.id, + asdfPluginUrl: 'https://github.com/asdf-vm/asdf-nodejs', + config: { + depName: 'node', + datasource: NodeDatasource.id, + packageName: 'node', + versioning: nodeVersioning.id, + }, }, ocaml: { - datasource: GithubReleasesDatasource.id, - packageName: 'ocaml/ocaml', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/asdf-community/asdf-ocaml', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'ocaml/ocaml', + versioning: semverVersioning.id, + }, }, perl: { - datasource: GithubTagsDatasource.id, - packageName: 'Perl/perl5', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/ouest/asdf-perl', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'Perl/perl5', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, php: { - datasource: GithubTagsDatasource.id, - packageName: 'php/php-src', - versioning: semverVersioning.id, - extractVersion: '^php-(?\\S+)', + asdfPluginUrl: 'https://github.com/asdf-community/asdf-php', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'php/php-src', + versioning: semverVersioning.id, + extractVersion: '^php-(?\\S+)', + }, }, python: { - datasource: GithubTagsDatasource.id, - packageName: 'python/cpython', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/danhper/asdf-python', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'python/cpython', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, ruby: { - datasource: RubyVersionDatasource.id, - packageName: 'ruby-version', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/asdf-vm/asdf-ruby', + config: { + datasource: RubyVersionDatasource.id, + packageName: 'ruby-version', + versioning: semverVersioning.id, + }, }, rust: { - datasource: GithubTagsDatasource.id, - packageName: 'rust-lang/rust', - versioning: semverVersioning.id, - }, - scala: (version) => { - if (version.startsWith('2')) { - return { - datasource: GithubTagsDatasource.id, - packageName: 'scala/scala', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', - }; - } - if (version.startsWith('3')) { - return { - datasource: GithubTagsDatasource.id, - packageName: 'lampepfl/dotty', - versioning: semverVersioning.id, - }; - } + asdfPluginUrl: 'https://github.com/code-lever/asdf-rust', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'rust-lang/rust', + versioning: semverVersioning.id, + }, + }, + scala: { + asdfPluginUrl: 'https://github.com/asdf-community/asdf-scala', + config: (version) => { + if (version.startsWith('2')) { + return { + datasource: GithubTagsDatasource.id, + packageName: 'scala/scala', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }; + } + if (version.startsWith('3')) { + return { + datasource: GithubTagsDatasource.id, + packageName: 'lampepfl/dotty', + versioning: semverVersioning.id, + }; + } - return undefined; + return undefined; + }, }, shellcheck: { - datasource: GithubReleasesDatasource.id, - packageName: 'koalaman/shellcheck', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/luizm/asdf-shellcheck', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'koalaman/shellcheck', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, shfmt: { - datasource: GithubReleasesDatasource.id, - packageName: 'mvdan/sh', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/luizm/asdf-shfmt', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'mvdan/sh', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, terraform: { - datasource: GithubReleasesDatasource.id, - packageName: 'hashicorp/terraform', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/asdf-community/asdf-hashicorp', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'hashicorp/terraform', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, trivy: { - datasource: GithubReleasesDatasource.id, - packageName: 'aquasecurity/trivy', - versioning: semverVersioning.id, - extractVersion: '^v(?\\S+)', + asdfPluginUrl: 'https://github.com/zufardhiyaulhaq/asdf-trivy', + config: { + datasource: GithubReleasesDatasource.id, + packageName: 'aquasecurity/trivy', + versioning: semverVersioning.id, + extractVersion: '^v(?\\S+)', + }, }, zig: { - datasource: GithubTagsDatasource.id, - packageName: 'ziglang/zig', - versioning: semverVersioning.id, + asdfPluginUrl: 'https://github.com/cheetah/asdf-zig', + config: { + datasource: GithubTagsDatasource.id, + packageName: 'ziglang/zig', + versioning: semverVersioning.id, + }, }, }; diff --git a/tools/docs/manager-asdf-supported-plugins.ts b/tools/docs/manager-asdf-supported-plugins.ts new file mode 100644 index 00000000000000..e2846c9e06d76f --- /dev/null +++ b/tools/docs/manager-asdf-supported-plugins.ts @@ -0,0 +1,18 @@ +import { upgradeableTooling } from '../../lib/modules/manager/asdf/upgradeable-tooling'; +import { readFile, updateFile } from '../utils'; +import { replaceContent } from './utils'; + +function generateTooling(): string { + return Object.entries(upgradeableTooling) + .map(([name, { asdfPluginUrl }]) => `- [${name}](${asdfPluginUrl})`) + .join('\n'); +} + +export async function generateManagerAsdfSupportedPlugins( + dist: string +): Promise { + const indexFileName = 'lib/modules/manager/asdf/readme.md'; + let indexContent = await readFile(indexFileName); + indexContent = replaceContent(indexContent, generateTooling()); + await updateFile(`${dist}/modules/manager/asdf/index.md`, indexContent); +} diff --git a/tools/generate-docs.ts b/tools/generate-docs.ts index 5bcf0f9319f873..612f917d5aee12 100644 --- a/tools/generate-docs.ts +++ b/tools/generate-docs.ts @@ -4,6 +4,7 @@ import { getProblems, logger } from '../lib/logger'; import { generateConfig } from './docs/config'; import { generateDatasources } from './docs/datasources'; import { generateManagers } from './docs/manager'; +import { generateManagerAsdfSupportedPlugins } from './docs/manager-asdf-supported-plugins'; import { generatePlatforms } from './docs/platforms'; import { generatePresets } from './docs/presets'; import { generateSchema } from './docs/schema'; @@ -50,6 +51,10 @@ process.on('unhandledRejection', (err) => { logger.info('* managers'); await generateManagers(dist); + // managers/asdf supported plugins + logger.info('* managers/asdf/supported-plugins'); + await generateManagerAsdfSupportedPlugins(dist); + // presets logger.info('* presets'); await generatePresets(dist);