forked from vercel/vercel
-
Notifications
You must be signed in to change notification settings - Fork 0
/
update-next.js
61 lines (53 loc) · 1.84 KB
/
update-next.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
const { execFileSync } = require('child_process');
function exec(cmd, args, opts) {
// eslint-disable-next-line no-console
console.log({ input: `${cmd} ${args.join(' ')}` });
const output = execFileSync(cmd, args, opts).toString().trim();
console.log({ output });
console.log();
return output;
}
module.exports = async ({ github, context }) => {
const oldVersion = require('../examples/nextjs/package.json').dependencies
.next;
const newVersion = exec('npm', ['view', 'next', 'dist-tags.latest']);
const branch = `next-${newVersion.replaceAll('.', '-')}`;
if (oldVersion === newVersion) {
// eslint-disable-next-line no-console
console.log(
`Next.js version ${newVersion} did not change, skipping update.`
);
return;
}
if (
exec('git', ['ls-remote', '--heads', 'origin', branch]).toString().trim()
) {
// eslint-disable-next-line no-console
console.log(`Branch ${branch} already exists, skipping update.`);
return;
}
exec('rm', ['-rf', './examples/nextjs']);
exec('npx', ['--yes', 'create-next-app@latest', './examples/nextjs']);
exec('git', ['config', '--global', 'user.email', 'team@zeit.co']);
exec('git', ['config', '--global', 'user.name', 'Vercel Team Bot']);
exec('git', ['checkout', 'main']);
exec('git', ['checkout', '-b', branch]);
exec('git', ['add', '-A']);
exec('git', ['commit', '-m', branch]);
exec('git', ['push', 'origin', branch]);
const { repo, owner } = context.repo;
const pr = await github.rest.pulls.create({
owner,
repo,
head: branch,
base: 'main',
title: `[examples] Upgrade Next.js to version ${newVersion}`,
body: `This auto-generated PR updates Next.js to version ${newVersion}`,
});
await github.rest.pulls.requestReviewers({
owner,
repo,
pull_number: pr.data.number,
reviewers: ['ijjk', 'styfle'],
});
};