From 68c242ae81a31886fafe8b52a1bfeaa1ff6fa8bc Mon Sep 17 00:00:00 2001 From: Patrick Toal Date: Sat, 22 Jun 2024 12:01:59 -0400 Subject: [PATCH] feat: Add automatic version.js generation --- .gitignore | 3 +++ generate-version.js | 26 ++++++++++++++++++++++++++ package.json | 5 +++-- quasar.config.js | 5 ----- src/components/ToolbarComponent.vue | 5 ++--- src/pages/LoginPage.vue | 3 ++- src/pages/SignupPage.vue | 3 ++- 7 files changed, 38 insertions(+), 12 deletions(-) create mode 100644 generate-version.js diff --git a/.gitignore b/.gitignore index 80d5a86..ad8aaf6 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,6 @@ yarn-error.log* # local .env files .env* + +# version file +src/version.js \ No newline at end of file diff --git a/generate-version.js b/generate-version.js new file mode 100644 index 0000000..a32a9f2 --- /dev/null +++ b/generate-version.js @@ -0,0 +1,26 @@ +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +try { + // Run semantic-release to get the next version number + const dryRunOutput = execSync('npx semantic-release --dry-run').toString(); + + // Extract the version number from the semantic-release output + const versionMatch = dryRunOutput.match(/next version in .* is ([\d.]+)/); + if (!versionMatch) { + throw new Error('Version number not found in semantic-release output'); + } + const version = versionMatch[1]; + + // Create version content + const versionContent = `export const APP_VERSION = '${version}';\n`; + const versionFilePath = path.resolve(__dirname, 'src/version.js'); + + // Write version to file + fs.writeFileSync(versionFilePath, versionContent, 'utf8'); + console.log(`Version file generated with version: ${version}`); +} catch (error) { + console.error('Error generating version file:', error); + process.exit(1); +} diff --git a/package.json b/package.json index e7a9387..87748cc 100644 --- a/package.json +++ b/package.json @@ -6,11 +6,12 @@ "author": "Patrick Toal ", "private": true, "scripts": { + "generate-version": "node generate-version.js", "lint": "eslint --ext .js,.ts,.vue ./", "format": "prettier --write \"**/*.{js,ts,vue,scss,html,md,json}\" --ignore-path .gitignore", "test": "echo \"No test specified\" && exit 0", - "dev": "quasar dev", - "build": "quasar build" + "dev": "npm run generate-version && quasar dev", + "build": "npm run generate-version && quasar build" }, "dependencies": { "@quasar/extras": "^1.16.11", diff --git a/quasar.config.js b/quasar.config.js index 08542f1..99a2802 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -50,11 +50,6 @@ module.exports = configure(function ({ dev }) { // Full list of options: https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#build build: { - env: { - VUE_APP_VERSION: dev - ? 'dev-' + gitCommitInfo().shortHash - : packageJson.version, - }, target: { browser: ['es2019', 'edge88', 'firefox78', 'chrome87', 'safari13.1'], node: 'node16', diff --git a/src/components/ToolbarComponent.vue b/src/components/ToolbarComponent.vue index 68f4866..6235239 100644 --- a/src/components/ToolbarComponent.vue +++ b/src/components/ToolbarComponent.vue @@ -11,7 +11,7 @@ {{ pageTitle }} -
v{{ VERSION }}
+
v{{ APP_VERSION }}
import { ref } from 'vue'; import LeftDrawer from 'components/LeftDrawer.vue'; - -const VERSION = process.env.VUE_APP_VERSION; +import APP_VERSION from 'version.js'; const leftDrawerOpen = ref(false); function toggleLeftDrawer() { diff --git a/src/pages/LoginPage.vue b/src/pages/LoginPage.vue index 989f417..4d16e13 100644 --- a/src/pages/LoginPage.vue +++ b/src/pages/LoginPage.vue @@ -83,13 +83,14 @@ import { Dialog, Notify } from 'quasar'; import { useAuthStore } from 'src/stores/auth'; import { useRouter } from 'vue-router'; import { AppwriteException } from 'appwrite'; +import { APP_VERSION } from 'version.js'; const email = ref(''); const token = ref(''); const userId = ref(); const router = useRouter(); -console.log('version:' + process.env.VUE_APP_VERSION); +console.log('version:' + APP_VERSION); const doTokenLogin = async () => { const authStore = useAuthStore(); diff --git a/src/pages/SignupPage.vue b/src/pages/SignupPage.vue index afea5ef..e71fe55 100644 --- a/src/pages/SignupPage.vue +++ b/src/pages/SignupPage.vue @@ -61,12 +61,13 @@ import { useAuthStore } from 'src/stores/auth'; import NewPasswordComponent from 'src/components/NewPasswordComponent.vue'; import { Dialog } from 'quasar'; import { useRouter } from 'vue-router'; +import { APP_VERSION } from 'version.js'; const email = ref(''); const password = ref(''); const router = useRouter(); -console.log('version:' + process.env.VUE_APP_VERSION); +console.log('version:' + APP_VERSION); const doRegister = async () => { if (email.value && password.value) {