refactor: imporve add License (#4326)

This commit is contained in:
jack zhang 2024-05-14 08:30:40 +08:00 committed by GitHub
parent 145577942f
commit 3613d004b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 65 additions and 34 deletions

View File

@ -56,7 +56,7 @@
},
"config": {
"ghooks": {
"pre-commit": "yarn lint-staged && node addLicense.js",
"pre-commit": "yarn lint-staged && node ./scripts/addLicense.js",
"commit-msg": "commitlint --edit"
}
},

View File

@ -1,5 +1,5 @@
const fs = require('fs/promises');
const { exec } = require('child_process');
const fs = require('fs');
const commercialLicense = `
/**
@ -26,10 +26,10 @@ function getLicenseText(packageDir) {
return packageDir.includes('/pro-plugins') ? commercialLicense : openSourceLicense;
}
function addLicenseToFile(filePath) {
async function addLicenseToFile(filePath) {
const licenseText = getLicenseText(filePath);
const data = fs.readFileSync(filePath, 'utf8');
const data = await fs.readFile(filePath, 'utf8');
if (data.startsWith(licenseText)) return false;
@ -37,44 +37,75 @@ function addLicenseToFile(filePath) {
const newData = licenseText + '\n\n' + data;
// 将修改后的内容写回文件
fs.writeFileSync(filePath, newData, 'utf8');
await fs.writeFile(filePath, newData, 'utf8');
return true;
}
// 执行 git diff 命令
exec('git diff --cached --name-only --diff-filter=ACM', (error, stdout, stderr) => {
if (error) {
console.error(`[nocobase]: git diff error ${error.message}`);
process.exit(-1);
function isMergeCommit() {
return new Promise((resolve, reject) => {
exec('git rev-parse --verify MERGE_HEAD', (error, stdout, stderr) => {
if (error || stderr) {
resolve(false);
} else {
resolve(true);
}
if (stderr) {
console.error(`[nocobase]: git diff error ${stderr}`);
process.exit(-1);
});
});
}
// 获取命令执行结果(文件列表)
const files = stdout
.split('\n')
.filter(Boolean)
function getDiffFiles() {
return new Promise((resolve, reject) => {
exec('git diff --cached --name-only --diff-filter=ACM', (error, stdout, stderr) => {
if (error) {
reject(error);
}
if (stderr) {
reject(stderr);
}
resolve(stdout.split('\n').filter(Boolean));
});
});
}
function gitAddFiles(files) {
return new Promise((resolve, reject) => {
exec(`git add ${files.join(' ')}`, (error, stdout, stderr) => {
if (error) {
reject(error);
}
if (stderr) {
reject(stderr);
}
resolve(stdout);
});
});
}
async function main() {
const isMerge = await isMergeCommit();
if (isMerge) return;
const diffFiles = await getDiffFiles();
const files = diffFiles
.filter((file) => file.includes('/src/')) // 只检查 src 目录下的文件
.filter((file) => !file.includes('/demos/')) // 忽略 demos 目录
.filter((file) => file.endsWith('.js') || file.endsWith('.jsx') || file.endsWith('.ts') || file.endsWith('.tsx'));
const validFiles = files.filter((file) => addLicenseToFile(file));
const validFiles = [];
for (const file of files) {
const res = await addLicenseToFile(file);
if (res) {
validFiles.push(file);
}
}
if (validFiles.length === 0) {
return;
}
// 执行 git add 这些文件
exec(`git add ${validFiles.join(' ')}`, (error, stdout, stderr) => {
if (error) {
console.error(`[nocobase]: git add error ${error.message}`);
process.exit(-1);
await gitAddFiles(validFiles);
}
if (stderr) {
console.error(`[nocobase]: git add error ${stderr}`);
process.exit(-1);
}
});
});
main();

View File

@ -49,7 +49,7 @@ function addLicenseToFile(filePath, licenseText) {
async function addToPackageSource(packageDir) {
const stream = fg.globStream('**/*.{js,jsx,ts,tsx,d.ts}', {
cwd: path.join(packageDir, 'src'),
ignore: ['node_modules'],
ignore: ['**/demos'],
absolute: true,
onlyFiles: true,
});
@ -72,10 +72,10 @@ function getPackages() {
.map((item) => path.join(path.dirname(item)));
}
function run() {
async function run() {
const packages = getPackages();
for (const package of packages) {
addToPackageSource(package);
await addToPackageSource(package);
}
}