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 { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy