diff --git a/scripts/release/__tests__/createReleasePR.test.ts b/scripts/release/__tests__/createReleasePR.test.ts index b14cc0ec94f..bfeeb1a9de6 100644 --- a/scripts/release/__tests__/createReleasePR.test.ts +++ b/scripts/release/__tests__/createReleasePR.test.ts @@ -115,6 +115,7 @@ describe('createReleasePR', () => { current: '0.0.1', releaseType: null, noCommit: true, + next: null, }, java: { diff --git a/scripts/release/__tests__/updateAPIVersions.test.ts b/scripts/release/__tests__/updateAPIVersions.test.ts index a7fa3d3c02b..92922354b5f 100644 --- a/scripts/release/__tests__/updateAPIVersions.test.ts +++ b/scripts/release/__tests__/updateAPIVersions.test.ts @@ -1,3 +1,4 @@ +import { getNextVersion } from '../createReleasePR'; import { getVersionsToRelease } from '../updateAPIVersions'; describe('updateAPIversions', () => { @@ -6,16 +7,19 @@ describe('updateAPIversions', () => { javascript: { current: '1.0.0', releaseType: 'minor', + next: getNextVersion('1.0.0', 'minor'), }, php: { current: '2.0.0', releaseType: 'patch', + next: getNextVersion('2.0.0', 'patch'), }, java: { current: '3.0.0', releaseType: null, noCommit: true, skipRelease: true, + next: null, }, }); @@ -32,15 +36,18 @@ describe('updateAPIversions', () => { javascript: { current: '0.0.1', releaseType: 'patch', + next: getNextVersion('0.0.1', 'patch'), }, php: { current: '0.0.1', releaseType: 'minor', + next: getNextVersion('0.0.1', 'minor'), }, java: { current: '0.0.1', releaseType: 'patch', skipRelease: true, + next: null, }, }); expect(versions).toEqual({ diff --git a/scripts/release/createReleasePR.ts b/scripts/release/createReleasePR.ts index 6207b4cc5fe..c3539bbde90 100755 --- a/scripts/release/createReleasePR.ts +++ b/scripts/release/createReleasePR.ts @@ -22,7 +22,7 @@ import { RELEASED_TAG } from './common'; import TEXT from './text'; import type { Versions, - VersionsWithoutReleaseType, + VersionsBeforeBump, PassedCommit, Commit, Scope, @@ -34,7 +34,7 @@ dotenv.config({ path: ROOT_ENV_PATH }); const COMMON_SCOPES = ['specs']; -export function readVersions(): VersionsWithoutReleaseType { +export function readVersions(): VersionsBeforeBump { return Object.fromEntries( LANGUAGES.map((lang) => [lang, { current: getPackageVersionDefault(lang) }]) ); @@ -177,6 +177,10 @@ export function getNextVersion( ); } + console.log( + `Next version is '${nextVersion}', release type: '${releaseType}'` + ); + return nextVersion; } @@ -185,7 +189,7 @@ export function decideReleaseStrategy({ versions, commits, }: { - versions: VersionsWithoutReleaseType; + versions: VersionsBeforeBump; commits: PassedCommit[]; }): Versions { return Object.entries(versions).reduce( diff --git a/scripts/release/types.ts b/scripts/release/types.ts index e029f9328d1..4ab32829098 100644 --- a/scripts/release/types.ts +++ b/scripts/release/types.ts @@ -5,7 +5,7 @@ import type { Language } from '../types'; export type Version = { current: string; releaseType: ReleaseType | null; - next?: string; + next: string | null; skipRelease?: boolean; noCommit?: boolean; }; @@ -14,8 +14,8 @@ export type Versions = { [lang: string]: Version; }; -export type VersionsWithoutReleaseType = { - [lang: string]: Omit; +export type VersionsBeforeBump = { + [lang: string]: Omit; }; export type Scope = Language | 'specs'; @@ -38,7 +38,9 @@ export type Commit = | { error: 'unknown-language-scope' }; export type VersionsToRelease = { - [lang in Language]?: Pick & { + [lang in Language]?: { + current: string; + next: string; releaseType: ReleaseType; }; }; diff --git a/scripts/release/updateAPIVersions.ts b/scripts/release/updateAPIVersions.ts index 7f705326c4e..fac09b3f8fc 100755 --- a/scripts/release/updateAPIVersions.ts +++ b/scripts/release/updateAPIVersions.ts @@ -21,7 +21,6 @@ import { getClientsConfigField, getGitHubUrl, getLanguageFolder, - getPackageVersionDefault, } from '../config'; import type { Language } from '../types'; @@ -31,16 +30,13 @@ dotenv.config({ path: ROOT_ENV_PATH }); /** * Bump each client version of the JavaScript client in openapitools.json. + * + * We don't use the pre-computed `next` version for JavaScript, because the packages have independent versioning. */ async function updateVersionForJavascript( - versionsToRelease: VersionsToRelease + jsVersion: NonNullable ): Promise { - if (!versionsToRelease.javascript) { - return; - } - // Sets the new version of the JavaScript client - const jsVersion = versionsToRelease.javascript; Object.values(GENERATORS) .filter((gen) => gen.language === 'javascript') .forEach((gen) => { @@ -58,7 +54,7 @@ async function updateVersionForJavascript( }); await fsp.writeFile( - toAbsolutePath('config/openapitools.json'), + toAbsolutePath('config/openapitools.json').concat('\n'), JSON.stringify(openapiConfig, null, 2) ); @@ -81,14 +77,16 @@ async function updateVersionForJavascript( clientsConfig.javascript.utilsPackageVersion = nextUtilsPackageVersion; await fsp.writeFile( toAbsolutePath('config/clients.config.json'), - JSON.stringify(clientsConfig, null, 2) + JSON.stringify(clientsConfig, null, 2).concat('\n') ); } async function updateConfigFiles( versionsToRelease: VersionsToRelease ): Promise { - await updateVersionForJavascript(versionsToRelease); + if (versionsToRelease.javascript) { + await updateVersionForJavascript(versionsToRelease.javascript); + } // update the other versions in clients.config.json LANGUAGES.forEach((lang) => { @@ -96,23 +94,12 @@ async function updateConfigFiles( return; } - const releaseType = versionsToRelease[lang]!.releaseType; - const nextVersion = versionsToRelease[lang]!.next; - - if (!nextVersion) { - throw new Error( - `Failed to bump version ${getPackageVersionDefault( - lang - )} by ${releaseType}.` - ); - } - - clientsConfig[lang].packageVersion = nextVersion; + clientsConfig[lang].packageVersion = versionsToRelease[lang]!.next; }); await fsp.writeFile( toAbsolutePath('config/clients.config.json'), - JSON.stringify(clientsConfig, null, 2) + JSON.stringify(clientsConfig, null, 2).concat('\n') ); } @@ -146,8 +133,8 @@ export function getVersionsToRelease(versions: Versions): VersionsToRelease { const versionsToRelease: VersionsToRelease = {}; Object.entries(versions).forEach( - ([lang, { noCommit, current, skipRelease, releaseType }]) => { - if (noCommit || skipRelease || !current) { + ([lang, { noCommit, current, skipRelease, releaseType, next }]) => { + if (noCommit || skipRelease || !current || !next) { return; } @@ -163,6 +150,7 @@ export function getVersionsToRelease(versions: Versions): VersionsToRelease { versionsToRelease[lang] = { current, releaseType, + next, }; } ); @@ -221,7 +209,7 @@ export async function updateAPIVersions( lang: lang as Language, changelog, current, - next: next!, + next, }); }