-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathsetup.js
144 lines (132 loc) · 5.05 KB
/
setup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
const readline = require('readline');
const fs = require('fs');
const path = require('path');
const { exec } = require('child_process');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
const packageRunCommand = {
npm: 'npm run',
yarn: 'yarn',
pnpm: 'pnpm',
bun: 'bun run',
};
const deleteDirectoryRecursive = (directoryPath) => {
try {
if (fs.existsSync(directoryPath)) {
const files = fs.readdirSync(directoryPath);
for (const file of files) {
const filePath = path.join(directoryPath, file);
if (fs.statSync(filePath).isDirectory()) {
deleteDirectoryRecursive(filePath); // 再帰的にディレクトリを削除
} else {
fs.unlinkSync(filePath); // ファイルを削除
}
}
fs.rmdirSync(directoryPath); // ディレクトリを削除
}
} catch (err) {
console.error('ディレクトリの削除中にエラーが発生しました:', err);
}
};
// 対話的にパッケージマネージャーを選択するプロンプトを表示
rl.question('Choose a package manager (npm/yarn/pnpm/bun): ', (answer) => {
rl.question('Enter a new project name: ', (newProjectName) => {
const selectedPackageManager = answer.trim().toLowerCase();
// package.jsonの内容を読み込み
const packageJsonPath = './package.json'; // 実際のパスに置き換えてください
const packageJson = require(packageJsonPath);
// package.jsonのプロジェクト名を変更
packageJson.name = newProjectName;
const validPackageManagers = ['npm', 'yarn', 'pnpm', 'bun'];
// 選択したパッケージマネージャーに基づいてpackage.jsonを更新
if (
selectedPackageManager === 'npm' ||
selectedPackageManager === 'yarn' ||
selectedPackageManager === 'pnpm' ||
selectedPackageManager === 'bun'
) {
packageJson.engines = validPackageManagers.reduce((engines, manager) => {
if (manager !== selectedPackageManager) {
engines[manager] = `${selectedPackageManager} please`;
}
return engines;
}, {});
packageJson['lint-staged'] = {
"src/**/*.{js,jsx,ts,tsx,json,css,scss}": [
`${packageRunCommand[selectedPackageManager]} check:lint --fix`,
`${packageRunCommand[selectedPackageManager]} fmt`
]
};
// 更新したpackage.jsonをファイルに書き込む
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
const huskyFilePath = './.husky/'; // 実際のパスに置き換えてください
['pre-commit', 'pre-push', 'commit-msg'].map((action) => {
const huskyFileContent = fs.readFileSync(
huskyFilePath + action,
'utf-8'
);
// 選択したパッケージマネージャーに基づいて.huskyファイルのコマンドを変更
const updatedHuskyFileContent = huskyFileContent.replace(
/(bun run|npm run|yarn|pnpm)/g,
packageRunCommand[selectedPackageManager]
);
// 更新した.huskyファイルの内容をファイルに書き込む
fs.writeFileSync(
huskyFilePath + action,
updatedHuskyFileContent,
'utf-8'
);
});
['post-merge'].map((action) => {
const huskyFileContent = fs.readFileSync(
huskyFilePath + action,
'utf-8'
);
// 選択したパッケージマネージャーに基づいて.huskyファイルのコマンドを変更
const updatedHuskyFileContent = huskyFileContent.replace(
/(npm|yarn|pnpm|bun) install/g,
`${selectedPackageManager} install`
);
// 更新した.huskyファイルの内容をファイルに書き込む
fs.writeFileSync(
huskyFilePath + action,
updatedHuskyFileContent,
'utf-8'
);
});
const sourceFilePath = `.github/actions/${selectedPackageManager}/ci.yml`;
const destinationFilePath = '.github/workflows/ci.yml';
try {
fs.renameSync(sourceFilePath, destinationFilePath);
['npm', 'yarn', 'pnpm', 'bun'].map((manager) => {
if (manager !== selectedPackageManager) {
deleteDirectoryRecursive(`./.github/actions/${manager}`);
}
});
} catch (err) {
console.error('ファイルの処理中にエラーが発生しました:', err);
}
console.log(
`Selected ${selectedPackageManager} and updated package.json.`
);
} else {
console.log('Invalid package manager selection.');
}
fs.unlinkSync('./.github/dependabot.yml');
fs.renameSync(
'./.github/dependabot.sample.yml',
'./.github/dependabot.yml'
);
console.log('Installing dependencies...');
exec(`${selectedPackageManager} install --silent`, (error, stdout) => {
if (error) {
console.error(`failed installing dependencies: ${error}`);
return;
}
console.log(`success installing dependencies :\n${stdout}`);
});
rl.close();
});
});