From ec740fbfd51bba80f963810fe09697a36a83945a Mon Sep 17 00:00:00 2001 From: Webber Takken Date: Mon, 8 Mar 2021 01:05:42 +0100 Subject: [PATCH] Refactor to typescript (convert extensions, minor fixes) --- src/model/__mocks__/{input.js => input.ts} | 0 .../{versioning.js => versioning.ts} | 0 src/model/{action.test.js => action.test.ts} | 4 +- src/model/{action.js => action.ts} | 2 +- ...ing.test.js => android-versioning.test.ts} | 0 ...id-versioning.js => android-versioning.ts} | 3 +- ...eters.test.js => build-parameters.test.ts} | 32 +++------- ...uild-parameters.js => build-parameters.ts} | 21 ++----- src/model/{cache.test.js => cache.test.ts} | 0 src/model/{cache.js => cache.ts} | 0 src/model/{docker.test.js => docker.test.ts} | 0 src/model/{docker.js => docker.ts} | 0 ...est.js => command-execution-error.test.ts} | 0 ...on-error.js => command-execution-error.ts} | 0 ...t.js => not-implemented-exception.test.ts} | 0 ...eption.js => not-implemented-exception.ts} | 0 ...error.test.js => validation-error.test.ts} | 0 ...alidation-error.js => validation-error.ts} | 0 .../{image-tag.test.js => image-tag.test.ts} | 0 src/model/{image-tag.js => image-tag.ts} | 34 +++++----- src/model/index.test.js | 17 ----- src/model/index.test.ts | 10 +++ src/model/{index.js => index.ts} | 0 src/model/{input.test.js => input.test.ts} | 0 src/model/{input.js => input.ts} | 0 src/model/{kubernetes.js => kubernetes.ts} | 32 ++++++---- src/model/{output.test.js => output.test.ts} | 0 src/model/{output.js => output.ts} | 0 .../{platform.test.js => platform.test.ts} | 0 src/model/{platform.js => platform.ts} | 0 .../{project.test.js => project.test.ts} | 0 src/model/{project.js => project.ts} | 0 src/model/{system.test.js => system.test.ts} | 0 src/model/{system.js => system.ts} | 0 ...oning.test.js => unity-versioning.test.ts} | 0 ...nity-versioning.js => unity-versioning.ts} | 0 src/model/{unity.test.js => unity.test.ts} | 0 src/model/{unity.js => unity.ts} | 0 ...{versioning.test.js => versioning.test.ts} | 63 ++++++------------- src/model/{versioning.js => versioning.ts} | 5 +- 40 files changed, 80 insertions(+), 143 deletions(-) rename src/model/__mocks__/{input.js => input.ts} (100%) rename src/model/__mocks__/{versioning.js => versioning.ts} (100%) rename src/model/{action.test.js => action.test.ts} (88%) rename src/model/{action.js => action.ts} (97%) rename src/model/{android-versioning.test.js => android-versioning.test.ts} (100%) rename src/model/{android-versioning.js => android-versioning.ts} (90%) rename src/model/{build-parameters.test.js => build-parameters.test.ts} (85%) rename src/model/{build-parameters.js => build-parameters.ts} (78%) rename src/model/{cache.test.js => cache.test.ts} (100%) rename src/model/{cache.js => cache.ts} (100%) rename src/model/{docker.test.js => docker.test.ts} (100%) rename src/model/{docker.js => docker.ts} (100%) rename src/model/error/{command-execution-error.test.js => command-execution-error.test.ts} (100%) rename src/model/error/{command-execution-error.js => command-execution-error.ts} (100%) rename src/model/error/{not-implemented-exception.test.js => not-implemented-exception.test.ts} (100%) rename src/model/error/{not-implemented-exception.js => not-implemented-exception.ts} (100%) rename src/model/error/{validation-error.test.js => validation-error.test.ts} (100%) rename src/model/error/{validation-error.js => validation-error.ts} (100%) rename src/model/{image-tag.test.js => image-tag.test.ts} (100%) rename src/model/{image-tag.js => image-tag.ts} (82%) delete mode 100644 src/model/index.test.js create mode 100644 src/model/index.test.ts rename src/model/{index.js => index.ts} (100%) rename src/model/{input.test.js => input.test.ts} (100%) rename src/model/{input.js => input.ts} (100%) rename src/model/{kubernetes.js => kubernetes.ts} (94%) rename src/model/{output.test.js => output.test.ts} (100%) rename src/model/{output.js => output.ts} (100%) rename src/model/{platform.test.js => platform.test.ts} (100%) rename src/model/{platform.js => platform.ts} (100%) rename src/model/{project.test.js => project.test.ts} (100%) rename src/model/{project.js => project.ts} (100%) rename src/model/{system.test.js => system.test.ts} (100%) rename src/model/{system.js => system.ts} (100%) rename src/model/{unity-versioning.test.js => unity-versioning.test.ts} (100%) rename src/model/{unity-versioning.js => unity-versioning.ts} (100%) rename src/model/{unity.test.js => unity.test.ts} (100%) rename src/model/{unity.js => unity.ts} (100%) rename src/model/{versioning.test.js => versioning.test.ts} (86%) rename src/model/{versioning.js => versioning.ts} (98%) diff --git a/src/model/__mocks__/input.js b/src/model/__mocks__/input.ts similarity index 100% rename from src/model/__mocks__/input.js rename to src/model/__mocks__/input.ts diff --git a/src/model/__mocks__/versioning.js b/src/model/__mocks__/versioning.ts similarity index 100% rename from src/model/__mocks__/versioning.js rename to src/model/__mocks__/versioning.ts diff --git a/src/model/action.test.js b/src/model/action.test.ts similarity index 88% rename from src/model/action.test.js rename to src/model/action.test.ts index 6496e3e6..3c4bde0c 100644 --- a/src/model/action.test.js +++ b/src/model/action.test.ts @@ -14,9 +14,9 @@ describe('Action', () => { }); it('returns the root folder of the action', () => { - const { rootFolder, name } = Action; + const { rootFolder, canonicalName } = Action; - expect(path.basename(rootFolder)).toStrictEqual(name); + expect(path.basename(rootFolder)).toStrictEqual(canonicalName); expect(fs.existsSync(rootFolder)).toStrictEqual(true); }); diff --git a/src/model/action.js b/src/model/action.ts similarity index 97% rename from src/model/action.js rename to src/model/action.ts index 8b542c33..971c60d9 100644 --- a/src/model/action.js +++ b/src/model/action.ts @@ -13,7 +13,7 @@ class Action { return path.basename(__dirname) === 'model'; } - static get name() { + static get canonicalName() { return 'unity-builder'; } diff --git a/src/model/android-versioning.test.js b/src/model/android-versioning.test.ts similarity index 100% rename from src/model/android-versioning.test.js rename to src/model/android-versioning.test.ts diff --git a/src/model/android-versioning.js b/src/model/android-versioning.ts similarity index 90% rename from src/model/android-versioning.js rename to src/model/android-versioning.ts index c47c3b80..1024fd83 100644 --- a/src/model/android-versioning.js +++ b/src/model/android-versioning.ts @@ -19,8 +19,7 @@ export default class AndroidVersioning { // The greatest value Google Plays allows is 2100000000. // Allow for 3 patch digits, 3 minor digits and 3 major digits. - const versionCode = - parsedVersion.major * 1000000 + parsedVersion.minor * 1000 + parsedVersion.patch; + const versionCode = parsedVersion.major * 1000000 + parsedVersion.minor * 1000 + parsedVersion.patch; if (versionCode >= 1000000000) { throw new Error( diff --git a/src/model/build-parameters.test.js b/src/model/build-parameters.test.ts similarity index 85% rename from src/model/build-parameters.test.js rename to src/model/build-parameters.test.ts index 13597f77..77d7ac5e 100644 --- a/src/model/build-parameters.test.js +++ b/src/model/build-parameters.test.ts @@ -4,9 +4,7 @@ import BuildParameters from './build-parameters'; import Input from './input'; import Platform from './platform'; -const determineVersion = jest - .spyOn(Versioning, 'determineVersion') - .mockImplementation(() => '1.3.37'); +const determineVersion = jest.spyOn(Versioning, 'determineVersion').mockImplementation(() => '1.3.37'); const determineUnityVersion = jest .spyOn(UnityVersioning, 'determineUnityVersion') @@ -43,33 +41,25 @@ describe('BuildParameters', () => { it('returns the android version code from version by default', async () => { const mockValue = ''; jest.spyOn(Input, 'androidVersionCode', 'get').mockReturnValue(mockValue); - await expect(BuildParameters.create()).resolves.toEqual( - expect.objectContaining({ androidVersionCode: 1003037 }), - ); + await expect(BuildParameters.create()).resolves.toEqual(expect.objectContaining({ androidVersionCode: 1003037 })); }); it('returns the platform', async () => { const mockValue = 'somePlatform'; jest.spyOn(Input, 'targetPlatform', 'get').mockReturnValue(mockValue); - await expect(BuildParameters.create()).resolves.toEqual( - expect.objectContaining({ platform: mockValue }), - ); + await expect(BuildParameters.create()).resolves.toEqual(expect.objectContaining({ platform: mockValue })); }); it('returns the project path', async () => { const mockValue = 'path/to/project'; jest.spyOn(Input, 'projectPath', 'get').mockReturnValue(mockValue); - await expect(BuildParameters.create()).resolves.toEqual( - expect.objectContaining({ projectPath: mockValue }), - ); + await expect(BuildParameters.create()).resolves.toEqual(expect.objectContaining({ projectPath: mockValue })); }); it('returns the build name', async () => { const mockValue = 'someBuildName'; jest.spyOn(Input, 'buildName', 'get').mockReturnValue(mockValue); - await expect(BuildParameters.create()).resolves.toEqual( - expect.objectContaining({ buildName: mockValue }), - ); + await expect(BuildParameters.create()).resolves.toEqual(expect.objectContaining({ buildName: mockValue })); }); it('returns the build path', async () => { @@ -86,9 +76,7 @@ describe('BuildParameters', () => { it('returns the build file', async () => { const mockValue = 'someBuildName'; jest.spyOn(Input, 'buildName', 'get').mockReturnValue(mockValue); - await expect(BuildParameters.create()).resolves.toEqual( - expect.objectContaining({ buildFile: mockValue }), - ); + await expect(BuildParameters.create()).resolves.toEqual(expect.objectContaining({ buildFile: mockValue })); }); test.each([Platform.types.StandaloneWindows, Platform.types.StandaloneWindows64])( @@ -123,9 +111,7 @@ describe('BuildParameters', () => { it('returns the build method', async () => { const mockValue = 'Namespace.ClassName.BuildMethod'; jest.spyOn(Input, 'buildMethod', 'get').mockReturnValue(mockValue); - await expect(BuildParameters.create()).resolves.toEqual( - expect.objectContaining({ buildMethod: mockValue }), - ); + await expect(BuildParameters.create()).resolves.toEqual(expect.objectContaining({ buildMethod: mockValue })); }); it('returns the android keystore name', async () => { @@ -171,9 +157,7 @@ describe('BuildParameters', () => { it('returns the custom parameters', async () => { const mockValue = '-profile SomeProfile -someBoolean -someValue exampleValue'; jest.spyOn(Input, 'customParameters', 'get').mockReturnValue(mockValue); - await expect(BuildParameters.create()).resolves.toEqual( - expect.objectContaining({ customParameters: mockValue }), - ); + await expect(BuildParameters.create()).resolves.toEqual(expect.objectContaining({ customParameters: mockValue })); }); }); }); diff --git a/src/model/build-parameters.js b/src/model/build-parameters.ts similarity index 78% rename from src/model/build-parameters.js rename to src/model/build-parameters.ts index b4d9cfe3..cd727da7 100644 --- a/src/model/build-parameters.js +++ b/src/model/build-parameters.ts @@ -6,26 +6,13 @@ import Versioning from './versioning'; class BuildParameters { static async create() { - const buildFile = this.parseBuildFile( - Input.buildName, - Input.targetPlatform, - Input.androidAppBundle, - ); + const buildFile = this.parseBuildFile(Input.buildName, Input.targetPlatform, Input.androidAppBundle); - const unityVersion = UnityVersioning.determineUnityVersion( - Input.projectPath, - Input.unityVersion, - ); + const unityVersion = UnityVersioning.determineUnityVersion(Input.projectPath, Input.unityVersion); - const buildVersion = await Versioning.determineVersion( - Input.versioningStrategy, - Input.specifiedVersion, - ); + const buildVersion = await Versioning.determineVersion(Input.versioningStrategy, Input.specifiedVersion); - const androidVersionCode = AndroidVersioning.determineVersionCode( - buildVersion, - Input.androidVersionCode, - ); + const androidVersionCode = AndroidVersioning.determineVersionCode(buildVersion, Input.androidVersionCode); return { version: unityVersion, diff --git a/src/model/cache.test.js b/src/model/cache.test.ts similarity index 100% rename from src/model/cache.test.js rename to src/model/cache.test.ts diff --git a/src/model/cache.js b/src/model/cache.ts similarity index 100% rename from src/model/cache.js rename to src/model/cache.ts diff --git a/src/model/docker.test.js b/src/model/docker.test.ts similarity index 100% rename from src/model/docker.test.js rename to src/model/docker.test.ts diff --git a/src/model/docker.js b/src/model/docker.ts similarity index 100% rename from src/model/docker.js rename to src/model/docker.ts diff --git a/src/model/error/command-execution-error.test.js b/src/model/error/command-execution-error.test.ts similarity index 100% rename from src/model/error/command-execution-error.test.js rename to src/model/error/command-execution-error.test.ts diff --git a/src/model/error/command-execution-error.js b/src/model/error/command-execution-error.ts similarity index 100% rename from src/model/error/command-execution-error.js rename to src/model/error/command-execution-error.ts diff --git a/src/model/error/not-implemented-exception.test.js b/src/model/error/not-implemented-exception.test.ts similarity index 100% rename from src/model/error/not-implemented-exception.test.js rename to src/model/error/not-implemented-exception.test.ts diff --git a/src/model/error/not-implemented-exception.js b/src/model/error/not-implemented-exception.ts similarity index 100% rename from src/model/error/not-implemented-exception.js rename to src/model/error/not-implemented-exception.ts diff --git a/src/model/error/validation-error.test.js b/src/model/error/validation-error.test.ts similarity index 100% rename from src/model/error/validation-error.test.js rename to src/model/error/validation-error.test.ts diff --git a/src/model/error/validation-error.js b/src/model/error/validation-error.ts similarity index 100% rename from src/model/error/validation-error.js rename to src/model/error/validation-error.ts diff --git a/src/model/image-tag.test.js b/src/model/image-tag.test.ts similarity index 100% rename from src/model/image-tag.test.js rename to src/model/image-tag.test.ts diff --git a/src/model/image-tag.js b/src/model/image-tag.ts similarity index 82% rename from src/model/image-tag.js rename to src/model/image-tag.ts index 8630dab1..d903671e 100644 --- a/src/model/image-tag.js +++ b/src/model/image-tag.ts @@ -2,14 +2,15 @@ import { trimEnd, trimStart } from 'lodash-es'; import Platform from './platform'; class ImageTag { + private repository: string; + private name: string; + private version: string; + private platform: any; + private builderPlatform: string; + private customImage: any; + constructor(imageProperties) { - const { - repository = 'unityci', - name = 'editor', - version = '2019.2.11f1', - platform, - customImage, - } = imageProperties; + const { repository = 'unityci', name = 'editor', version = '2019.2.11f1', platform, customImage } = imageProperties; if (!ImageTag.versionPattern.test(version)) { throw new Error(`Invalid version "${version}".`); @@ -17,7 +18,12 @@ class ImageTag { const builderPlatform = ImageTag.getTargetPlatformToImageSuffixMap(platform, version); - Object.assign(this, { repository, name, version, platform, builderPlatform, customImage }); + this.repository = repository; + this.name = name; + this.version = version; + this.platform = platform; + this.builderPlatform = builderPlatform; + this.customImage = customImage; } static get versionPattern() { @@ -39,17 +45,7 @@ class ImageTag { } static getTargetPlatformToImageSuffixMap(platform, version) { - const { - generic, - webgl, - mac, - windows, - linux, - linuxIl2cpp, - android, - ios, - facebook, - } = ImageTag.imageSuffixes; + const { generic, webgl, mac, windows, linux, linuxIl2cpp, android, ios, facebook } = ImageTag.imageSuffixes; const [major, minor] = version.split('.').map((digit) => Number(digit)); // @see: https://docs.unity3d.com/ScriptReference/BuildTarget.html diff --git a/src/model/index.test.js b/src/model/index.test.js deleted file mode 100644 index 8fabfa56..00000000 --- a/src/model/index.test.js +++ /dev/null @@ -1,17 +0,0 @@ -import * as Index from '.'; - -describe('Index', () => { - test.each([ - 'Action', - 'BuildParameters', - 'Cache', - 'Docker', - 'ImageTag', - 'Input', - 'Platform', - 'Project', - 'Unity', - ])('exports %s', (exportedModule) => { - expect(Index[exportedModule]).toBeEitherAFunctionOrAnObject(); - }); -}); diff --git a/src/model/index.test.ts b/src/model/index.test.ts new file mode 100644 index 00000000..b1a8c164 --- /dev/null +++ b/src/model/index.test.ts @@ -0,0 +1,10 @@ +import * as Index from '.'; + +describe('Index', () => { + test.each(['Action', 'BuildParameters', 'Cache', 'Docker', 'ImageTag', 'Input', 'Platform', 'Project', 'Unity'])( + 'exports %s', + (exportedModule) => { + expect(Index[exportedModule]).toBeEitherAFunctionOrAnObject(); + }, + ); +}); diff --git a/src/model/index.js b/src/model/index.ts similarity index 100% rename from src/model/index.js rename to src/model/index.ts diff --git a/src/model/input.test.js b/src/model/input.test.ts similarity index 100% rename from src/model/input.test.js rename to src/model/input.test.ts diff --git a/src/model/input.js b/src/model/input.ts similarity index 100% rename from src/model/input.js rename to src/model/input.ts diff --git a/src/model/kubernetes.js b/src/model/kubernetes.ts similarity index 94% rename from src/model/kubernetes.js rename to src/model/kubernetes.ts index 1d03aa0b..2af058e4 100644 --- a/src/model/kubernetes.js +++ b/src/model/kubernetes.ts @@ -1,3 +1,4 @@ +// @ts-ignore import { Client, KubeConfig } from 'kubernetes-client'; import Request from 'kubernetes-client/backends/request'; @@ -7,6 +8,15 @@ const base64 = require('base-64'); const pollInterval = 10000; class Kubernetes { + private static kubeClient: any; + private static buildId: string; + private static buildParameters: any; + private static baseImage: any; + private static pvcName: string; + private static secretName: string; + private static jobName: string; + private static namespace: string; + static async runBuildJob(buildParameters, baseImage) { const kubeconfig = new KubeConfig(); kubeconfig.loadFromString(base64.decode(buildParameters.kubeConfig)); @@ -20,16 +30,14 @@ class Kubernetes { const jobName = `unity-builder-job-${buildId}`; const namespace = 'default'; - Object.assign(this, { - kubeClient, - buildId, - buildParameters, - baseImage, - pvcName, - secretName, - jobName, - namespace, - }); + this.kubeClient = kubeClient; + this.buildId = buildId; + this.buildParameters = buildParameters; + this.baseImage = baseImage; + this.pvcName = pvcName; + this.secretName = secretName; + this.jobName = jobName; + this.namespace = namespace; await Kubernetes.createSecret(); await Kubernetes.createPersistentVolumeClaim(); @@ -81,9 +89,7 @@ class Kubernetes { }, }, }; - await this.kubeClient.api.v1 - .namespaces(this.namespace) - .persistentvolumeclaims.post({ body: pvcManifest }); + await this.kubeClient.api.v1.namespaces(this.namespace).persistentvolumeclaims.post({ body: pvcManifest }); core.info('Persistent Volume created, waiting for ready state...'); await Kubernetes.watchPersistentVolumeClaimUntilReady(); core.info('Persistent Volume ready for claims'); diff --git a/src/model/output.test.js b/src/model/output.test.ts similarity index 100% rename from src/model/output.test.js rename to src/model/output.test.ts diff --git a/src/model/output.js b/src/model/output.ts similarity index 100% rename from src/model/output.js rename to src/model/output.ts diff --git a/src/model/platform.test.js b/src/model/platform.test.ts similarity index 100% rename from src/model/platform.test.js rename to src/model/platform.test.ts diff --git a/src/model/platform.js b/src/model/platform.ts similarity index 100% rename from src/model/platform.js rename to src/model/platform.ts diff --git a/src/model/project.test.js b/src/model/project.test.ts similarity index 100% rename from src/model/project.test.js rename to src/model/project.test.ts diff --git a/src/model/project.js b/src/model/project.ts similarity index 100% rename from src/model/project.js rename to src/model/project.ts diff --git a/src/model/system.test.js b/src/model/system.test.ts similarity index 100% rename from src/model/system.test.js rename to src/model/system.test.ts diff --git a/src/model/system.js b/src/model/system.ts similarity index 100% rename from src/model/system.js rename to src/model/system.ts diff --git a/src/model/unity-versioning.test.js b/src/model/unity-versioning.test.ts similarity index 100% rename from src/model/unity-versioning.test.js rename to src/model/unity-versioning.test.ts diff --git a/src/model/unity-versioning.js b/src/model/unity-versioning.ts similarity index 100% rename from src/model/unity-versioning.js rename to src/model/unity-versioning.ts diff --git a/src/model/unity.test.js b/src/model/unity.test.ts similarity index 100% rename from src/model/unity.test.js rename to src/model/unity.test.ts diff --git a/src/model/unity.js b/src/model/unity.ts similarity index 100% rename from src/model/unity.js rename to src/model/unity.ts diff --git a/src/model/versioning.test.js b/src/model/versioning.test.ts similarity index 86% rename from src/model/versioning.test.js rename to src/model/versioning.test.ts index 129faf04..80766d14 100644 --- a/src/model/versioning.test.js +++ b/src/model/versioning.test.ts @@ -36,9 +36,7 @@ describe('Versioning', () => { describe('branch', () => { it('returns headRef when set', () => { - const headReference = jest - .spyOn(Versioning, 'headRef', 'get') - .mockReturnValue('feature-branch-1'); + const headReference = jest.spyOn(Versioning, 'headRef', 'get').mockReturnValue('feature-branch-1'); expect(Versioning.branch).toStrictEqual('feature-branch-1'); expect(headReference).toHaveBeenCalledTimes(1); @@ -46,21 +44,15 @@ describe('Versioning', () => { it('returns part of Ref when set', () => { jest.spyOn(Versioning, 'headRef', 'get').mockReturnValue(undefined); - const reference = jest - .spyOn(Versioning, 'ref', 'get') - .mockReturnValue('refs/heads/feature-branch-2'); + const reference = jest.spyOn(Versioning, 'ref', 'get').mockReturnValue('refs/heads/feature-branch-2'); expect(Versioning.branch).toStrictEqual('feature-branch-2'); expect(reference).toHaveBeenCalledTimes(2); }); it('prefers headRef over ref when set', () => { - const headReference = jest - .spyOn(Versioning, 'headRef', 'get') - .mockReturnValue('feature-branch-1'); - const reference = jest - .spyOn(Versioning, 'ref', 'get') - .mockReturnValue('refs/heads/feature-2'); + const headReference = jest.spyOn(Versioning, 'headRef', 'get').mockReturnValue('feature-branch-1'); + const reference = jest.spyOn(Versioning, 'ref', 'get').mockReturnValue('refs/heads/feature-2'); expect(Versioning.branch).toStrictEqual('feature-branch-1'); expect(headReference).toHaveBeenCalledTimes(1); @@ -135,29 +127,21 @@ describe('Versioning', () => { }, ); - test.each([undefined, 'v0', 'v0.1', 'v0.1.2', 'v0.1-2', 'v0.1-2-g'])( - 'does not like %s', - (description) => { - expect(Versioning.descriptionRegex1.test(description)).toBeFalsy(); - // Also never expect without the v to work for any of these cases. - expect(Versioning.descriptionRegex1.test(description?.substr(1))).toBeFalsy(); - }, - ); + test.each([undefined, 'v0', 'v0.1', 'v0.1.2', 'v0.1-2', 'v0.1-2-g'])('does not like %s', (description) => { + expect(Versioning.descriptionRegex1.test(description)).toBeFalsy(); + // Also never expect without the v to work for any of these cases. + expect(Versioning.descriptionRegex1.test(description?.substr(1))).toBeFalsy(); + }); }); describe('determineVersion', () => { - test.each([undefined, 0, 'somethingRandom'])( - 'throws for invalid strategy %s', - async (strategy) => { - await expect(Versioning.determineVersion(strategy)).rejects.toThrowErrorMatchingSnapshot(); - }, - ); + test.each([undefined, 0, 'somethingRandom'])('throws for invalid strategy %s', async (strategy) => { + await expect(Versioning.determineVersion(strategy)).rejects.toThrowErrorMatchingSnapshot(); + }); describe('opt out strategy', () => { it("returns 'none'", async () => { - await expect(Versioning.determineVersion('None', 'v1.0')).resolves.toMatchInlineSnapshot( - `"none"`, - ); + await expect(Versioning.determineVersion('None', 'v1.0')).resolves.toMatchInlineSnapshot(`"none"`); }); }); @@ -165,18 +149,14 @@ describe('Versioning', () => { test.each([undefined, 0, 'v0.1', '1', 'CamelCase', 'dashed-version'])( 'returns the inputVersion for %s', async (inputVersion) => { - await expect(Versioning.determineVersion('Custom', inputVersion)).resolves.toStrictEqual( - inputVersion, - ); + await expect(Versioning.determineVersion('Custom', inputVersion)).resolves.toStrictEqual(inputVersion); }, ); }); describe('semantic strategy', () => { it('refers to generateSemanticVersion', async () => { - const generateSemanticVersion = jest - .spyOn(Versioning, 'generateSemanticVersion') - .mockResolvedValue('1.3.37'); + const generateSemanticVersion = jest.spyOn(Versioning, 'generateSemanticVersion').mockResolvedValue('1.3.37'); await expect(Versioning.determineVersion('Semantic')).resolves.toStrictEqual('1.3.37'); expect(generateSemanticVersion).toHaveBeenCalledTimes(1); @@ -185,9 +165,7 @@ describe('Versioning', () => { describe('tag strategy', () => { it('refers to generateTagVersion', async () => { - const generateTagVersion = jest - .spyOn(Versioning, 'generateTagVersion') - .mockResolvedValue('0.1'); + const generateTagVersion = jest.spyOn(Versioning, 'generateTagVersion').mockResolvedValue('0.1'); await expect(Versioning.determineVersion('Tag')).resolves.toStrictEqual('0.1'); expect(generateTagVersion).toHaveBeenCalledTimes(1); @@ -198,9 +176,7 @@ describe('Versioning', () => { it('throws a not implemented exception', async () => { const strategy = 'Test'; jest.spyOn(Versioning, 'strategies', 'get').mockReturnValue({ [strategy]: strategy }); - await expect(Versioning.determineVersion(strategy)).rejects.toThrowError( - NotImplementedException, - ); + await expect(Versioning.determineVersion(strategy)).rejects.toThrowError(NotImplementedException); }); }); }); @@ -261,10 +237,7 @@ describe('Versioning', () => { it('falls back to the second strategy when the first fails', async () => { jest.spyOn(core, 'warning').mockImplementation(() => {}); - const gitFetch = jest - .spyOn(System, 'run') - .mockResolvedValue(undefined) - .mockRejectedValueOnce(undefined); + const gitFetch = jest.spyOn(System, 'run').mockResolvedValue(undefined).mockRejectedValueOnce(undefined); await expect(Versioning.fetch()).resolves.not.toThrow(); expect(gitFetch).toHaveBeenCalledTimes(2); diff --git a/src/model/versioning.js b/src/model/versioning.ts similarity index 98% rename from src/model/versioning.js rename to src/model/versioning.ts index 6ade2330..9c6a20e5 100644 --- a/src/model/versioning.js +++ b/src/model/versioning.ts @@ -82,9 +82,7 @@ export default class Versioning { static async determineVersion(strategy, inputVersion) { // Validate input if (!Object.hasOwnProperty.call(this.strategies, strategy)) { - throw new ValidationError( - `Versioning strategy should be one of ${Object.values(this.strategies).join(', ')}.`, - ); + throw new ValidationError(`Versioning strategy should be one of ${Object.values(this.strategies).join(', ')}.`); } let version; @@ -167,6 +165,7 @@ export default class Versioning { const description = await this.getVersionDescription(); try { + // @ts-ignore const [match, tag, commits, hash] = this.descriptionRegex1.exec(description); return {