Skip to content

chore(ci): remove the option to just update repository #278

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Mar 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

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
68 changes: 17 additions & 51 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 willReleaseLibrary = (lang: string): boolean =>
Boolean(versionsToRelease[lang]);
const langsToRelease = Object.keys(versionsToRelease);

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,24 @@ 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 run(`git push`, { cwd: tempGitDir });
await gitCommit({
message: `chore: release ${next}`,
cwd: tempGitDir,
});
await execa('git', ['tag', `v${next}`], { cwd: tempGitDir });
await run(`git push --follow-tags`, { 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;
};
};