You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
3.5 KiB
JavaScript

const path = require('path');
const fs = require('fs');
// eslint-disable-next-line import/order
const { Octokit } = require('@octokit/rest');
const octokit = new Octokit({
auth: process.env.PERSONAL_TOKEN,
});
const prettier = require('prettier');
const { getPackagesSync } = require('@manypkg/get-packages');
const minimist = require('minimist');
async function createCommit({ owner, repo, message, branch, files }) {
const currentBranchRef = await octokit.git.getRef({
owner,
repo,
ref: `heads/${branch}`,
});
const tree = [];
for (const file of files) {
const { data: blobData } = await octokit.git.createBlob({ owner, repo, content: file.content });
tree.push({
path: file.path,
mode: '100644',
type: 'blob',
sha: blobData.sha,
});
}
const { data: treeData } = await octokit.git.createTree({
owner,
repo,
base_tree: currentBranchRef.data.object.sha,
tree,
});
const { data: commitData } = await octokit.git.createCommit({
owner,
repo,
message,
tree: treeData.sha,
parents: [currentBranchRef.data.object.sha],
});
await octokit.git.updateRef({
owner,
repo,
ref: `heads/${branch}`,
sha: commitData.sha,
});
}
async function main() {
const args = minimist(process.argv.slice(2));
const [branch, nextVersion] = args._;
const appPkgJson = require('../package.json');
const workspace = path.join(__dirname, '../../../');
const workspacePkgPath = path.join(workspace, 'package.json');
const workspacePkgJson = require(workspacePkgPath);
const pksPath = path.join(__dirname, '../package.json');
const versions = {
version: nextVersion || appPkgJson.version,
deps: {},
};
console.log('next version is', nextVersion);
const getCode = (info) => {
return `
(function () {
window.__frontend = ${JSON.stringify(info, null, 2)};
})();
`;
};
const { packages } = getPackagesSync(workspace);
packages.forEach((pkg) => {
const pkgInFrontend = appPkgJson.dependencies[pkg.packageJson.name];
if (pkgInFrontend) {
versions.deps[pkg.packageJson.name] = pkg.packageJson.version;
}
});
fs.writeFileSync(
path.join(__dirname, '../dist/frontend_version.js'),
prettier.format(getCode(versions), {
singleQuote: true,
trailingComma: 'all',
proseWrap: 'never',
endOfLine: 'lf',
tabWidth: 2,
printWidth: 120,
}),
'utf-8',
);
console.log('Inject frontend info success!');
try {
if (nextVersion && branch !== 'online') {
appPkgJson.version = nextVersion;
workspacePkgJson.version = nextVersion;
fs.writeFileSync(path.join(__dirname, '../package.json'), JSON.stringify(appPkgJson, null, 2), 'utf-8');
fs.writeFileSync(workspacePkgPath, JSON.stringify(workspacePkgJson, null, 2), 'utf-8');
await createCommit({
owner: 'opendatalab',
repo: 'labelU-Kit',
message: `chore: update frontend package.json version to ${nextVersion} [skip ci]`,
files: [
{
content: JSON.stringify(appPkgJson, null, 2),
path: path.relative(workspace, pksPath),
},
{
content: JSON.stringify(workspacePkgJson, null, 2),
path: path.relative(workspace, workspacePkgPath),
},
],
branch,
});
console.log('update package.json version success!');
}
} catch (e) {
console.log('update package.json version failed!', e);
}
}
main();