build: automate release step fully (#5414)

* build: automate release step fully

* exit process when error

* Add npm scripts for release and prerelease

* update docs with release setps
This commit is contained in:
Aakansha Doshi 2022-07-06 15:20:52 +05:30 committed by GitHub
parent 76a5bb060e
commit 11a3380d83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 81 additions and 29 deletions

View File

@ -113,6 +113,8 @@
"test:typecheck": "tsc", "test:typecheck": "tsc",
"test:update": "yarn test:app --updateSnapshot --watchAll=false", "test:update": "yarn test:app --updateSnapshot --watchAll=false",
"test": "yarn test:app", "test": "yarn test:app",
"autorelease": "node scripts/autorelease.js" "autorelease": "node scripts/autorelease.js",
"prerelease": "node scripts/prerelease.js",
"release": "node scripts/release.js"
} }
} }

37
scripts/prerelease.js Normal file
View File

@ -0,0 +1,37 @@
const fs = require("fs");
const util = require("util");
const exec = util.promisify(require("child_process").exec);
const updateChangelog = require("./updateChangelog");
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
const excalidrawPackage = `${excalidrawDir}/package.json`;
const updatePackageVersion = (nextVersion) => {
const pkg = require(excalidrawPackage);
pkg.version = nextVersion;
const content = `${JSON.stringify(pkg, null, 2)}\n`;
fs.writeFileSync(excalidrawPackage, content, "utf-8");
};
const prerelease = async (nextVersion) => {
try {
await updateChangelog(nextVersion);
updatePackageVersion(nextVersion);
await exec(`git add -u`);
await exec(
`git commit -m "docs: release @excalidraw/excalidraw@${nextVersion} 🎉"`,
);
console.info("Done!");
} catch (error) {
console.error(error);
process.exit(1);
}
};
const nextVersion = process.argv.slice(2)[0];
if (!nextVersion) {
console.error("Pass the next version to release!");
process.exit(1);
}
prerelease(nextVersion);

View File

@ -1,10 +1,10 @@
const fs = require("fs"); const fs = require("fs");
const util = require("util"); const { execSync } = require("child_process");
const exec = util.promisify(require("child_process").exec);
const updateChangelog = require("./updateChangelog");
const excalidrawDir = `${__dirname}/../src/packages/excalidraw`; const excalidrawDir = `${__dirname}/../src/packages/excalidraw`;
const excalidrawPackage = `${excalidrawDir}/package.json`; const excalidrawPackage = `${excalidrawDir}/package.json`;
const pkg = require(excalidrawPackage);
const originalReadMe = fs.readFileSync(`${excalidrawDir}/README.md`, "utf8"); const originalReadMe = fs.readFileSync(`${excalidrawDir}/README.md`, "utf8");
const updateReadme = () => { const updateReadme = () => {
@ -17,35 +17,28 @@ const updateReadme = () => {
fs.writeFileSync(`${excalidrawDir}/README.md`, data, "utf8"); fs.writeFileSync(`${excalidrawDir}/README.md`, data, "utf8");
}; };
const updatePackageVersion = (nextVersion) => { const publish = () => {
const pkg = require(excalidrawPackage);
pkg.version = nextVersion;
const content = `${JSON.stringify(pkg, null, 2)}\n`;
fs.writeFileSync(excalidrawPackage, content, "utf-8");
};
const release = async (nextVersion) => {
try { try {
updateReadme(); execSync(`yarn --frozen-lockfile`);
await updateChangelog(nextVersion); execSync(`yarn --frozen-lockfile`, { cwd: excalidrawDir });
updatePackageVersion(nextVersion); execSync(`yarn run build:umd`, { cwd: excalidrawDir });
await exec(`git add -u`); execSync(`yarn --cwd ${excalidrawDir} publish`);
await exec(
`git commit -m "docs: release @excalidraw/excalidraw@${nextVersion} 🎉"`,
);
// revert readme after release
fs.writeFileSync(`${excalidrawDir}/README.md`, originalReadMe, "utf8");
console.info("Done!");
} catch (error) { } catch (error) {
console.error(error); console.error(error);
process.exit(1); process.exit(1);
} }
}; };
const nextVersion = process.argv.slice(2)[0]; const release = () => {
if (!nextVersion) { updateReadme();
console.error("Pass the next version to release!"); console.info("Note for stable readme removed");
process.exit(1);
} publish();
release(nextVersion); console.info(`Published ${pkg.version}!`);
// revert readme after release
fs.writeFileSync(`${excalidrawDir}/README.md`, originalReadMe, "utf8");
console.info("Readme reverted");
};
release();

View File

@ -1341,3 +1341,23 @@ You can create a test release by posting the below comment in your pull request
``` ```
Once the version is released `@excalibot` will post a comment with the release version. Once the version is released `@excalibot` will post a comment with the release version.
#### Creating a production release
To release the next stable version follow the below steps
```
yarn prerelease version
```
You need to pass the `version` for which you want to create the release. This will make the changes needed before making the release like updating `package.json`, `changelog` and more.
The next step is to run the `release` script
```
yarn release
```
This will publish the package.
Right now there are two steps to create a production release but once this works fine these scripts will be combined and more automation will be done.