From da497a78db01b537e753fb849d87baf5c39761e2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jakub=20Ro=C5=BCek?= <jakub@stoplight.io>
Date: Thu, 14 Sep 2023 17:58:13 +0200
Subject: [PATCH] chore(cli): inline version

---
 .gitignore                              |  1 +
 package.json                            |  9 ++++++++-
 packages/cli/package.json               |  5 ++++-
 packages/cli/scripts/inline-version.mjs | 11 +++++++++++
 yarn.lock                               | 17 +++++++++++++++++
 5 files changed, 41 insertions(+), 2 deletions(-)
 create mode 100644 packages/cli/scripts/inline-version.mjs

diff --git a/.gitignore b/.gitignore
index e796c1f4b..66c869471 100644
--- a/.gitignore
+++ b/.gitignore
@@ -12,6 +12,7 @@ node_modules
 
 packages/formatters/src/html/templates.ts
 packages/cli/binaries
+packages/cli/src/version.ts
 /test-harness/tmp/
 /test-harness/tests/
 packages/*/dist
diff --git a/package.json b/package.json
index 6cb5dda0f..cd62f8269 100644
--- a/package.json
+++ b/package.json
@@ -37,7 +37,7 @@
     "test.harness": "yarn pretest.harness && jest -c test-harness/jest.config.mjs",
     "test.jest": "jest --silent --cacheDirectory=.cache/.jest",
     "test.karma": "karma start",
-    "prepare": "husky install",
+    "prepare": "husky install && yarn workspaces foreach run prepare",
     "prerelease": "patch-package",
     "release": "yarn prerelease && multi-semantic-release --deps.bump=satisfy",
     "jest": "jest"
@@ -58,6 +58,12 @@
       "@semantic-release/commit-analyzer",
       "@semantic-release/release-notes-generator",
       "@semantic-release/changelog",
+      [
+        "@semantic-release/exec",
+        {
+          "publishCmd": "node scripts/inline-version.mjs ${nextRelease.version}"
+        }
+      ],
       "@semantic-release/npm",
       [
         "@semantic-release/github",
@@ -73,6 +79,7 @@
     "@commitlint/config-conventional": "^12.1.4",
     "@octokit/core": "^3.5.1",
     "@semantic-release/changelog": "^6.0.3",
+    "@semantic-release/exec": "^6.0.3",
     "@semantic-release/git": "^10.0.1",
     "@semantic-release/github": "^8.1.0",
     "@semantic-release/npm": "^9.0.2",
diff --git a/packages/cli/package.json b/packages/cli/package.json
index c174dbd1d..ba49c74e4 100644
--- a/packages/cli/package.json
+++ b/packages/cli/package.json
@@ -24,6 +24,9 @@
     "url": "https://github.com/stoplightio/spectral.git"
   },
   "scripts": {
+    "prelint": "node scripts/inline-version.mjs",
+    "prepare": "node scripts/inline-version.mjs",
+    "prebuild": "node scripts/inline-version.mjs",
     "build.binary": "pkg . --output ./binaries/spectral",
     "build.windows": "pkg . --targets windows --out-path ./binaries",
     "build.nix": "pkg . --targets linux-x64,linux-arm64,macos-x64,macos-arm64,alpine-x64,alpine-arm64 --out-path ./binaries",
@@ -34,7 +37,7 @@
     "@stoplight/json": "~3.21.0",
     "@stoplight/path": "1.3.2",
     "@stoplight/spectral-core": "^1.18.3",
-    "@stoplight/spectral-formatters": "^1.2.0",
+    "@stoplight/spectral-formatters": "^1.3.0",
     "@stoplight/spectral-parsers": "^1.0.3",
     "@stoplight/spectral-ref-resolver": "^1.0.4",
     "@stoplight/spectral-ruleset-bundler": "^1.5.2",
diff --git a/packages/cli/scripts/inline-version.mjs b/packages/cli/scripts/inline-version.mjs
new file mode 100644
index 000000000..d9089fa52
--- /dev/null
+++ b/packages/cli/scripts/inline-version.mjs
@@ -0,0 +1,11 @@
+import * as fs from 'node:fs';
+import process from 'node:process';
+import { fileURLToPath } from 'node:url';
+import { join } from 'node:path';
+
+const cwd = join(fileURLToPath(import.meta.url), '../..');
+
+const version =
+  process.argv.length === 3 ? process.argv[2] : JSON.parse(fs.readFileSync(join(cwd, 'package.json'), 'utf8')).version;
+
+fs.writeFileSync(join(cwd, 'src/version.ts'), `export const VERSION = '${version}';\n`);
diff --git a/yarn.lock b/yarn.lock
index 626cc7257..b33444fbd 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2453,6 +2453,22 @@ __metadata:
   languageName: node
   linkType: hard
 
+"@semantic-release/exec@npm:^6.0.3":
+  version: 6.0.3
+  resolution: "@semantic-release/exec@npm:6.0.3"
+  dependencies:
+    "@semantic-release/error": ^3.0.0
+    aggregate-error: ^3.0.0
+    debug: ^4.0.0
+    execa: ^5.0.0
+    lodash: ^4.17.4
+    parse-json: ^5.0.0
+  peerDependencies:
+    semantic-release: ">=18.0.0"
+  checksum: c6ad2f02ff01a4709c4914f560d0343efea9afe993c733ff971da8bf89604a1460d87b26a1a2ace5992c5ace8e8d384cf314504e0c4b623fc8433e8e8d9e2fe0
+  languageName: node
+  linkType: hard
+
 "@semantic-release/git@npm:^10.0.1":
   version: 10.0.1
   resolution: "@semantic-release/git@npm:10.0.1"
@@ -11469,6 +11485,7 @@ __metadata:
     "@commitlint/config-conventional": ^12.1.4
     "@octokit/core": ^3.5.1
     "@semantic-release/changelog": ^6.0.3
+    "@semantic-release/exec": ^6.0.3
     "@semantic-release/git": ^10.0.1
     "@semantic-release/github": ^8.1.0
     "@semantic-release/npm": ^9.0.2