diff --git a/.azure/output-example-1.yml b/.azure/output-example-1.yml index 4bc2818b2..3f98261e9 100644 --- a/.azure/output-example-1.yml +++ b/.azure/output-example-1.yml @@ -16,12 +16,12 @@ jobs: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: diff --git a/.azure/output-example-2.yml b/.azure/output-example-2.yml index c5eda787d..256360113 100644 --- a/.azure/output-example-2.yml +++ b/.azure/output-example-2.yml @@ -16,12 +16,12 @@ jobs: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: diff --git a/.azure/output-example-3.yml b/.azure/output-example-3.yml index edcb7ba3c..61b5ac656 100644 --- a/.azure/output-example-3.yml +++ b/.azure/output-example-3.yml @@ -19,12 +19,12 @@ stages: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: diff --git a/.github/workflows/output-example-1.yml b/.github/workflows/output-example-1.yml index 23c3d9e1d..b8ac4e8dc 100644 --- a/.github/workflows/output-example-1.yml +++ b/.github/workflows/output-example-1.yml @@ -20,13 +20,13 @@ jobs: fetch-depth: 0 - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 - run: | echo "FullSemVer (env.fullSemVer) : ${{ env.fullSemVer }}" diff --git a/.github/workflows/output-example-2.yml b/.github/workflows/output-example-2.yml index 1e7377674..1c8e3e4c2 100644 --- a/.github/workflows/output-example-2.yml +++ b/.github/workflows/output-example-2.yml @@ -26,13 +26,13 @@ jobs: fetch-depth: 0 - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 GitVersion_v6_cross_job_consumer_without_prefix: name: GitVersion v6 (cross job consumer) - without prefix diff --git a/dist/tools/libs/gitversion.mjs b/dist/tools/libs/gitversion.mjs index 33c3f32d3..9a3eedc74 100644 --- a/dist/tools/libs/gitversion.mjs +++ b/dist/tools/libs/gitversion.mjs @@ -11,8 +11,8 @@ class GitVersionSettingsProvider extends SettingsProvider { const disableCache = this.buildAgent.getBooleanInput("disableCache"); const disableNormalization = this.buildAgent.getBooleanInput("disableNormalization"); const disableShallowCloneCheck = this.buildAgent.getBooleanInput("disableShallowCloneCheck"); - const configFilePath = this.buildAgent.getInput("configFilePath"); - const overrideConfig = this.buildAgent.getListInput("overrideConfig"); + const configFilePath = this.buildAgent.getInput("configFilePath", false); + const overrideConfig = this.buildAgent.getListInput("overrideConfig", false); const updateAssemblyInfo = this.buildAgent.getBooleanInput("updateAssemblyInfo"); const updateAssemblyInfoFilename = this.buildAgent.getInput("updateAssemblyInfoFilename"); const updateProjectFiles = this.buildAgent.getBooleanInput("updateProjectFiles"); @@ -138,7 +138,7 @@ class GitVersionTool extends DotnetTool { } if (updateAssemblyInfo) { builder.addArgument("/updateassemblyinfo"); - if (updateAssemblyInfoFilename?.length > 0) { + if (updateAssemblyInfoFilename) { if (await this.isValidInputFile("updateAssemblyInfoFilename", updateAssemblyInfoFilename)) { builder.addArgument(updateAssemblyInfoFilename); } else { @@ -210,21 +210,25 @@ class Runner extends RunnerBase { return this.safeExecute(async () => await this.tool.executeCommand(), "GitVersion executed successfully"); } processGitVersionOutput(result) { - const stdout = result.stdout; - if (stdout.lastIndexOf("{") === -1 || stdout.lastIndexOf("}") === -1) { - const errorMessage = "GitVersion output is not valid JSON, see output details"; - this.buildAgent.debug(errorMessage); - this.buildAgent.setFailed(errorMessage, true); - return { - code: -1, - error: new Error(errorMessage) - }; + if (result.code === 0) { + const stdout = result.stdout; + if (stdout.lastIndexOf("{") === -1 || stdout.lastIndexOf("}") === -1) { + const errorMessage = "GitVersion output is not valid JSON, see output details"; + this.buildAgent.debug(errorMessage); + this.buildAgent.setFailed(errorMessage, true); + return { + code: -1, + error: new Error(errorMessage) + }; + } else { + const jsonOutput = stdout.substring(stdout.lastIndexOf("{"), stdout.lastIndexOf("}") + 1); + const gitVersionOutput = JSON.parse(jsonOutput); + this.tool.writeGitVersionToAgent(gitVersionOutput); + this.tool.updateBuildNumber(); + this.buildAgent.setSucceeded("GitVersion executed successfully", true); + return result; + } } else { - const jsonOutput = stdout.substring(stdout.lastIndexOf("{"), stdout.lastIndexOf("}") + 1); - const gitVersionOutput = JSON.parse(jsonOutput); - this.tool.writeGitVersionToAgent(gitVersionOutput); - this.tool.updateBuildNumber(); - this.buildAgent.setSucceeded("GitVersion executed successfully", true); return result; } } diff --git a/dist/tools/libs/gitversion.mjs.map b/dist/tools/libs/gitversion.mjs.map index 5fc583d9a..3fc709d7b 100644 --- a/dist/tools/libs/gitversion.mjs.map +++ b/dist/tools/libs/gitversion.mjs.map @@ -1 +1 @@ -{"version":3,"file":"gitversion.mjs","sources":["../../../src/tools/gitversion/settings.ts","../../../src/tools/gitversion/tool.ts","../../../src/tools/gitversion/runner.ts"],"sourcesContent":["import { type ISettingsProvider, SettingsProvider } from '@tools/common'\nimport { type CommandSettings, type ExecuteSettings } from './models'\n\nexport interface IGitVersionSettingsProvider extends ISettingsProvider {\n getExecuteSettings(): ExecuteSettings\n\n getCommandSettings(): CommandSettings\n}\n\nexport class GitVersionSettingsProvider extends SettingsProvider implements IGitVersionSettingsProvider {\n getExecuteSettings(): ExecuteSettings {\n const targetPath = this.buildAgent.getInput('targetPath')\n\n const disableCache = this.buildAgent.getBooleanInput('disableCache')\n const disableNormalization = this.buildAgent.getBooleanInput('disableNormalization')\n const disableShallowCloneCheck = this.buildAgent.getBooleanInput('disableShallowCloneCheck')\n\n const configFilePath = this.buildAgent.getInput('configFilePath')\n const overrideConfig = this.buildAgent.getListInput('overrideConfig')\n\n const updateAssemblyInfo = this.buildAgent.getBooleanInput('updateAssemblyInfo')\n const updateAssemblyInfoFilename = this.buildAgent.getInput('updateAssemblyInfoFilename')\n\n const updateProjectFiles = this.buildAgent.getBooleanInput('updateProjectFiles')\n\n const buildNumberFormat = this.buildAgent.getInput('buildNumberFormat', false)\n\n return {\n targetPath,\n disableCache,\n disableNormalization,\n disableShallowCloneCheck,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n updateProjectFiles,\n buildNumberFormat\n }\n }\n\n getCommandSettings(): CommandSettings {\n const targetPath = this.buildAgent.getInput('targetPath')\n const disableShallowCloneCheck = this.buildAgent.getBooleanInput('disableShallowCloneCheck')\n const args = this.buildAgent.getInput('arguments')\n\n return {\n targetPath,\n disableShallowCloneCheck,\n arguments: args\n }\n }\n}\n","import { type ExecResult } from '@agents/common'\nimport { ArgumentsBuilder, DotnetTool, keysOf } from '@tools/common'\nimport { type CommandSettings, type ExecuteSettings, type GitVersionOutput } from './models'\nimport { GitVersionSettingsProvider, type IGitVersionSettingsProvider } from './settings'\n\nexport class GitVersionTool extends DotnetTool {\n get packageName(): string {\n return 'GitVersion.Tool'\n }\n\n get toolName(): string {\n return 'dotnet-gitversion'\n }\n\n get toolPathVariable(): string {\n return 'GITVERSION_PATH'\n }\n\n get versionRange(): string | null {\n return '>=6.1.0 <7.0.0'\n }\n\n get settingsProvider(): IGitVersionSettingsProvider {\n return new GitVersionSettingsProvider(this.buildAgent)\n }\n\n async executeJson(): Promise {\n const settings = this.settingsProvider.getExecuteSettings()\n const workDir = await this.getRepoDir(settings)\n\n await this.checkShallowClone(settings, workDir)\n\n const args = await this.getExecuteArguments(workDir, settings)\n\n await this.setDotnetRoot()\n return await this.executeTool(args)\n }\n\n async executeCommand(): Promise {\n const settings = this.settingsProvider.getCommandSettings()\n const workDir = await this.getRepoDir(settings)\n\n await this.checkShallowClone(settings, workDir)\n\n const args = this.getCommandArguments(workDir, settings)\n\n await this.setDotnetRoot()\n return await this.executeTool(args)\n }\n\n writeGitVersionToAgent(output: GitVersionOutput): void {\n for (const property of keysOf(output)) {\n const name = this.toCamelCase(property)\n try {\n let value = output[property]?.toString()\n if (value === '0') {\n value = '0'\n }\n this.buildAgent.setOutput(name, value)\n this.buildAgent.setOutput(`GitVersion_${property}`, value)\n this.buildAgent.setVariable(name, value)\n this.buildAgent.setVariable(`GitVersion_${property}`, value)\n } catch (_error) {\n this.buildAgent.error(`Unable to set output/variable for ${property}`)\n }\n }\n }\n\n updateBuildNumber(): void {\n const settings = this.settingsProvider.getExecuteSettings()\n if (settings.buildNumberFormat) {\n const buildNumber = this.buildAgent.getExpandedString(settings.buildNumberFormat)\n this.buildAgent.updateBuildNumber(buildNumber)\n } else {\n this.buildAgent.debug('No buildNumberFormat provided. Skipping build number update.')\n }\n }\n\n protected async getRepoDir(settings: ExecuteSettings | CommandSettings): Promise {\n return await super.getRepoPath(settings.targetPath)\n }\n\n protected async getExecuteArguments(workDir: string, options: ExecuteSettings): Promise {\n const builder = new ArgumentsBuilder().addArgument(workDir).addArgument('/output').addArgument('json').addArgument('/l').addArgument('console')\n\n const {\n disableCache,\n disableNormalization,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n updateProjectFiles\n //\n } = options\n\n if (disableCache) {\n builder.addArgument('/nocache')\n }\n\n if (disableNormalization) {\n builder.addArgument('/nonormalize')\n }\n\n if (configFilePath) {\n if (await this.isValidInputFile('configFilePath', configFilePath)) {\n builder.addArgument('/config').addArgument(configFilePath)\n } else {\n throw new Error(`GitVersion configuration file not found at ${configFilePath}`)\n }\n }\n\n if (overrideConfig) {\n for (let config of overrideConfig) {\n config = config.trim()\n if (config.match(/([a-zA-Z0-9]+(-[a-zA-Z]+)*=[a-zA-Z0-9\\- :.']*)/)) {\n builder.addArgument('/overrideconfig').addArgument(config)\n }\n }\n }\n\n if (updateAssemblyInfo) {\n builder.addArgument('/updateassemblyinfo')\n\n // You can specify 'updateAssemblyInfo' without 'updateAssemblyInfoFilename'.\n if (updateAssemblyInfoFilename?.length > 0) {\n if (await this.isValidInputFile('updateAssemblyInfoFilename', updateAssemblyInfoFilename)) {\n builder.addArgument(updateAssemblyInfoFilename)\n } else {\n throw new Error(`AssemblyInfoFilename file not found at ${updateAssemblyInfoFilename}`)\n }\n }\n }\n\n if (updateProjectFiles) {\n builder.addArgument('/updateprojectfiles')\n }\n\n return builder.build()\n }\n\n protected getCommandArguments(workDir: string, options: CommandSettings): string[] {\n const builder = new ArgumentsBuilder().addArgument(workDir)\n\n if (options.arguments) {\n builder.addArguments(ArgumentsBuilder.parseArgumentString(options.arguments))\n }\n\n return builder.build()\n }\n\n private async checkShallowClone(settings: ExecuteSettings | CommandSettings, workDir: string): Promise {\n if (!settings.disableShallowCloneCheck) {\n const isShallowResult = await this.execute('git', ['-C', workDir, 'rev-parse', '--is-shallow-repository'])\n if (isShallowResult.code === 0 && isShallowResult.stdout?.trim() === 'true') {\n throw new Error(\n 'The repository is shallow. Consider disabling shallow clones. See https://github.com/GitTools/actions/blob/main/docs/cloning.md for more information.'\n )\n }\n }\n }\n\n private toCamelCase(input: string): string {\n return input.replace(/^\\w|[A-Z]|\\b\\w|\\s+/g, function (match, index) {\n if (+match === 0) return '' // or if (/\\s+/.test(match)) for white spaces\n return index === 0 ? match.toLowerCase() : match.toUpperCase()\n })\n }\n}\n","import { type ExecResult, type IBuildAgent } from '@agents/common'\nimport { type Commands, type GitVersionOutput } from './models'\nimport { GitVersionTool } from './tool'\nimport { RunnerBase } from '../common/runner'\n\nexport class Runner extends RunnerBase {\n protected readonly tool: GitVersionTool\n\n constructor(protected readonly buildAgent: IBuildAgent) {\n super(buildAgent)\n this.tool = new GitVersionTool(this.buildAgent)\n }\n\n async run(command: Commands): Promise {\n switch (command) {\n case 'setup':\n return await this.setup()\n case 'execute':\n return await this.execute()\n case 'command':\n return await this.command()\n }\n }\n\n private async setup(): Promise {\n return this.safeExecute(async () => {\n await this.tool.install()\n return { code: 0 }\n }, 'GitVersion setup successfully')\n }\n\n private async execute(): Promise {\n return this.safeExecute(async () => {\n const result = await this.tool.executeJson()\n this.buildAgent.debug('Parsing GitVersion output')\n return this.processGitVersionOutput(result)\n }, 'GitVersion executed successfully')\n }\n\n private async command(): Promise {\n return this.safeExecute(async () => await this.tool.executeCommand(), 'GitVersion executed successfully')\n }\n\n private processGitVersionOutput(result: ExecResult): ExecResult {\n const stdout = result.stdout as string\n if (stdout.lastIndexOf('{') === -1 || stdout.lastIndexOf('}') === -1) {\n const errorMessage = 'GitVersion output is not valid JSON, see output details'\n this.buildAgent.debug(errorMessage)\n this.buildAgent.setFailed(errorMessage, true)\n return {\n code: -1,\n error: new Error(errorMessage)\n }\n } else {\n const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1)\n\n const gitVersionOutput = JSON.parse(jsonOutput) as GitVersionOutput\n this.tool.writeGitVersionToAgent(gitVersionOutput)\n this.tool.updateBuildNumber()\n this.buildAgent.setSucceeded('GitVersion executed successfully', true)\n return result\n }\n }\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitversion.mjs","sources":["../../../src/tools/gitversion/settings.ts","../../../src/tools/gitversion/tool.ts","../../../src/tools/gitversion/runner.ts"],"sourcesContent":["import { type ISettingsProvider, SettingsProvider } from '@tools/common'\nimport { type CommandSettings, type ExecuteSettings } from './models'\n\nexport interface IGitVersionSettingsProvider extends ISettingsProvider {\n getExecuteSettings(): ExecuteSettings\n\n getCommandSettings(): CommandSettings\n}\n\nexport class GitVersionSettingsProvider extends SettingsProvider implements IGitVersionSettingsProvider {\n getExecuteSettings(): ExecuteSettings {\n const targetPath = this.buildAgent.getInput('targetPath')\n\n const disableCache = this.buildAgent.getBooleanInput('disableCache')\n const disableNormalization = this.buildAgent.getBooleanInput('disableNormalization')\n const disableShallowCloneCheck = this.buildAgent.getBooleanInput('disableShallowCloneCheck')\n\n const configFilePath = this.buildAgent.getInput('configFilePath', false)\n const overrideConfig = this.buildAgent.getListInput('overrideConfig', false)\n\n const updateAssemblyInfo = this.buildAgent.getBooleanInput('updateAssemblyInfo')\n const updateAssemblyInfoFilename = this.buildAgent.getInput('updateAssemblyInfoFilename')\n\n const updateProjectFiles = this.buildAgent.getBooleanInput('updateProjectFiles')\n\n const buildNumberFormat = this.buildAgent.getInput('buildNumberFormat', false)\n\n return {\n targetPath,\n disableCache,\n disableNormalization,\n disableShallowCloneCheck,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n updateProjectFiles,\n buildNumberFormat\n }\n }\n\n getCommandSettings(): CommandSettings {\n const targetPath = this.buildAgent.getInput('targetPath')\n const disableShallowCloneCheck = this.buildAgent.getBooleanInput('disableShallowCloneCheck')\n const args = this.buildAgent.getInput('arguments')\n\n return {\n targetPath,\n disableShallowCloneCheck,\n arguments: args\n }\n }\n}\n","import { type ExecResult } from '@agents/common'\nimport { ArgumentsBuilder, DotnetTool, keysOf } from '@tools/common'\nimport { type CommandSettings, type ExecuteSettings, type GitVersionOutput } from './models'\nimport { GitVersionSettingsProvider, type IGitVersionSettingsProvider } from './settings'\n\nexport class GitVersionTool extends DotnetTool {\n get packageName(): string {\n return 'GitVersion.Tool'\n }\n\n get toolName(): string {\n return 'dotnet-gitversion'\n }\n\n get toolPathVariable(): string {\n return 'GITVERSION_PATH'\n }\n\n get versionRange(): string | null {\n return '>=6.1.0 <7.0.0'\n }\n\n get settingsProvider(): IGitVersionSettingsProvider {\n return new GitVersionSettingsProvider(this.buildAgent)\n }\n\n async executeJson(): Promise {\n const settings = this.settingsProvider.getExecuteSettings()\n const workDir = await this.getRepoDir(settings)\n\n await this.checkShallowClone(settings, workDir)\n\n const args = await this.getExecuteArguments(workDir, settings)\n\n await this.setDotnetRoot()\n return await this.executeTool(args)\n }\n\n async executeCommand(): Promise {\n const settings = this.settingsProvider.getCommandSettings()\n const workDir = await this.getRepoDir(settings)\n\n await this.checkShallowClone(settings, workDir)\n\n const args = this.getCommandArguments(workDir, settings)\n\n await this.setDotnetRoot()\n return await this.executeTool(args)\n }\n\n writeGitVersionToAgent(output: GitVersionOutput): void {\n for (const property of keysOf(output)) {\n const name = this.toCamelCase(property)\n try {\n let value = output[property]?.toString()\n if (value === '0') {\n value = '0'\n }\n this.buildAgent.setOutput(name, value)\n this.buildAgent.setOutput(`GitVersion_${property}`, value)\n this.buildAgent.setVariable(name, value)\n this.buildAgent.setVariable(`GitVersion_${property}`, value)\n } catch (_error) {\n this.buildAgent.error(`Unable to set output/variable for ${property}`)\n }\n }\n }\n\n updateBuildNumber(): void {\n const settings = this.settingsProvider.getExecuteSettings()\n if (settings.buildNumberFormat) {\n const buildNumber = this.buildAgent.getExpandedString(settings.buildNumberFormat)\n this.buildAgent.updateBuildNumber(buildNumber)\n } else {\n this.buildAgent.debug('No buildNumberFormat provided. Skipping build number update.')\n }\n }\n\n protected async getRepoDir(settings: ExecuteSettings | CommandSettings): Promise {\n return await super.getRepoPath(settings.targetPath)\n }\n\n protected async getExecuteArguments(workDir: string, options: ExecuteSettings): Promise {\n const builder = new ArgumentsBuilder().addArgument(workDir).addArgument('/output').addArgument('json').addArgument('/l').addArgument('console')\n\n const {\n disableCache,\n disableNormalization,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n updateProjectFiles\n //\n } = options\n\n if (disableCache) {\n builder.addArgument('/nocache')\n }\n\n if (disableNormalization) {\n builder.addArgument('/nonormalize')\n }\n\n if (configFilePath) {\n if (await this.isValidInputFile('configFilePath', configFilePath)) {\n builder.addArgument('/config').addArgument(configFilePath)\n } else {\n throw new Error(`GitVersion configuration file not found at ${configFilePath}`)\n }\n }\n\n if (overrideConfig) {\n for (let config of overrideConfig) {\n config = config.trim()\n if (config.match(/([a-zA-Z0-9]+(-[a-zA-Z]+)*=[a-zA-Z0-9\\- :.']*)/)) {\n builder.addArgument('/overrideconfig').addArgument(config)\n }\n }\n }\n\n if (updateAssemblyInfo) {\n builder.addArgument('/updateassemblyinfo')\n\n // You can specify 'updateAssemblyInfo' without 'updateAssemblyInfoFilename'.\n if (updateAssemblyInfoFilename) {\n if (await this.isValidInputFile('updateAssemblyInfoFilename', updateAssemblyInfoFilename)) {\n builder.addArgument(updateAssemblyInfoFilename)\n } else {\n throw new Error(`AssemblyInfoFilename file not found at ${updateAssemblyInfoFilename}`)\n }\n }\n }\n\n if (updateProjectFiles) {\n builder.addArgument('/updateprojectfiles')\n }\n\n return builder.build()\n }\n\n protected getCommandArguments(workDir: string, options: CommandSettings): string[] {\n const builder = new ArgumentsBuilder().addArgument(workDir)\n\n if (options.arguments) {\n builder.addArguments(ArgumentsBuilder.parseArgumentString(options.arguments))\n }\n\n return builder.build()\n }\n\n private async checkShallowClone(settings: ExecuteSettings | CommandSettings, workDir: string): Promise {\n if (!settings.disableShallowCloneCheck) {\n const isShallowResult = await this.execute('git', ['-C', workDir, 'rev-parse', '--is-shallow-repository'])\n if (isShallowResult.code === 0 && isShallowResult.stdout?.trim() === 'true') {\n throw new Error(\n 'The repository is shallow. Consider disabling shallow clones. See https://github.com/GitTools/actions/blob/main/docs/cloning.md for more information.'\n )\n }\n }\n }\n\n private toCamelCase(input: string): string {\n return input.replace(/^\\w|[A-Z]|\\b\\w|\\s+/g, function (match, index) {\n if (+match === 0) return '' // or if (/\\s+/.test(match)) for white spaces\n return index === 0 ? match.toLowerCase() : match.toUpperCase()\n })\n }\n}\n","import { type ExecResult, type IBuildAgent } from '@agents/common'\nimport { type Commands, type GitVersionOutput } from './models'\nimport { GitVersionTool } from './tool'\nimport { RunnerBase } from '../common/runner'\n\nexport class Runner extends RunnerBase {\n protected readonly tool: GitVersionTool\n\n constructor(protected readonly buildAgent: IBuildAgent) {\n super(buildAgent)\n this.tool = new GitVersionTool(this.buildAgent)\n }\n\n async run(command: Commands): Promise {\n switch (command) {\n case 'setup':\n return await this.setup()\n case 'execute':\n return await this.execute()\n case 'command':\n return await this.command()\n }\n }\n\n private async setup(): Promise {\n return this.safeExecute(async () => {\n await this.tool.install()\n return { code: 0 }\n }, 'GitVersion setup successfully')\n }\n\n private async execute(): Promise {\n return this.safeExecute(async () => {\n const result = await this.tool.executeJson()\n this.buildAgent.debug('Parsing GitVersion output')\n return this.processGitVersionOutput(result)\n }, 'GitVersion executed successfully')\n }\n\n private async command(): Promise {\n return this.safeExecute(async () => await this.tool.executeCommand(), 'GitVersion executed successfully')\n }\n\n private processGitVersionOutput(result: ExecResult): ExecResult {\n if (result.code === 0) {\n const stdout = result.stdout as string\n if (stdout.lastIndexOf('{') === -1 || stdout.lastIndexOf('}') === -1) {\n const errorMessage = 'GitVersion output is not valid JSON, see output details'\n this.buildAgent.debug(errorMessage)\n this.buildAgent.setFailed(errorMessage, true)\n return {\n code: -1,\n error: new Error(errorMessage)\n }\n } else {\n const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1)\n\n const gitVersionOutput = JSON.parse(jsonOutput) as GitVersionOutput\n this.tool.writeGitVersionToAgent(gitVersionOutput)\n this.tool.updateBuildNumber()\n this.buildAgent.setSucceeded('GitVersion executed successfully', true)\n return result\n }\n } else {\n return result\n }\n }\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/tools/libs/tools.mjs b/dist/tools/libs/tools.mjs index 3a0d6ebcf..554c35add 100644 --- a/dist/tools/libs/tools.mjs +++ b/dist/tools/libs/tools.mjs @@ -336,14 +336,17 @@ class DotnetTool { async getQueryServices() { const builder = new ArgumentsBuilder().addArgument("nuget").addArgument("list").addArgument("source").addKeyValue("format", "short"); const result = await this.execute("dotnet", builder.build()); - const nugetSources = [...(result.stdout ?? "").matchAll(/^E (?.+)/gm)].map((m) => m.groups.index); + const nugetSources = [...(result.stdout ?? "").matchAll(/^E (?.+)/gm)].map((m) => m.groups?.index ?? "").filter((s) => !!s); if (!nugetSources.length) { this.buildAgent.error("Failed to fetch an enabled package source for dotnet."); return []; } const sources = []; for (const nugetSource of nugetSources) { - const nugetIndex = await fetch(nugetSource); + const nugetIndex = await fetch(nugetSource).catch((e) => { + this.buildAgent.warn(e.cause?.message ?? "An unknown error occurred while fetching data"); + return Response.error(); + }); if (!nugetIndex?.ok) { this.buildAgent.warn(`Failed to fetch data from NuGet source ${nugetSource}.`); continue; @@ -359,17 +362,22 @@ class DotnetTool { return sources; } async queryVersionsFromNugetSource(serviceUrl, toolName, includePrerelease) { + this.buildAgent.debug(`Fetching ${toolName} versions from source ${serviceUrl}`); const toolNameParam = encodeURIComponent(toolName.toLowerCase()); const prereleaseParam = includePrerelease ? "true" : "false"; const downloadPath = `${serviceUrl}?q=${toolNameParam}&prerelease=${prereleaseParam}&semVerLevel=2.0.0&take=1`; - const response = await fetch(downloadPath); + const response = await fetch(downloadPath).catch((e) => { + this.buildAgent.warn(e.cause?.message ?? "An unknown error occurred while fetching data"); + return Response.error(); + }); if (!response || !response.ok) { this.buildAgent.warn(`failed to query latest version for ${toolName} from ${downloadPath}. Status code: ${response ? response.status : "unknown"}`); return []; } const { data } = await response.json(); - const versions = data[0].versions.map((x) => x.version); - return versions ?? []; + const versions = data?.[0]?.versions?.map((x) => x.version) ?? []; + this.buildAgent.debug(`Found ${versions.length} versions: ${versions.join(", ")}`); + return versions; } async queryLatestMatch(toolName, versionSpec, includePrerelease) { this.buildAgent.info( diff --git a/dist/tools/libs/tools.mjs.map b/dist/tools/libs/tools.mjs.map index b8dca8f1f..1e55d4843 100644 --- a/dist/tools/libs/tools.mjs.map +++ b/dist/tools/libs/tools.mjs.map @@ -1 +1 @@ -{"version":3,"file":"tools.mjs","sources":["../../../src/tools/common/models.ts","../../../src/tools/common/arguments-builder.ts","../../../src/tools/common/dotnet-tool.ts","../../../src/tools/common/settings.ts","../../../src/tools/common/index.ts","../../../src/tools/common/runner.ts"],"sourcesContent":["import { type ExecResult } from '@agents/common'\n\nexport type SetupSettings = {\n versionSpec: string\n includePrerelease: boolean\n ignoreFailedSources: boolean\n preferLatestVersion: boolean\n}\n\nexport type IRunner = {\n run(command: string): Promise\n}\n\nexport type NugetVersions = { data: { versions: { version: string }[] }[] }\n\n/** See the {@link https://learn.microsoft.com/en-us/nuget/api/service-index|NuGet Server API spec}*/\nexport type NugetServiceIndex = {\n version: string\n resources: {\n '@type': `${NugetServiceType}${`/${string}` | ''}`\n '@id': string\n comment: string | undefined\n }[]\n}\n\nexport enum NugetServiceType {\n Catalog = 'Catalog',\n PackageBaseAddress = 'PackageBaseAddress',\n PackageDetailsUriTemplate = 'PackageDetailsUriTemplate',\n PackagePublish = 'PackagePublish',\n ReadmeUriTemplate = 'ReadmeUriTemplate',\n RegistrationsBaseUrl = 'RegistrationsBaseUrl',\n ReportAbuseUriTemplate = 'ReportAbuseUriTemplate',\n RepositorySignatures = 'RepositorySignatures',\n SearchAutocompleteService = 'SearchAutocompleteService',\n SearchQueryService = 'SearchQueryService',\n SymbolPackagePublish = 'SymbolPackagePublish',\n VulnerabilityInfo = 'VulnerabilityInfo'\n}\n","import * as os from 'node:os'\n\nexport class ArgumentsBuilder {\n private readonly args: string[] = []\n private readonly isWindows: boolean = os.platform() === 'win32'\n\n /**\n * Adds a simple argument without a key\n * @param value The argument value\n */\n addArgument(value: string): this {\n if (value) {\n this.args.push(this.escapeArgument(value))\n }\n return this\n }\n\n /**\n * Adds multiple arguments\n * @param values The argument values\n */\n addArguments(values: string[]): this {\n for (const value of values) {\n this.addArgument(value)\n }\n return this\n }\n\n /**\n * Adds a flag argument (--flag)\n * @param key The flag name\n */\n addFlag(key: string): this {\n if (key) {\n this.args.push(`--${key}`)\n }\n return this\n }\n\n /**\n * Adds a key-value argument (--key value)\n * @param key The argument key\n * @param value The argument value\n */\n addKeyValue(key: string, value?: string | null): this {\n if (key && value !== undefined && value !== null) {\n this.args.push(`--${key}`)\n this.args.push(this.escapeArgument(value))\n }\n return this\n }\n\n /**\n * Adds an equals-style argument (--key=value)\n * @param key The argument key\n * @param value The argument value\n */\n addKeyValueEquals(key: string, value?: string | null): this {\n if (key && value !== undefined && value !== null) {\n this.args.push(`--${key}=${this.escapeArgument(value)}`)\n }\n return this\n }\n\n /**\n * Adds a comma-separated list (--key value1,value2,value3)\n * @param key The argument key\n * @param values The list of values\n */\n addCommaList(key: string, values?: string[]): this {\n if (key && values && values.length > 0) {\n const escapedValues = values.map(v => this.escapeArgument(v))\n this.args.push(`--${key}`)\n this.args.push(escapedValues.join(','))\n }\n return this\n }\n\n /**\n * Escapes an argument value based on the current OS\n * @param value The argument value to escape\n * @returns The escaped argument value\n */\n private escapeArgument(value: string): string {\n if (!value) return value\n\n // No need to escape if it doesn't contain spaces or special chars\n if (!this.needsEscaping(value)) return value\n\n if (this.isWindows) {\n // On Windows, wrap in double quotes and escape inner double quotes with backslash\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`\n } else {\n // On Unix, wrap in single quotes and escape inner single quotes\n // Escaping single quotes in bash requires closing the quote, adding an escaped quote, and reopening\n return `'${value.replace(/'/g, \"'\\\\''\")}'`\n }\n }\n\n /**\n * Determines if a value needs to be escaped\n * @param value The value to check\n * @returns True if the value needs escaping\n */\n private needsEscaping(value: string): boolean {\n const windowsNeedsEscaping = /[\\s&|<>^(){}[\\]\"']/\n const unixNeedsEscaping = /[\\s$\\\\`&|<>(){}[\\]\"']/\n if (this.isWindows) {\n return windowsNeedsEscaping.test(value)\n }\n return unixNeedsEscaping.test(value)\n }\n\n /**\n * Returns the built argument array\n */\n build(): string[] {\n return [...this.args]\n }\n\n /**\n * Parses an argument string into an array\n * @param argString The argument string to parse\n * @returns Array of parsed arguments\n */\n static parseArgumentString(argString: string): string[] {\n const args: string[] = []\n\n let inQuotes = false\n let escaped = false\n let lastCharWasSpace = true\n let arg = ''\n\n const append = (c: string): void => {\n // Only add a backslash for escaped characters other than quotes or backslashes\n if (escaped && c !== '\"' && c !== '\\\\') {\n arg += '\\\\'\n }\n\n arg += c\n escaped = false\n }\n\n for (let i = 0; i < argString.length; i++) {\n const c = argString.charAt(i)\n\n if (c === ' ' && !inQuotes) {\n if (!lastCharWasSpace) {\n args.push(arg)\n arg = ''\n }\n lastCharWasSpace = true\n continue\n } else {\n lastCharWasSpace = false\n }\n\n if (c === '\"') {\n if (!escaped) {\n inQuotes = !inQuotes\n } else {\n append(c)\n }\n continue\n }\n\n if (c === '\\\\' && escaped) {\n // Double backslash becomes a single backslash\n arg += '\\\\'\n escaped = false\n continue\n }\n\n if (c === '\\\\' && inQuotes) {\n escaped = true\n continue\n }\n\n append(c)\n lastCharWasSpace = false\n }\n\n if (!lastCharWasSpace) {\n args.push(arg.trim())\n }\n\n return args\n }\n}\n","import * as crypto from 'node:crypto'\nimport * as fs from 'node:fs/promises'\nimport * as os from 'node:os'\nimport * as path from 'node:path'\n\nimport * as semver from 'semver'\nimport { type IBuildAgent, type ExecResult } from '@agents/common'\nimport { ISettingsProvider } from './settings'\nimport { NugetServiceIndex, NugetServiceType, NugetVersions } from './models'\nimport { ArgumentsBuilder } from './arguments-builder'\n\nexport interface IDotnetTool {\n toolName: string\n\n disableTelemetry(): void\n\n install(): Promise\n}\n\nexport abstract class DotnetTool implements IDotnetTool {\n constructor(protected buildAgent: IBuildAgent) {}\n\n abstract get packageName(): string\n\n abstract get toolName(): string\n\n abstract get toolPathVariable(): string\n\n abstract get versionRange(): string | null\n\n abstract get settingsProvider(): ISettingsProvider\n\n disableTelemetry(): void {\n this.buildAgent.info('Disable Telemetry')\n this.buildAgent.setVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 'true')\n this.buildAgent.setVariable('DOTNET_NOLOGO', 'true')\n }\n\n async install(): Promise {\n const dotnetExePath = await this.buildAgent.which('dotnet', true)\n this.buildAgent.debug(`whichPath: ${dotnetExePath}`)\n await this.setDotnetRoot()\n\n const setupSettings = this.settingsProvider.getSetupSettings()\n\n let version: string | null = semver.clean(setupSettings.versionSpec) || setupSettings.versionSpec\n this.buildAgent.info('--------------------------')\n this.buildAgent.info(`Acquiring ${this.packageName} for version spec: ${version}`)\n this.buildAgent.info('--------------------------')\n\n if (!this.isExplicitVersion(version)) {\n version = await this.queryLatestMatch(this.packageName, version, setupSettings.includePrerelease)\n if (!version) {\n throw new Error(`Unable to find ${this.packageName} version '${version}'.`)\n }\n }\n\n if (this.versionRange && !semver.satisfies(version, this.versionRange, { includePrerelease: setupSettings.includePrerelease })) {\n throw new Error(\n `Version spec '${setupSettings.versionSpec}' resolved as '${version}' does not satisfy the range '${this.versionRange}'.` +\n 'See https://github.com/GitTools/actions/blob/main/docs/versions.md for more information.'\n )\n }\n\n let toolPath: string | null = null\n if (!setupSettings.preferLatestVersion) {\n // Let's try and resolve the version locally first\n toolPath = await this.buildAgent.findLocalTool(this.packageName, version)\n if (toolPath) {\n this.buildAgent.info('--------------------------')\n this.buildAgent.info(`${this.packageName} version: ${version} found in local cache at ${toolPath}.`)\n this.buildAgent.info('--------------------------')\n }\n }\n\n if (!toolPath) {\n // Download, extract, cache\n toolPath = await this.installTool(this.packageName, version, setupSettings.ignoreFailedSources)\n this.buildAgent.info('--------------------------')\n this.buildAgent.info(`${this.packageName} version: ${version} installed.`)\n this.buildAgent.info('--------------------------')\n }\n\n // Prepend the tool's path. This prepends the PATH for the current process and\n // instructs the agent to prepend for each task that follows.\n this.buildAgent.info(`Prepending ${toolPath} to PATH`)\n this.buildAgent.addPath(toolPath)\n\n const pathVariable = this.toolPathVariable\n this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`)\n this.buildAgent.setVariable(pathVariable, toolPath)\n this.buildAgent.setSucceeded(`${this.toolName} installed successfully`, true)\n\n return toolPath\n }\n\n protected async execute(cmd: string, args: string[]): Promise {\n this.buildAgent.info(`Command: ${cmd} ${args.join(' ')}`)\n return await this.buildAgent.exec(cmd, args)\n }\n\n protected async findToolExecutable(toolBasePath: string): Promise {\n const toolName = os.platform() === 'win32' ? `${this.toolName}.exe` : this.toolName\n\n // Check in the base path first\n const toolPath = path.join(toolBasePath, toolName)\n if (await this.buildAgent.fileExists(toolPath)) {\n return toolPath\n }\n\n // Get current system architecture\n const arch = os.arch()\n this.buildAgent.debug(`Current system architecture: ${arch}`)\n\n // Map node's architecture names to .NET's architecture folders\n const archPaths = []\n\n // Add primary architecture path based on current architecture\n if (arch === 'x64') {\n archPaths.push(path.join(toolBasePath, 'x64', toolName))\n } else if (arch === 'arm64') {\n archPaths.push(path.join(toolBasePath, 'arm64', toolName))\n }\n\n // Add platform-specific architecture paths\n if (os.platform() === 'darwin' && arch === 'arm64') {\n archPaths.push(path.join(toolBasePath, 'osx-arm64', toolName))\n } else if (os.platform() === 'darwin' && arch === 'x64') {\n archPaths.push(path.join(toolBasePath, 'osx-x64', toolName))\n }\n\n // Try each architecture-specific path\n for (const archPath of archPaths) {\n if (await this.buildAgent.fileExists(archPath)) {\n this.buildAgent.debug(`Found tool in architecture-specific directory: ${archPath}`)\n return archPath\n }\n }\n\n // Check in any other subdirectory as a fallback\n try {\n const entries = await fs.readdir(toolBasePath, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const nestedPath = path.join(toolBasePath, entry.name, toolName)\n if (await this.buildAgent.fileExists(nestedPath)) {\n this.buildAgent.debug(`Found tool in subdirectory: ${entry.name}`)\n return nestedPath\n }\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.debug(`Error reading subdirectories: ${error.message}`)\n }\n }\n\n return null\n }\n\n protected async setDotnetRoot(): Promise {\n if (os.platform() !== 'win32' && !this.buildAgent.getVariable('DOTNET_ROOT')) {\n let dotnetPath = await this.buildAgent.which('dotnet', true)\n\n const stats = await fs.lstat(dotnetPath)\n if (stats.isSymbolicLink()) {\n dotnetPath = (await fs.readlink(dotnetPath)) || dotnetPath\n }\n const dotnetRoot = path.dirname(dotnetPath)\n this.buildAgent.setVariable('DOTNET_ROOT', dotnetRoot)\n }\n }\n\n protected async executeTool(args: string[]): Promise {\n // First, check if we have a path variable set\n const variablePath = this.buildAgent.getVariableAsPath(this.toolPathVariable)\n let toolPath: string | undefined\n\n if (variablePath) {\n // Try to find the executable in the path or its subdirectories\n const foundExecutable = await this.findToolExecutable(variablePath)\n if (foundExecutable) {\n toolPath = foundExecutable\n this.buildAgent.debug(`Found tool executable at: ${toolPath}`)\n } else {\n // Fallback to old behavior if executable not found\n toolPath = path.join(variablePath, os.platform() === 'win32' ? `${this.toolName}.exe` : this.toolName)\n this.buildAgent.debug(`Defaulting to expected tool path: ${toolPath}`)\n }\n }\n\n // If we still don't have a path, try to find it in PATH\n if (!toolPath) {\n toolPath = await this.buildAgent.which(this.toolName, true)\n }\n\n args = ['--roll-forward Major', ...args]\n return await this.execute(toolPath, args)\n }\n\n protected async isValidInputFile(input: string, file: string): Promise {\n return this.filePathSupplied(input) && (await this.buildAgent.fileExists(file))\n }\n\n protected filePathSupplied(file: string): boolean {\n const pathValue = path.resolve(this.buildAgent.getInput(file) || '')\n const repoRoot = this.buildAgent.sourceDir\n return pathValue !== repoRoot\n }\n\n protected async getRepoPath(targetPath: string): Promise {\n const srcDir = this.buildAgent.sourceDir || '.'\n let workDir: string\n if (!targetPath) {\n workDir = srcDir\n } else {\n if (!path.isAbsolute(targetPath)) {\n targetPath = path.resolve(targetPath)\n }\n if (await this.buildAgent.directoryExists(targetPath)) {\n workDir = targetPath\n } else {\n throw new Error(`Directory not found at ${targetPath}`)\n }\n }\n return path.normalize(workDir)\n }\n\n private async getQueryServices(): Promise {\n // Use dotnet tool to get the first enabled nuget source.\n const builder = new ArgumentsBuilder().addArgument('nuget').addArgument('list').addArgument('source').addKeyValue('format', 'short')\n const result = await this.execute('dotnet', builder.build())\n\n // Each line of the output starts with either E (enabled) or D (disabled), followed by a space and index url.\n const nugetSources = [...(result.stdout ?? '').matchAll(/^E (?.+)/gm)].map(m => m.groups!.index)\n\n if (!nugetSources.length) {\n this.buildAgent.error('Failed to fetch an enabled package source for dotnet.')\n return []\n }\n\n const sources: string[] = []\n for (const nugetSource of nugetSources) {\n // Fetch the nuget source index to obtain the query service\n const nugetIndex = await fetch(nugetSource)\n if (!nugetIndex?.ok) {\n this.buildAgent.warn(`Failed to fetch data from NuGet source ${nugetSource}.`)\n continue\n }\n\n // Parse the nuget service index and get the (first / primary) query service\n const resources = ((await nugetIndex.json()) as NugetServiceIndex)?.resources\n const serviceUrl = resources?.find(s => s['@type'].startsWith(NugetServiceType.SearchQueryService))?.['@id']\n\n if (!serviceUrl) {\n this.buildAgent.warn(`Could not find a ${NugetServiceType.SearchQueryService} in NuGet source ${nugetSource}`)\n continue\n }\n sources.push(serviceUrl)\n }\n return sources\n }\n\n private async queryVersionsFromNugetSource(serviceUrl: string, toolName: string, includePrerelease: boolean): Promise {\n const toolNameParam = encodeURIComponent(toolName.toLowerCase())\n const prereleaseParam = includePrerelease ? 'true' : 'false'\n const downloadPath = `${serviceUrl}?q=${toolNameParam}&prerelease=${prereleaseParam}&semVerLevel=2.0.0&take=1`\n\n const response = await fetch(downloadPath)\n\n if (!response || !response.ok) {\n this.buildAgent.warn(`failed to query latest version for ${toolName} from ${downloadPath}. Status code: ${response ? response.status : 'unknown'}`)\n return []\n }\n const { data } = (await response.json()) as NugetVersions\n\n const versions = data[0].versions.map(x => x.version)\n\n return versions ?? []\n }\n\n private async queryLatestMatch(toolName: string, versionSpec: string, includePrerelease: boolean): Promise {\n this.buildAgent.info(\n `Querying tool versions for ${toolName}${versionSpec ? `@${versionSpec}` : ''} ${includePrerelease ? 'including pre-releases' : ''}`\n )\n\n const queryServices = await this.getQueryServices()\n if (!queryServices.length) {\n return null\n }\n\n let versions = (\n await Promise.all(queryServices.map(async service => await this.queryVersionsFromNugetSource(service, toolName, includePrerelease)))\n ).flat()\n versions = [...new Set(versions)] // remove duplicates\n\n this.buildAgent.debug(`got versions: ${versions.join(', ')}`)\n\n const version = semver.maxSatisfying(versions, versionSpec, { includePrerelease })\n if (version) {\n this.buildAgent.info(`Found matching version: ${version}`)\n } else {\n this.buildAgent.info('match not found')\n }\n\n return version\n }\n\n private async installTool(toolName: string, version: string, ignoreFailedSources: boolean): Promise {\n const semverVersion = semver.clean(version)\n if (!semverVersion) {\n throw new Error(`Invalid version spec: ${version}`)\n }\n\n const tempDirectory = await this.createTempDirectory()\n\n if (!tempDirectory) {\n throw new Error('Unable to create temp directory')\n }\n\n const builder = new ArgumentsBuilder()\n .addArgument('tool')\n .addArgument('install')\n .addArgument(toolName)\n .addKeyValue('tool-path', tempDirectory)\n .addKeyValue('version', semverVersion)\n\n if (ignoreFailedSources) {\n builder.addFlag('ignore-failed-sources')\n }\n\n const result = await this.execute('dotnet', builder.build())\n const status = result.code === 0 ? 'success' : 'failure'\n const message = result.code === 0 ? result.stdout : result.stderr\n\n this.buildAgent.debug(`Tool install result: ${status} ${message}`)\n\n if (result.code !== 0) {\n throw new Error(message)\n }\n\n const toolPath = await this.buildAgent.cacheToolDirectory(tempDirectory, toolName, semverVersion)\n this.buildAgent.debug(`Cached tool path: ${toolPath}`)\n this.buildAgent.debug(`Cleaning up temp directory: ${tempDirectory}`)\n await this.buildAgent.removeDirectory(tempDirectory)\n\n return toolPath\n }\n\n async createTempDirectory(): Promise {\n const tempRootDir = this.buildAgent.tempDir\n if (!tempRootDir) {\n throw new Error('Temp directory not set')\n }\n\n const uuid = crypto.randomUUID()\n const tempPath = path.join(tempRootDir, uuid)\n this.buildAgent.debug(`Creating temp directory ${tempPath}`)\n await fs.mkdir(tempPath, { recursive: true })\n return tempPath\n }\n\n private isExplicitVersion(versionSpec: string): boolean {\n const cleanedVersionSpec = semver.clean(versionSpec)\n const valid = semver.valid(cleanedVersionSpec) != null\n this.buildAgent.debug(`Is version explicit? ${valid}`)\n\n return valid\n }\n}\n","import { type IBuildAgent } from '@agents/common'\nimport { type SetupSettings } from './models'\n\nexport interface ISettingsProvider {\n getSetupSettings(): SetupSettings\n}\n\nexport class SettingsProvider implements ISettingsProvider {\n constructor(protected buildAgent: IBuildAgent) {}\n\n getSetupSettings(): SetupSettings {\n const versionSpec = this.buildAgent.getInput('versionSpec')\n const includePrerelease = this.buildAgent.getBooleanInput('includePrerelease')\n const ignoreFailedSources = this.buildAgent.getBooleanInput('ignoreFailedSources')\n const preferLatestVersion = this.buildAgent.getBooleanInput('preferLatestVersion')\n\n return {\n versionSpec,\n includePrerelease,\n ignoreFailedSources,\n preferLatestVersion\n }\n }\n}\n","export * from './models'\nexport * from './dotnet-tool'\nexport * from './settings'\nexport * from './arguments-builder'\n\nexport const keysOf = Object.keys as (obj: T) => (keyof T)[]\n","import type { IRunner } from './models.ts'\nimport { ExecResult, IBuildAgent } from '@agents/common'\nimport { IDotnetTool } from './dotnet-tool.ts'\n\nexport abstract class RunnerBase implements IRunner {\n protected abstract tool: IDotnetTool\n\n abstract run(command: string): Promise\n\n protected constructor(protected readonly buildAgent: IBuildAgent) {}\n\n protected disableTelemetry(): void {\n this.buildAgent.info(`Running on: '${this.buildAgent.agentName}'`)\n this.buildAgent.debug('Disabling telemetry')\n this.tool.disableTelemetry()\n }\n\n protected async safeExecute(action: () => Promise, successMessage: string): Promise {\n try {\n this.disableTelemetry()\n const result = await action()\n\n if (result.stdout) {\n this.buildAgent.info(`${this.tool.toolName} Output:`)\n this.buildAgent.info('-------------------')\n this.buildAgent.info(result.stdout)\n this.buildAgent.info('-------------------')\n }\n if (result.code === 0) {\n this.buildAgent.debug(`${this.tool.toolName} succeeded`)\n this.buildAgent.setSucceeded(successMessage, true)\n return result\n } else {\n this.buildAgent.debug(`${this.tool.toolName} failed`)\n this.buildAgent.error(result.stderr as string)\n this.buildAgent.setFailed(result.stderr as string, true)\n return result\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.debug(`${this.tool.toolName} failed`)\n this.buildAgent.error(error.message)\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error: error as Error\n }\n }\n }\n}\n"],"names":["NugetServiceType","semver.clean","semver.satisfies","semver.maxSatisfying","semver.valid"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tools.mjs","sources":["../../../src/tools/common/models.ts","../../../src/tools/common/arguments-builder.ts","../../../src/tools/common/dotnet-tool.ts","../../../src/tools/common/settings.ts","../../../src/tools/common/index.ts","../../../src/tools/common/runner.ts"],"sourcesContent":["import { type ExecResult } from '@agents/common'\n\nexport type SetupSettings = {\n versionSpec: string\n includePrerelease: boolean\n ignoreFailedSources: boolean\n preferLatestVersion: boolean\n}\n\nexport type IRunner = {\n run(command: string): Promise\n}\n\nexport type NugetVersions = { data: { versions: { version: string }[] }[] }\n\n/** See the {@link https://learn.microsoft.com/en-us/nuget/api/service-index|NuGet Server API spec}*/\nexport type NugetServiceIndex = {\n version: string\n resources: {\n '@type': `${NugetServiceType}${`/${string}` | ''}`\n '@id': string\n comment: string | undefined\n }[]\n}\n\nexport enum NugetServiceType {\n Catalog = 'Catalog',\n PackageBaseAddress = 'PackageBaseAddress',\n PackageDetailsUriTemplate = 'PackageDetailsUriTemplate',\n PackagePublish = 'PackagePublish',\n ReadmeUriTemplate = 'ReadmeUriTemplate',\n RegistrationsBaseUrl = 'RegistrationsBaseUrl',\n ReportAbuseUriTemplate = 'ReportAbuseUriTemplate',\n RepositorySignatures = 'RepositorySignatures',\n SearchAutocompleteService = 'SearchAutocompleteService',\n SearchQueryService = 'SearchQueryService',\n SymbolPackagePublish = 'SymbolPackagePublish',\n VulnerabilityInfo = 'VulnerabilityInfo'\n}\n","import * as os from 'node:os'\n\nexport class ArgumentsBuilder {\n private readonly args: string[] = []\n private readonly isWindows: boolean = os.platform() === 'win32'\n\n /**\n * Adds a simple argument without a key\n * @param value The argument value\n */\n addArgument(value: string): this {\n if (value) {\n this.args.push(this.escapeArgument(value))\n }\n return this\n }\n\n /**\n * Adds multiple arguments\n * @param values The argument values\n */\n addArguments(values: string[]): this {\n for (const value of values) {\n this.addArgument(value)\n }\n return this\n }\n\n /**\n * Adds a flag argument (--flag)\n * @param key The flag name\n */\n addFlag(key: string): this {\n if (key) {\n this.args.push(`--${key}`)\n }\n return this\n }\n\n /**\n * Adds a key-value argument (--key value)\n * @param key The argument key\n * @param value The argument value\n */\n addKeyValue(key: string, value?: string | null): this {\n if (key && value !== undefined && value !== null) {\n this.args.push(`--${key}`)\n this.args.push(this.escapeArgument(value))\n }\n return this\n }\n\n /**\n * Adds an equals-style argument (--key=value)\n * @param key The argument key\n * @param value The argument value\n */\n addKeyValueEquals(key: string, value?: string | null): this {\n if (key && value !== undefined && value !== null) {\n this.args.push(`--${key}=${this.escapeArgument(value)}`)\n }\n return this\n }\n\n /**\n * Adds a comma-separated list (--key value1,value2,value3)\n * @param key The argument key\n * @param values The list of values\n */\n addCommaList(key: string, values?: string[]): this {\n if (key && values && values.length > 0) {\n const escapedValues = values.map(v => this.escapeArgument(v))\n this.args.push(`--${key}`)\n this.args.push(escapedValues.join(','))\n }\n return this\n }\n\n /**\n * Escapes an argument value based on the current OS\n * @param value The argument value to escape\n * @returns The escaped argument value\n */\n private escapeArgument(value: string): string {\n if (!value) return value\n\n // No need to escape if it doesn't contain spaces or special chars\n if (!this.needsEscaping(value)) return value\n\n if (this.isWindows) {\n // On Windows, wrap in double quotes and escape inner double quotes with backslash\n return `\"${value.replace(/\\\\/g, '\\\\\\\\').replace(/\"/g, '\\\\\"')}\"`\n } else {\n // On Unix, wrap in single quotes and escape inner single quotes\n // Escaping single quotes in bash requires closing the quote, adding an escaped quote, and reopening\n return `'${value.replace(/'/g, \"'\\\\''\")}'`\n }\n }\n\n /**\n * Determines if a value needs to be escaped\n * @param value The value to check\n * @returns True if the value needs escaping\n */\n private needsEscaping(value: string): boolean {\n const windowsNeedsEscaping = /[\\s&|<>^(){}[\\]\"']/\n const unixNeedsEscaping = /[\\s$\\\\`&|<>(){}[\\]\"']/\n if (this.isWindows) {\n return windowsNeedsEscaping.test(value)\n }\n return unixNeedsEscaping.test(value)\n }\n\n /**\n * Returns the built argument array\n */\n build(): string[] {\n return [...this.args]\n }\n\n /**\n * Parses an argument string into an array\n * @param argString The argument string to parse\n * @returns Array of parsed arguments\n */\n static parseArgumentString(argString: string): string[] {\n const args: string[] = []\n\n let inQuotes = false\n let escaped = false\n let lastCharWasSpace = true\n let arg = ''\n\n const append = (c: string): void => {\n // Only add a backslash for escaped characters other than quotes or backslashes\n if (escaped && c !== '\"' && c !== '\\\\') {\n arg += '\\\\'\n }\n\n arg += c\n escaped = false\n }\n\n for (let i = 0; i < argString.length; i++) {\n const c = argString.charAt(i)\n\n if (c === ' ' && !inQuotes) {\n if (!lastCharWasSpace) {\n args.push(arg)\n arg = ''\n }\n lastCharWasSpace = true\n continue\n } else {\n lastCharWasSpace = false\n }\n\n if (c === '\"') {\n if (!escaped) {\n inQuotes = !inQuotes\n } else {\n append(c)\n }\n continue\n }\n\n if (c === '\\\\' && escaped) {\n // Double backslash becomes a single backslash\n arg += '\\\\'\n escaped = false\n continue\n }\n\n if (c === '\\\\' && inQuotes) {\n escaped = true\n continue\n }\n\n append(c)\n lastCharWasSpace = false\n }\n\n if (!lastCharWasSpace) {\n args.push(arg.trim())\n }\n\n return args\n }\n}\n","import * as crypto from 'node:crypto'\nimport * as fs from 'node:fs/promises'\nimport * as os from 'node:os'\nimport * as path from 'node:path'\n\nimport * as semver from 'semver'\nimport { type IBuildAgent, type ExecResult } from '@agents/common'\nimport { ISettingsProvider } from './settings'\nimport { NugetServiceIndex, NugetServiceType, NugetVersions } from './models'\nimport { ArgumentsBuilder } from './arguments-builder'\n\nexport interface IDotnetTool {\n toolName: string\n\n disableTelemetry(): void\n\n install(): Promise\n}\n\nexport abstract class DotnetTool implements IDotnetTool {\n constructor(protected buildAgent: IBuildAgent) {}\n\n abstract get packageName(): string\n\n abstract get toolName(): string\n\n abstract get toolPathVariable(): string\n\n abstract get versionRange(): string | null\n\n abstract get settingsProvider(): ISettingsProvider\n\n disableTelemetry(): void {\n this.buildAgent.info('Disable Telemetry')\n this.buildAgent.setVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 'true')\n this.buildAgent.setVariable('DOTNET_NOLOGO', 'true')\n }\n\n async install(): Promise {\n const dotnetExePath = await this.buildAgent.which('dotnet', true)\n this.buildAgent.debug(`whichPath: ${dotnetExePath}`)\n await this.setDotnetRoot()\n\n const setupSettings = this.settingsProvider.getSetupSettings()\n\n let version: string | null = semver.clean(setupSettings.versionSpec) || setupSettings.versionSpec\n this.buildAgent.info('--------------------------')\n this.buildAgent.info(`Acquiring ${this.packageName} for version spec: ${version}`)\n this.buildAgent.info('--------------------------')\n\n if (!this.isExplicitVersion(version)) {\n version = await this.queryLatestMatch(this.packageName, version, setupSettings.includePrerelease)\n if (!version) {\n throw new Error(`Unable to find ${this.packageName} version '${version}'.`)\n }\n }\n\n if (this.versionRange && !semver.satisfies(version, this.versionRange, { includePrerelease: setupSettings.includePrerelease })) {\n throw new Error(\n `Version spec '${setupSettings.versionSpec}' resolved as '${version}' does not satisfy the range '${this.versionRange}'.` +\n 'See https://github.com/GitTools/actions/blob/main/docs/versions.md for more information.'\n )\n }\n\n let toolPath: string | null = null\n if (!setupSettings.preferLatestVersion) {\n // Let's try and resolve the version locally first\n toolPath = await this.buildAgent.findLocalTool(this.packageName, version)\n if (toolPath) {\n this.buildAgent.info('--------------------------')\n this.buildAgent.info(`${this.packageName} version: ${version} found in local cache at ${toolPath}.`)\n this.buildAgent.info('--------------------------')\n }\n }\n\n if (!toolPath) {\n // Download, extract, cache\n toolPath = await this.installTool(this.packageName, version, setupSettings.ignoreFailedSources)\n this.buildAgent.info('--------------------------')\n this.buildAgent.info(`${this.packageName} version: ${version} installed.`)\n this.buildAgent.info('--------------------------')\n }\n\n // Prepend the tool's path. This prepends the PATH for the current process and\n // instructs the agent to prepend for each task that follows.\n this.buildAgent.info(`Prepending ${toolPath} to PATH`)\n this.buildAgent.addPath(toolPath)\n\n const pathVariable = this.toolPathVariable\n this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`)\n this.buildAgent.setVariable(pathVariable, toolPath)\n this.buildAgent.setSucceeded(`${this.toolName} installed successfully`, true)\n\n return toolPath\n }\n\n protected async execute(cmd: string, args: string[]): Promise {\n this.buildAgent.info(`Command: ${cmd} ${args.join(' ')}`)\n return await this.buildAgent.exec(cmd, args)\n }\n\n protected async findToolExecutable(toolBasePath: string): Promise {\n const toolName = os.platform() === 'win32' ? `${this.toolName}.exe` : this.toolName\n\n // Check in the base path first\n const toolPath = path.join(toolBasePath, toolName)\n if (await this.buildAgent.fileExists(toolPath)) {\n return toolPath\n }\n\n // Get current system architecture\n const arch = os.arch()\n this.buildAgent.debug(`Current system architecture: ${arch}`)\n\n // Map node's architecture names to .NET's architecture folders\n const archPaths = []\n\n // Add primary architecture path based on current architecture\n if (arch === 'x64') {\n archPaths.push(path.join(toolBasePath, 'x64', toolName))\n } else if (arch === 'arm64') {\n archPaths.push(path.join(toolBasePath, 'arm64', toolName))\n }\n\n // Add platform-specific architecture paths\n if (os.platform() === 'darwin' && arch === 'arm64') {\n archPaths.push(path.join(toolBasePath, 'osx-arm64', toolName))\n } else if (os.platform() === 'darwin' && arch === 'x64') {\n archPaths.push(path.join(toolBasePath, 'osx-x64', toolName))\n }\n\n // Try each architecture-specific path\n for (const archPath of archPaths) {\n if (await this.buildAgent.fileExists(archPath)) {\n this.buildAgent.debug(`Found tool in architecture-specific directory: ${archPath}`)\n return archPath\n }\n }\n\n // Check in any other subdirectory as a fallback\n try {\n const entries = await fs.readdir(toolBasePath, { withFileTypes: true })\n for (const entry of entries) {\n if (entry.isDirectory()) {\n const nestedPath = path.join(toolBasePath, entry.name, toolName)\n if (await this.buildAgent.fileExists(nestedPath)) {\n this.buildAgent.debug(`Found tool in subdirectory: ${entry.name}`)\n return nestedPath\n }\n }\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.debug(`Error reading subdirectories: ${error.message}`)\n }\n }\n\n return null\n }\n\n protected async setDotnetRoot(): Promise {\n if (os.platform() !== 'win32' && !this.buildAgent.getVariable('DOTNET_ROOT')) {\n let dotnetPath = await this.buildAgent.which('dotnet', true)\n\n const stats = await fs.lstat(dotnetPath)\n if (stats.isSymbolicLink()) {\n dotnetPath = (await fs.readlink(dotnetPath)) || dotnetPath\n }\n const dotnetRoot = path.dirname(dotnetPath)\n this.buildAgent.setVariable('DOTNET_ROOT', dotnetRoot)\n }\n }\n\n protected async executeTool(args: string[]): Promise {\n // First, check if we have a path variable set\n const variablePath = this.buildAgent.getVariableAsPath(this.toolPathVariable)\n let toolPath: string | undefined\n\n if (variablePath) {\n // Try to find the executable in the path or its subdirectories\n const foundExecutable = await this.findToolExecutable(variablePath)\n if (foundExecutable) {\n toolPath = foundExecutable\n this.buildAgent.debug(`Found tool executable at: ${toolPath}`)\n } else {\n // Fallback to old behavior if executable not found\n toolPath = path.join(variablePath, os.platform() === 'win32' ? `${this.toolName}.exe` : this.toolName)\n this.buildAgent.debug(`Defaulting to expected tool path: ${toolPath}`)\n }\n }\n\n // If we still don't have a path, try to find it in PATH\n if (!toolPath) {\n toolPath = await this.buildAgent.which(this.toolName, true)\n }\n\n args = ['--roll-forward Major', ...args]\n return await this.execute(toolPath, args)\n }\n\n protected async isValidInputFile(input: string, file: string): Promise {\n return this.filePathSupplied(input) && (await this.buildAgent.fileExists(file))\n }\n\n protected filePathSupplied(file: string): boolean {\n const pathValue = path.resolve(this.buildAgent.getInput(file) || '')\n const repoRoot = this.buildAgent.sourceDir\n return pathValue !== repoRoot\n }\n\n protected async getRepoPath(targetPath: string): Promise {\n const srcDir = this.buildAgent.sourceDir || '.'\n let workDir: string\n if (!targetPath) {\n workDir = srcDir\n } else {\n if (!path.isAbsolute(targetPath)) {\n targetPath = path.resolve(targetPath)\n }\n if (await this.buildAgent.directoryExists(targetPath)) {\n workDir = targetPath\n } else {\n throw new Error(`Directory not found at ${targetPath}`)\n }\n }\n return path.normalize(workDir)\n }\n\n private async getQueryServices(): Promise {\n // Use dotnet tool to get the first enabled nuget source.\n const builder = new ArgumentsBuilder().addArgument('nuget').addArgument('list').addArgument('source').addKeyValue('format', 'short')\n const result = await this.execute('dotnet', builder.build())\n\n // Each line of the output starts with either E (enabled) or D (disabled), followed by a space and index url.\n const nugetSources = [...(result.stdout ?? '').matchAll(/^E (?.+)/gm)].map(m => m.groups?.index ?? '').filter(s => !!s)\n\n if (!nugetSources.length) {\n this.buildAgent.error('Failed to fetch an enabled package source for dotnet.')\n return []\n }\n\n const sources: string[] = []\n for (const nugetSource of nugetSources) {\n // Fetch the nuget source index to obtain the query service\n const nugetIndex = await fetch(nugetSource).catch((e: { cause: { message: string | undefined } | undefined }) => {\n this.buildAgent.warn(e.cause?.message ?? 'An unknown error occurred while fetching data')\n return Response.error()\n })\n if (!nugetIndex?.ok) {\n this.buildAgent.warn(`Failed to fetch data from NuGet source ${nugetSource}.`)\n continue\n }\n\n // Parse the nuget service index and get the (first / primary) query service\n const resources = ((await nugetIndex.json()) as NugetServiceIndex)?.resources\n const serviceUrl = resources?.find(s => s['@type'].startsWith(NugetServiceType.SearchQueryService))?.['@id']\n\n if (!serviceUrl) {\n this.buildAgent.warn(`Could not find a ${NugetServiceType.SearchQueryService} in NuGet source ${nugetSource}`)\n continue\n }\n sources.push(serviceUrl)\n }\n return sources\n }\n\n private async queryVersionsFromNugetSource(serviceUrl: string, toolName: string, includePrerelease: boolean): Promise {\n this.buildAgent.debug(`Fetching ${toolName} versions from source ${serviceUrl}`)\n const toolNameParam = encodeURIComponent(toolName.toLowerCase())\n const prereleaseParam = includePrerelease ? 'true' : 'false'\n const downloadPath = `${serviceUrl}?q=${toolNameParam}&prerelease=${prereleaseParam}&semVerLevel=2.0.0&take=1`\n\n const response = await fetch(downloadPath).catch((e: { cause: { message: string | undefined } | undefined }) => {\n this.buildAgent.warn(e.cause?.message ?? 'An unknown error occurred while fetching data')\n return Response.error()\n })\n\n if (!response || !response.ok) {\n this.buildAgent.warn(`failed to query latest version for ${toolName} from ${downloadPath}. Status code: ${response ? response.status : 'unknown'}`)\n return []\n }\n const { data } = (await response.json()) as NugetVersions\n\n const versions = data?.[0]?.versions?.map(x => x.version) ?? []\n\n this.buildAgent.debug(`Found ${versions.length} versions: ${versions.join(', ')}`)\n return versions\n }\n\n private async queryLatestMatch(toolName: string, versionSpec: string, includePrerelease: boolean): Promise {\n this.buildAgent.info(\n `Querying tool versions for ${toolName}${versionSpec ? `@${versionSpec}` : ''} ${includePrerelease ? 'including pre-releases' : ''}`\n )\n\n const queryServices = await this.getQueryServices()\n if (!queryServices.length) {\n return null\n }\n\n let versions = (\n await Promise.all(queryServices.map(async service => await this.queryVersionsFromNugetSource(service, toolName, includePrerelease)))\n ).flat()\n versions = [...new Set(versions)] // remove duplicates\n\n this.buildAgent.debug(`got versions: ${versions.join(', ')}`)\n\n const version = semver.maxSatisfying(versions, versionSpec, { includePrerelease })\n if (version) {\n this.buildAgent.info(`Found matching version: ${version}`)\n } else {\n this.buildAgent.info('match not found')\n }\n\n return version\n }\n\n private async installTool(toolName: string, version: string, ignoreFailedSources: boolean): Promise {\n const semverVersion = semver.clean(version)\n if (!semverVersion) {\n throw new Error(`Invalid version spec: ${version}`)\n }\n\n const tempDirectory = await this.createTempDirectory()\n\n if (!tempDirectory) {\n throw new Error('Unable to create temp directory')\n }\n\n const builder = new ArgumentsBuilder()\n .addArgument('tool')\n .addArgument('install')\n .addArgument(toolName)\n .addKeyValue('tool-path', tempDirectory)\n .addKeyValue('version', semverVersion)\n\n if (ignoreFailedSources) {\n builder.addFlag('ignore-failed-sources')\n }\n\n const result = await this.execute('dotnet', builder.build())\n const status = result.code === 0 ? 'success' : 'failure'\n const message = result.code === 0 ? result.stdout : result.stderr\n\n this.buildAgent.debug(`Tool install result: ${status} ${message}`)\n\n if (result.code !== 0) {\n throw new Error(message)\n }\n\n const toolPath = await this.buildAgent.cacheToolDirectory(tempDirectory, toolName, semverVersion)\n this.buildAgent.debug(`Cached tool path: ${toolPath}`)\n this.buildAgent.debug(`Cleaning up temp directory: ${tempDirectory}`)\n await this.buildAgent.removeDirectory(tempDirectory)\n\n return toolPath\n }\n\n async createTempDirectory(): Promise {\n const tempRootDir = this.buildAgent.tempDir\n if (!tempRootDir) {\n throw new Error('Temp directory not set')\n }\n\n const uuid = crypto.randomUUID()\n const tempPath = path.join(tempRootDir, uuid)\n this.buildAgent.debug(`Creating temp directory ${tempPath}`)\n await fs.mkdir(tempPath, { recursive: true })\n return tempPath\n }\n\n private isExplicitVersion(versionSpec: string): boolean {\n const cleanedVersionSpec = semver.clean(versionSpec)\n const valid = semver.valid(cleanedVersionSpec) != null\n this.buildAgent.debug(`Is version explicit? ${valid}`)\n\n return valid\n }\n}\n","import { type IBuildAgent } from '@agents/common'\nimport { type SetupSettings } from './models'\n\nexport interface ISettingsProvider {\n getSetupSettings(): SetupSettings\n}\n\nexport class SettingsProvider implements ISettingsProvider {\n constructor(protected buildAgent: IBuildAgent) {}\n\n getSetupSettings(): SetupSettings {\n const versionSpec = this.buildAgent.getInput('versionSpec')\n const includePrerelease = this.buildAgent.getBooleanInput('includePrerelease')\n const ignoreFailedSources = this.buildAgent.getBooleanInput('ignoreFailedSources')\n const preferLatestVersion = this.buildAgent.getBooleanInput('preferLatestVersion')\n\n return {\n versionSpec,\n includePrerelease,\n ignoreFailedSources,\n preferLatestVersion\n }\n }\n}\n","export * from './models'\nexport * from './dotnet-tool'\nexport * from './settings'\nexport * from './arguments-builder'\n\nexport const keysOf = Object.keys as (obj: T) => (keyof T)[]\n","import type { IRunner } from './models.ts'\nimport { ExecResult, IBuildAgent } from '@agents/common'\nimport { IDotnetTool } from './dotnet-tool.ts'\n\nexport abstract class RunnerBase implements IRunner {\n protected abstract tool: IDotnetTool\n\n abstract run(command: string): Promise\n\n protected constructor(protected readonly buildAgent: IBuildAgent) {}\n\n protected disableTelemetry(): void {\n this.buildAgent.info(`Running on: '${this.buildAgent.agentName}'`)\n this.buildAgent.debug('Disabling telemetry')\n this.tool.disableTelemetry()\n }\n\n protected async safeExecute(action: () => Promise, successMessage: string): Promise {\n try {\n this.disableTelemetry()\n const result = await action()\n\n if (result.stdout) {\n this.buildAgent.info(`${this.tool.toolName} Output:`)\n this.buildAgent.info('-------------------')\n this.buildAgent.info(result.stdout)\n this.buildAgent.info('-------------------')\n }\n if (result.code === 0) {\n this.buildAgent.debug(`${this.tool.toolName} succeeded`)\n this.buildAgent.setSucceeded(successMessage, true)\n return result\n } else {\n this.buildAgent.debug(`${this.tool.toolName} failed`)\n this.buildAgent.error(result.stderr as string)\n this.buildAgent.setFailed(result.stderr as string, true)\n return result\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.debug(`${this.tool.toolName} failed`)\n this.buildAgent.error(error.message)\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error: error as Error\n }\n }\n }\n}\n"],"names":["NugetServiceType","semver.clean","semver.satisfies","semver.maxSatisfying","semver.valid"],"mappings":"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"} \ No newline at end of file diff --git a/docs/examples/azure/gitreleasemanager/addasset.md b/docs/examples/azure/gitreleasemanager/addasset.md index 82337ddd5..9e96411e9 100644 --- a/docs/examples/azure/gitreleasemanager/addasset.md +++ b/docs/examples/azure/gitreleasemanager/addasset.md @@ -2,7 +2,7 @@ ```yaml steps: - - task: gitreleasemanager/addasset@3.2.1 + - task: gitreleasemanager/addasset@4.0.0 inputs: token: '$(GITHUB_TOKEN)' repository: 'someOwner/someRepo' diff --git a/docs/examples/azure/gitreleasemanager/close.md b/docs/examples/azure/gitreleasemanager/close.md index dd631a7b4..4fa5de09b 100644 --- a/docs/examples/azure/gitreleasemanager/close.md +++ b/docs/examples/azure/gitreleasemanager/close.md @@ -2,7 +2,7 @@ ```yaml steps: - - task: gitreleasemanager/close@3.2.1 + - task: gitreleasemanager/close@4.0.0 inputs: token: '$(GITHUB_TOKEN)' repository: 'someOwner/someRepo' diff --git a/docs/examples/azure/gitreleasemanager/create.md b/docs/examples/azure/gitreleasemanager/create.md index e4ded38e4..578bb72ea 100644 --- a/docs/examples/azure/gitreleasemanager/create.md +++ b/docs/examples/azure/gitreleasemanager/create.md @@ -2,7 +2,7 @@ ```yaml steps: - - task: gitreleasemanager/create@3.2.1 + - task: gitreleasemanager/create@4.0.0 displayName: Create release with GitReleaseManager inputs: token: $(GITHUB_TOKEN) diff --git a/docs/examples/azure/gitreleasemanager/discard.md b/docs/examples/azure/gitreleasemanager/discard.md index d8352168d..9df86c2a7 100644 --- a/docs/examples/azure/gitreleasemanager/discard.md +++ b/docs/examples/azure/gitreleasemanager/discard.md @@ -2,7 +2,7 @@ ```yaml steps: - - task: gitreleasemanager/discard@3.2.1 + - task: gitreleasemanager/discard@4.0.0 inputs: token: '$(GITHUB_TOKEN)' repository: 'someOwner/someRepo' diff --git a/docs/examples/azure/gitreleasemanager/open.md b/docs/examples/azure/gitreleasemanager/open.md index 336025b05..a6f4fd0fa 100644 --- a/docs/examples/azure/gitreleasemanager/open.md +++ b/docs/examples/azure/gitreleasemanager/open.md @@ -2,7 +2,7 @@ ```yaml steps: - - task: gitreleasemanager/open@3.2.1 + - task: gitreleasemanager/open@4.0.0 inputs: token: '$(GITHUB_TOKEN)' repository: 'someOwner/someRepo' diff --git a/docs/examples/azure/gitreleasemanager/publish.md b/docs/examples/azure/gitreleasemanager/publish.md index 26a391564..8c57d7a1b 100644 --- a/docs/examples/azure/gitreleasemanager/publish.md +++ b/docs/examples/azure/gitreleasemanager/publish.md @@ -2,7 +2,7 @@ ```yaml steps: - - task: gitreleasemanager/publish@3.2.1 + - task: gitreleasemanager/publish@4.0.0 inputs: token: '$(GITHUB_TOKEN)' repository: 'someOwner/someRepo' diff --git a/docs/examples/azure/gitreleasemanager/setup.md b/docs/examples/azure/gitreleasemanager/setup.md index 927ca79b1..258bbfae3 100644 --- a/docs/examples/azure/gitreleasemanager/setup.md +++ b/docs/examples/azure/gitreleasemanager/setup.md @@ -2,7 +2,7 @@ Find out how to use the **gitreleasemanager/setup** task using the examples below. -> The examples use version _3.2.1_ of the GitReleaseManager Setup task. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitReleaseManager Setup task. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -29,7 +29,7 @@ Install the latest GitReleaseManager 0.20.x version. ```yaml steps: - - task: gitreleasemanager/setup@3.2.1 + - task: gitreleasemanager/setup@4.0.0 displayName: Install GitReleaseManager inputs: versionSpec: '0.20.x' @@ -41,7 +41,7 @@ Install specific GitReleaseManager version 0.20.0. ```yaml steps: - - task: gitreleasemanager/setup@3.2.1 + - task: gitreleasemanager/setup@4.0.0 displayName: Install GitReleaseManager inputs: versionSpec: '0.20.0' @@ -53,7 +53,7 @@ Install the latest GitReleaseManager 0.20.x version even it there is a cached ve ```yaml steps: - - task: gitreleasemanager/setup@3.2.1 + - task: gitreleasemanager/setup@4.0.0 displayName: Install GitReleaseManager inputs: versionSpec: '0.20.x' diff --git a/docs/examples/azure/gitversion/command.md b/docs/examples/azure/gitversion/command.md index 4a9f511e3..c74f6b5f5 100644 --- a/docs/examples/azure/gitversion/command.md +++ b/docs/examples/azure/gitversion/command.md @@ -10,7 +10,7 @@ steps: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' @@ -18,7 +18,7 @@ steps: These steps are omitted from the examples for brevity. -> The examples use version _3.2.1_ of the GitVersion Command task. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitVersion Command task. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -50,9 +50,9 @@ arguments: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/command@3.2.1 + - task: gitversion/command@4.0.0 displayName: Display GitVersion config inputs: arguments: '/showConfig' @@ -67,9 +67,9 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/command@3.2.1 + - task: gitversion/command@4.0.0 displayName: Output the FullSemVer variable inputs: arguments: '/showvariable FullSemVer' @@ -84,9 +84,9 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/command@3.2.1 + - task: gitversion/command@4.0.0 displayName: Output the formatted version inputs: arguments: '/format {Major}.{Minor}' # any Output Variable can be used here diff --git a/docs/examples/azure/gitversion/execute.md b/docs/examples/azure/gitversion/execute.md index ac3b9ced1..44dfc4b64 100644 --- a/docs/examples/azure/gitversion/execute.md +++ b/docs/examples/azure/gitversion/execute.md @@ -10,7 +10,7 @@ steps: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' @@ -18,7 +18,7 @@ steps: These steps are omitted from the examples for brevity. -> The examples use version _3.2.1_ of the GitVersion Execute task. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitVersion Execute task. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -49,7 +49,7 @@ overrideConfig: description: | Optional override for the configuration file. This should be newline-separated key-value pairs, e.g.: semantic-version-format=Loose - next-version=3.2.1 + next-version=4.0.0 required: false default: '' updateAssemblyInfo: @@ -120,9 +120,9 @@ The Execute GitVersion task creates the following job-scoped variables and multi ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 name: version_step # step id used as a reference for output values displayName: Determine Version ``` @@ -136,9 +136,9 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as reference for output values @@ -164,9 +164,9 @@ branches: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: @@ -182,9 +182,9 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: @@ -201,9 +201,9 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: @@ -219,15 +219,15 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: overrideConfig: | semantic-version-format=Loose - next-version=3.2.1 + next-version=4.0.0 ``` @@ -239,9 +239,9 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: @@ -257,9 +257,9 @@ steps: ```yaml steps: - # gitversion/setup@3.2.1 task omitted for brevity. + # gitversion/setup@4.0.0 task omitted for brevity. - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: @@ -292,12 +292,12 @@ jobs: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: @@ -362,12 +362,12 @@ jobs: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: @@ -453,12 +453,12 @@ stages: - checkout: self fetchDepth: 0 - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' - - task: gitversion/execute@3.2.1 + - task: gitversion/execute@4.0.0 displayName: Determine Version name: version_step # step id used as a reference for output values inputs: diff --git a/docs/examples/azure/gitversion/setup.md b/docs/examples/azure/gitversion/setup.md index 90b55e31e..b9c1eea4c 100644 --- a/docs/examples/azure/gitversion/setup.md +++ b/docs/examples/azure/gitversion/setup.md @@ -2,7 +2,7 @@ Find out how to use the **gitversion/setup** task using the examples below. -> The examples use version _3.2.1_ of the GitVersion Setup task. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitVersion Setup task. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -45,7 +45,7 @@ Install the latest GitVersion 6 version. ```yaml steps: - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' @@ -57,7 +57,7 @@ Install GitVersion 6.0.0. ```yaml steps: - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.0.0' @@ -69,7 +69,7 @@ Install the latest GitVersion 6 pre-release version. For example **6.0.0-beta.6 ```yaml steps: - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' @@ -82,7 +82,7 @@ Install the latest GitVersion 6 version even it there is a cached version matchi ```yaml steps: - - task: gitversion/setup@3.2.1 + - task: gitversion/setup@4.0.0 displayName: Install GitVersion inputs: versionSpec: '6.3.x' diff --git a/docs/examples/github/gitreleasemanager/addasset.md b/docs/examples/github/gitreleasemanager/addasset.md index 04e010db8..ccedd898e 100644 --- a/docs/examples/github/gitreleasemanager/addasset.md +++ b/docs/examples/github/gitreleasemanager/addasset.md @@ -2,7 +2,7 @@ ```yaml steps: - - uses: gittools/actions/gitreleasemanager/addasset@v3.2.1 + - uses: gittools/actions/gitreleasemanager/addasset@v4.0.0 name: Add asset to a release with GitReleaseManager with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/examples/github/gitreleasemanager/close.md b/docs/examples/github/gitreleasemanager/close.md index 1d1883922..a2dd61127 100644 --- a/docs/examples/github/gitreleasemanager/close.md +++ b/docs/examples/github/gitreleasemanager/close.md @@ -2,7 +2,7 @@ ```yaml steps: - - uses: gittools/actions/gitreleasemanager/close@v3.2.1 + - uses: gittools/actions/gitreleasemanager/close@v4.0.0 name: Close release with GitReleaseManager with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/examples/github/gitreleasemanager/create.md b/docs/examples/github/gitreleasemanager/create.md index 2d64385f5..19492c81f 100644 --- a/docs/examples/github/gitreleasemanager/create.md +++ b/docs/examples/github/gitreleasemanager/create.md @@ -2,7 +2,7 @@ ```yaml steps: - - uses: gittools/actions/gitreleasemanager/create@v3.2.1 + - uses: gittools/actions/gitreleasemanager/create@v4.0.0 name: Create release with GitReleaseManager with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/examples/github/gitreleasemanager/discard.md b/docs/examples/github/gitreleasemanager/discard.md index 747cab6db..397ad32ce 100644 --- a/docs/examples/github/gitreleasemanager/discard.md +++ b/docs/examples/github/gitreleasemanager/discard.md @@ -2,7 +2,7 @@ ```yaml steps: - - uses: gittools/actions/gitreleasemanager/discard@v3.2.1 + - uses: gittools/actions/gitreleasemanager/discard@v4.0.0 name: Discard release with GitReleaseManager with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/examples/github/gitreleasemanager/open.md b/docs/examples/github/gitreleasemanager/open.md index 5c2aadb74..8116f7535 100644 --- a/docs/examples/github/gitreleasemanager/open.md +++ b/docs/examples/github/gitreleasemanager/open.md @@ -2,7 +2,7 @@ ```yaml steps: - - uses: gittools/actions/gitreleasemanager/open@v3.2.1 + - uses: gittools/actions/gitreleasemanager/open@v4.0.0 name: Open release with GitReleaseManager with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/examples/github/gitreleasemanager/publish.md b/docs/examples/github/gitreleasemanager/publish.md index 6a1005b57..725a51cfe 100644 --- a/docs/examples/github/gitreleasemanager/publish.md +++ b/docs/examples/github/gitreleasemanager/publish.md @@ -2,7 +2,7 @@ ```yaml steps: - - uses: gittools/actions/gitreleasemanager/publish@v3.2.1 + - uses: gittools/actions/gitreleasemanager/publish@v4.0.0 name: Publish release with GitReleaseManager with: token: ${{ secrets.GITHUB_TOKEN }} diff --git a/docs/examples/github/gitreleasemanager/setup.md b/docs/examples/github/gitreleasemanager/setup.md index f986ea34f..e8a3faccb 100644 --- a/docs/examples/github/gitreleasemanager/setup.md +++ b/docs/examples/github/gitreleasemanager/setup.md @@ -2,7 +2,7 @@ Find out how to use the **gitreleasemanager/setup** action using the examples below. -> The examples use version _3.2.1_ of the GitReleaseManager Setup action. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitReleaseManager Setup action. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -30,7 +30,7 @@ Install the latest GitReleaseManager 0.20.x version. ```yaml steps: - name: Install GitReleaseManager - uses: gittools/actions/gitreleasemanager/setup@v3.2.1 + uses: gittools/actions/gitreleasemanager/setup@v4.0.0 with: versionSpec: '0.20.x' ``` @@ -42,7 +42,7 @@ Install specific GitReleaseManager version 0.20.0. ```yaml steps: - name: Install GitReleaseManager - uses: gittools/actions/gitreleasemanager/setup@v3.2.1 + uses: gittools/actions/gitreleasemanager/setup@v4.0.0 with: versionSpec: '0.20.0' ``` @@ -54,7 +54,7 @@ Install the latest GitReleaseManager 0.20.x version even it there is a cached ve ```yaml steps: - name: Install GitReleaseManager - uses: gittools/actions/gitreleasemanager/setup@v3.2.1 + uses: gittools/actions/gitreleasemanager/setup@v4.0.0 with: versionSpec: '0.20.x' preferLatestVersion: true diff --git a/docs/examples/github/gitversion/command.md b/docs/examples/github/gitversion/command.md index e1638c2a2..1617ff432 100644 --- a/docs/examples/github/gitversion/command.md +++ b/docs/examples/github/gitversion/command.md @@ -13,14 +13,14 @@ steps: fetch-depth: 0 - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' ``` These steps are omitted from the examples for brevity. -> The examples use version _3.2.1_ of the GitVersion Command action. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitVersion Command action. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -52,10 +52,10 @@ arguments: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Display GitVersion config - uses: gittools/actions/gitversion/command@v3.2.1 + uses: gittools/actions/gitversion/command@v4.0.0 with: arguments: '/showConfig' ``` @@ -69,10 +69,10 @@ steps: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Output the FullSemVer variable - uses: gittools/actions/gitversion/command@v3.2.1 + uses: gittools/actions/gitversion/command@v4.0.0 with: arguments: '/showvariable FullSemVer' ``` @@ -86,10 +86,10 @@ steps: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Output the formatted version - uses: gittools/actions/gitversion/command@v3.2.1 + uses: gittools/actions/gitversion/command@v4.0.0 with: arguments: '/format {Major}.{Minor}' # any Output Variable can be used here ``` diff --git a/docs/examples/github/gitversion/execute.md b/docs/examples/github/gitversion/execute.md index 729eb24b3..c7bb192c1 100644 --- a/docs/examples/github/gitversion/execute.md +++ b/docs/examples/github/gitversion/execute.md @@ -13,14 +13,14 @@ steps: fetch-depth: 0 - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' ``` These steps are omitted from the examples for brevity. -> The examples use version _3.2.1_ of the GitVersion Execute action. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitVersion Execute action. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -51,7 +51,7 @@ overrideConfig: description: | Optional override for the configuration file. This should be newline-separated key-value pairs, e.g.: semantic-version-format=Loose - next-version=3.2.1 + next-version=4.0.0 required: false default: '' updateAssemblyInfo: @@ -116,11 +116,11 @@ The Execute GitVersion action creates the following outputs: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 ``` @@ -134,7 +134,7 @@ steps: steps: - name: Determine Version id: version_step # step id used as reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 ``` Example contents of **GitVersion.yml**: @@ -157,11 +157,11 @@ branches: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 with: configFilePath: VersionConfig.yml ``` @@ -175,11 +175,11 @@ steps: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 with: disableCache: true disableNormalization: true @@ -194,10 +194,10 @@ steps: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Determine Version - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 with: updateAssemblyInfo: true ``` @@ -211,15 +211,15 @@ steps: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 with: overrideConfig: | semantic-version-format=Loose - next-version=3.2.1 + next-version=4.0.0 ``` @@ -231,11 +231,11 @@ steps: ```yaml steps: - # gittools/actions/gitversion/setup@v3.2.1 action omitted for brevity. + # gittools/actions/gitversion/setup@v4.0.0 action omitted for brevity. - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 with: updateProjectFiles: true ``` @@ -266,13 +266,13 @@ jobs: fetch-depth: 0 - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 - run: | echo "FullSemVer (env.fullSemVer) : ${{ env.fullSemVer }}" @@ -356,13 +356,13 @@ jobs: fetch-depth: 0 - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' - name: Determine Version id: version_step # step id used as a reference for output values - uses: gittools/actions/gitversion/execute@v3.2.1 + uses: gittools/actions/gitversion/execute@v4.0.0 GitVersion_v6_cross_job_consumer_without_prefix: name: GitVersion v6 (cross job consumer) - without prefix diff --git a/docs/examples/github/gitversion/setup.md b/docs/examples/github/gitversion/setup.md index fddb19b89..84119c5f3 100644 --- a/docs/examples/github/gitversion/setup.md +++ b/docs/examples/github/gitversion/setup.md @@ -2,7 +2,7 @@ Find out how to use the **gitversion/setup** action using the examples below. -> The examples use version _3.2.1_ of the GitVersion Setup action. It is recommended to use the latest released version in your own workflows. +> The examples use version _4.0.0_ of the GitVersion Setup action. It is recommended to use the latest released version in your own workflows. ## Inputs @@ -45,7 +45,7 @@ Install the latest GitVersion 6 version. ```yaml steps: - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' ``` @@ -57,7 +57,7 @@ Install GitVersion 6.0.0. ```yaml steps: - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.0.0' ``` @@ -69,7 +69,7 @@ Install the latest GitVersion 6 pre-release version. For example **6.0.0-beta.6 ```yaml steps: - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' includePrerelease: true @@ -82,7 +82,7 @@ Install the latest GitVersion 6 version even it there is a cached version matchi ```yaml steps: - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v3.2.1 + uses: gittools/actions/gitversion/setup@v4.0.0 with: versionSpec: '6.3.x' preferLatestVersion: true diff --git a/package-lock.json b/package-lock.json index 49a8fa509..c4b2871d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,38 +1,38 @@ { "name": "gittools-actions", - "version": "3.2.1", + "version": "4.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "gittools-actions", - "version": "3.2.1", + "version": "4.0.0", "dependencies": { "semver": "^7.7.2" }, "devDependencies": { - "@eslint/js": "^9.29.0", - "@stylistic/eslint-plugin": "^5.0.0", + "@eslint/js": "^9.30.1", + "@stylistic/eslint-plugin": "^5.1.0", "@types/eslint__js": "^9.14.0", - "@types/node": "^24.0.4", + "@types/node": "^24.0.10", "@types/semver": "^7.7.0", - "@vitest/eslint-plugin": "^1.2.7", - "dotenv": "^16.5.0", - "eslint": "^9.29.0", + "@vitest/eslint-plugin": "^1.3.4", + "dotenv": "^17.0.1", + "eslint": "^9.30.1", "eslint-config-prettier": "^10.1.5", "eslint-plugin-prettier": "^5.5.1", "glob": "^11.0.3", - "globals": "^16.2.0", + "globals": "^16.3.0", "husky": "^9.1.7", "lint-staged": "^16.1.2", "markdownlint-cli": "^0.45.0", "npm-run-all2": "^8.0.4", - "prettier": "^3.6.1", + "prettier": "^3.6.2", "simple-git": "^3.28.0", "tfx-cli": "^0.21.1", "typescript": "^5.8.3", - "typescript-eslint": "^8.35.0", - "vite": "^7.0.0", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.2", "vite-node": "^3.2.4", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.2.4" @@ -504,11 +504,10 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.20.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz", - "integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.0.tgz", + "integrity": "sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==", "dev": true, - "license": "Apache-2.0", "dependencies": { "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", @@ -523,7 +522,6 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -534,7 +532,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -543,11 +540,10 @@ } }, "node_modules/@eslint/config-helpers": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.1.tgz", - "integrity": "sha512-RI17tsD2frtDu/3dmI7QRrD4bedNKPM08ziRYaC5AhkGrzIAJelm9kJU1TznK+apx6V+cqRz8tfpEeG3oIyjxw==", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.3.0.tgz", + "integrity": "sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -627,11 +623,10 @@ } }, "node_modules/@eslint/js": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz", - "integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==", + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.30.1.tgz", + "integrity": "sha512-zXhuECFlyep42KZUhWjfvsmXGX39W8K8LFb8AWXM9gSV9dQB+MrJGLKvW6Zw0Ggnbpw0VHTtrhFXYe3Gym18jg==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -644,7 +639,6 @@ "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } @@ -793,7 +787,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -807,7 +800,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -817,7 +809,6 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1120,11 +1111,10 @@ ] }, "node_modules/@stylistic/eslint-plugin": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.0.0.tgz", - "integrity": "sha512-nVV2FSzeTJ3oFKw+3t9gQYQcrgbopgCASSY27QOtkhEGgSfdQQjDmzZd41NeT1myQ8Wc6l+pZllST9qIu4NKzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.1.0.tgz", + "integrity": "sha512-TJRJul4u/lmry5N/kyCU+7RWWOk0wyXN+BncRlDYBqpLFnzXkd7QGVfN7KewarFIXv0IX0jSF/Ksu7aHWEDeuw==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", "@typescript-eslint/types": "^8.34.1", @@ -1245,11 +1235,10 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.4.tgz", - "integrity": "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA==", + "version": "24.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.10.tgz", + "integrity": "sha512-ENHwaH+JIRTDIEEbDK6QSQntAYGtbvdDXnMXnZaZ6k13Du1dPMmprkEHIL7ok2Wl2aZevetwTAb5S+7yIF+enA==", "dev": true, - "license": "MIT", "dependencies": { "undici-types": "~7.8.0" } @@ -1269,17 +1258,16 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.0.tgz", - "integrity": "sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.35.1.tgz", + "integrity": "sha512-9XNTlo7P7RJxbVeICaIIIEipqxLKguyh+3UbXuT2XQuFp6d8VOeDEGuz5IiX0dgZo8CiI6aOFLg4e8cF71SFVg==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.35.0", - "@typescript-eslint/type-utils": "8.35.0", - "@typescript-eslint/utils": "8.35.0", - "@typescript-eslint/visitor-keys": "8.35.0", + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/type-utils": "8.35.1", + "@typescript-eslint/utils": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1293,7 +1281,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.35.0", + "@typescript-eslint/parser": "^8.35.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.9.0" } @@ -1303,22 +1291,20 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.0.tgz", - "integrity": "sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.35.1.tgz", + "integrity": "sha512-3MyiDfrfLeK06bi/g9DqJxP5pV74LNv4rFTyvGDmT3x2p1yp1lOd+qYZfiRPIOf/oON+WRZR5wxxuF85qOar+w==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.35.0", - "@typescript-eslint/types": "8.35.0", - "@typescript-eslint/typescript-estree": "8.35.0", - "@typescript-eslint/visitor-keys": "8.35.0", + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/typescript-estree": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4" }, "engines": { @@ -1334,14 +1320,13 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.0.tgz", - "integrity": "sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.35.1.tgz", + "integrity": "sha512-VYxn/5LOpVxADAuP3NrnxxHYfzVtQzLKeldIhDhzC8UHaiQvYlXvKuVho1qLduFbJjjy5U5bkGwa3rUGUb1Q6Q==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.35.0", - "@typescript-eslint/types": "^8.35.0", + "@typescript-eslint/tsconfig-utils": "^8.35.1", + "@typescript-eslint/types": "^8.35.1", "debug": "^4.3.4" }, "engines": { @@ -1356,14 +1341,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.0.tgz", - "integrity": "sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.35.1.tgz", + "integrity": "sha512-s/Bpd4i7ht2934nG+UoSPlYXd08KYz3bmjLEb7Ye1UVob0d1ENiT3lY8bsCmik4RqfSbPw9xJJHbugpPpP5JUg==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.0", - "@typescript-eslint/visitor-keys": "8.35.0" + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1374,11 +1358,10 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.0.tgz", - "integrity": "sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.35.1.tgz", + "integrity": "sha512-K5/U9VmT9dTHoNowWZpz+/TObS3xqC5h0xAIjXPw+MNcKV9qg6eSatEnmeAwkjHijhACH0/N7bkhKvbt1+DXWQ==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -1391,14 +1374,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.0.tgz", - "integrity": "sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.35.1.tgz", + "integrity": "sha512-HOrUBlfVRz5W2LIKpXzZoy6VTZzMu2n8q9C2V/cFngIC5U1nStJgv0tMV4sZPzdf4wQm9/ToWUFPMN9Vq9VJQQ==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.35.0", - "@typescript-eslint/utils": "8.35.0", + "@typescript-eslint/typescript-estree": "8.35.1", + "@typescript-eslint/utils": "8.35.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1415,11 +1397,10 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.0.tgz", - "integrity": "sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.35.1.tgz", + "integrity": "sha512-q/O04vVnKHfrrhNAscndAn1tuQhIkwqnaW+eu5waD5IPts2eX1dgJxgqcPx5BX109/qAz7IG6VrEPTOYKCNfRQ==", "dev": true, - "license": "MIT", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -1429,16 +1410,15 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.0.tgz", - "integrity": "sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.35.1.tgz", + "integrity": "sha512-Vvpuvj4tBxIka7cPs6Y1uvM7gJgdF5Uu9F+mBJBPY4MhvjrjWGK4H0lVgLJd/8PWZ23FTqsaJaLEkBCFUk8Y9g==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.35.0", - "@typescript-eslint/tsconfig-utils": "8.35.0", - "@typescript-eslint/types": "8.35.0", - "@typescript-eslint/visitor-keys": "8.35.0", + "@typescript-eslint/project-service": "8.35.1", + "@typescript-eslint/tsconfig-utils": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/visitor-keys": "8.35.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1458,16 +1438,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.0.tgz", - "integrity": "sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.35.1.tgz", + "integrity": "sha512-lhnwatFmOFcazAsUm3ZnZFpXSxiwoa1Lj50HphnDe1Et01NF4+hrdXONSUHIcbVu2eFb1bAf+5yjXkGVkXBKAQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.35.0", - "@typescript-eslint/types": "8.35.0", - "@typescript-eslint/typescript-estree": "8.35.0" + "@typescript-eslint/scope-manager": "8.35.1", + "@typescript-eslint/types": "8.35.1", + "@typescript-eslint/typescript-estree": "8.35.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1482,13 +1461,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.0.tgz", - "integrity": "sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.35.1.tgz", + "integrity": "sha512-VRwixir4zBWCSTP/ljEo091lbpypz57PoeAQ9imjG+vbeof9LplljsL1mos4ccG6H9IjfrVGM359RozUnuFhpw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.35.0", + "@typescript-eslint/types": "8.35.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1504,7 +1482,6 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, @@ -1513,11 +1490,10 @@ } }, "node_modules/@vitest/eslint-plugin": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.2.7.tgz", - "integrity": "sha512-7WHcGZo6uXsE4SsSnpGDqKyGrd6NfOMM52WKoHSpTRZLbjMuDyHfA5P7m8yrr73tpqYjsiAdSjSerOnx8uEhpA==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.3.4.tgz", + "integrity": "sha512-EOg8d0jn3BAiKnR55WkFxmxfWA3nmzrbIIuOXyTe6A72duryNgyU+bdBEauA97Aab3ho9kLmAwgPX63Ckj4QEg==", "dev": true, - "license": "MIT", "dependencies": { "@typescript-eslint/utils": "^8.24.1" }, @@ -2634,11 +2610,10 @@ } }, "node_modules/dotenv": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", - "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.0.1.tgz", + "integrity": "sha512-GLjkduuAL7IMJg/ZnOPm9AnWKJ82mSE2tzXLaJ/6hD6DhwGfZaXG77oB8qbReyiczNxnbxQKyh0OE5mXq0bAHA==", "dev": true, - "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -2900,19 +2875,18 @@ } }, "node_modules/eslint": { - "version": "9.29.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz", - "integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==", + "version": "9.30.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.30.1.tgz", + "integrity": "sha512-zmxXPNMOXmwm9E0yQLi5uqXHs7uq2UIiqEKo3Gq+3fwo1XrJ+hijAZImyF7hclW3E6oHz43Yk3RP8at6OTKflQ==", "dev": true, - "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.12.1", - "@eslint/config-array": "^0.20.1", - "@eslint/config-helpers": "^0.2.1", + "@eslint/config-array": "^0.21.0", + "@eslint/config-helpers": "^0.3.0", "@eslint/core": "^0.14.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.29.0", + "@eslint/js": "9.30.1", "@eslint/plugin-kit": "^0.3.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -3280,7 +3254,6 @@ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, - "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -3297,7 +3270,6 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "ISC", "dependencies": { "is-glob": "^4.0.1" }, @@ -3323,7 +3295,6 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, - "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -3622,11 +3593,10 @@ } }, "node_modules/globals": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-16.2.0.tgz", - "integrity": "sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==", + "version": "16.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-16.3.0.tgz", + "integrity": "sha512-bqWEnJ1Nt3neqx2q5SFfGS8r/ahumIakg3HcwtNlrVlwXIeNumWn/c7Pn/wKzGhf6SaW6H6uWXLqC30STCMchQ==", "dev": true, - "license": "MIT", "engines": { "node": ">=18" }, @@ -3679,8 +3649,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" + "dev": true }, "node_modules/has-bigints": { "version": "1.0.2", @@ -4867,7 +4836,6 @@ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, - "license": "MIT", "engines": { "node": ">= 8" } @@ -5447,7 +5415,6 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, - "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6015,11 +5982,10 @@ } }, "node_modules/prettier": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.1.tgz", - "integrity": "sha512-5xGWRa90Sp2+x1dQtNpIpeOQpTDBs9cZDmA/qs2vDNN2i18PdapqY7CmBeyLlMuGqXJRIOPaCaVZTLNQRWUH/A==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", "dev": true, - "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -6131,8 +6097,7 @@ "type": "consulting", "url": "https://feross.org/support" } - ], - "license": "MIT" + ] }, "node_modules/read": { "version": "1.0.7", @@ -6265,7 +6230,6 @@ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, - "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -6361,7 +6325,6 @@ "url": "https://feross.org/support" } ], - "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -7403,15 +7366,14 @@ } }, "node_modules/typescript-eslint": { - "version": "8.35.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.0.tgz", - "integrity": "sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A==", + "version": "8.35.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.35.1.tgz", + "integrity": "sha512-xslJjFzhOmHYQzSB/QTeASAHbjmxOGEP6Coh93TXmUBFQoJ1VU35UHIDmG06Jd6taf3wqqC1ntBnCMeymy5Ovw==", "dev": true, - "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.35.0", - "@typescript-eslint/parser": "8.35.0", - "@typescript-eslint/utils": "8.35.0" + "@typescript-eslint/eslint-plugin": "8.35.1", + "@typescript-eslint/parser": "8.35.1", + "@typescript-eslint/utils": "8.35.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -7515,11 +7477,10 @@ } }, "node_modules/vite": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.0.tgz", - "integrity": "sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.0.2.tgz", + "integrity": "sha512-hxdyZDY1CM6SNpKI4w4lcUc3Mtkd9ej4ECWVHSMrOdSinVc2zYOAppHeGc/hzmRo3pxM5blMzkuWHOJA/3NiFw==", "dev": true, - "license": "MIT", "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.6", diff --git a/package.json b/package.json index 8edbc261b..b0ad9d29c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gittools-actions", - "version": "3.2.1", + "version": "4.0.0", "description": "Easy Semantic Versioning (https://semver.org) for projects using Git", "repository": { "type": "git", @@ -47,28 +47,28 @@ "prepare": "husky" }, "devDependencies": { - "@eslint/js": "^9.29.0", - "@stylistic/eslint-plugin": "^5.0.0", + "@eslint/js": "^9.30.1", + "@stylistic/eslint-plugin": "^5.1.0", "@types/eslint__js": "^9.14.0", - "@types/node": "^24.0.4", + "@types/node": "^24.0.10", "@types/semver": "^7.7.0", - "@vitest/eslint-plugin": "^1.2.7", - "dotenv": "^16.5.0", - "eslint": "^9.29.0", + "@vitest/eslint-plugin": "^1.3.4", + "dotenv": "^17.0.1", + "eslint": "^9.30.1", "eslint-config-prettier": "^10.1.5", "eslint-plugin-prettier": "^5.5.1", "glob": "^11.0.3", - "globals": "^16.2.0", + "globals": "^16.3.0", "husky": "^9.1.7", "lint-staged": "^16.1.2", "markdownlint-cli": "^0.45.0", "npm-run-all2": "^8.0.4", - "prettier": "^3.6.1", + "prettier": "^3.6.2", "simple-git": "^3.28.0", "tfx-cli": "^0.21.1", "typescript": "^5.8.3", - "typescript-eslint": "^8.35.0", - "vite": "^7.0.0", + "typescript-eslint": "^8.35.1", + "vite": "^7.0.2", "vite-node": "^3.2.4", "vite-tsconfig-paths": "^5.1.4", "vitest": "^3.2.4" diff --git a/src/__tests__/tools/gitversion/tool.spec.ts b/src/__tests__/tools/gitversion/tool.spec.ts index fb44a315e..87ecf9163 100644 --- a/src/__tests__/tools/gitversion/tool.spec.ts +++ b/src/__tests__/tools/gitversion/tool.spec.ts @@ -202,6 +202,15 @@ describe('GitVersionTool', () => { ).rejects.toThrowError(`GitVersion configuration file not found at ${configFile}`) }) + it('should return correct arguments for settings with no config file', async () => { + tool.init(false) + await expect( + tool.getExecuteArguments('workdir', { + configFilePath: undefined + } as ExecuteSettings) + ).resolves.toEqual(['workdir', '/output', 'json', '/l', 'console']) + }) + it('should return correct arguments for settings with override config', async () => { const args = await tool.getExecuteArguments('workdir', { overrideConfig: ['tag-prefix=release-', 'next-version=1.0.0'] diff --git a/src/tools/common/dotnet-tool.ts b/src/tools/common/dotnet-tool.ts index ee380f42d..28da672f5 100644 --- a/src/tools/common/dotnet-tool.ts +++ b/src/tools/common/dotnet-tool.ts @@ -232,7 +232,7 @@ export abstract class DotnetTool implements IDotnetTool { const result = await this.execute('dotnet', builder.build()) // Each line of the output starts with either E (enabled) or D (disabled), followed by a space and index url. - const nugetSources = [...(result.stdout ?? '').matchAll(/^E (?.+)/gm)].map(m => m.groups!.index) + const nugetSources = [...(result.stdout ?? '').matchAll(/^E (?.+)/gm)].map(m => m.groups?.index ?? '').filter(s => !!s) if (!nugetSources.length) { this.buildAgent.error('Failed to fetch an enabled package source for dotnet.') @@ -242,7 +242,10 @@ export abstract class DotnetTool implements IDotnetTool { const sources: string[] = [] for (const nugetSource of nugetSources) { // Fetch the nuget source index to obtain the query service - const nugetIndex = await fetch(nugetSource) + const nugetIndex = await fetch(nugetSource).catch((e: { cause: { message: string | undefined } | undefined }) => { + this.buildAgent.warn(e.cause?.message ?? 'An unknown error occurred while fetching data') + return Response.error() + }) if (!nugetIndex?.ok) { this.buildAgent.warn(`Failed to fetch data from NuGet source ${nugetSource}.`) continue @@ -262,11 +265,15 @@ export abstract class DotnetTool implements IDotnetTool { } private async queryVersionsFromNugetSource(serviceUrl: string, toolName: string, includePrerelease: boolean): Promise { + this.buildAgent.debug(`Fetching ${toolName} versions from source ${serviceUrl}`) const toolNameParam = encodeURIComponent(toolName.toLowerCase()) const prereleaseParam = includePrerelease ? 'true' : 'false' const downloadPath = `${serviceUrl}?q=${toolNameParam}&prerelease=${prereleaseParam}&semVerLevel=2.0.0&take=1` - const response = await fetch(downloadPath) + const response = await fetch(downloadPath).catch((e: { cause: { message: string | undefined } | undefined }) => { + this.buildAgent.warn(e.cause?.message ?? 'An unknown error occurred while fetching data') + return Response.error() + }) if (!response || !response.ok) { this.buildAgent.warn(`failed to query latest version for ${toolName} from ${downloadPath}. Status code: ${response ? response.status : 'unknown'}`) @@ -274,9 +281,10 @@ export abstract class DotnetTool implements IDotnetTool { } const { data } = (await response.json()) as NugetVersions - const versions = data[0].versions.map(x => x.version) + const versions = data?.[0]?.versions?.map(x => x.version) ?? [] - return versions ?? [] + this.buildAgent.debug(`Found ${versions.length} versions: ${versions.join(', ')}`) + return versions } private async queryLatestMatch(toolName: string, versionSpec: string, includePrerelease: boolean): Promise { diff --git a/src/tools/gitversion/models.ts b/src/tools/gitversion/models.ts index fdda6acc4..89106bf18 100644 --- a/src/tools/gitversion/models.ts +++ b/src/tools/gitversion/models.ts @@ -5,10 +5,10 @@ export type ExecuteSettings = { disableCache: boolean disableNormalization: boolean disableShallowCloneCheck: boolean - configFilePath: string - overrideConfig: string[] + configFilePath?: string + overrideConfig?: string[] updateAssemblyInfo: boolean - updateAssemblyInfoFilename: string + updateAssemblyInfoFilename?: string updateProjectFiles: boolean buildNumberFormat?: string } diff --git a/src/tools/gitversion/runner.ts b/src/tools/gitversion/runner.ts index aaa4329f1..5885dc5d1 100644 --- a/src/tools/gitversion/runner.ts +++ b/src/tools/gitversion/runner.ts @@ -42,22 +42,26 @@ export class Runner extends RunnerBase { } private processGitVersionOutput(result: ExecResult): ExecResult { - const stdout = result.stdout as string - if (stdout.lastIndexOf('{') === -1 || stdout.lastIndexOf('}') === -1) { - const errorMessage = 'GitVersion output is not valid JSON, see output details' - this.buildAgent.debug(errorMessage) - this.buildAgent.setFailed(errorMessage, true) - return { - code: -1, - error: new Error(errorMessage) + if (result.code === 0) { + const stdout = result.stdout as string + if (stdout.lastIndexOf('{') === -1 || stdout.lastIndexOf('}') === -1) { + const errorMessage = 'GitVersion output is not valid JSON, see output details' + this.buildAgent.debug(errorMessage) + this.buildAgent.setFailed(errorMessage, true) + return { + code: -1, + error: new Error(errorMessage) + } + } else { + const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1) + + const gitVersionOutput = JSON.parse(jsonOutput) as GitVersionOutput + this.tool.writeGitVersionToAgent(gitVersionOutput) + this.tool.updateBuildNumber() + this.buildAgent.setSucceeded('GitVersion executed successfully', true) + return result } } else { - const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1) - - const gitVersionOutput = JSON.parse(jsonOutput) as GitVersionOutput - this.tool.writeGitVersionToAgent(gitVersionOutput) - this.tool.updateBuildNumber() - this.buildAgent.setSucceeded('GitVersion executed successfully', true) return result } } diff --git a/src/tools/gitversion/settings.ts b/src/tools/gitversion/settings.ts index 952bf1f95..174a3da58 100644 --- a/src/tools/gitversion/settings.ts +++ b/src/tools/gitversion/settings.ts @@ -15,8 +15,8 @@ export class GitVersionSettingsProvider extends SettingsProvider implements IGit const disableNormalization = this.buildAgent.getBooleanInput('disableNormalization') const disableShallowCloneCheck = this.buildAgent.getBooleanInput('disableShallowCloneCheck') - const configFilePath = this.buildAgent.getInput('configFilePath') - const overrideConfig = this.buildAgent.getListInput('overrideConfig') + const configFilePath = this.buildAgent.getInput('configFilePath', false) + const overrideConfig = this.buildAgent.getListInput('overrideConfig', false) const updateAssemblyInfo = this.buildAgent.getBooleanInput('updateAssemblyInfo') const updateAssemblyInfoFilename = this.buildAgent.getInput('updateAssemblyInfoFilename') diff --git a/src/tools/gitversion/tool.ts b/src/tools/gitversion/tool.ts index 159fb09d9..fca3558c6 100644 --- a/src/tools/gitversion/tool.ts +++ b/src/tools/gitversion/tool.ts @@ -123,7 +123,7 @@ export class GitVersionTool extends DotnetTool { builder.addArgument('/updateassemblyinfo') // You can specify 'updateAssemblyInfo' without 'updateAssemblyInfoFilename'. - if (updateAssemblyInfoFilename?.length > 0) { + if (updateAssemblyInfoFilename) { if (await this.isValidInputFile('updateAssemblyInfoFilename', updateAssemblyInfoFilename)) { builder.addArgument(updateAssemblyInfoFilename) } else {