From 6bedadab22e2efa33550e35971fb9bc07618a2d6 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Mon, 26 May 2025 19:34:02 +0200 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20=E2=9C=A8=20Add=20version=20bumping?= =?UTF-8?q?=20workflow=20and=20enhance=20project=20setup=20scripts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/publish.yaml | 2 +- .github/workflows/test.yml | 66 +++++++++++++++++++ bump-version.mjs | 18 +++++ package.json | 1 + .../eslint/.prettierrc.mjs | 11 ++++ .../eslint/eslint.config.mjs | 3 + .../copy-of-vitnode-app/root/next.config.ts | 11 ++++ .../root/src/vitnode.api.config.ts | 5 ++ packages/create-vitnode-app/package.json | 2 +- .../src/create/create-vitnode.ts | 30 +++++++-- .../create-vitnode-app/src/prepare/prepare.ts | 21 ++++++ 11 files changed, 162 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 bump-version.mjs create mode 100644 packages/create-vitnode-app/copy-of-vitnode-app/eslint/.prettierrc.mjs create mode 100644 packages/create-vitnode-app/copy-of-vitnode-app/eslint/eslint.config.mjs create mode 100644 packages/create-vitnode-app/copy-of-vitnode-app/root/next.config.ts create mode 100644 packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.api.config.ts create mode 100644 packages/create-vitnode-app/src/prepare/prepare.ts diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml index a4a982868..2a5040718 100644 --- a/.github/workflows/publish.yaml +++ b/.github/workflows/publish.yaml @@ -39,7 +39,7 @@ jobs: - uses: pnpm/action-setup@v4 name: Install pnpm with: - version: 10.8.0 + version: 10.10.0 - name: Install Node.js uses: actions/setup-node@v4 diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..8ca76ef61 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,66 @@ +name: Test publish version + +on: + workflow_dispatch: + inputs: + release: + description: stable, canary, or release candidate? + required: true + type: choice + options: + - canary + - stable + - release-candidate + type: + description: 'Type of package to publish' + required: true + type: choice + options: + - patch + - minor + - major + skip_bump_version: + description: 'Skip bumping version in package.json and release notes?' + required: false + type: boolean + +jobs: + bump-version: + name: 'Bump Version' + runs-on: ubuntu-latest + permissions: + contents: write + id-token: write + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Configure Git + run: | + git config --global user.name "${{ github.actor }}" + git config --global user.email "${{ github.actor }}@users.noreply.github.com" + + - uses: pnpm/action-setup@v4 + name: Install pnpm + with: + version: 10.10.0 + + - name: Install Node.js + uses: actions/setup-node@v4 + with: + registry-url: 'https://registry.npmjs.org/' + node-version: 22 + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Run script to bump version & copy files + run: pnpm run release + id: version-bump + env: + VERSION_TYPE: ${{ github.event.inputs.type }} + RELEASE_TYPE: ${{ github.event.inputs.release }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_USER: ${{ github.actor }} + GITHUB_EMAIL: ${{ github.actor }}@users.noreply.github.com diff --git a/bump-version.mjs b/bump-version.mjs new file mode 100644 index 000000000..9484bfe45 --- /dev/null +++ b/bump-version.mjs @@ -0,0 +1,18 @@ +const ALLOWED_VERSION_TYPES = ['major', 'minor', 'patch']; +const WORKSPACE = process.env.GITHUB_WORKSPACE || process.cwd(); +const GIT_USER = { + NAME: process.env.GITHUB_USER ?? 'Automated Version Bump', + EMAIL: process.env.GITHUB_EMAIL + ? `${process.env.GITHUB_USER}@users.noreply.github.com` + : 'gh-action-bump-version@users.noreply.github.com', +}; + +const init = () => { + console.log( + 'Initializing build version script...', + GIT_USER.EMAIL, + GIT_USER.NAME, + ); +}; + +init(); diff --git a/package.json b/package.json index 0e8725302..423328dc7 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "name": "vitnode", "private": true, "scripts": { + "release": "node ./bump-version.mjs", "db:migrate": "turbo db:migrate", "db:push": "turbo db:push", "docker:dev": "docker compose -f ./docker-compose.yml -p vitnode-dev-dun up -d", diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/eslint/.prettierrc.mjs b/packages/create-vitnode-app/copy-of-vitnode-app/eslint/.prettierrc.mjs new file mode 100644 index 000000000..483eff929 --- /dev/null +++ b/packages/create-vitnode-app/copy-of-vitnode-app/eslint/.prettierrc.mjs @@ -0,0 +1,11 @@ +import vitnodePrettier from "eslint-config-typescript-vitnode/prettierrc"; + +/** + * @see https://prettier.io/docs/en/configuration.html + * @type {import("prettier").Config} + */ +const config = { + ...vitnodePrettier, +}; + +export default config; diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/eslint/eslint.config.mjs b/packages/create-vitnode-app/copy-of-vitnode-app/eslint/eslint.config.mjs new file mode 100644 index 000000000..84ba50bca --- /dev/null +++ b/packages/create-vitnode-app/copy-of-vitnode-app/eslint/eslint.config.mjs @@ -0,0 +1,3 @@ +import eslintVitNode from 'eslint-config-typescript-vitnode/eslint'; + +export default [...eslintVitNode]; diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/root/next.config.ts b/packages/create-vitnode-app/copy-of-vitnode-app/root/next.config.ts new file mode 100644 index 000000000..6d893c582 --- /dev/null +++ b/packages/create-vitnode-app/copy-of-vitnode-app/root/next.config.ts @@ -0,0 +1,11 @@ +import type { NextConfig } from 'next'; +import { vitNodeNextConfig } from '@vitnode/core/config/next.config'; + +const nextConfig: NextConfig = { + experimental: { + inlineCss: true, + reactCompiler: true, + }, +}; + +export default vitNodeNextConfig(nextConfig); diff --git a/packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.api.config.ts b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.api.config.ts new file mode 100644 index 000000000..8d9af083c --- /dev/null +++ b/packages/create-vitnode-app/copy-of-vitnode-app/root/src/vitnode.api.config.ts @@ -0,0 +1,5 @@ +import { buildApiConfig } from '@vitnode/core/vitnode.config'; + +export const vitNodeApiConfig = buildApiConfig({ + plugins: [], +}); diff --git a/packages/create-vitnode-app/package.json b/packages/create-vitnode-app/package.json index bc96e825e..40cb71dda 100644 --- a/packages/create-vitnode-app/package.json +++ b/packages/create-vitnode-app/package.json @@ -15,7 +15,7 @@ "create-vitnode-app": "dist/src/index.js" }, "scripts": { - "build:cli": "tsc", + "build:cli": "tsc && node dist/src/prepare/prepare.js", "cli": "node dist/src/index.js", "lint": "eslint .", "lint:fix": "eslint . --fix" diff --git a/packages/create-vitnode-app/src/create/create-vitnode.ts b/packages/create-vitnode-app/src/create/create-vitnode.ts index 3e87148b3..5597b8240 100644 --- a/packages/create-vitnode-app/src/create/create-vitnode.ts +++ b/packages/create-vitnode-app/src/create/create-vitnode.ts @@ -1,6 +1,10 @@ -import { mkdir } from 'fs/promises'; -import ora from 'ora'; +import { existsSync } from 'fs'; +import { cp, mkdir } from 'fs/promises'; +import { dirname, join } from 'path'; +import { fileURLToPath } from 'url'; + import color from 'picocolors'; +import ora from 'ora'; import type { CreateCliReturn } from '../questions.js'; @@ -18,15 +22,29 @@ export const createVitNode = async ({ `Creating a new VitNode app in ${color.green(root)}. Using ${color.green(packageManager)}...`, ).start(); - /** - * Create the folder - */ + const __filename = fileURLToPath(import.meta.url); + const __dirname = dirname(__filename); + const templatePath = join(__dirname, '..', '..', '..', 'copy-of-vitnode-app'); + if (!existsSync(templatePath)) { + spinner.fail( + `\n${color.red('Error!')} Template path ${color.cyan(templatePath)} does not exist.`, + ); + process.exit(1); + } + + // Create the folder await mkdir(root, { recursive: true }); if (!isFolderEmpty(root, appName)) { process.exit(1); } + // Copy the template files + spinner.text = 'Copying files...'; + await cp(join(templatePath, 'root'), root, { + recursive: true, + }); + spinner.succeed( - ` ${color.green('Success!')} Created ${color.cyan(appName)} at ${color.cyan(root)}`, + `${color.green('Success!')} Created ${color.cyan(appName)} at ${color.cyan(root)}`, ); }; diff --git a/packages/create-vitnode-app/src/prepare/prepare.ts b/packages/create-vitnode-app/src/prepare/prepare.ts new file mode 100644 index 000000000..b1be7f142 --- /dev/null +++ b/packages/create-vitnode-app/src/prepare/prepare.ts @@ -0,0 +1,21 @@ +import { existsSync } from 'fs'; +import { mkdir } from 'fs/promises'; +import { join } from 'path'; + +const prepare = async () => { + const toRootPath = join(process.cwd(), 'copy-of-vitnode-app'); + if (!existsSync(toRootPath)) { + await mkdir(toRootPath); + } + const fromRootPath = join(process.cwd(), '..', '..', 'apps', 'web'); + if (!existsSync(fromRootPath)) { + console.error( + `\x1b[31mThe path ${fromRootPath} does not exist. Please check the directory structure.\x1b[0m`, + ); + process.exit(1); + } + + console.log(`Project path: ${fromRootPath}`); +}; + +void prepare(); From 87d97021f6f9f9818ff531d330ed890dfb3abdc1 Mon Sep 17 00:00:00 2001 From: aXenDeveloper Date: Mon, 26 May 2025 19:38:18 +0200 Subject: [PATCH 2/2] =?UTF-8?q?refactor(create-vitnode):=20=F0=9F=94=A7=20?= =?UTF-8?q?Clean=20up=20imports=20and=20enhance=20ESLint=20configuration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/create-vitnode-app/eslint.config.mjs | 3 +++ packages/create-vitnode-app/src/create/create-vitnode.ts | 5 ++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/packages/create-vitnode-app/eslint.config.mjs b/packages/create-vitnode-app/eslint.config.mjs index d313b602c..e6c0bb936 100644 --- a/packages/create-vitnode-app/eslint.config.mjs +++ b/packages/create-vitnode-app/eslint.config.mjs @@ -7,4 +7,7 @@ export default [ 'no-console': 'off', }, }, + { + ignores: ['copy-of-vitnode-app'], + }, ]; diff --git a/packages/create-vitnode-app/src/create/create-vitnode.ts b/packages/create-vitnode-app/src/create/create-vitnode.ts index 5597b8240..7f9749d19 100644 --- a/packages/create-vitnode-app/src/create/create-vitnode.ts +++ b/packages/create-vitnode-app/src/create/create-vitnode.ts @@ -1,10 +1,9 @@ import { existsSync } from 'fs'; import { cp, mkdir } from 'fs/promises'; +import ora from 'ora'; import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; - import color from 'picocolors'; -import ora from 'ora'; +import { fileURLToPath } from 'url'; import type { CreateCliReturn } from '../questions.js';