From 5269660adc0192597639967ea28d60b7e3b8a26a Mon Sep 17 00:00:00 2001 From: Prozilla Date: Tue, 23 Jul 2024 15:33:34 +0200 Subject: [PATCH] feat: Added script for creating GH releases --- package.json | 3 +- .../shared/src/configs/app.vite.config.d.ts | 9 --- packages/shared/src/configs/index.d.ts | 1 - pnpm-lock.yaml | 9 +++ scripts/releasePackage.ts | 65 +++++++++++++++++++ tsconfig.json | 5 +- 6 files changed, 79 insertions(+), 13 deletions(-) delete mode 100644 packages/shared/src/configs/app.vite.config.d.ts delete mode 100644 packages/shared/src/configs/index.d.ts create mode 100644 scripts/releasePackage.ts diff --git a/package.json b/package.json index 2d9c8e7..fc9db32 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "docs:generate": "pnpm --filter @prozilla-os/docs run generate", "packages:build": "pnpm -r --sequential --filter prozilla-os... build", "packages:update": "npx changeset && pnpm changeset version", - "packages:release": "pnpm changeset publish" + "packages:release": "pnpm changeset publish && pnpm vite-node scripts/releasePackage.ts" }, "workspaces": [ "packages/*", @@ -42,6 +42,7 @@ "url": "git+https://github.com/prozilla-os/ProzillaOS.git" }, "dependencies": { + "commander": "^12.1.0", "pnpm": "^9.5.0" }, "devDependencies": { diff --git a/packages/shared/src/configs/app.vite.config.d.ts b/packages/shared/src/configs/app.vite.config.d.ts deleted file mode 100644 index b5bbaa7..0000000 --- a/packages/shared/src/configs/app.vite.config.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { UserConfig } from "vite"; -/** - * Helper function for creating Vite configurations for ProzillaOS apps - * @param basePath - Path of base directory - * @param entryPath - Path of library entry - * @returns Vite configuration - * @see https://vitejs.dev/config/ - */ -export declare const appViteConfig: (basePath: string, entryPath: string) => UserConfig; diff --git a/packages/shared/src/configs/index.d.ts b/packages/shared/src/configs/index.d.ts deleted file mode 100644 index aa59710..0000000 --- a/packages/shared/src/configs/index.d.ts +++ /dev/null @@ -1 +0,0 @@ -export { appViteConfig } from "./app.vite.config"; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1dab79c..174ebd7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ importers: .: dependencies: + commander: + specifier: ^12.1.0 + version: 12.1.0 pnpm: specifier: ^9.5.0 version: 9.5.0 @@ -2014,6 +2017,10 @@ packages: resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} engines: {node: '>=16'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@8.3.0: resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} engines: {node: '>= 12'} @@ -5567,6 +5574,8 @@ snapshots: commander@11.1.0: {} + commander@12.1.0: {} + commander@8.3.0: {} commander@9.5.0: diff --git a/scripts/releasePackage.ts b/scripts/releasePackage.ts new file mode 100644 index 0000000..c2e6ce6 --- /dev/null +++ b/scripts/releasePackage.ts @@ -0,0 +1,65 @@ +import fs from "node:fs"; +import path from "node:path"; +import { execSync } from "node:child_process"; +import { version, name } from "../packages/prozilla-os/package.json"; +import os from "node:os"; +import { ANSI } from "../packages/core/src/constants"; + +const getChangelog = (): string => { + const changelogPath = path.resolve(__dirname, "../packages/prozilla-os/CHANGELOG.md"); + const changelog = fs.readFileSync(changelogPath, "utf-8"); + + const changelogEntries = changelog.split("\n## "); + + const changelogEntry = changelogEntries.find((entry) => entry.startsWith(version)); + + if (changelogEntry) { + return changelogEntry; + } else { + return `No changelog entry found for version ${version}`; + } +}; + +const createGitHubRelease = (): void => { + const changelogFilePath = path.join(os.tmpdir(), `CHANGELOG-${version}.md`); + + try { + console.log(`Context: ${ANSI.decoration.bold}${name}${ANSI.reset}\n`); + + const changelog = getChangelog(); + const tagName = `prozilla-os@${version}`; + const releaseTitle = `Release ${version}`; + + // Write changelog to a temporary file + fs.writeFileSync(changelogFilePath, changelog); + + // Push all tags, not recommended + console.log(`${ANSI.fg.yellow}Pushing tags...${ANSI.reset}`); + execSync("git push --tags", { + stdio: "inherit" + }); + + // Create a new release + console.log(`${ANSI.fg.yellow}Creating release...${ANSI.reset}`); + execSync(`gh release create ${tagName} --title "${releaseTitle}" --notes-file "${changelogFilePath}"`, { + stdio: "inherit" + }); + + console.log(`\n${ANSI.fg.green}✓ Release created:${ANSI.reset} ${releaseTitle}`); + } catch (error) { + if ((error as Record).stdout) { + console.error((error as Record).stdout.toString()); + } + if ((error as Record).stderr) { + console.error((error as Record).stderr.toString()); + } + + console.error(`${ANSI.fg.red}⚠ Failed to create release:${ANSI.reset} ${(error as Error).message}`); + process.exit(1); + } finally { + // Clean up the temporary file + fs.unlinkSync(changelogFilePath); + } +}; + +createGitHubRelease(); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index e02ad6e..85f5573 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,7 @@ /* Modules */ "module": "ESNext", "moduleResolution": "Bundler", - "types": ["vite/client", "vite-plugin-svgr/client"], + "types": ["vite/client", "vite-plugin-svgr/client", "node"], "allowUmdGlobalAccess": true, "resolveJsonModule": true, @@ -35,7 +35,8 @@ } }, "include": [ - "packages/**/*" + "packages/**/*", + "scripts/**/*" ], "exclude": [ "**/node_modules/**/*",