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.

121 lines
3.0 KiB
JavaScript

const https = require('https');
const minimist = require('minimist');
const { Octokit } = require('@octokit/rest');
const octokit = new Octokit({
auth: process.env.PERSONAL_TOKEN,
});
function createPullRequest({ branchName, body, title = branchName, base = 'main' }) {
if (!branchName) {
return Promise.reject('branch name is not set');
}
console.log('Create a pull request');
return octokit.rest.pulls
.create({
owner: 'opendatalab',
repo: 'labelU-Kit',
head: branchName,
title,
base,
body,
})
.then(() => {
console.log('Create a pull request success');
});
}
function gitlabCiTrigger(nextVersion) {
const version = `v${nextVersion}`;
const url = `https://github.com/opendatalab/labelU-Kit/releases/download/${version}/frontend.zip`;
const gitlabTriggerUrl = new URL(
`https://gitlab.shlab.tech/api/v4/projects/${process.env.GI_LABELU_PROJECT_ID}/trigger/pipeline?token=${process.env.GL_TRIGGER_TOKEN}&ref=self-host`,
);
const formData = new URLSearchParams();
formData.append('variables[frontend_url]', url);
const options = {
hostname: gitlabTriggerUrl.hostname,
path: `${gitlabTriggerUrl.pathname}${gitlabTriggerUrl.search}`,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
};
const req = https.request(options, (res) => {
if (res.statusCode < 300) {
console.log('trigger labelu workflow success');
} else {
console.log('trigger labelu workflow failed', res);
}
});
req.on('error', (e) => {
console.log('trigger labelu workflow error', e);
});
req.write(formData.toString());
req.end();
}
async function main() {
const args = minimist(process.argv.slice(2));
const [branch, nextVersion, releaseNotes] = args._;
const version = `v${nextVersion}`;
const url = `https://github.com/opendatalab/labelU-Kit/releases/download/${version}/frontend.zip`;
if (branch === 'online') {
gitlabCiTrigger(nextVersion);
return;
}
const inputs = {
version: version,
branch: branch === 'release' ? 'main' : branch,
release_type: 'fix',
assets_url: url,
changelog: releaseNotes,
};
console.log('inputs', inputs);
octokit.actions
.createWorkflowDispatch({
owner: 'opendatalab',
repo: 'labelU',
workflow_id: 84825133,
ref: branch === 'release' ? 'main' : branch,
inputs,
})
.then((res) => {
console.log(res);
console.log('trigger labelu workflow success');
})
.catch((err) => {
console.log('trigger labelu workflow failed', err);
});
await new Promise((resolve) => {
setTimeout(async () => {
createPullRequest({
branchName: branch,
body: releaseNotes,
base: 'main',
title: 'Update package version',
}).catch((err) => {
console.log(err);
});
resolve();
// 避免 You have exceeded a secondary rate limit 问题
}, 1000);
});
}
main();