From 403e7aaf3eccf47936414c34d85f21c98f86ce91 Mon Sep 17 00:00:00 2001 From: Rubilmax Date: Fri, 18 Oct 2024 13:26:05 +0200 Subject: [PATCH] ci(publish): split script --- .github/workflows/publish.yml | 5 ++- scripts/release/bumper.js | 33 ++++++++++++++++++++ release.js => scripts/release/publish.js | 39 ++---------------------- scripts/release/version.js | 7 +++++ 4 files changed, 47 insertions(+), 37 deletions(-) create mode 100644 scripts/release/bumper.js rename release.js => scripts/release/publish.js (71%) create mode 100644 scripts/release/version.js diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 898005c8..e98fd074 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -25,9 +25,12 @@ jobs: - run: pnpm install + # First, set version of each package to the latest tagged so they are referenced correclty in dependencies. + - run: pnpm -r --parallel --no-reporter-hide-prefix -c exec 'node ../../scripts/release/version.js' + - run: echo "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" > ~/.npmrc - - run: pnpm -r --parallel --no-reporter-hide-prefix -c exec 'node ../../release.js' + - run: pnpm -r --parallel --no-reporter-hide-prefix -c exec 'node ../../scripts/release/publish.js' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/scripts/release/bumper.js b/scripts/release/bumper.js new file mode 100644 index 00000000..4c97656f --- /dev/null +++ b/scripts/release/bumper.js @@ -0,0 +1,33 @@ +import { basename } from "node:path"; +import { Bumper } from "conventional-recommended-bump"; + +export const prefix = `@morpho-org/${basename(process.cwd())}-`; +export const bumper = new Bumper().tag({ prefix }).commits({ path: "." }); + +export const whatBump = (commits) => { + if (commits.length === 0) return; + + let level = 2; + + commits.forEach((commit) => { + if (commit.notes.length > 0) { + level = 0; + } else if (commit.type === "feat") { + if (level === 2) { + level = 1; + } + } + }); + + return { level }; +}; + +export const [branch, version] = await Promise.all([ + bumper.gitClient.getCurrentBranch(), + bumper.gitClient.getVersionFromTags({ prefix }), +]); + +if (!version) { + console.error("Cannot find version from tags"); + process.exit(1); +} diff --git a/release.js b/scripts/release/publish.js similarity index 71% rename from release.js rename to scripts/release/publish.js index d6f744b4..6a5f1552 100644 --- a/release.js +++ b/scripts/release/publish.js @@ -1,38 +1,8 @@ import { spawnSync } from "node:child_process"; -import { basename } from "node:path"; -import { Bumper } from "conventional-recommended-bump"; import { inc } from "semver"; +import { branch, bumper, prefix, version, whatBump } from "./bumper.js"; -const prefix = `@morpho-org/${basename(process.cwd())}-`; -const bumper = new Bumper().tag({ prefix }).commits({ path: "." }); - -let { releaseType } = await bumper.bump((commits) => { - if (commits.length === 0) return; - - let level = 2; - - commits.forEach((commit) => { - if (commit.notes.length > 0) { - level = 0; - } else if (commit.type === "feat") { - if (level === 2) { - level = 1; - } - } - }); - - return { level }; -}); - -const [branch, version] = await Promise.all([ - bumper.gitClient.getCurrentBranch(), - bumper.gitClient.getVersionFromTags({ prefix }), -]); - -if (!version) { - console.error("Cannot find version from tags"); - process.exit(1); -} +let { releaseType } = await bumper.bump(whatBump); if (releaseType) { if (branch !== "main") releaseType = "prerelease"; @@ -51,8 +21,7 @@ if (releaseType) { let { stderr, stdout, error } = spawnSync("pnpm", ["version", newVersion], { encoding: "utf8", }); - if (stdout) console.log(stdout); - if (stderr) console.log(stderr); // Ignore versioning errors. + if (stdout) console.log(stdout); // Ignore versioning errors. ({ stderr, stdout, error } = spawnSync( "pnpm", @@ -126,5 +95,3 @@ if (releaseType) { process.exit(1); } } else console.debug(`No version bump from ${version} on branch ${branch}`); - -process.exit(0); diff --git a/scripts/release/version.js b/scripts/release/version.js new file mode 100644 index 00000000..ce1bdabb --- /dev/null +++ b/scripts/release/version.js @@ -0,0 +1,7 @@ +import { version } from "./bumper.js"; + +const { stdout } = spawnSync("pnpm", ["version", version], { + encoding: "utf8", +}); + +if (stdout) console.log(stdout); // Ignore versioning errors.