From 4f985525b03a3d3b9d254098192eb08020634fd9 Mon Sep 17 00:00:00 2001 From: florianbgt Date: Tue, 13 May 2025 15:34:28 +0200 Subject: [PATCH] ci for binaries release --- .github/workflows/release.yml | 49 ++++++++++----- packages/cli/CHANGELOG.md => CHANGELOG.md | 4 -- deno.json | 7 ++- deno.lock | 10 +++ packages/cli/deno.json | 9 ++- .../cli/src/cli/helpers/checkNpmVersion.ts | 2 +- packages/cli/src/telemetry.ts | 2 +- scripts/bump_version.ts | 63 +++++++++++++++++++ 8 files changed, 118 insertions(+), 28 deletions(-) rename packages/cli/CHANGELOG.md => CHANGELOG.md (99%) create mode 100644 scripts/bump_version.ts diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f42f818b..8bd9c02e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,9 +8,17 @@ on: workflow_dispatch: inputs: release_type: + type: choice description: "Release type: patch, minor, major" required: true - default: patch + options: + - patch + - minor + - major + release_notes: + type: string + description: "Release notes" + required: true jobs: release: @@ -28,24 +36,33 @@ jobs: with: token: ${{ steps.generate_token.outputs.token }} - - name: Set up Node.js - uses: actions/setup-node@v3 + - name: Set up Deno + uses: denoland/setup-deno@v2 with: - node-version: "22" + deno-version: "2.x" - - name: Install dependencies - run: npm install + - name: Compile + run: | + deno task compie:all - - name: Login with git + - name: Bump version + id: bump_version run: | - git config --global user.email "info@nanoapi.io" - git config --global user.name "nanoapi.io" + VERSION=$(deno run -A scripts/bump_version.ts ${{ inputs.release_type }} ${{ inputs.release_notes }}) + echo "release_version=$VERSION" >> $GITHUB_OUTPUT - - name: Login to npm registry - run: npm set "//registry.npmjs.org/:_authToken=${{ secrets.NPM_TOKEN }}" + - name: Create release + uses: softprops/action-gh-release@v1 + with: + body: ${{ inputs.release_notes }} + tag_name: v${{ steps.bump_version.outputs.release_version }} + files: | + dist/* + CHANGELOG.md - - name: Run release-it for CLI - run: npm run release -- ${{ github.event.inputs.release_type }} --ci - env: - GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }} - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} + - name: Commit and push changes + run: | + # Commit and push changes + git add CHANGELOG.md + git commit -m "[skip ci] update changelog for version ${{ steps.bump_version.outputs.release_version }}" + git push diff --git a/packages/cli/CHANGELOG.md b/CHANGELOG.md similarity index 99% rename from packages/cli/CHANGELOG.md rename to CHANGELOG.md index c7e26c5e..24b63235 100644 --- a/packages/cli/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,3 @@ -# Changelog - -## [Unreleased] - ## [1.0.7] - 2025-04-30 Fix some small bug on the FE, mainly unify the colors of edges and their diff --git a/deno.json b/deno.json index 963ebb4e..74b450c5 100644 --- a/deno.json +++ b/deno.json @@ -1,5 +1,10 @@ { - "workspace": ["./packages/app", "./packages/cli", "./packages/shared"], + "version": "1.0.7", + "workspace": [ + "./packages/app", + "./packages/cli", + "./packages/shared" + ], "nodeModulesDir": "auto", "tasks": { "dev:app": "deno task --config packages/app/deno.json dev", diff --git a/deno.lock b/deno.lock index d302293b..3cc822d9 100644 --- a/deno.lock +++ b/deno.lock @@ -50,6 +50,7 @@ "npm:tree-sitter@~0.22.4": "0.22.4", "npm:tw-animate-css@^1.2.9": "1.2.9", "npm:uuid@^11.1.0": "11.1.0", + "npm:vite@*": "6.3.5_picomatch@4.0.2_@types+node@22.12.0", "npm:vite@^6.3.5": "6.3.5_picomatch@4.0.2_@types+node@22.12.0", "npm:yargs@^17.7.2": "17.7.2", "npm:zod@^3.24.4": "3.24.4" @@ -3453,6 +3454,15 @@ "integrity": "sha512-OdqJE9UDRPwWsrHjLN2F8bPxvwJBK22EHLWtanu0LSYr5YqzsaaW3RMgmjwr8Rypg5k+meEJdSPXJZXE/yqOMg==" } }, + "remote": { + "https://deno.land/std@0.220.1/json/_common.ts": "6444c6ea166514eb379f778d9216c1d8eb159f97c753aeeb1fc44cd091e30544", + "https://deno.land/std@0.220.1/json/common.ts": "33f1a4f39a45e2f9f357823fd0b5cf88b63fb4784b8c9a28f8120f70a20b23e9", + "https://deno.land/std@0.220.1/json/concatenated_json_parse_stream.ts": "13a707615e03e5ea93ac81e5f00420e3b7764c4e3fa88043e63bbac87ebe62ce", + "https://deno.land/std@0.220.1/json/json_parse_stream.ts": "2740652ea73726cd0f2edc89188b35d64a1ec15dc8cf7fd87db52a0170bc182c", + "https://deno.land/std@0.220.1/json/json_stringify_stream.ts": "269633e63d4e38ab3ba31e76a4292d11b9eb3151e26ff4f49dee1c264b4878fa", + "https://deno.land/std@0.220.1/json/mod.ts": "acd3e39a6c68c70ee7fa93991a8a8f02d799f7394db3cef09594e2dd8fd69814", + "https://deno.land/std@0.220.1/streams/to_transform_stream.ts": "4c4836455ef89bab9ece55975ee3a819f07d3d8b0e43101ec7f4ed033c8a2b61" + }, "workspace": { "dependencies": [ "jsr:@std/expect@^1.0.16", diff --git a/packages/cli/deno.json b/packages/cli/deno.json index c0967c1d..3f88db1a 100644 --- a/packages/cli/deno.json +++ b/packages/cli/deno.json @@ -1,6 +1,5 @@ { "name": "@napi/cli", - "version": "1.0.7", "exports": "./src/index.ts", "imports": { "@napi/shared": "../shared/src/index.ts", @@ -19,10 +18,10 @@ }, "tasks": { "dev": "NODE_ENV=development deno run --allow-all --watch src/index.ts", - "compile": "deno compile --allow-all --include=../app/dist --output=dist/napi src/index.ts", - "compile-linux": "deno compile --allow-all --include=../app/dist --output=dist/napi.linux --target=x86_64-unknown-linux-gnu src/index.ts", - "compile-macos": "deno compile --allow-all --include=../app/dist --output=dist/napi.macos --target=x86_64-apple-darwin src/index.ts", - "compile-windows": "deno compile --allow-all --include=../app/dist --output=dist/napi.exe --target=x86_64-pc-windows-msvc src/index.ts", + "compile": "deno compile --allow-all --include=../app/dist --output=../../dist/napi src/index.ts", + "compile-linux": "deno compile --allow-all --include=../app/dist --output=../../dist/napi.linux --target=x86_64-unknown-linux-gnu src/index.ts", + "compile-macos": "deno compile --allow-all --include=../app/dist --output=../../dist/napi.macos --target=x86_64-apple-darwin src/index.ts", + "compile-windows": "deno compile --allow-all --include=../app/dist --output=../../dist/napi.exe --target=x86_64-pc-windows-msvc src/index.ts", "test": "deno test --allow-all" } } diff --git a/packages/cli/src/cli/helpers/checkNpmVersion.ts b/packages/cli/src/cli/helpers/checkNpmVersion.ts index 88cfdf47..91acfe6d 100644 --- a/packages/cli/src/cli/helpers/checkNpmVersion.ts +++ b/packages/cli/src/cli/helpers/checkNpmVersion.ts @@ -1,4 +1,4 @@ -import localPackageJson from "../../../deno.json" with { type: "json" }; +import localPackageJson from "../../../../../deno.json" with { type: "json" }; import process from "node:process"; export async function checkVersionMiddleware() { diff --git a/packages/cli/src/telemetry.ts b/packages/cli/src/telemetry.ts index 642b9251..a15ad362 100644 --- a/packages/cli/src/telemetry.ts +++ b/packages/cli/src/telemetry.ts @@ -1,7 +1,7 @@ import { EventEmitter } from "node:events"; import os from "node:os"; import { getOrCreateGlobalConfig } from "./config/globalConfig.ts"; -import denoJson from "../deno.json" with { type: "json" }; +import denoJson from "../../../deno.json" with { type: "json" }; import process from "node:process"; export enum TelemetryEvents { diff --git a/scripts/bump_version.ts b/scripts/bump_version.ts new file mode 100644 index 00000000..f9df1474 --- /dev/null +++ b/scripts/bump_version.ts @@ -0,0 +1,63 @@ +import path from "node:path"; + +const releaseType: string = Deno.args[0]; +if ( + !releaseType || + releaseType !== "patch" && releaseType !== "minor" && releaseType !== "major" +) { + console.error("Invalid release type"); + Deno.exit(1); +} +const releaseNotes: string = Deno.args[1]; +if (!releaseNotes) { + console.error("Release notes are required"); + Deno.exit(1); +} + +const denoJsonPath = path.resolve( + import.meta.dirname as string, + "..", + "deno.json", +); +const denoJson = JSON.parse(await Deno.readTextFile(denoJsonPath)) as { + version: string; +}; + +const [major, minor, patch] = denoJson.version.split(".").map(Number); + +let newVersion: string; + +if (releaseType === "patch") { + newVersion = `${major}.${minor}.${patch + 1}`; +} else if (releaseType === "minor") { + newVersion = `${major}.${minor + 1}.0`; +} else { + newVersion = `${major + 1}.0.0`; +} + +denoJson.version = newVersion; + +await Deno.writeTextFile( + denoJsonPath, + JSON.stringify(denoJson, null, 2) + "\n", +); + +const changeLogPath = path.resolve( + import.meta.dirname as string, + "..", + "CHANGELOG.md", +); +const currentChangeLog = await Deno.readTextFile(changeLogPath); + +const newContent = + `## [${newVersion}] - ${new Date().toISOString().split("T")[0]}` + "\n\n" + + releaseNotes + "\n"; +const allContent = newContent + "\n" + currentChangeLog; + +await Deno.writeTextFile( + changeLogPath, + allContent, +); + +console.log(newVersion); +Deno.exit(0);