diff --git a/package.json b/package.json index 280ee93..a6dca7c 100644 --- a/package.json +++ b/package.json @@ -69,6 +69,7 @@ "plop": "^4.0.1", "prettier": "^3.2.5", "prism-theme-vars": "^0.2.4", + "simple-git": "^3.22.0", "taze": "^0.13.3", "terser": "^5.27.0", "typescript": "^5.3.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7dbe0d9..64bf3f7 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -122,6 +122,9 @@ devDependencies: prism-theme-vars: specifier: ^0.2.4 version: 0.2.4 + simple-git: + specifier: ^3.22.0 + version: 3.22.0 taze: specifier: ^0.13.3 version: 0.13.3 @@ -1024,6 +1027,18 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true + /@kwsites/file-exists@1.1.1: + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + dependencies: + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@kwsites/promise-deferred@1.1.1: + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + dev: true + /@ljharb/through@2.3.12: resolution: {integrity: sha512-ajo/heTlG3QgC8EGP6APIejksVAYt4ayz4tqoP3MolFELzcH1x1fzwEYRJTPO0IELutZ5HQ0c26/GqAYy79u3g==} engines: {node: '>= 0.4'} @@ -6399,6 +6414,16 @@ packages: - supports-color dev: true + /simple-git@3.22.0: + resolution: {integrity: sha512-6JujwSs0ac82jkGjMHiCnTifvf1crOiY/+tfs/Pqih6iow7VrpNKRRNdWm6RtaXpvvv/JGNYhlUtLhGFqHF+Yw==} + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} diff --git a/scripts/release.cjs b/scripts/release.cjs index 3c214ae..d6009d1 100644 --- a/scripts/release.cjs +++ b/scripts/release.cjs @@ -2,7 +2,7 @@ const { createConsola } = require('consola') const { execSync } = require('child_process') const { repository } = require('../package.json') const { gray } = require('kolorist') - +const { simpleGit } = require('simple-git') const logger = createConsola().withTag('release') /** @@ -10,11 +10,25 @@ const logger = createConsola().withTag('release') * @param {import('plop').NodePlopAPI} plop */ async function release(plop) { - // TODO 从 git 中获取仓库 url - const release = await logger.prompt(`是否发布到 ${gray(repository.url)}`, { - type: 'confirm', + const git = simpleGit() + + const remotes = await git.getRemotes(true) + + const urls = remotes.map((r) => { + return r.refs.push + .replace('git@github.com:', 'https://github.com/') + .replace('.git', '') }) - if (release) { + let allowRelease = false + if (!urls.includes(repository.url)) { + allowRelease = await logger.prompt(`是否发布到 ${gray(repository.url)}`, { + type: 'confirm', + }) + } else { + allowRelease = true + } + + if (allowRelease) { plop.setGenerator('controller', { description: '自动发版', prompts: [