From 9a725571b0a77d5eb37acc5d6712804e7b726b2e Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Thu, 25 Jul 2024 00:58:53 +0200 Subject: [PATCH 1/6] update GRM version in tests --- dist/azure/gitreleasemanager/setup/task.json | 4 ++-- docs/examples/azure/gitversion/execute.md | 4 ++-- docs/examples/azure/gitversion/index.md | 4 ++-- docs/examples/github/gitversion/index.md | 4 ++-- gitreleasemanager/setup/action.yml | 2 +- .../tools/gitreleasemanager/runner.spec.ts | 4 ++-- src/__tests__/tools/gitreleasemanager/tool.spec.ts | 14 +++++++------- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/dist/azure/gitreleasemanager/setup/task.json b/dist/azure/gitreleasemanager/setup/task.json index 6c2a42593..372fc61ca 100644 --- a/dist/azure/gitreleasemanager/setup/task.json +++ b/dist/azure/gitreleasemanager/setup/task.json @@ -28,7 +28,7 @@ "label": "The version spec", "defaultValue": "", "required": true, - "helpMarkDown": "Required version in the form of 0.17.x or exact version like 0.17.0" + "helpMarkDown": "Required version in the form of 0.18.x or exact version like 0.18.0" }, { "name": "includePrerelease", @@ -55,4 +55,4 @@ "helpMarkDown": "Prefer to download the latest version matching the versionSpec, even if there is a local cached version." } ] -} \ No newline at end of file +} diff --git a/docs/examples/azure/gitversion/execute.md b/docs/examples/azure/gitversion/execute.md index e476ad885..83702b733 100644 --- a/docs/examples/azure/gitversion/execute.md +++ b/docs/examples/azure/gitversion/execute.md @@ -130,12 +130,12 @@ steps:
Calculate the version for the build using a config file with the default name GitVersion.yml. - + ```yaml steps: # gitversion/setup@2.0.1 task omitted for brevity. -- task: gitversion/execute@2.0.1 + - task: gitversion/execute@2.0.1 displayName: Determine Version inputs: useConfigFile: true diff --git a/docs/examples/azure/gitversion/index.md b/docs/examples/azure/gitversion/index.md index ab13dcbb4..a800b31d6 100644 --- a/docs/examples/azure/gitversion/index.md +++ b/docs/examples/azure/gitversion/index.md @@ -6,8 +6,8 @@ Note: You need to run the Setup step before the Execute step, otherwise the Exec ## Setup GitVersion (gitversion/setup) -- [Usage examples](setup.md) +- [Setup](setup.md) ## Execute GitVersion (gitversion/execute) -- [Usage examples](execute.md) +- [Execute](execute.md) diff --git a/docs/examples/github/gitversion/index.md b/docs/examples/github/gitversion/index.md index b60f74465..00140a6f6 100644 --- a/docs/examples/github/gitversion/index.md +++ b/docs/examples/github/gitversion/index.md @@ -6,8 +6,8 @@ Note: You need to run the Setup step before the Execute step, otherwise the Exec ## Setup GitVersion (gitversion/setup) -- [Usage examples](setup.md) +- [Setup](setup.md) ## Execute GitVersion (gitversion/execute) -- [Usage examples](execute.md) +- [Execute](execute.md) diff --git a/gitreleasemanager/setup/action.yml b/gitreleasemanager/setup/action.yml index 5bedfa6a8..2e875ff91 100644 --- a/gitreleasemanager/setup/action.yml +++ b/gitreleasemanager/setup/action.yml @@ -9,7 +9,7 @@ runs: main: main.mjs inputs: versionSpec: - description: Required version in the form of 0.17.x or exact version like 0.17.0 + description: Required version in the form of 0.18.x or exact version like 0.18.0 required: true default: '' includePrerelease: diff --git a/src/__tests__/tools/gitreleasemanager/runner.spec.ts b/src/__tests__/tools/gitreleasemanager/runner.spec.ts index d25f499e8..8093c8772 100644 --- a/src/__tests__/tools/gitreleasemanager/runner.spec.ts +++ b/src/__tests__/tools/gitreleasemanager/runner.spec.ts @@ -13,7 +13,7 @@ import { keysFn, type SetupSettings } from '@tools/common' describe('GitReleaseManager Runner', () => { const baseDir = path.resolve(__dirname, '../../../../.test') const envName = process.platform === 'win32' ? 'Path' : 'PATH' - const version = '0.17.0' + const version = '0.18.0' const toolPath = path.resolve(baseDir, 'tools', 'GitReleaseManager.Tool', version) const toolPathVariable = 'GITRELEASEMANAGER_PATH' const toolName = 'dotnet-gitreleasemanager' @@ -59,7 +59,7 @@ describe('GitReleaseManager Runner', () => { it.sequential('should run setup GitReleaseManager', async () => { setInputs({ - versionSpec: '0.17.x', + versionSpec: '0.18.x', includePrerelease: false, ignoreFailedSources: false, preferLatestVersion: false diff --git a/src/__tests__/tools/gitreleasemanager/tool.spec.ts b/src/__tests__/tools/gitreleasemanager/tool.spec.ts index 5cbcc0ff6..5fbcf82f0 100644 --- a/src/__tests__/tools/gitreleasemanager/tool.spec.ts +++ b/src/__tests__/tools/gitreleasemanager/tool.spec.ts @@ -1,13 +1,13 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { IBuildAgent } from '@agents/common' import { - GitReleaseManagerAddAssetSettings, - GitReleaseManagerCloseSettings, - GitReleaseManagerCreateSettings, - GitReleaseManagerDiscardSettings, - GitReleaseManagerOpenSettings, - GitReleaseManagerPublishSettings, - GitReleaseManagerSettings, + type GitReleaseManagerAddAssetSettings, + type GitReleaseManagerCloseSettings, + type GitReleaseManagerCreateSettings, + type GitReleaseManagerDiscardSettings, + type GitReleaseManagerOpenSettings, + type GitReleaseManagerPublishSettings, + type GitReleaseManagerSettings, GitReleaseManagerTool } from '@tools/gitreleasemanager' import * as path from 'node:path' From d2fc19780422b5e7b8fb7a91de5b4e67f612e7ba Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Thu, 25 Jul 2024 08:49:29 +0200 Subject: [PATCH 2/6] move test execution after build --- .azure/ci.yml | 15 ++++++++------- .github/workflows/ci.yml | 14 +++++++------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/.azure/ci.yml b/.azure/ci.yml index ea2a35361..edfc7d796 100644 --- a/.azure/ci.yml +++ b/.azure/ci.yml @@ -52,6 +52,14 @@ jobs: npx tfx extension create --root ./dist/azure --manifest-js ./dist/azure/manifest.config.cjs Expand-Archive -Path gittools.gittools-0.0.1.vsix -DestinationPath dist/vsix displayName: 'Build code' + - pwsh: | + npm run test:ci + displayName: 'Run tests' + - task: PublishTestResults@2 + inputs: + testResultsFormat: 'JUnit' + testResultsFiles: 'junit-report.xml' + displayName: 'Test Summary' - pwsh: | # set the inputs for the 'gitversion/setup' action $env:INPUT_VERSIONSPEC = "$(INPUT_VERSIONSPEC)" @@ -76,13 +84,6 @@ jobs: name: version displayName: gitversion/execute workingDirectory: dist/vsix - - pwsh: | - npm run test:ci - displayName: 'Run tests' - - task: PublishTestResults@2 - inputs: - testResultsFormat: 'JUnit' - testResultsFiles: 'junit-report.xml' - pwsh: | echo "Major (major) : $(major)" echo "Major (GitVersion_Major) : $(GitVersion_Major)" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1a5d35b57..287c89dbf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,6 +43,13 @@ jobs: npm run build:agent:github npm run build:agent:azure name: Build code + - run: | + npm run test:ci + name: Run tests + - name: Test Summary + uses: test-summary/action@v2.4 + with: + paths: junit-report.xml - name: gitversion/setup uses: ./gitversion/setup with: @@ -56,13 +63,6 @@ jobs: disableNormalization: false overrideConfig: | update-build-number=false - - run: | - npm run test:ci - name: Run tests - - name: Test Summary - uses: test-summary/action@v2.4 - with: - paths: junit-report.xml - run: | echo "Major (env.major) : ${{ env.major }}" echo "Major (env.GitVersion_Major) : ${{ env.GitVersion_Major }}" From 88c67766bea3859b787fcadad5728e1077ccd467 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Thu, 25 Jul 2024 01:02:51 +0200 Subject: [PATCH 3/6] GitVersionSettings -> GitVersionExecuteSettings --- .../tools/gitversion/settings.spec.ts | 17 +++--- src/__tests__/tools/gitversion/tool.spec.ts | 56 +++++++++---------- src/tools/gitversion/models.ts | 2 +- src/tools/gitversion/runner.ts | 2 +- src/tools/gitversion/settings.ts | 6 +- src/tools/gitversion/tool.ts | 14 ++--- 6 files changed, 48 insertions(+), 49 deletions(-) diff --git a/src/__tests__/tools/gitversion/settings.spec.ts b/src/__tests__/tools/gitversion/settings.spec.ts index c7f618ac3..52d122e25 100644 --- a/src/__tests__/tools/gitversion/settings.spec.ts +++ b/src/__tests__/tools/gitversion/settings.spec.ts @@ -1,9 +1,9 @@ import { describe, expect, it } from 'vitest' import { IBuildAgent } from '@agents/common' -import { type GitVersionSettings, GitVersionSettingsProvider } from '@tools/gitversion' +import { type GitVersionExecuteSettings, GitVersionSettingsProvider } from '@tools/gitversion' describe('GitVersion settings', () => { - it('should return GitVersionSettings', () => { + it('should return GitVersionExecuteSettings', () => { const settings = { targetPath: 'path', disableCache: true, @@ -14,19 +14,18 @@ describe('GitVersion settings', () => { overrideConfig: ['update-build-number=false'], updateAssemblyInfo: true, updateAssemblyInfoFilename: 'path', - additionalArguments: 'args', - srcDir: 'path' - } as GitVersionSettings + additionalArguments: 'args' + } as GitVersionExecuteSettings const buildAgent = { - getInput: (input: keyof GitVersionSettings) => settings[input] as string, - getBooleanInput: (input: keyof GitVersionSettings) => settings[input] as boolean, - getListInput: (input: keyof GitVersionSettings) => settings[input] as string[] + getInput: (input: keyof GitVersionExecuteSettings) => settings[input] as string, + getBooleanInput: (input: keyof GitVersionExecuteSettings) => settings[input] as boolean, + getListInput: (input: keyof GitVersionExecuteSettings) => settings[input] as string[] } as IBuildAgent const settingsProvider = new GitVersionSettingsProvider(buildAgent) - const gitVersionSettings = settingsProvider.getGitVersionSettings() + const gitVersionSettings = settingsProvider.getGitVersionExecuteSettings() expect(gitVersionSettings.targetPath).toBe(settings.targetPath) expect(gitVersionSettings.disableCache).toBe(settings.disableCache) diff --git a/src/__tests__/tools/gitversion/tool.spec.ts b/src/__tests__/tools/gitversion/tool.spec.ts index e784c4c08..3026d0187 100644 --- a/src/__tests__/tools/gitversion/tool.spec.ts +++ b/src/__tests__/tools/gitversion/tool.spec.ts @@ -1,6 +1,6 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { IBuildAgent } from '@agents/common' -import { type GitVersionOutput, type GitVersionSettings, GitVersionTool } from '@tools/gitversion' +import { type GitVersionOutput, type GitVersionExecuteSettings, GitVersionTool } from '@tools/gitversion' class TestGitVersionTool extends GitVersionTool { private _isValidInputFile = false @@ -13,12 +13,12 @@ class TestGitVersionTool extends GitVersionTool { return Promise.resolve(this._isValidInputFile) } - async getRepoDir(settings: GitVersionSettings): Promise { + async getRepoDir(settings: GitVersionExecuteSettings): Promise { return super.getRepoDir(settings) } - async getArguments(workDir: string, options: GitVersionSettings): Promise { - return super.getArguments(workDir, options) + async getExecuteArguments(workDir: string, options: GitVersionExecuteSettings): Promise { + return super.getExecuteArguments(workDir, options) } } @@ -101,7 +101,7 @@ describe('GitVersionTool', () => { tool = new TestGitVersionTool(buildAgent) const repoDir = await tool.getRepoDir({ targetPath: '' - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(repoDir).toBe('workdir') }) @@ -112,7 +112,7 @@ describe('GitVersionTool', () => { tool = new TestGitVersionTool(buildAgent) const repoDir = await tool.getRepoDir({ targetPath: '' - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(repoDir).toBe('.') }) @@ -125,7 +125,7 @@ describe('GitVersionTool', () => { tool = new TestGitVersionTool(buildAgent) const repoDir = await tool.getRepoDir({ targetPath: 'targetDir' - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(repoDir).toBe('targetDir') }) @@ -140,37 +140,37 @@ describe('GitVersionTool', () => { await expect( tool.getRepoDir({ targetPath: wrongDir - } as GitVersionSettings) + } as GitVersionExecuteSettings) ).rejects.toThrowError(`Directory not found at ${wrongDir}`) }) }) - describe('getArguments', () => { + describe('getExecuteArguments', () => { it('should return correct arguments for empty settings', async () => { - const args = await tool.getArguments('workdir', {} as GitVersionSettings) + const args = await tool.getExecuteArguments('workdir', {} as GitVersionExecuteSettings) expect(args).toEqual(['workdir', '/output', 'json', '/output', 'buildserver']) }) it('should return correct arguments for settings with cache', async () => { - const args = await tool.getArguments('workdir', { + const args = await tool.getExecuteArguments('workdir', { disableCache: true - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(args).toEqual(['workdir', '/output', 'json', '/output', 'buildserver', '/nocache']) }) it('should return correct arguments for settings with normalization', async () => { - const args = await tool.getArguments('workdir', { + const args = await tool.getExecuteArguments('workdir', { disableNormalization: true - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(args).toEqual(['workdir', '/output', 'json', '/output', 'buildserver', '/nonormalize']) }) it('should return correct arguments for settings with config', async () => { tool.init(true) - const args = await tool.getArguments('workdir', { + const args = await tool.getExecuteArguments('workdir', { useConfigFile: true, configFilePath: 'workdir/GitVersion.yml' - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(args).toEqual(['workdir', '/output', 'json', '/output', 'buildserver', '/config', 'workdir/GitVersion.yml']) }) @@ -178,17 +178,17 @@ describe('GitVersionTool', () => { tool.init(false) const configFile = 'workdir/WrongConfig.yml' await expect( - tool.getArguments('workdir', { + tool.getExecuteArguments('workdir', { useConfigFile: true, configFilePath: configFile - } as GitVersionSettings) + } as GitVersionExecuteSettings) ).rejects.toThrowError(`GitVersion configuration file not found at ${configFile}`) }) it('should return correct arguments for settings with override config', async () => { - const args = await tool.getArguments('workdir', { + const args = await tool.getExecuteArguments('workdir', { overrideConfig: ['tag-prefix=release-', 'next-version=1.0.0'] - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(args).toEqual([ 'workdir', '/output', @@ -204,10 +204,10 @@ describe('GitVersionTool', () => { it('should return correct arguments for settings with assembly info', async () => { tool.init(true) - const args = await tool.getArguments('workdir', { + const args = await tool.getExecuteArguments('workdir', { updateAssemblyInfo: true, updateAssemblyInfoFilename: 'AssemblyInfo.cs' - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(args).toEqual(['workdir', '/output', 'json', '/output', 'buildserver', '/updateassemblyinfo', 'AssemblyInfo.cs']) }) @@ -215,21 +215,21 @@ describe('GitVersionTool', () => { tool.init(false) const assemblyInfoFile = 'WrongAssemblyInfo.cs' await expect( - tool.getArguments('workdir', { + tool.getExecuteArguments('workdir', { updateAssemblyInfo: true, updateAssemblyInfoFilename: assemblyInfoFile - } as GitVersionSettings) + } as GitVersionExecuteSettings) ).rejects.toThrowError(`AssemblyInfoFilename file not found at ${assemblyInfoFile}`) }) it('should return correct arguments for settings with config and assembly info', async () => { tool.init(true) - const args = await tool.getArguments('workdir', { + const args = await tool.getExecuteArguments('workdir', { useConfigFile: true, configFilePath: 'workdir/GitVersion.yml', updateAssemblyInfo: true, updateAssemblyInfoFilename: 'AssemblyInfo.cs' - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(args).toEqual([ 'workdir', '/output', @@ -244,9 +244,9 @@ describe('GitVersionTool', () => { }) it('should return correct arguments for settings with additional arguments', async () => { - const args = await tool.getArguments('workdir', { + const args = await tool.getExecuteArguments('workdir', { additionalArguments: '--some-arg --another-arg' - } as GitVersionSettings) + } as GitVersionExecuteSettings) expect(args).toEqual(['workdir', '/output', 'json', '/output', 'buildserver', '--some-arg', '--another-arg']) }) }) diff --git a/src/tools/gitversion/models.ts b/src/tools/gitversion/models.ts index f3c723e3b..a99b23c0c 100644 --- a/src/tools/gitversion/models.ts +++ b/src/tools/gitversion/models.ts @@ -13,7 +13,7 @@ export enum ExecuteFields { additionalArguments = 'additionalArguments' } -export type GitVersionSettings = { +export type GitVersionExecuteSettings = { [ExecuteFields.targetPath]: string [ExecuteFields.disableCache]: boolean [ExecuteFields.disableNormalization]: boolean diff --git a/src/tools/gitversion/runner.ts b/src/tools/gitversion/runner.ts index d7ab791f7..65f558e39 100644 --- a/src/tools/gitversion/runner.ts +++ b/src/tools/gitversion/runner.ts @@ -46,7 +46,7 @@ export class Runner implements IRunner { this.buildAgent.info('Executing GitVersion') - const result = await this.gitVersionTool.run() + const result = await this.gitVersionTool.executeJson() if (result.code === 0) { this.buildAgent.info('GitVersion executed successfully') diff --git a/src/tools/gitversion/settings.ts b/src/tools/gitversion/settings.ts index ad390d4fe..49076aa43 100644 --- a/src/tools/gitversion/settings.ts +++ b/src/tools/gitversion/settings.ts @@ -1,12 +1,12 @@ import { type ISettingsProvider, SettingsProvider } from '@tools/common' -import { ExecuteFields, type GitVersionSettings } from './models' +import { ExecuteFields, type GitVersionExecuteSettings } from './models' export interface IGitVersionSettingsProvider extends ISettingsProvider { - getGitVersionSettings(): GitVersionSettings + getGitVersionExecuteSettings(): GitVersionExecuteSettings } export class GitVersionSettingsProvider extends SettingsProvider implements IGitVersionSettingsProvider { - getGitVersionSettings(): GitVersionSettings { + getGitVersionExecuteSettings(): GitVersionExecuteSettings { const targetPath = this.buildAgent.getInput(ExecuteFields.targetPath) const disableCache = this.buildAgent.getBooleanInput(ExecuteFields.disableCache) diff --git a/src/tools/gitversion/tool.ts b/src/tools/gitversion/tool.ts index bff52f834..6298e8c99 100644 --- a/src/tools/gitversion/tool.ts +++ b/src/tools/gitversion/tool.ts @@ -1,6 +1,6 @@ import { type ExecResult } from '@agents/common' import { DotnetTool, keysFn } from '@tools/common' -import { type GitVersionOutput, type GitVersionSettings } from './models' +import { type GitVersionExecuteSettings, type GitVersionOutput } from './models' import { GitVersionSettingsProvider, type IGitVersionSettingsProvider } from './settings' export class GitVersionTool extends DotnetTool { @@ -24,13 +24,13 @@ export class GitVersionTool extends DotnetTool { return new GitVersionSettingsProvider(this.buildAgent) } - async run(): Promise { - const settings = this.settingsProvider.getGitVersionSettings() + async executeJson(): Promise { + const settings = this.settingsProvider.getGitVersionExecuteSettings() const workDir = await this.getRepoDir(settings) await this.checkShallowClone(settings, workDir) - const args = await this.getArguments(workDir, settings) + const args = await this.getExecuteArguments(workDir, settings) await this.setDotnetRoot() return await this.executeTool(args) @@ -55,11 +55,11 @@ export class GitVersionTool extends DotnetTool { } } - protected async getRepoDir(settings: GitVersionSettings): Promise { + protected async getRepoDir(settings: GitVersionExecuteSettings): Promise { return await super.getRepoPath(settings.targetPath) } - protected async getArguments(workDir: string, options: GitVersionSettings): Promise { + protected async getExecuteArguments(workDir: string, options: GitVersionExecuteSettings): Promise { let args = [workDir, '/output', 'json', '/output', 'buildserver'] const { @@ -180,7 +180,7 @@ export class GitVersionTool extends DotnetTool { return args } - private async checkShallowClone(settings: GitVersionSettings, workDir: string): Promise { + private async checkShallowClone(settings: GitVersionExecuteSettings, workDir: string): Promise { if (!settings.disableShallowCloneCheck) { const isShallowResult = await this.execute('git', ['-C', workDir, 'rev-parse', '--is-shallow-repository']) if (isShallowResult.code === 0 && isShallowResult.stdout.trim() === 'true') { From 58c3012f8ee70113d636d6af99f8fbeb25699a47 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Thu, 25 Jul 2024 01:02:57 +0200 Subject: [PATCH 4/6] improve unit tests --- .eslintrc.json | 8 ++- src/__tests__/tools/common/settings.spec.ts | 12 ++-- src/__tests__/tools/common/utils.ts | 35 ++++++++++ .../tools/gitreleasemanager/runner.spec.ts | 32 +-------- .../tools/gitreleasemanager/settings.spec.ts | 69 ++++++------------- src/__tests__/tools/gitversion/runner.spec.ts | 32 +-------- .../tools/gitversion/settings.spec.ts | 20 ++---- src/tools/common/index.ts | 2 +- src/tools/gitversion/tool.ts | 5 +- 9 files changed, 82 insertions(+), 133 deletions(-) create mode 100644 src/__tests__/tools/common/utils.ts diff --git a/.eslintrc.json b/.eslintrc.json index e520f9bb9..2723b072b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -116,7 +116,13 @@ "never" ], "@typescript-eslint/type-annotation-spacing": "error", - "@typescript-eslint/unbound-method": "error" + "@typescript-eslint/unbound-method": "error", + "vitest/expect-expect": [ + "error", + { + "assertFunctionNames": ["expect", "expectValidSettings"] + } + ] }, "ignorePatterns": [ "packages/glob/__tests__/_temp/**/", diff --git a/src/__tests__/tools/common/settings.spec.ts b/src/__tests__/tools/common/settings.spec.ts index da0dc4dcf..7272c6581 100644 --- a/src/__tests__/tools/common/settings.spec.ts +++ b/src/__tests__/tools/common/settings.spec.ts @@ -1,15 +1,16 @@ -import { describe, expect, it } from 'vitest' +import { describe, it } from 'vitest' import { IBuildAgent } from '@agents/common' import { SettingsProvider, type SetupSettings } from '@tools/common' +import { expectValidSettings } from './utils' describe('SettingsProvider', () => { it('should return SetupSettings', () => { - const settings = { + const settings: SetupSettings = { versionSpec: '6.x', includePrerelease: false, ignoreFailedSources: true, preferLatestVersion: false - } as SetupSettings + } const buildAgent = { getInput: (input: keyof SetupSettings) => settings[input] as string, @@ -20,9 +21,6 @@ describe('SettingsProvider', () => { const setupSettings = settingsProvider.getSetupSettings() - expect(setupSettings.versionSpec).toBe(settings.versionSpec) - expect(setupSettings.includePrerelease).toBe(settings.includePrerelease) - expect(setupSettings.ignoreFailedSources).toBe(settings.ignoreFailedSources) - expect(setupSettings.preferLatestVersion).toBe(settings.preferLatestVersion) + expectValidSettings(settings, setupSettings) }) }) diff --git a/src/__tests__/tools/common/utils.ts b/src/__tests__/tools/common/utils.ts new file mode 100644 index 000000000..f33f98ae3 --- /dev/null +++ b/src/__tests__/tools/common/utils.ts @@ -0,0 +1,35 @@ +import process from 'node:process' +import { expect } from 'vitest' +import { keysOf } from '@tools/common' +import { IBuildAgent } from '@agents/common' + +export function setEnv(key: string, value: string): void { + process.env[key.toUpperCase()] = value +} + +export function getEnv(key: string): string { + return process.env[key] || '' +} + +export function resetEnv(agent: IBuildAgent, toolPathVariable: string): void { + const envName = process.platform === 'win32' ? 'Path' : 'PATH' + process.env.PATH = process.env[envName] // workaround for windows + setEnv(toolPathVariable, '') + setEnv(agent.sourceDirVariable, '') + setEnv(agent.tempDirVariable, '') + setEnv(agent.cacheDirVariable, '') + + setInputs({}) +} + +export function setInputs(inputs: Partial): void { + for (const property of keysOf(inputs)) { + setEnv(`INPUT_${property as string}`, inputs[property]?.toString() || '') + } +} + +export const expectValidSettings = (expectedSettings: T, actualSettings: T): void => { + for (const key of keysOf(expectedSettings)) { + expect(actualSettings[key]).toBe(expectedSettings[key]) + } +} diff --git a/src/__tests__/tools/gitreleasemanager/runner.spec.ts b/src/__tests__/tools/gitreleasemanager/runner.spec.ts index 8093c8772..72c886f74 100644 --- a/src/__tests__/tools/gitreleasemanager/runner.spec.ts +++ b/src/__tests__/tools/gitreleasemanager/runner.spec.ts @@ -1,4 +1,3 @@ -import * as process from 'node:process' import * as path from 'node:path' import * as fs from 'node:fs' @@ -8,53 +7,28 @@ import { Runner } from '@tools/gitreleasemanager' import { BuildAgent as AzurePipelinesAgent } from '@agents/azure' import { BuildAgent as LocalBuildAgent } from '@agents/local' import { BuildAgent as GitHubActionsAgent } from '@agents/github' -import { keysFn, type SetupSettings } from '@tools/common' +import { getEnv, resetEnv, setEnv, setInputs } from '../common/utils' describe('GitReleaseManager Runner', () => { const baseDir = path.resolve(__dirname, '../../../../.test') - const envName = process.platform === 'win32' ? 'Path' : 'PATH' const version = '0.18.0' const toolPath = path.resolve(baseDir, 'tools', 'GitReleaseManager.Tool', version) const toolPathVariable = 'GITRELEASEMANAGER_PATH' const toolName = 'dotnet-gitreleasemanager' - function setEnv(key: string, value: string): void { - process.env[key.toUpperCase()] = value - } - - function getEnv(key: string): string { - return process.env[key] || '' - } - - function setInputs(inputs: Partial): void { - const keys = keysFn>(inputs) - for (const property of keys) { - setEnv(`INPUT_${property}`, inputs[property]?.toString() || '') - } - } - function testOnAgent(agent: IBuildAgent): void { - function resetEnv(): void { - process.env.PATH = process.env[envName] // workaround for windows - setEnv(toolPathVariable, '') - setEnv(agent.sourceDirVariable, '') - setEnv(agent.tempDirVariable, '') - setEnv(agent.cacheDirVariable, '') - - setInputs({}) - } let runner!: Runner beforeEach(() => { runner = new Runner(agent) - resetEnv() + resetEnv(agent, toolPathVariable) setEnv(agent.sourceDirVariable, path.resolve(baseDir)) setEnv(agent.tempDirVariable, path.resolve(baseDir, 'temp')) setEnv(agent.cacheDirVariable, path.resolve(baseDir, 'tools')) }) afterEach(() => { - resetEnv() + resetEnv(agent, toolPathVariable) }) it.sequential('should run setup GitReleaseManager', async () => { diff --git a/src/__tests__/tools/gitreleasemanager/settings.spec.ts b/src/__tests__/tools/gitreleasemanager/settings.spec.ts index 126955020..e21d7b686 100644 --- a/src/__tests__/tools/gitreleasemanager/settings.spec.ts +++ b/src/__tests__/tools/gitreleasemanager/settings.spec.ts @@ -1,4 +1,4 @@ -import { describe, expect, it } from 'vitest' +import { describe, it } from 'vitest' import { IBuildAgent } from '@agents/common' import { type GitReleaseManagerCloseSettings, @@ -9,10 +9,11 @@ import { type GitReleaseManagerAddAssetSettings, GitReleaseManagerSettingsProvider } from '@tools/gitreleasemanager' +import { expectValidSettings } from '../common/utils' describe('GitReleaseManager settings', () => { it('should return GitReleaseManagerCreateSettings', () => { - const settings = { + const settings: GitReleaseManagerCreateSettings = { repository: 'repo', owner: 'owner', token: 'token', @@ -23,7 +24,7 @@ describe('GitReleaseManager settings', () => { isPreRelease: false, commit: 'commit', assets: ['asset'] - } as GitReleaseManagerCreateSettings + } const buildAgent = { getInput: (input: keyof GitReleaseManagerCreateSettings) => settings[input] as string, @@ -35,26 +36,17 @@ describe('GitReleaseManager settings', () => { const createSettings = settingsProvider.getCreateSettings() - expect(createSettings.repository).toBe(settings.repository) - expect(createSettings.owner).toBe(settings.owner) - expect(createSettings.token).toBe(settings.token) - expect(createSettings.targetDirectory).toBe(settings.targetDirectory) - expect(createSettings.milestone).toBe(settings.milestone) - expect(createSettings.name).toBe(settings.name) - expect(createSettings.inputFileName).toBe(settings.inputFileName) - expect(createSettings.isPreRelease).toBe(settings.isPreRelease) - expect(createSettings.commit).toBe(settings.commit) - expect(createSettings.assets).toBe(settings.assets) + expectValidSettings(settings, createSettings) }) it('should return GitReleaseManagerOpenSettings', () => { - const settings = { + const settings: GitReleaseManagerOpenSettings = { repository: 'repo', owner: 'owner', token: 'token', targetDirectory: 'path', milestone: 'milestone' - } as GitReleaseManagerOpenSettings + } const buildAgent = { getInput: (input: keyof GitReleaseManagerOpenSettings) => settings[input] @@ -64,21 +56,17 @@ describe('GitReleaseManager settings', () => { const openSettings = settingsProvider.getOpenSettings() - expect(openSettings.repository).toBe(settings.repository) - expect(openSettings.owner).toBe(settings.owner) - expect(openSettings.token).toBe(settings.token) - expect(openSettings.targetDirectory).toBe(settings.targetDirectory) - expect(openSettings.milestone).toBe(settings.milestone) + expectValidSettings(settings, openSettings) }) it('should return GitReleaseManagerCloseSettings', () => { - const settings = { + const settings: GitReleaseManagerCloseSettings = { repository: 'repo', owner: 'owner', token: 'token', targetDirectory: 'path', milestone: 'milestone' - } as GitReleaseManagerCloseSettings + } const buildAgent = { getInput: (input: keyof GitReleaseManagerCloseSettings) => settings[input] @@ -88,21 +76,17 @@ describe('GitReleaseManager settings', () => { const closeSettings = settingsProvider.getCloseSettings() - expect(closeSettings.repository).toBe(settings.repository) - expect(closeSettings.owner).toBe(settings.owner) - expect(closeSettings.token).toBe(settings.token) - expect(closeSettings.targetDirectory).toBe(settings.targetDirectory) - expect(closeSettings.milestone).toBe(settings.milestone) + expectValidSettings(settings, closeSettings) }) it('should return GitReleaseManagerDiscardSettings', () => { - const settings = { + const settings: GitReleaseManagerDiscardSettings = { repository: 'repo', owner: 'owner', token: 'token', targetDirectory: 'path', milestone: 'milestone' - } as GitReleaseManagerDiscardSettings + } const buildAgent = { getInput: (input: keyof GitReleaseManagerDiscardSettings) => settings[input] @@ -112,21 +96,17 @@ describe('GitReleaseManager settings', () => { const discardSettings = settingsProvider.getDiscardSettings() - expect(discardSettings.repository).toBe(settings.repository) - expect(discardSettings.owner).toBe(settings.owner) - expect(discardSettings.token).toBe(settings.token) - expect(discardSettings.targetDirectory).toBe(settings.targetDirectory) - expect(discardSettings.milestone).toBe(settings.milestone) + expectValidSettings(settings, discardSettings) }) it('should return GitReleaseManagerPublishSettings', () => { - const settings = { + const settings: GitReleaseManagerPublishSettings = { repository: 'repo', owner: 'owner', token: 'token', targetDirectory: 'path', milestone: 'milestone' - } as GitReleaseManagerPublishSettings + } const buildAgent = { getInput: (input: keyof GitReleaseManagerPublishSettings) => settings[input] @@ -136,22 +116,18 @@ describe('GitReleaseManager settings', () => { const publishSettings = settingsProvider.getPublishSettings() - expect(publishSettings.repository).toBe(settings.repository) - expect(publishSettings.owner).toBe(settings.owner) - expect(publishSettings.token).toBe(settings.token) - expect(publishSettings.targetDirectory).toBe(settings.targetDirectory) - expect(publishSettings.milestone).toBe(settings.milestone) + expectValidSettings(settings, publishSettings) }) it('should return GitReleaseManagerAddAssetSettings', () => { - const settings = { + const settings: GitReleaseManagerAddAssetSettings = { repository: 'repo', owner: 'owner', token: 'token', targetDirectory: 'path', milestone: 'milestone', assets: ['asset'] - } as GitReleaseManagerAddAssetSettings + } const buildAgent = { getInput: (input: keyof GitReleaseManagerAddAssetSettings) => settings[input] as string, @@ -162,11 +138,6 @@ describe('GitReleaseManager settings', () => { const addAssetSettings = settingsProvider.getAddAssetSettings() - expect(addAssetSettings.repository).toBe(settings.repository) - expect(addAssetSettings.owner).toBe(settings.owner) - expect(addAssetSettings.token).toBe(settings.token) - expect(addAssetSettings.targetDirectory).toBe(settings.targetDirectory) - expect(addAssetSettings.milestone).toBe(settings.milestone) - expect(addAssetSettings.assets).toBe(settings.assets) + expectValidSettings(settings, addAssetSettings) }) }) diff --git a/src/__tests__/tools/gitversion/runner.spec.ts b/src/__tests__/tools/gitversion/runner.spec.ts index eb218fe38..4b7fd433f 100644 --- a/src/__tests__/tools/gitversion/runner.spec.ts +++ b/src/__tests__/tools/gitversion/runner.spec.ts @@ -1,4 +1,3 @@ -import * as process from 'node:process' import * as path from 'node:path' import * as fs from 'node:fs' @@ -8,53 +7,28 @@ import { Runner } from '@tools/gitversion' import { BuildAgent as AzurePipelinesAgent } from '@agents/azure' import { BuildAgent as LocalBuildAgent } from '@agents/local' import { BuildAgent as GitHubActionsAgent } from '@agents/github' -import { keysFn, type SetupSettings } from '@tools/common' +import { getEnv, resetEnv, setEnv, setInputs } from '../common/utils' describe('GitVersion Runner', () => { const baseDir = path.resolve(__dirname, '../../../../.test') - const envName = process.platform === 'win32' ? 'Path' : 'PATH' const version = '6.0.0' const toolPath = path.resolve(baseDir, 'tools', 'GitVersion.Tool', version) const toolPathVariable = 'GITVERSION_PATH' const toolName = 'dotnet-gitversion' - function setEnv(key: string, value: string): void { - process.env[key.toUpperCase()] = value - } - - function getEnv(key: string): string { - return process.env[key] || '' - } - - function setInputs(inputs: Partial): void { - const keys = keysFn>(inputs) - for (const property of keys) { - setEnv(`INPUT_${property}`, inputs[property]?.toString() || '') - } - } - function testOnAgent(agent: IBuildAgent): void { - function resetEnv(): void { - process.env.PATH = process.env[envName] // workaround for windows - setEnv(toolPathVariable, '') - setEnv(agent.sourceDirVariable, '') - setEnv(agent.tempDirVariable, '') - setEnv(agent.cacheDirVariable, '') - - setInputs({}) - } let runner!: Runner beforeEach(() => { runner = new Runner(agent) - resetEnv() + resetEnv(agent, toolPathVariable) setEnv(agent.sourceDirVariable, path.resolve(baseDir)) setEnv(agent.tempDirVariable, path.resolve(baseDir, 'temp')) setEnv(agent.cacheDirVariable, path.resolve(baseDir, 'tools')) }) afterEach(() => { - resetEnv() + resetEnv(agent, toolPathVariable) }) it.sequential('should run setup GitVersion', async () => { diff --git a/src/__tests__/tools/gitversion/settings.spec.ts b/src/__tests__/tools/gitversion/settings.spec.ts index 52d122e25..7f2fcdbda 100644 --- a/src/__tests__/tools/gitversion/settings.spec.ts +++ b/src/__tests__/tools/gitversion/settings.spec.ts @@ -1,10 +1,11 @@ -import { describe, expect, it } from 'vitest' +import { describe, it } from 'vitest' import { IBuildAgent } from '@agents/common' import { type GitVersionExecuteSettings, GitVersionSettingsProvider } from '@tools/gitversion' +import { expectValidSettings } from '../common/utils' describe('GitVersion settings', () => { it('should return GitVersionExecuteSettings', () => { - const settings = { + const settings: GitVersionExecuteSettings = { targetPath: 'path', disableCache: true, disableNormalization: true, @@ -15,7 +16,7 @@ describe('GitVersion settings', () => { updateAssemblyInfo: true, updateAssemblyInfoFilename: 'path', additionalArguments: 'args' - } as GitVersionExecuteSettings + } const buildAgent = { getInput: (input: keyof GitVersionExecuteSettings) => settings[input] as string, @@ -25,17 +26,8 @@ describe('GitVersion settings', () => { const settingsProvider = new GitVersionSettingsProvider(buildAgent) - const gitVersionSettings = settingsProvider.getGitVersionExecuteSettings() + const gitVersionExecuteSettings = settingsProvider.getGitVersionExecuteSettings() - expect(gitVersionSettings.targetPath).toBe(settings.targetPath) - expect(gitVersionSettings.disableCache).toBe(settings.disableCache) - expect(gitVersionSettings.disableNormalization).toBe(settings.disableNormalization) - expect(gitVersionSettings.disableShallowCloneCheck).toBe(settings.disableShallowCloneCheck) - expect(gitVersionSettings.useConfigFile).toBe(settings.useConfigFile) - expect(gitVersionSettings.configFilePath).toBe(settings.configFilePath) - expect(gitVersionSettings.overrideConfig).toBe(settings.overrideConfig) - expect(gitVersionSettings.updateAssemblyInfo).toBe(settings.updateAssemblyInfo) - expect(gitVersionSettings.updateAssemblyInfoFilename).toBe(settings.updateAssemblyInfoFilename) - expect(gitVersionSettings.additionalArguments).toBe(settings.additionalArguments) + expectValidSettings(settings, gitVersionExecuteSettings) }) }) diff --git a/src/tools/common/index.ts b/src/tools/common/index.ts index 224a80d2d..26c10a8ce 100644 --- a/src/tools/common/index.ts +++ b/src/tools/common/index.ts @@ -2,4 +2,4 @@ export * from './models' export * from './dotnet-tool' export * from './settings' -export const keysFn = Object.keys as (obj: T) => (keyof T)[] +export const keysOf = Object.keys as (obj: T) => (keyof T)[] diff --git a/src/tools/gitversion/tool.ts b/src/tools/gitversion/tool.ts index 6298e8c99..8a4094549 100644 --- a/src/tools/gitversion/tool.ts +++ b/src/tools/gitversion/tool.ts @@ -1,5 +1,5 @@ import { type ExecResult } from '@agents/common' -import { DotnetTool, keysFn } from '@tools/common' +import { DotnetTool, keysOf } from '@tools/common' import { type GitVersionExecuteSettings, type GitVersionOutput } from './models' import { GitVersionSettingsProvider, type IGitVersionSettingsProvider } from './settings' @@ -37,8 +37,7 @@ export class GitVersionTool extends DotnetTool { } writeGitVersionToAgent(output: GitVersionOutput): void { - const keys = keysFn(output) - for (const property of keys) { + for (const property of keysOf(output)) { const name = this.toCamelCase(property) try { let value = output[property]?.toString() From 05b200da375c1659bf3a913d6e31dd262e393180 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Thu, 25 Jul 2024 08:12:16 +0200 Subject: [PATCH 5/6] improve runner testability --- .../tools/gitreleasemanager/runner.spec.ts | 9 ++- src/__tests__/tools/gitversion/runner.spec.ts | 16 ++-- src/agents/common/models.ts | 6 +- src/tools/common/models.ts | 4 +- src/tools/gitreleasemanager/runner.ts | 81 ++++++++++++------- src/tools/gitversion/runner.ts | 33 +++++--- 6 files changed, 97 insertions(+), 52 deletions(-) diff --git a/src/__tests__/tools/gitreleasemanager/runner.spec.ts b/src/__tests__/tools/gitreleasemanager/runner.spec.ts index 72c886f74..2fc8506a8 100644 --- a/src/__tests__/tools/gitreleasemanager/runner.spec.ts +++ b/src/__tests__/tools/gitreleasemanager/runner.spec.ts @@ -17,7 +17,6 @@ describe('GitReleaseManager Runner', () => { const toolName = 'dotnet-gitreleasemanager' function testOnAgent(agent: IBuildAgent): void { - let runner!: Runner beforeEach(() => { runner = new Runner(agent) @@ -39,9 +38,13 @@ describe('GitReleaseManager Runner', () => { preferLatestVersion: false }) - const exitCode = await runner.run('setup') + const result = await runner.run('setup') + + expect(result.code).toBe(0) + expect(result.error).toBeUndefined() + expect(result.stdout).toBeUndefined() + expect(result.stderr).toBeUndefined() - expect(exitCode).toBe(0) expect(fs.existsSync(path.resolve(baseDir))).toBe(true) expect(fs.existsSync(path.resolve(baseDir, 'tools'))).toBe(true) expect(fs.existsSync(toolPath)).toBe(true) diff --git a/src/__tests__/tools/gitversion/runner.spec.ts b/src/__tests__/tools/gitversion/runner.spec.ts index 4b7fd433f..8beb1e83a 100644 --- a/src/__tests__/tools/gitversion/runner.spec.ts +++ b/src/__tests__/tools/gitversion/runner.spec.ts @@ -17,7 +17,6 @@ describe('GitVersion Runner', () => { const toolName = 'dotnet-gitversion' function testOnAgent(agent: IBuildAgent): void { - let runner!: Runner beforeEach(() => { runner = new Runner(agent) @@ -39,9 +38,13 @@ describe('GitVersion Runner', () => { preferLatestVersion: false }) - const exitCode = await runner.run('setup') + const result = await runner.run('setup') + + expect(result.code).toBe(0) + expect(result.error).toBeUndefined() + expect(result.stdout).toBeUndefined() + expect(result.stderr).toBeUndefined() - expect(exitCode).toBe(0) expect(fs.existsSync(path.resolve(baseDir))).toBe(true) expect(fs.existsSync(path.resolve(baseDir, 'tools'))).toBe(true) expect(fs.existsSync(toolPath)).toBe(true) @@ -55,9 +58,9 @@ describe('GitVersion Runner', () => { it.sequential('should execute GitVersion', async () => { setEnv(toolPathVariable, toolPath) - const exitCode = await runner.run('execute') + const result = await runner.run('execute') - expect(exitCode).toBe(0) + expect(result.code).toBe(0) expect(getEnv('GitVersion_Major')).toBeDefined() expect(getEnv('GitVersion_Minor')).toBeDefined() @@ -66,6 +69,9 @@ describe('GitVersion Runner', () => { expect(getEnv('major')).toBeDefined() expect(getEnv('minor')).toBeDefined() expect(getEnv('patch')).toBeDefined() + + expect(result.stdout).toContain('Executing GenerateSetVersionMessage') + expect(result.stdout).toContain('Executing GenerateBuildLogOutput') }) } diff --git a/src/agents/common/models.ts b/src/agents/common/models.ts index c7292c909..0c0e6f308 100644 --- a/src/agents/common/models.ts +++ b/src/agents/common/models.ts @@ -1,6 +1,6 @@ export type ExecResult = { - stdout: string - stderr: string code: number - error?: Error | null + stdout?: string + stderr?: string + error?: Error | null | unknown } diff --git a/src/tools/common/models.ts b/src/tools/common/models.ts index 71a8fa82f..8e73e3811 100644 --- a/src/tools/common/models.ts +++ b/src/tools/common/models.ts @@ -1,3 +1,5 @@ +import { type ExecResult } from '@agents/common' + export enum SetupFields { includePrerelease = 'includePrerelease', versionSpec = 'versionSpec', @@ -13,7 +15,7 @@ export type SetupSettings = { } export type IRunner = { - run(command: string): Promise + run(command: string): Promise } export type NugetVersions = { data: { versions: { version: string }[] }[] } diff --git a/src/tools/gitreleasemanager/runner.ts b/src/tools/gitreleasemanager/runner.ts index ec2b63276..a3af6d375 100644 --- a/src/tools/gitreleasemanager/runner.ts +++ b/src/tools/gitreleasemanager/runner.ts @@ -1,4 +1,4 @@ -import { type IBuildAgent } from '@agents/common' +import { type ExecResult, type IBuildAgent } from '@agents/common' import { type IRunner } from '@tools/common' import { type Commands } from './models' import { GitReleaseManagerTool } from './tool' @@ -10,7 +10,7 @@ export class Runner implements IRunner { this.gitReleaseManagerTool = new GitReleaseManagerTool(this.buildAgent) } - async run(command: Commands): Promise { + async run(command: Commands): Promise { switch (command) { case 'setup': return await this.setup() @@ -29,7 +29,7 @@ export class Runner implements IRunner { } } - private async setup(): Promise { + private async setup(): Promise { try { this.disableTelemetry() @@ -41,120 +41,143 @@ export class Runner implements IRunner { this.buildAgent.setVariable(pathVariable, toolPath) this.buildAgent.setSucceeded('GitReleaseManager installed successfully', true) - return 0 + return { + code: 0 + } } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } - private async create(): Promise { + private async create(): Promise { try { this.disableTelemetry() this.buildAgent.debug('Creating release') - await this.gitReleaseManagerTool.create() + const result = await this.gitReleaseManagerTool.create() this.buildAgent.setSucceeded('GitReleaseManager created release successfully', true) - return 0 + return result } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } - private async discard(): Promise { + private async discard(): Promise { try { this.disableTelemetry() this.buildAgent.debug('Discarding release') - await this.gitReleaseManagerTool.discard() + const result = await this.gitReleaseManagerTool.discard() this.buildAgent.setSucceeded('GitReleaseManager discarded release successfully', true) - return 0 + return result } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } - private async close(): Promise { + private async close(): Promise { try { this.disableTelemetry() this.buildAgent.debug('Closing release') - await this.gitReleaseManagerTool.close() + const result = await this.gitReleaseManagerTool.close() this.buildAgent.setSucceeded('GitReleaseManager closed release successfully', true) - return 0 + return result } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } - private async open(): Promise { + private async open(): Promise { try { this.disableTelemetry() this.buildAgent.debug('Opening release') - await this.gitReleaseManagerTool.open() + const result = await this.gitReleaseManagerTool.open() this.buildAgent.setSucceeded('GitReleaseManager opened release successfully', true) - return 0 + return result } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } - private async publish(): Promise { + private async publish(): Promise { try { this.disableTelemetry() this.buildAgent.debug('Publishing release') - await this.gitReleaseManagerTool.publish() + const result = await this.gitReleaseManagerTool.publish() this.buildAgent.setSucceeded('GitReleaseManager published release successfully', true) - return 0 + return result } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } - private async addAsset(): Promise { + private async addAsset(): Promise { try { this.disableTelemetry() this.buildAgent.debug('Adding asset to release') - await this.gitReleaseManagerTool.addAsset() + const result = await this.gitReleaseManagerTool.addAsset() this.buildAgent.setSucceeded('GitReleaseManager added assets to release successfully', true) - return 0 + return result } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } diff --git a/src/tools/gitversion/runner.ts b/src/tools/gitversion/runner.ts index 65f558e39..689fa0ab0 100644 --- a/src/tools/gitversion/runner.ts +++ b/src/tools/gitversion/runner.ts @@ -1,4 +1,4 @@ -import { type IBuildAgent } from '@agents/common' +import { type ExecResult, type IBuildAgent } from '@agents/common' import { type IRunner } from '@tools/common' import { type Commands, type GitVersionOutput } from './models' import { GitVersionTool } from './tool' @@ -10,7 +10,7 @@ export class Runner implements IRunner { this.gitVersionTool = new GitVersionTool(this.buildAgent) } - async run(command: Commands): Promise { + async run(command: Commands): Promise { switch (command) { case 'setup': return await this.setup() @@ -19,7 +19,7 @@ export class Runner implements IRunner { } } - private async setup(): Promise { + private async setup(): Promise { try { this.disableTelemetry() @@ -31,16 +31,21 @@ export class Runner implements IRunner { this.buildAgent.setVariable(pathVariable, toolPath) this.buildAgent.setSucceeded('GitVersion installed successfully', true) - return 0 + return { + code: 0 + } } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } - private async execute(): Promise { + private async execute(): Promise { try { this.disableTelemetry() @@ -50,7 +55,7 @@ export class Runner implements IRunner { if (result.code === 0) { this.buildAgent.info('GitVersion executed successfully') - const { stdout } = result + const stdout: string = result.stdout as string this.buildAgent.info('GitVersion output:') this.buildAgent.info('-------------------') @@ -61,14 +66,17 @@ export class Runner implements IRunner { if (stdout.lastIndexOf('{') === -1 || stdout.lastIndexOf('}') === -1) { this.buildAgent.debug('GitVersion output is not valid JSON') this.buildAgent.setFailed('GitVersion output is not valid JSON', true) - return -1 + return { + code: -1, + error: new Error('GitVersion output is not valid JSON') + } } else { const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1) const gitVersionOutput = JSON.parse(jsonOutput) as GitVersionOutput this.gitVersionTool.writeGitVersionToAgent(gitVersionOutput) this.buildAgent.setSucceeded('GitVersion executed successfully', true) - return 0 + return result } } else { this.buildAgent.debug('GitVersion failed') @@ -76,13 +84,16 @@ export class Runner implements IRunner { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return result } } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true) } - return -1 + return { + code: -1, + error + } } } From 14c9265ebc4f39f6199d27d2706dde45700afb77 Mon Sep 17 00:00:00 2001 From: Artur Stolear Date: Thu, 25 Jul 2024 07:17:26 +0000 Subject: [PATCH 6/6] dist update --- dist/tools/libs/gitreleasemanager.mjs | 63 ++++++++++++++++------- dist/tools/libs/gitreleasemanager.mjs.map | 2 +- dist/tools/libs/gitversion.mjs | 42 +++++++++------ dist/tools/libs/gitversion.mjs.map | 2 +- dist/tools/libs/tools.mjs | 4 +- dist/tools/libs/tools.mjs.map | 2 +- 6 files changed, 74 insertions(+), 41 deletions(-) diff --git a/dist/tools/libs/gitreleasemanager.mjs b/dist/tools/libs/gitreleasemanager.mjs index e8a169358..bc6a2e57a 100644 --- a/dist/tools/libs/gitreleasemanager.mjs +++ b/dist/tools/libs/gitreleasemanager.mjs @@ -282,96 +282,119 @@ class Runner { this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`); this.buildAgent.setVariable(pathVariable, toolPath); this.buildAgent.setSucceeded("GitReleaseManager installed successfully", true); - return 0; + return { + code: 0 + }; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } async create() { try { this.disableTelemetry(); this.buildAgent.debug("Creating release"); - await this.gitReleaseManagerTool.create(); + const result = await this.gitReleaseManagerTool.create(); this.buildAgent.setSucceeded("GitReleaseManager created release successfully", true); - return 0; + return result; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } async discard() { try { this.disableTelemetry(); this.buildAgent.debug("Discarding release"); - await this.gitReleaseManagerTool.discard(); + const result = await this.gitReleaseManagerTool.discard(); this.buildAgent.setSucceeded("GitReleaseManager discarded release successfully", true); - return 0; + return result; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } async close() { try { this.disableTelemetry(); this.buildAgent.debug("Closing release"); - await this.gitReleaseManagerTool.close(); + const result = await this.gitReleaseManagerTool.close(); this.buildAgent.setSucceeded("GitReleaseManager closed release successfully", true); - return 0; + return result; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } async open() { try { this.disableTelemetry(); this.buildAgent.debug("Opening release"); - await this.gitReleaseManagerTool.open(); + const result = await this.gitReleaseManagerTool.open(); this.buildAgent.setSucceeded("GitReleaseManager opened release successfully", true); - return 0; + return result; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } async publish() { try { this.disableTelemetry(); this.buildAgent.debug("Publishing release"); - await this.gitReleaseManagerTool.publish(); + const result = await this.gitReleaseManagerTool.publish(); this.buildAgent.setSucceeded("GitReleaseManager published release successfully", true); - return 0; + return result; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } async addAsset() { try { this.disableTelemetry(); this.buildAgent.debug("Adding asset to release"); - await this.gitReleaseManagerTool.addAsset(); + const result = await this.gitReleaseManagerTool.addAsset(); this.buildAgent.setSucceeded("GitReleaseManager added assets to release successfully", true); - return 0; + return result; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } disableTelemetry() { diff --git a/dist/tools/libs/gitreleasemanager.mjs.map b/dist/tools/libs/gitreleasemanager.mjs.map index 64e80404b..f9f6d9c0c 100644 --- a/dist/tools/libs/gitreleasemanager.mjs.map +++ b/dist/tools/libs/gitreleasemanager.mjs.map @@ -1 +1 @@ -{"version":3,"file":"gitreleasemanager.mjs","sources":["../../../src/tools/gitreleasemanager/models.ts","../../../src/tools/gitreleasemanager/settings.ts","../../../src/tools/gitreleasemanager/tool.ts","../../../src/tools/gitreleasemanager/runner.ts"],"sourcesContent":["export type Commands = 'setup' | 'addasset' | 'close' | 'create' | 'discard' | 'open' | 'publish'\n\nexport enum CommonFields {\n repository = 'repository',\n owner = 'owner',\n token = 'token',\n targetDirectory = 'targetDirectory'\n}\n\nexport enum CreateFields {\n milestone = 'milestone',\n name = 'name',\n inputFileName = 'inputFileName',\n isPreRelease = 'isPreRelease',\n commit = 'commit',\n assets = 'assets'\n}\n\nexport enum DiscardFields {\n milestone = 'milestone'\n}\n\nexport enum CloseFields {\n milestone = 'milestone'\n}\n\nexport enum OpenFields {\n milestone = 'milestone'\n}\n\nexport enum PublishFields {\n milestone = 'milestone'\n}\n\nexport enum AddAssetFields {\n milestone = 'milestone',\n assets = 'assets'\n}\n\nexport type GitReleaseManagerSettings = {\n [CommonFields.repository]: string\n [CommonFields.owner]: string\n [CommonFields.token]: string\n [CommonFields.targetDirectory]: string\n}\n\nexport interface GitReleaseManagerCreateSettings extends GitReleaseManagerSettings {\n [CreateFields.milestone]: string\n [CreateFields.name]: string\n [CreateFields.inputFileName]: string\n [CreateFields.isPreRelease]: boolean\n [CreateFields.commit]: string\n [CreateFields.assets]?: string[]\n}\n\nexport interface GitReleaseManagerDiscardSettings extends GitReleaseManagerSettings {\n [DiscardFields.milestone]: string\n}\n\nexport interface GitReleaseManagerCloseSettings extends GitReleaseManagerSettings {\n [CloseFields.milestone]: string\n}\n\nexport interface GitReleaseManagerOpenSettings extends GitReleaseManagerSettings {\n [OpenFields.milestone]: string\n}\n\nexport interface GitReleaseManagerPublishSettings extends GitReleaseManagerSettings {\n [PublishFields.milestone]: string\n}\n\nexport interface GitReleaseManagerAddAssetSettings extends GitReleaseManagerSettings {\n [AddAssetFields.milestone]: string\n [AddAssetFields.assets]: string[]\n}\n","import { type ISettingsProvider, SettingsProvider } from '@tools/common'\nimport {\n AddAssetFields,\n CloseFields,\n CommonFields,\n CreateFields,\n DiscardFields,\n OpenFields,\n PublishFields,\n type GitReleaseManagerAddAssetSettings,\n type GitReleaseManagerCloseSettings,\n type GitReleaseManagerCreateSettings,\n type GitReleaseManagerDiscardSettings,\n type GitReleaseManagerOpenSettings,\n type GitReleaseManagerPublishSettings,\n type GitReleaseManagerSettings\n} from './models'\nexport interface IGitReleaseManagerSettingsProvider extends ISettingsProvider {\n getCreateSettings(): GitReleaseManagerCreateSettings\n\n getDiscardSettings(): GitReleaseManagerDiscardSettings\n\n getCloseSettings(): GitReleaseManagerCloseSettings\n\n getOpenSettings(): GitReleaseManagerOpenSettings\n\n getPublishSettings(): GitReleaseManagerPublishSettings\n\n getAddAssetSettings(): GitReleaseManagerAddAssetSettings\n\n getCommonSettings(): GitReleaseManagerSettings\n}\n\nexport class GitReleaseManagerSettingsProvider extends SettingsProvider implements IGitReleaseManagerSettingsProvider {\n getCreateSettings(): GitReleaseManagerCreateSettings {\n const milestone = this.buildAgent.getInput(CreateFields.milestone)\n const name = this.buildAgent.getInput(CreateFields.name)\n const inputFileName = this.buildAgent.getInput(CreateFields.inputFileName)\n const isPreRelease = this.buildAgent.getBooleanInput(CreateFields.isPreRelease)\n const commit = this.buildAgent.getInput(CreateFields.commit)\n const assets = this.buildAgent.getListInput(CreateFields.assets)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone,\n name,\n inputFileName,\n isPreRelease,\n commit,\n assets\n }\n }\n\n getDiscardSettings(): GitReleaseManagerDiscardSettings {\n const milestone = this.buildAgent.getInput(DiscardFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n\n getCloseSettings(): GitReleaseManagerCloseSettings {\n const milestone = this.buildAgent.getInput(CloseFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n\n getOpenSettings(): GitReleaseManagerOpenSettings {\n const milestone = this.buildAgent.getInput(OpenFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n getPublishSettings(): GitReleaseManagerPublishSettings {\n const milestone = this.buildAgent.getInput(PublishFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n\n getAddAssetSettings(): GitReleaseManagerAddAssetSettings {\n const milestone = this.buildAgent.getInput(AddAssetFields.milestone)\n const assets = this.buildAgent.getListInput(AddAssetFields.assets)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone,\n assets\n }\n }\n\n getCommonSettings(): GitReleaseManagerSettings {\n const owner = this.buildAgent.getInput(CommonFields.owner, true)\n const repository = this.buildAgent.getInput(CommonFields.repository, true)\n const token = this.buildAgent.getInput(CommonFields.token, true)\n const targetDirectory = this.buildAgent.getInput(CommonFields.targetDirectory)\n\n return {\n owner,\n repository,\n token,\n targetDirectory\n }\n }\n}\n","import * as path from 'path'\n\nimport { DotnetTool } from '@tools/common'\nimport { type ExecResult } from '@agents/common'\n\nimport {\n type GitReleaseManagerAddAssetSettings,\n type GitReleaseManagerCloseSettings,\n type GitReleaseManagerCreateSettings,\n type GitReleaseManagerDiscardSettings,\n type GitReleaseManagerOpenSettings,\n type GitReleaseManagerPublishSettings,\n type GitReleaseManagerSettings\n} from './models'\nimport { GitReleaseManagerSettingsProvider, IGitReleaseManagerSettingsProvider } from './settings'\n\nexport class GitReleaseManagerTool extends DotnetTool {\n get packageName(): string {\n return 'GitReleaseManager.Tool'\n }\n\n get toolName(): string {\n return 'dotnet-gitreleasemanager'\n }\n\n get toolPathVariable(): string {\n return 'GITRELEASEMANAGER_PATH'\n }\n\n get versionRange(): string | null {\n return '>=0.10.0 <0.20.0'\n }\n\n get settingsProvider(): IGitReleaseManagerSettingsProvider {\n return new GitReleaseManagerSettingsProvider(this.buildAgent)\n }\n\n async create(): Promise {\n const settings = this.settingsProvider.getCreateSettings()\n const args = await this.getCreateArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async discard(): Promise {\n const settings = this.settingsProvider.getDiscardSettings()\n const args = await this.getDiscardArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async close(): Promise {\n const settings = this.settingsProvider.getCloseSettings()\n const args = await this.getCloseArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async open(): Promise {\n const settings = this.settingsProvider.getOpenSettings()\n const args = await this.getOpenArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async publish(): Promise {\n const settings = this.settingsProvider.getPublishSettings()\n const args = await this.getPublishArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async addAsset(): Promise {\n const settings = this.settingsProvider.getAddAssetSettings()\n const args = await this.getAddAssetArguments(settings)\n\n return await this.executeTool(args)\n }\n\n protected async getCommonArguments(settings: GitReleaseManagerSettings): Promise {\n const args: string[] = []\n\n args.push('--owner', settings.owner)\n args.push('--repository', settings.repository)\n args.push('--token', settings.token)\n\n settings.targetDirectory = await this.getRepoDir(settings)\n\n args.push('--targetDirectory', settings.targetDirectory)\n\n return args\n }\n\n protected async getCreateArguments(settings: GitReleaseManagerCreateSettings): Promise {\n const args: string[] = ['create', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n if (settings.name) {\n args.push('--name', settings.name)\n }\n if (settings.commit) {\n args.push('--targetcommitish', settings.commit)\n }\n\n if (settings.inputFileName) {\n if (await this.buildAgent.fileExists(settings.inputFileName)) {\n args.push('--inputFilePath', settings.inputFileName)\n } else {\n throw new Error(`GitReleaseManager inputFilePath not found at ${settings.inputFileName}`)\n }\n }\n if (settings.isPreRelease) {\n args.push('--pre')\n }\n if (settings.assets && settings.assets.length > 0) {\n settings.assets = settings.assets.map(asset => {\n return path.join(settings.targetDirectory, asset)\n })\n\n args.push('--assets', settings.assets.join(','))\n }\n\n return args\n }\n\n protected async getDiscardArguments(settings: GitReleaseManagerDiscardSettings): Promise {\n const args: string[] = ['discard', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n\n return args\n }\n\n protected async getCloseArguments(settings: GitReleaseManagerCloseSettings): Promise {\n const args: string[] = ['close', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n\n return args\n }\n\n protected async getOpenArguments(settings: GitReleaseManagerOpenSettings): Promise {\n const args: string[] = ['open', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n\n return args\n }\n\n protected async getPublishArguments(settings: GitReleaseManagerPublishSettings): Promise {\n const args: string[] = ['publish', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--tagName', settings.milestone)\n }\n\n return args\n }\n\n protected async getAddAssetArguments(settings: GitReleaseManagerAddAssetSettings): Promise {\n const args: string[] = ['addasset', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--tagName', settings.milestone)\n }\n if (settings.assets && settings.assets.length > 0) {\n settings.assets = settings.assets.map(asset => {\n return path.join(settings.targetDirectory, asset)\n })\n\n args.push('--assets', settings.assets.join(','))\n }\n\n return args\n }\n\n protected async getRepoDir(settings: GitReleaseManagerSettings): Promise {\n return await this.getRepoPath(settings.targetDirectory)\n }\n}\n","import { type IBuildAgent } from '@agents/common'\nimport { type IRunner } from '@tools/common'\nimport { type Commands } from './models'\nimport { GitReleaseManagerTool } from './tool'\n\nexport class Runner implements IRunner {\n private readonly gitReleaseManagerTool: GitReleaseManagerTool\n\n constructor(private readonly buildAgent: IBuildAgent) {\n this.gitReleaseManagerTool = new GitReleaseManagerTool(this.buildAgent)\n }\n\n async run(command: Commands): Promise {\n switch (command) {\n case 'setup':\n return await this.setup()\n case 'addasset':\n return await this.addAsset()\n case 'open':\n return await this.open()\n case 'close':\n return await this.close()\n case 'create':\n return await this.create()\n case 'discard':\n return await this.discard()\n case 'publish':\n return await this.publish()\n }\n }\n\n private async setup(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Installing GitReleaseManager')\n const toolPath = await this.gitReleaseManagerTool.install()\n\n const pathVariable = this.gitReleaseManagerTool.toolPathVariable\n this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`)\n this.buildAgent.setVariable(pathVariable, toolPath)\n\n this.buildAgent.setSucceeded('GitReleaseManager installed successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private async create(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Creating release')\n\n await this.gitReleaseManagerTool.create()\n\n this.buildAgent.setSucceeded('GitReleaseManager created release successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private async discard(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Discarding release')\n\n await this.gitReleaseManagerTool.discard()\n\n this.buildAgent.setSucceeded('GitReleaseManager discarded release successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private async close(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Closing release')\n\n await this.gitReleaseManagerTool.close()\n\n this.buildAgent.setSucceeded('GitReleaseManager closed release successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private async open(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Opening release')\n\n await this.gitReleaseManagerTool.open()\n\n this.buildAgent.setSucceeded('GitReleaseManager opened release successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private async publish(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Publishing release')\n\n await this.gitReleaseManagerTool.publish()\n\n this.buildAgent.setSucceeded('GitReleaseManager published release successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private async addAsset(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Adding asset to release')\n\n await this.gitReleaseManagerTool.addAsset()\n\n this.buildAgent.setSucceeded('GitReleaseManager added assets to release successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private disableTelemetry(): void {\n this.buildAgent.info(`Running on: '${this.buildAgent.agentName}'`)\n this.buildAgent.debug('Disabling telemetry')\n this.gitReleaseManagerTool.disableTelemetry()\n }\n}\n"],"names":["CommonFields","CreateFields","DiscardFields","CloseFields","OpenFields","PublishFields","AddAssetFields"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitreleasemanager.mjs","sources":["../../../src/tools/gitreleasemanager/models.ts","../../../src/tools/gitreleasemanager/settings.ts","../../../src/tools/gitreleasemanager/tool.ts","../../../src/tools/gitreleasemanager/runner.ts"],"sourcesContent":["export type Commands = 'setup' | 'addasset' | 'close' | 'create' | 'discard' | 'open' | 'publish'\n\nexport enum CommonFields {\n repository = 'repository',\n owner = 'owner',\n token = 'token',\n targetDirectory = 'targetDirectory'\n}\n\nexport enum CreateFields {\n milestone = 'milestone',\n name = 'name',\n inputFileName = 'inputFileName',\n isPreRelease = 'isPreRelease',\n commit = 'commit',\n assets = 'assets'\n}\n\nexport enum DiscardFields {\n milestone = 'milestone'\n}\n\nexport enum CloseFields {\n milestone = 'milestone'\n}\n\nexport enum OpenFields {\n milestone = 'milestone'\n}\n\nexport enum PublishFields {\n milestone = 'milestone'\n}\n\nexport enum AddAssetFields {\n milestone = 'milestone',\n assets = 'assets'\n}\n\nexport type GitReleaseManagerSettings = {\n [CommonFields.repository]: string\n [CommonFields.owner]: string\n [CommonFields.token]: string\n [CommonFields.targetDirectory]: string\n}\n\nexport interface GitReleaseManagerCreateSettings extends GitReleaseManagerSettings {\n [CreateFields.milestone]: string\n [CreateFields.name]: string\n [CreateFields.inputFileName]: string\n [CreateFields.isPreRelease]: boolean\n [CreateFields.commit]: string\n [CreateFields.assets]?: string[]\n}\n\nexport interface GitReleaseManagerDiscardSettings extends GitReleaseManagerSettings {\n [DiscardFields.milestone]: string\n}\n\nexport interface GitReleaseManagerCloseSettings extends GitReleaseManagerSettings {\n [CloseFields.milestone]: string\n}\n\nexport interface GitReleaseManagerOpenSettings extends GitReleaseManagerSettings {\n [OpenFields.milestone]: string\n}\n\nexport interface GitReleaseManagerPublishSettings extends GitReleaseManagerSettings {\n [PublishFields.milestone]: string\n}\n\nexport interface GitReleaseManagerAddAssetSettings extends GitReleaseManagerSettings {\n [AddAssetFields.milestone]: string\n [AddAssetFields.assets]: string[]\n}\n","import { type ISettingsProvider, SettingsProvider } from '@tools/common'\nimport {\n AddAssetFields,\n CloseFields,\n CommonFields,\n CreateFields,\n DiscardFields,\n OpenFields,\n PublishFields,\n type GitReleaseManagerAddAssetSettings,\n type GitReleaseManagerCloseSettings,\n type GitReleaseManagerCreateSettings,\n type GitReleaseManagerDiscardSettings,\n type GitReleaseManagerOpenSettings,\n type GitReleaseManagerPublishSettings,\n type GitReleaseManagerSettings\n} from './models'\nexport interface IGitReleaseManagerSettingsProvider extends ISettingsProvider {\n getCreateSettings(): GitReleaseManagerCreateSettings\n\n getDiscardSettings(): GitReleaseManagerDiscardSettings\n\n getCloseSettings(): GitReleaseManagerCloseSettings\n\n getOpenSettings(): GitReleaseManagerOpenSettings\n\n getPublishSettings(): GitReleaseManagerPublishSettings\n\n getAddAssetSettings(): GitReleaseManagerAddAssetSettings\n\n getCommonSettings(): GitReleaseManagerSettings\n}\n\nexport class GitReleaseManagerSettingsProvider extends SettingsProvider implements IGitReleaseManagerSettingsProvider {\n getCreateSettings(): GitReleaseManagerCreateSettings {\n const milestone = this.buildAgent.getInput(CreateFields.milestone)\n const name = this.buildAgent.getInput(CreateFields.name)\n const inputFileName = this.buildAgent.getInput(CreateFields.inputFileName)\n const isPreRelease = this.buildAgent.getBooleanInput(CreateFields.isPreRelease)\n const commit = this.buildAgent.getInput(CreateFields.commit)\n const assets = this.buildAgent.getListInput(CreateFields.assets)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone,\n name,\n inputFileName,\n isPreRelease,\n commit,\n assets\n }\n }\n\n getDiscardSettings(): GitReleaseManagerDiscardSettings {\n const milestone = this.buildAgent.getInput(DiscardFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n\n getCloseSettings(): GitReleaseManagerCloseSettings {\n const milestone = this.buildAgent.getInput(CloseFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n\n getOpenSettings(): GitReleaseManagerOpenSettings {\n const milestone = this.buildAgent.getInput(OpenFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n getPublishSettings(): GitReleaseManagerPublishSettings {\n const milestone = this.buildAgent.getInput(PublishFields.milestone)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone\n }\n }\n\n getAddAssetSettings(): GitReleaseManagerAddAssetSettings {\n const milestone = this.buildAgent.getInput(AddAssetFields.milestone)\n const assets = this.buildAgent.getListInput(AddAssetFields.assets)\n\n const commonSettings = this.getCommonSettings()\n return {\n ...commonSettings,\n milestone,\n assets\n }\n }\n\n getCommonSettings(): GitReleaseManagerSettings {\n const owner = this.buildAgent.getInput(CommonFields.owner, true)\n const repository = this.buildAgent.getInput(CommonFields.repository, true)\n const token = this.buildAgent.getInput(CommonFields.token, true)\n const targetDirectory = this.buildAgent.getInput(CommonFields.targetDirectory)\n\n return {\n owner,\n repository,\n token,\n targetDirectory\n }\n }\n}\n","import * as path from 'path'\n\nimport { DotnetTool } from '@tools/common'\nimport { type ExecResult } from '@agents/common'\n\nimport {\n type GitReleaseManagerAddAssetSettings,\n type GitReleaseManagerCloseSettings,\n type GitReleaseManagerCreateSettings,\n type GitReleaseManagerDiscardSettings,\n type GitReleaseManagerOpenSettings,\n type GitReleaseManagerPublishSettings,\n type GitReleaseManagerSettings\n} from './models'\nimport { GitReleaseManagerSettingsProvider, IGitReleaseManagerSettingsProvider } from './settings'\n\nexport class GitReleaseManagerTool extends DotnetTool {\n get packageName(): string {\n return 'GitReleaseManager.Tool'\n }\n\n get toolName(): string {\n return 'dotnet-gitreleasemanager'\n }\n\n get toolPathVariable(): string {\n return 'GITRELEASEMANAGER_PATH'\n }\n\n get versionRange(): string | null {\n return '>=0.10.0 <0.20.0'\n }\n\n get settingsProvider(): IGitReleaseManagerSettingsProvider {\n return new GitReleaseManagerSettingsProvider(this.buildAgent)\n }\n\n async create(): Promise {\n const settings = this.settingsProvider.getCreateSettings()\n const args = await this.getCreateArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async discard(): Promise {\n const settings = this.settingsProvider.getDiscardSettings()\n const args = await this.getDiscardArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async close(): Promise {\n const settings = this.settingsProvider.getCloseSettings()\n const args = await this.getCloseArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async open(): Promise {\n const settings = this.settingsProvider.getOpenSettings()\n const args = await this.getOpenArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async publish(): Promise {\n const settings = this.settingsProvider.getPublishSettings()\n const args = await this.getPublishArguments(settings)\n\n return await this.executeTool(args)\n }\n\n async addAsset(): Promise {\n const settings = this.settingsProvider.getAddAssetSettings()\n const args = await this.getAddAssetArguments(settings)\n\n return await this.executeTool(args)\n }\n\n protected async getCommonArguments(settings: GitReleaseManagerSettings): Promise {\n const args: string[] = []\n\n args.push('--owner', settings.owner)\n args.push('--repository', settings.repository)\n args.push('--token', settings.token)\n\n settings.targetDirectory = await this.getRepoDir(settings)\n\n args.push('--targetDirectory', settings.targetDirectory)\n\n return args\n }\n\n protected async getCreateArguments(settings: GitReleaseManagerCreateSettings): Promise {\n const args: string[] = ['create', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n if (settings.name) {\n args.push('--name', settings.name)\n }\n if (settings.commit) {\n args.push('--targetcommitish', settings.commit)\n }\n\n if (settings.inputFileName) {\n if (await this.buildAgent.fileExists(settings.inputFileName)) {\n args.push('--inputFilePath', settings.inputFileName)\n } else {\n throw new Error(`GitReleaseManager inputFilePath not found at ${settings.inputFileName}`)\n }\n }\n if (settings.isPreRelease) {\n args.push('--pre')\n }\n if (settings.assets && settings.assets.length > 0) {\n settings.assets = settings.assets.map(asset => {\n return path.join(settings.targetDirectory, asset)\n })\n\n args.push('--assets', settings.assets.join(','))\n }\n\n return args\n }\n\n protected async getDiscardArguments(settings: GitReleaseManagerDiscardSettings): Promise {\n const args: string[] = ['discard', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n\n return args\n }\n\n protected async getCloseArguments(settings: GitReleaseManagerCloseSettings): Promise {\n const args: string[] = ['close', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n\n return args\n }\n\n protected async getOpenArguments(settings: GitReleaseManagerOpenSettings): Promise {\n const args: string[] = ['open', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--milestone', settings.milestone)\n }\n\n return args\n }\n\n protected async getPublishArguments(settings: GitReleaseManagerPublishSettings): Promise {\n const args: string[] = ['publish', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--tagName', settings.milestone)\n }\n\n return args\n }\n\n protected async getAddAssetArguments(settings: GitReleaseManagerAddAssetSettings): Promise {\n const args: string[] = ['addasset', ...(await this.getCommonArguments(settings))]\n\n if (settings.milestone) {\n args.push('--tagName', settings.milestone)\n }\n if (settings.assets && settings.assets.length > 0) {\n settings.assets = settings.assets.map(asset => {\n return path.join(settings.targetDirectory, asset)\n })\n\n args.push('--assets', settings.assets.join(','))\n }\n\n return args\n }\n\n protected async getRepoDir(settings: GitReleaseManagerSettings): Promise {\n return await this.getRepoPath(settings.targetDirectory)\n }\n}\n","import { type ExecResult, type IBuildAgent } from '@agents/common'\nimport { type IRunner } from '@tools/common'\nimport { type Commands } from './models'\nimport { GitReleaseManagerTool } from './tool'\n\nexport class Runner implements IRunner {\n private readonly gitReleaseManagerTool: GitReleaseManagerTool\n\n constructor(private readonly buildAgent: IBuildAgent) {\n this.gitReleaseManagerTool = new GitReleaseManagerTool(this.buildAgent)\n }\n\n async run(command: Commands): Promise {\n switch (command) {\n case 'setup':\n return await this.setup()\n case 'addasset':\n return await this.addAsset()\n case 'open':\n return await this.open()\n case 'close':\n return await this.close()\n case 'create':\n return await this.create()\n case 'discard':\n return await this.discard()\n case 'publish':\n return await this.publish()\n }\n }\n\n private async setup(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Installing GitReleaseManager')\n const toolPath = await this.gitReleaseManagerTool.install()\n\n const pathVariable = this.gitReleaseManagerTool.toolPathVariable\n this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`)\n this.buildAgent.setVariable(pathVariable, toolPath)\n\n this.buildAgent.setSucceeded('GitReleaseManager installed successfully', true)\n return {\n code: 0\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private async create(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Creating release')\n\n const result = await this.gitReleaseManagerTool.create()\n\n this.buildAgent.setSucceeded('GitReleaseManager created release successfully', true)\n return result\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private async discard(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Discarding release')\n\n const result = await this.gitReleaseManagerTool.discard()\n\n this.buildAgent.setSucceeded('GitReleaseManager discarded release successfully', true)\n return result\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private async close(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Closing release')\n\n const result = await this.gitReleaseManagerTool.close()\n\n this.buildAgent.setSucceeded('GitReleaseManager closed release successfully', true)\n return result\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private async open(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Opening release')\n\n const result = await this.gitReleaseManagerTool.open()\n\n this.buildAgent.setSucceeded('GitReleaseManager opened release successfully', true)\n return result\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private async publish(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Publishing release')\n\n const result = await this.gitReleaseManagerTool.publish()\n\n this.buildAgent.setSucceeded('GitReleaseManager published release successfully', true)\n return result\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private async addAsset(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Adding asset to release')\n\n const result = await this.gitReleaseManagerTool.addAsset()\n\n this.buildAgent.setSucceeded('GitReleaseManager added assets to release successfully', true)\n return result\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private disableTelemetry(): void {\n this.buildAgent.info(`Running on: '${this.buildAgent.agentName}'`)\n this.buildAgent.debug('Disabling telemetry')\n this.gitReleaseManagerTool.disableTelemetry()\n }\n}\n"],"names":["CommonFields","CreateFields","DiscardFields","CloseFields","OpenFields","PublishFields","AddAssetFields"],"mappings":"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"} \ No newline at end of file diff --git a/dist/tools/libs/gitversion.mjs b/dist/tools/libs/gitversion.mjs index 22b0044e2..ba09ad1a6 100644 --- a/dist/tools/libs/gitversion.mjs +++ b/dist/tools/libs/gitversion.mjs @@ -1,4 +1,4 @@ -import { S as SettingsProvider, D as DotnetTool, k as keysFn } from './tools.mjs'; +import { S as SettingsProvider, D as DotnetTool, k as keysOf } from './tools.mjs'; import 'node:crypto'; import 'node:fs/promises'; import 'node:os'; @@ -20,7 +20,7 @@ var ExecuteFields = /* @__PURE__ */ ((ExecuteFields2) => { })(ExecuteFields || {}); class GitVersionSettingsProvider extends SettingsProvider { - getGitVersionSettings() { + getGitVersionExecuteSettings() { const targetPath = this.buildAgent.getInput(ExecuteFields.targetPath); const disableCache = this.buildAgent.getBooleanInput(ExecuteFields.disableCache); const disableNormalization = this.buildAgent.getBooleanInput(ExecuteFields.disableNormalization); @@ -62,17 +62,16 @@ class GitVersionTool extends DotnetTool { get settingsProvider() { return new GitVersionSettingsProvider(this.buildAgent); } - async run() { - const settings = this.settingsProvider.getGitVersionSettings(); + async executeJson() { + const settings = this.settingsProvider.getGitVersionExecuteSettings(); const workDir = await this.getRepoDir(settings); await this.checkShallowClone(settings, workDir); - const args = await this.getArguments(workDir, settings); + const args = await this.getExecuteArguments(workDir, settings); await this.setDotnetRoot(); return await this.executeTool(args); } writeGitVersionToAgent(output) { - const keys = keysFn(output); - for (const property of keys) { + for (const property of keysOf(output)) { const name = this.toCamelCase(property); try { let value = output[property]?.toString(); @@ -91,7 +90,7 @@ class GitVersionTool extends DotnetTool { async getRepoDir(settings) { return await super.getRepoPath(settings.targetPath); } - async getArguments(workDir, options) { + async getExecuteArguments(workDir, options) { let args = [workDir, "/output", "json", "/output", "buildserver"]; const { useConfigFile, @@ -230,22 +229,27 @@ class Runner { this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`); this.buildAgent.setVariable(pathVariable, toolPath); this.buildAgent.setSucceeded("GitVersion installed successfully", true); - return 0; + return { + code: 0 + }; } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } async execute() { try { this.disableTelemetry(); this.buildAgent.info("Executing GitVersion"); - const result = await this.gitVersionTool.run(); + const result = await this.gitVersionTool.executeJson(); if (result.code === 0) { this.buildAgent.info("GitVersion executed successfully"); - const { stdout } = result; + const stdout = result.stdout; this.buildAgent.info("GitVersion output:"); this.buildAgent.info("-------------------"); this.buildAgent.info(stdout); @@ -254,13 +258,16 @@ class Runner { if (stdout.lastIndexOf("{") === -1 || stdout.lastIndexOf("}") === -1) { this.buildAgent.debug("GitVersion output is not valid JSON"); this.buildAgent.setFailed("GitVersion output is not valid JSON", true); - return -1; + return { + code: -1, + error: new Error("GitVersion output is not valid JSON") + }; } else { const jsonOutput = stdout.substring(stdout.lastIndexOf("{"), stdout.lastIndexOf("}") + 1); const gitVersionOutput = JSON.parse(jsonOutput); this.gitVersionTool.writeGitVersionToAgent(gitVersionOutput); this.buildAgent.setSucceeded("GitVersion executed successfully", true); - return 0; + return result; } } else { this.buildAgent.debug("GitVersion failed"); @@ -268,13 +275,16 @@ class Runner { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return result; } } catch (error) { if (error instanceof Error) { this.buildAgent.setFailed(error.message, true); } - return -1; + return { + code: -1, + error + }; } } disableTelemetry() { diff --git a/dist/tools/libs/gitversion.mjs.map b/dist/tools/libs/gitversion.mjs.map index f0f55ca8a..b1a63c950 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/models.ts","../../../src/tools/gitversion/settings.ts","../../../src/tools/gitversion/tool.ts","../../../src/tools/gitversion/runner.ts"],"sourcesContent":["export type Commands = 'setup' | 'execute'\n\nexport enum ExecuteFields {\n targetPath = 'targetPath',\n disableCache = 'disableCache',\n disableNormalization = 'disableNormalization',\n disableShallowCloneCheck = 'disableShallowCloneCheck',\n useConfigFile = 'useConfigFile',\n configFilePath = 'configFilePath',\n overrideConfig = 'overrideConfig',\n updateAssemblyInfo = 'updateAssemblyInfo',\n updateAssemblyInfoFilename = 'updateAssemblyInfoFilename',\n additionalArguments = 'additionalArguments'\n}\n\nexport type GitVersionSettings = {\n [ExecuteFields.targetPath]: string\n [ExecuteFields.disableCache]: boolean\n [ExecuteFields.disableNormalization]: boolean\n [ExecuteFields.disableShallowCloneCheck]: boolean\n [ExecuteFields.useConfigFile]: boolean\n [ExecuteFields.configFilePath]: string\n [ExecuteFields.overrideConfig]: string[]\n [ExecuteFields.updateAssemblyInfo]: boolean\n [ExecuteFields.updateAssemblyInfoFilename]: string\n [ExecuteFields.additionalArguments]: string\n}\n\nexport type GitVersionOutput = {\n Major: number\n Minor: number\n Patch: number\n PreReleaseTag: string\n PreReleaseTagWithDash: string\n PreReleaseLabel: string\n PreReleaseNumber: number\n WeightedPreReleaseNumber: number\n BuildMetaData: number\n FullBuildMetaData: string\n MajorMinorPatch: string\n SemVer: string\n AssemblySemVer: string\n AssemblySemFileVer: string\n FullSemVer: string\n InformationalVersion: string\n BranchName: string\n EscapedBranchName: string\n Sha: string\n ShortSha: string\n VersionSourceSha: string\n CommitsSinceVersionSource: number\n UncommittedChanges: number\n CommitDate: string\n}\n","import { type ISettingsProvider, SettingsProvider } from '@tools/common'\nimport { ExecuteFields, type GitVersionSettings } from './models'\n\nexport interface IGitVersionSettingsProvider extends ISettingsProvider {\n getGitVersionSettings(): GitVersionSettings\n}\n\nexport class GitVersionSettingsProvider extends SettingsProvider implements IGitVersionSettingsProvider {\n getGitVersionSettings(): GitVersionSettings {\n const targetPath = this.buildAgent.getInput(ExecuteFields.targetPath)\n\n const disableCache = this.buildAgent.getBooleanInput(ExecuteFields.disableCache)\n const disableNormalization = this.buildAgent.getBooleanInput(ExecuteFields.disableNormalization)\n const disableShallowCloneCheck = this.buildAgent.getBooleanInput(ExecuteFields.disableShallowCloneCheck)\n\n const useConfigFile = this.buildAgent.getBooleanInput(ExecuteFields.useConfigFile)\n const configFilePath = this.buildAgent.getInput(ExecuteFields.configFilePath)\n const overrideConfig = this.buildAgent.getListInput(ExecuteFields.overrideConfig)\n\n const updateAssemblyInfo = this.buildAgent.getBooleanInput(ExecuteFields.updateAssemblyInfo)\n const updateAssemblyInfoFilename = this.buildAgent.getInput(ExecuteFields.updateAssemblyInfoFilename)\n\n const additionalArguments = this.buildAgent.getInput(ExecuteFields.additionalArguments)\n\n return {\n targetPath,\n disableCache,\n disableNormalization,\n disableShallowCloneCheck,\n useConfigFile,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n additionalArguments\n }\n }\n}\n","import { type ExecResult } from '@agents/common'\nimport { DotnetTool, keysFn } from '@tools/common'\nimport { type GitVersionOutput, type GitVersionSettings } 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 '>=5.2.0 <6.1.0'\n }\n\n get settingsProvider(): IGitVersionSettingsProvider {\n return new GitVersionSettingsProvider(this.buildAgent)\n }\n\n async run(): Promise {\n const settings = this.settingsProvider.getGitVersionSettings()\n const workDir = await this.getRepoDir(settings)\n\n await this.checkShallowClone(settings, workDir)\n\n const args = await this.getArguments(workDir, settings)\n\n await this.setDotnetRoot()\n return await this.executeTool(args)\n }\n\n writeGitVersionToAgent(output: GitVersionOutput): void {\n const keys = keysFn(output)\n for (const property of keys) {\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 protected async getRepoDir(settings: GitVersionSettings): Promise {\n return await super.getRepoPath(settings.targetPath)\n }\n\n protected async getArguments(workDir: string, options: GitVersionSettings): Promise {\n let args = [workDir, '/output', 'json', '/output', 'buildserver']\n\n const {\n useConfigFile,\n disableCache,\n disableNormalization,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n additionalArguments\n //\n } = options\n\n if (disableCache) {\n args.push('/nocache')\n }\n\n if (disableNormalization) {\n args.push('/nonormalize')\n }\n\n if (useConfigFile) {\n if (await this.isValidInputFile('configFilePath', configFilePath)) {\n args.push('/config', 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 args.push('/overrideconfig', config)\n }\n }\n }\n\n if (updateAssemblyInfo) {\n args.push('/updateassemblyinfo')\n\n // You can specify 'updateAssemblyInfo' without 'updateAssemblyInfoFilename'.\n if (updateAssemblyInfoFilename?.length > 0) {\n if (await this.isValidInputFile('updateAssemblyInfoFilename', updateAssemblyInfoFilename)) {\n args.push(updateAssemblyInfoFilename)\n } else {\n throw new Error(`AssemblyInfoFilename file not found at ${updateAssemblyInfoFilename}`)\n }\n }\n }\n\n if (additionalArguments) {\n args = args.concat(this.argStringToArray(additionalArguments))\n }\n return args\n }\n\n private argStringToArray(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 // we only escape double quotes.\n if (escaped && 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 append(c)\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 private async checkShallowClone(settings: GitVersionSettings, 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 IBuildAgent } from '@agents/common'\nimport { type IRunner } from '@tools/common'\nimport { type Commands, type GitVersionOutput } from './models'\nimport { GitVersionTool } from './tool'\n\nexport class Runner implements IRunner {\n private readonly gitVersionTool: GitVersionTool\n\n constructor(private readonly buildAgent: IBuildAgent) {\n this.gitVersionTool = 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 }\n }\n\n private async setup(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Installing GitVersion')\n const toolPath = await this.gitVersionTool.install()\n\n const pathVariable = this.gitVersionTool.toolPathVariable\n this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`)\n this.buildAgent.setVariable(pathVariable, toolPath)\n\n this.buildAgent.setSucceeded('GitVersion installed successfully', true)\n return 0\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private async execute(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.info('Executing GitVersion')\n\n const result = await this.gitVersionTool.run()\n\n if (result.code === 0) {\n this.buildAgent.info('GitVersion executed successfully')\n const { stdout } = result\n\n this.buildAgent.info('GitVersion output:')\n this.buildAgent.info('-------------------')\n this.buildAgent.info(stdout)\n this.buildAgent.info('-------------------')\n this.buildAgent.debug('Parsing GitVersion output')\n\n if (stdout.lastIndexOf('{') === -1 || stdout.lastIndexOf('}') === -1) {\n this.buildAgent.debug('GitVersion output is not valid JSON')\n this.buildAgent.setFailed('GitVersion output is not valid JSON', true)\n return -1\n } else {\n const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1)\n\n const gitVersionOutput = JSON.parse(jsonOutput) as GitVersionOutput\n this.gitVersionTool.writeGitVersionToAgent(gitVersionOutput)\n this.buildAgent.setSucceeded('GitVersion executed successfully', true)\n return 0\n }\n } else {\n this.buildAgent.debug('GitVersion failed')\n const error = result.error\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return -1\n }\n }\n\n private disableTelemetry(): void {\n this.buildAgent.info(`Running on: '${this.buildAgent.agentName}'`)\n this.buildAgent.debug('Disabling telemetry')\n this.gitVersionTool.disableTelemetry()\n }\n}\n"],"names":["ExecuteFields"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"gitversion.mjs","sources":["../../../src/tools/gitversion/models.ts","../../../src/tools/gitversion/settings.ts","../../../src/tools/gitversion/tool.ts","../../../src/tools/gitversion/runner.ts"],"sourcesContent":["export type Commands = 'setup' | 'execute'\n\nexport enum ExecuteFields {\n targetPath = 'targetPath',\n disableCache = 'disableCache',\n disableNormalization = 'disableNormalization',\n disableShallowCloneCheck = 'disableShallowCloneCheck',\n useConfigFile = 'useConfigFile',\n configFilePath = 'configFilePath',\n overrideConfig = 'overrideConfig',\n updateAssemblyInfo = 'updateAssemblyInfo',\n updateAssemblyInfoFilename = 'updateAssemblyInfoFilename',\n additionalArguments = 'additionalArguments'\n}\n\nexport type GitVersionExecuteSettings = {\n [ExecuteFields.targetPath]: string\n [ExecuteFields.disableCache]: boolean\n [ExecuteFields.disableNormalization]: boolean\n [ExecuteFields.disableShallowCloneCheck]: boolean\n [ExecuteFields.useConfigFile]: boolean\n [ExecuteFields.configFilePath]: string\n [ExecuteFields.overrideConfig]: string[]\n [ExecuteFields.updateAssemblyInfo]: boolean\n [ExecuteFields.updateAssemblyInfoFilename]: string\n [ExecuteFields.additionalArguments]: string\n}\n\nexport type GitVersionOutput = {\n Major: number\n Minor: number\n Patch: number\n PreReleaseTag: string\n PreReleaseTagWithDash: string\n PreReleaseLabel: string\n PreReleaseNumber: number\n WeightedPreReleaseNumber: number\n BuildMetaData: number\n FullBuildMetaData: string\n MajorMinorPatch: string\n SemVer: string\n AssemblySemVer: string\n AssemblySemFileVer: string\n FullSemVer: string\n InformationalVersion: string\n BranchName: string\n EscapedBranchName: string\n Sha: string\n ShortSha: string\n VersionSourceSha: string\n CommitsSinceVersionSource: number\n UncommittedChanges: number\n CommitDate: string\n}\n","import { type ISettingsProvider, SettingsProvider } from '@tools/common'\nimport { ExecuteFields, type GitVersionExecuteSettings } from './models'\n\nexport interface IGitVersionSettingsProvider extends ISettingsProvider {\n getGitVersionExecuteSettings(): GitVersionExecuteSettings\n}\n\nexport class GitVersionSettingsProvider extends SettingsProvider implements IGitVersionSettingsProvider {\n getGitVersionExecuteSettings(): GitVersionExecuteSettings {\n const targetPath = this.buildAgent.getInput(ExecuteFields.targetPath)\n\n const disableCache = this.buildAgent.getBooleanInput(ExecuteFields.disableCache)\n const disableNormalization = this.buildAgent.getBooleanInput(ExecuteFields.disableNormalization)\n const disableShallowCloneCheck = this.buildAgent.getBooleanInput(ExecuteFields.disableShallowCloneCheck)\n\n const useConfigFile = this.buildAgent.getBooleanInput(ExecuteFields.useConfigFile)\n const configFilePath = this.buildAgent.getInput(ExecuteFields.configFilePath)\n const overrideConfig = this.buildAgent.getListInput(ExecuteFields.overrideConfig)\n\n const updateAssemblyInfo = this.buildAgent.getBooleanInput(ExecuteFields.updateAssemblyInfo)\n const updateAssemblyInfoFilename = this.buildAgent.getInput(ExecuteFields.updateAssemblyInfoFilename)\n\n const additionalArguments = this.buildAgent.getInput(ExecuteFields.additionalArguments)\n\n return {\n targetPath,\n disableCache,\n disableNormalization,\n disableShallowCloneCheck,\n useConfigFile,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n additionalArguments\n }\n }\n}\n","import { type ExecResult } from '@agents/common'\nimport { DotnetTool, keysOf } from '@tools/common'\nimport { type GitVersionExecuteSettings, 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 '>=5.2.0 <6.1.0'\n }\n\n get settingsProvider(): IGitVersionSettingsProvider {\n return new GitVersionSettingsProvider(this.buildAgent)\n }\n\n async executeJson(): Promise {\n const settings = this.settingsProvider.getGitVersionExecuteSettings()\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 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 protected async getRepoDir(settings: GitVersionExecuteSettings): Promise {\n return await super.getRepoPath(settings.targetPath)\n }\n\n protected async getExecuteArguments(workDir: string, options: GitVersionExecuteSettings): Promise {\n let args = [workDir, '/output', 'json', '/output', 'buildserver']\n\n const {\n useConfigFile,\n disableCache,\n disableNormalization,\n configFilePath,\n overrideConfig,\n updateAssemblyInfo,\n updateAssemblyInfoFilename,\n additionalArguments\n //\n } = options\n\n if (disableCache) {\n args.push('/nocache')\n }\n\n if (disableNormalization) {\n args.push('/nonormalize')\n }\n\n if (useConfigFile) {\n if (await this.isValidInputFile('configFilePath', configFilePath)) {\n args.push('/config', 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 args.push('/overrideconfig', config)\n }\n }\n }\n\n if (updateAssemblyInfo) {\n args.push('/updateassemblyinfo')\n\n // You can specify 'updateAssemblyInfo' without 'updateAssemblyInfoFilename'.\n if (updateAssemblyInfoFilename?.length > 0) {\n if (await this.isValidInputFile('updateAssemblyInfoFilename', updateAssemblyInfoFilename)) {\n args.push(updateAssemblyInfoFilename)\n } else {\n throw new Error(`AssemblyInfoFilename file not found at ${updateAssemblyInfoFilename}`)\n }\n }\n }\n\n if (additionalArguments) {\n args = args.concat(this.argStringToArray(additionalArguments))\n }\n return args\n }\n\n private argStringToArray(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 // we only escape double quotes.\n if (escaped && 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 append(c)\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 private async checkShallowClone(settings: GitVersionExecuteSettings, 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 IRunner } from '@tools/common'\nimport { type Commands, type GitVersionOutput } from './models'\nimport { GitVersionTool } from './tool'\n\nexport class Runner implements IRunner {\n private readonly gitVersionTool: GitVersionTool\n\n constructor(private readonly buildAgent: IBuildAgent) {\n this.gitVersionTool = 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 }\n }\n\n private async setup(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.debug('Installing GitVersion')\n const toolPath = await this.gitVersionTool.install()\n\n const pathVariable = this.gitVersionTool.toolPathVariable\n this.buildAgent.info(`Set ${pathVariable} to ${toolPath}`)\n this.buildAgent.setVariable(pathVariable, toolPath)\n\n this.buildAgent.setSucceeded('GitVersion installed successfully', true)\n return {\n code: 0\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private async execute(): Promise {\n try {\n this.disableTelemetry()\n\n this.buildAgent.info('Executing GitVersion')\n\n const result = await this.gitVersionTool.executeJson()\n\n if (result.code === 0) {\n this.buildAgent.info('GitVersion executed successfully')\n const stdout: string = result.stdout as string\n\n this.buildAgent.info('GitVersion output:')\n this.buildAgent.info('-------------------')\n this.buildAgent.info(stdout)\n this.buildAgent.info('-------------------')\n this.buildAgent.debug('Parsing GitVersion output')\n\n if (stdout.lastIndexOf('{') === -1 || stdout.lastIndexOf('}') === -1) {\n this.buildAgent.debug('GitVersion output is not valid JSON')\n this.buildAgent.setFailed('GitVersion output is not valid JSON', true)\n return {\n code: -1,\n error: new Error('GitVersion output is not valid JSON')\n }\n } else {\n const jsonOutput = stdout.substring(stdout.lastIndexOf('{'), stdout.lastIndexOf('}') + 1)\n\n const gitVersionOutput = JSON.parse(jsonOutput) as GitVersionOutput\n this.gitVersionTool.writeGitVersionToAgent(gitVersionOutput)\n this.buildAgent.setSucceeded('GitVersion executed successfully', true)\n return result\n }\n } else {\n this.buildAgent.debug('GitVersion failed')\n const error = result.error\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return result\n }\n } catch (error) {\n if (error instanceof Error) {\n this.buildAgent.setFailed(error.message, true)\n }\n return {\n code: -1,\n error\n }\n }\n }\n\n private disableTelemetry(): void {\n this.buildAgent.info(`Running on: '${this.buildAgent.agentName}'`)\n this.buildAgent.debug('Disabling telemetry')\n this.gitVersionTool.disableTelemetry()\n }\n}\n"],"names":["ExecuteFields"],"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 6c7c9b22f..6e6eaa0e6 100644 --- a/dist/tools/libs/tools.mjs +++ b/dist/tools/libs/tools.mjs @@ -198,7 +198,7 @@ class SettingsProvider { } } -const keysFn = Object.keys; +const keysOf = Object.keys; -export { DotnetTool as D, SettingsProvider as S, keysFn as k }; +export { DotnetTool as D, SettingsProvider as S, keysOf as k }; //# sourceMappingURL=tools.mjs.map diff --git a/dist/tools/libs/tools.mjs.map b/dist/tools/libs/tools.mjs.map index 12414accc..cbca0a425 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/dotnet-tool.ts","../../../src/tools/common/settings.ts","../../../src/tools/common/index.ts"],"sourcesContent":["export enum SetupFields {\n includePrerelease = 'includePrerelease',\n versionSpec = 'versionSpec',\n ignoreFailedSources = 'ignoreFailedSources',\n preferLatestVersion = 'preferLatestVersion'\n}\n\nexport type SetupSettings = {\n [SetupFields.versionSpec]: string\n [SetupFields.includePrerelease]: boolean\n [SetupFields.ignoreFailedSources]: boolean\n [SetupFields.preferLatestVersion]: boolean\n}\n\nexport type IRunner = {\n run(command: string): Promise\n}\n\nexport type NugetVersions = { data: { versions: { version: string }[] }[] }\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 { NugetVersions } from './models'\n\nexport interface IDotnetTool {\n disableTelemetry(): void\n\n install(): Promise\n}\n\nexport abstract class DotnetTool implements IDotnetTool {\n private static readonly nugetRoot: string = 'https://azuresearch-usnc.nuget.org/query'\n\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 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 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 let toolPath: string | undefined\n const gitVersionPath = this.buildAgent.getVariableAsPath(this.toolPathVariable)\n if (gitVersionPath) {\n toolPath = path.join(gitVersionPath, os.platform() === 'win32' ? `${this.toolName}.exe` : this.toolName)\n }\n if (!toolPath) {\n toolPath = await this.buildAgent.which(this.toolName, true)\n }\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 (await this.buildAgent.directoryExists(targetPath)) {\n workDir = targetPath\n } else {\n throw new Error(`Directory not found at ${targetPath}`)\n }\n }\n return workDir.replace(/\\\\/g, '/')\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 toolNameParam = encodeURIComponent(toolName.toLowerCase())\n const prereleaseParam = includePrerelease ? 'true' : 'false'\n const downloadPath = `${DotnetTool.nugetRoot}?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.info(`failed to query latest version for ${toolName} from ${downloadPath}. Status code: ${response ? response.status : 'unknown'}`)\n return null\n }\n\n const { data } = (await response.json()) as NugetVersions\n\n const versions = data[0].versions.map(x => x.version)\n if (!versions || !versions.length) {\n return null\n }\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 args = ['tool', 'install', toolName, '--tool-path', tempDirectory, '--version', semverVersion]\n if (ignoreFailedSources) {\n args.push('--ignore-failed-sources')\n }\n\n const result = await this.execute('dotnet', args)\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, SetupFields } 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(SetupFields.versionSpec)\n const includePrerelease = this.buildAgent.getBooleanInput(SetupFields.includePrerelease)\n const ignoreFailedSources = this.buildAgent.getBooleanInput(SetupFields.ignoreFailedSources)\n const preferLatestVersion = this.buildAgent.getBooleanInput(SetupFields.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'\n\nexport const keysFn = Object.keys as (obj: T) => (keyof T)[]\n"],"names":["SetupFields","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/dotnet-tool.ts","../../../src/tools/common/settings.ts","../../../src/tools/common/index.ts"],"sourcesContent":["import { type ExecResult } from '@agents/common'\n\nexport enum SetupFields {\n includePrerelease = 'includePrerelease',\n versionSpec = 'versionSpec',\n ignoreFailedSources = 'ignoreFailedSources',\n preferLatestVersion = 'preferLatestVersion'\n}\n\nexport type SetupSettings = {\n [SetupFields.versionSpec]: string\n [SetupFields.includePrerelease]: boolean\n [SetupFields.ignoreFailedSources]: boolean\n [SetupFields.preferLatestVersion]: boolean\n}\n\nexport type IRunner = {\n run(command: string): Promise\n}\n\nexport type NugetVersions = { data: { versions: { version: string }[] }[] }\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 { NugetVersions } from './models'\n\nexport interface IDotnetTool {\n disableTelemetry(): void\n\n install(): Promise\n}\n\nexport abstract class DotnetTool implements IDotnetTool {\n private static readonly nugetRoot: string = 'https://azuresearch-usnc.nuget.org/query'\n\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 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 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 let toolPath: string | undefined\n const gitVersionPath = this.buildAgent.getVariableAsPath(this.toolPathVariable)\n if (gitVersionPath) {\n toolPath = path.join(gitVersionPath, os.platform() === 'win32' ? `${this.toolName}.exe` : this.toolName)\n }\n if (!toolPath) {\n toolPath = await this.buildAgent.which(this.toolName, true)\n }\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 (await this.buildAgent.directoryExists(targetPath)) {\n workDir = targetPath\n } else {\n throw new Error(`Directory not found at ${targetPath}`)\n }\n }\n return workDir.replace(/\\\\/g, '/')\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 toolNameParam = encodeURIComponent(toolName.toLowerCase())\n const prereleaseParam = includePrerelease ? 'true' : 'false'\n const downloadPath = `${DotnetTool.nugetRoot}?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.info(`failed to query latest version for ${toolName} from ${downloadPath}. Status code: ${response ? response.status : 'unknown'}`)\n return null\n }\n\n const { data } = (await response.json()) as NugetVersions\n\n const versions = data[0].versions.map(x => x.version)\n if (!versions || !versions.length) {\n return null\n }\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 args = ['tool', 'install', toolName, '--tool-path', tempDirectory, '--version', semverVersion]\n if (ignoreFailedSources) {\n args.push('--ignore-failed-sources')\n }\n\n const result = await this.execute('dotnet', args)\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, SetupFields } 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(SetupFields.versionSpec)\n const includePrerelease = this.buildAgent.getBooleanInput(SetupFields.includePrerelease)\n const ignoreFailedSources = this.buildAgent.getBooleanInput(SetupFields.ignoreFailedSources)\n const preferLatestVersion = this.buildAgent.getBooleanInput(SetupFields.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'\n\nexport const keysOf = Object.keys as (obj: T) => (keyof T)[]\n"],"names":["SetupFields","semver.clean","semver.satisfies","semver.maxSatisfying","semver.valid"],"mappings":"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"} \ No newline at end of file