Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 1 addition & 13 deletions scripts/release/__tests__/process-release.test.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { getVersionChangesText } from '../create-release-issue';
import { getVersionsToRelease, getLangsToUpdateRepo } from '../process-release';
import { getVersionsToRelease } from '../process-release';
import TEXT from '../text';

describe('process release', () => {
Expand All @@ -19,18 +19,6 @@ describe('process release', () => {
expect(versions.php.releaseType).toEqual('patch');
});

it('gets langs to update', () => {
expect(
getLangsToUpdateRepo(`
## Version Changes

- [ ] javascript: v1.0.0 -> \`minor\` (e.g. v1.1.0)
- [x] php: v2.0.0 -> \`patch\` (e.g. v2.0.1)
- [ ] java: v3.0.0 -> \`patch\` (e.g. v3.0.1)
`)
).toEqual(['javascript', 'java']);
});

it('parses issue body correctly', () => {
// This test is a glue between create-release-issue and process-release.
const issueBody = [
Expand Down
67 changes: 18 additions & 49 deletions scripts/release/process-release.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@ function getDateStamp(): string {

export function getVersionsToRelease(issueBody: string): VersionsToRelease {
const versionsToRelease: VersionsToRelease = {};
const dateStamp = getDateStamp();

getMarkdownSection(issueBody, TEXT.versionChangeHeader)
.split('\n')
Expand All @@ -77,23 +76,12 @@ export function getVersionsToRelease(issueBody: string): VersionsToRelease {
versionsToRelease[lang] = {
current,
releaseType: releaseType as ReleaseType,
dateStamp,
};
});

return versionsToRelease;
}

export function getLangsToUpdateRepo(issueBody: string): string[] {
return getMarkdownSection(issueBody, TEXT.versionChangeHeader)
.split('\n')
.map((line) => {
const result = line.match(/- \[ \] (.+): v(.+) -> `(.+)`/);
return result?.[1];
})
.filter(Boolean) as string[];
}

async function updateOpenApiTools(
versionsToRelease: VersionsToRelease
): Promise<void> {
Expand Down Expand Up @@ -126,25 +114,21 @@ async function updateChangelog({
issueBody,
current,
next,
dateStamp,
willReleaseLibrary,
}: {
lang: string;
issueBody: string;
current: string;
next: string;
dateStamp: string;
willReleaseLibrary: boolean;
}): Promise<void> {
const changelogPath = toAbsolutePath(
`${getLanguageFolder(lang)}/CHANGELOG.md`
);
const existingContent = (await exists(changelogPath))
? (await fsp.readFile(changelogPath)).toString()
: '';
const changelogHeader = willReleaseLibrary
? `## [v${next}](${getGitHubUrl(lang)}/compare/v${current}...v${next})`
: `## ${dateStamp}`;
const changelogHeader = `## [v${next}](${getGitHubUrl(
lang
)}/compare/v${current}...v${next})`;
const newChangelog = getMarkdownSection(
getMarkdownSection(issueBody, TEXT.changelogHeader),
`### ${lang}`
Expand Down Expand Up @@ -175,20 +159,13 @@ async function processRelease(): Promise<void> {
}

const versionsToRelease = getVersionsToRelease(issueBody);
const langsToUpdateRepo = getLangsToUpdateRepo(issueBody); // e.g. ['javascript', 'php']

await updateOpenApiTools(versionsToRelease);

const langsToReleaseOrUpdate = [
...Object.keys(versionsToRelease),
...langsToUpdateRepo,
];
const langsToRelease = Object.keys(versionsToRelease);

const willReleaseLibrary = (lang: string): boolean =>
Boolean(versionsToRelease[lang]);

for (const lang of langsToReleaseOrUpdate) {
const { current, releaseType, dateStamp } = versionsToRelease[lang];
for (const lang of langsToRelease) {
const { current, releaseType } = versionsToRelease[lang];
/*
About bumping versions of JS clients:

Expand All @@ -215,14 +192,12 @@ async function processRelease(): Promise<void> {
issueBody,
current,
next: next!,
dateStamp,
willReleaseLibrary: willReleaseLibrary(lang),
});
}

// We push commits to each repository AFTER all the generations are done.
// Otherwise, we will end up having broken release.
for (const lang of langsToReleaseOrUpdate) {
for (const lang of langsToRelease) {
const { tempGitDir } = await cloneRepository({
lang,
githubToken: process.env.GITHUB_TOKEN,
Expand All @@ -235,33 +210,27 @@ async function processRelease(): Promise<void> {
await configureGitHubAuthor(tempGitDir);
await run(`git add .`, { cwd: tempGitDir });

const { current, dateStamp, releaseType } = versionsToRelease[lang];
const { current, releaseType } = versionsToRelease[lang];
const next = semver.inc(current, releaseType);

if (willReleaseLibrary(lang)) {
await gitCommit({
message: `chore: release ${next}`,
cwd: tempGitDir,
});
if (process.env.VERSION_TAG_ON_RELEASE === 'true') {
await execa('git', ['tag', `v${next}`], { cwd: tempGitDir });
await run(`git push --tags`, { cwd: tempGitDir });
}
} else {
await gitCommit({
message: `chore: update repo ${dateStamp}`,
cwd: tempGitDir,
});
await gitCommit({
message: `chore: release ${next}`,
cwd: tempGitDir,
});
if (process.env.VERSION_TAG_ON_RELEASE === 'true') {
await execa('git', ['tag', `v${next}`], { cwd: tempGitDir });
await run(`git push --tags`, { cwd: tempGitDir });
}
await run(`git push`, { cwd: tempGitDir });
}

// Commit and push from the monorepo level.
await configureGitHubAuthor();
await run(`git add .`);
await execa('git', ['commit', '-m', `chore: release ${getDateStamp()}`]);
const dateStamp = getDateStamp();
await execa('git', ['commit', '-m', `chore: release ${dateStamp}`]);
await gitCommit({
message: `chore: release ${getDateStamp()}`,
message: `chore: release ${dateStamp}`,
});
await run(`git push`);

Expand Down
3 changes: 1 addition & 2 deletions scripts/release/text.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ export default {
currentVersionNotFound: `current version not found`,
descriptionVersionChanges: [
`**Checked** → Update version, update repository, and release the library.`,
`**Un-checked** → Update repository.`,
`**Line removed** → Do nothing.`,
`**Un-checked** → Do nothing`,
].join('\n'),
indenpendentVersioning: `
<details>
Expand Down
1 change: 0 additions & 1 deletion scripts/release/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,5 @@ export type VersionsToRelease = {
[lang: string]: {
current: string;
releaseType: ReleaseType;
dateStamp: string;
};
};