summaryrefslogtreecommitdiffstats
path: root/scripts/autorelease.js
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/autorelease.js')
-rw-r--r--scripts/autorelease.js70
1 files changed, 70 insertions, 0 deletions
diff --git a/scripts/autorelease.js b/scripts/autorelease.js
new file mode 100644
index 0000000..f506cf1
--- /dev/null
+++ b/scripts/autorelease.js
@@ -0,0 +1,70 @@
+const fs = require("fs");
+const { exec, execSync } = require("child_process");
+const core = require("@actions/core");
+
+const excalidrawDir = `${__dirname}/../packages/excalidraw`;
+const excalidrawPackage = `${excalidrawDir}/package.json`;
+const pkg = require(excalidrawPackage);
+const isPreview = process.argv.slice(2)[0] === "preview";
+
+const getShortCommitHash = () => {
+ return execSync("git rev-parse --short HEAD").toString().trim();
+};
+
+const publish = () => {
+ const tag = isPreview ? "preview" : "next";
+
+ try {
+ execSync(`yarn --frozen-lockfile`);
+ execSync(`yarn run build:esm`, { cwd: excalidrawDir });
+ execSync(`yarn --cwd ${excalidrawDir} publish --tag ${tag}`);
+ console.info(`Published ${pkg.name}@${tag}🎉`);
+ core.setOutput(
+ "result",
+ `**Preview version has been shipped** :rocket:
+ You can use [@excalidraw/excalidraw@${pkg.version}](https://www.npmjs.com/package/@excalidraw/excalidraw/v/${pkg.version}) for testing!`,
+ );
+ } catch (error) {
+ core.setOutput("result", "package couldn't be published :warning:!");
+ console.error(error);
+ process.exit(1);
+ }
+};
+// get files changed between prev and head commit
+exec(`git diff --name-only HEAD^ HEAD`, async (error, stdout, stderr) => {
+ if (error || stderr) {
+ console.error(error);
+ core.setOutput("result", ":warning: Package couldn't be published!");
+ process.exit(1);
+ }
+ const changedFiles = stdout.trim().split("\n");
+
+ const excalidrawPackageFiles = changedFiles.filter((file) => {
+ return (
+ file.indexOf("packages/excalidraw") >= 0 ||
+ file.indexOf("buildPackage.js") > 0
+ );
+ });
+ if (!excalidrawPackageFiles.length) {
+ console.info("Skipping release as no valid diff found");
+ core.setOutput("result", "Skipping release as no valid diff found");
+ process.exit(0);
+ }
+
+ // update package.json
+ let version = `${pkg.version}-${getShortCommitHash()}`;
+
+ // update readme
+
+ if (isPreview) {
+ // use pullNumber-commithash as the version for preview
+ const pullRequestNumber = process.argv.slice(3)[0];
+ version = `${pkg.version}-${pullRequestNumber}-${getShortCommitHash()}`;
+ }
+ pkg.version = version;
+
+ fs.writeFileSync(excalidrawPackage, JSON.stringify(pkg, null, 2), "utf8");
+
+ console.info("Publish in progress...");
+ publish();
+});