UNPKG

1.92 kBPlain TextView Raw
1#!/usr/bin/env node
2
3const url = require('url');
4const assert = require('assert');
5const GitHub = require('github');
6const package = require('../../../package.json');
7
8
9const github = new GitHub();
10assert(process.env.GITHUB_OAUTH_TOKEN, 'GITHUB_OAUTH_TOKEN env variable should contain your personal access token');
11github.authenticate({ type: 'oauth', token: process.env.GITHUB_OAUTH_TOKEN });
12
13var repoUrl = package.repository.url || package.homepage;
14assert(repoUrl, 'Cannot detect repository name. Either `package.repository.url` or `package.homepage` should be set');
15
16var repositoryPath = url.parse(repoUrl).path.replace(/\.git$/, '');
17var repositoryParsed = repositoryPath.match(/\/(\S+)\/(\S+)/);
18const user = repositoryParsed[1];
19const repo = repositoryParsed[2];
20
21
22const checkErr = (err) => {
23 if (err) {
24 console.error(err.toJSON());
25 process.exit(1);
26 }
27};
28
29github.repos.getLatestRelease({ user, repo }, (err, latestRelease) => {
30 if (err) {
31 if (err.code === 404) {
32 latestRelease = { name: 'unknown', created_at: new Date('1970-01-01') };
33 } else {
34 checkErr()
35 }
36 }
37
38 console.log('Latest release: %s', latestRelease.name)
39
40 github.pullRequests.getAll({ user, repo, state: 'closed', sort: 'updated', direction: 'desc' }, (err, prs) => {
41 checkErr(err);
42
43 const name = `v${package.version}`;
44 const body = prs
45 .filter((item) => item.merged_at > latestRelease.created_at)
46 .sort((a, b) => b.title.localeCompare(a.title))
47 .map((item) => `- ${item.title} #${item.number} (by @${item.user.login})`)
48 .join('\n');
49
50 console.log('Publishing release: %s', name);
51 console.log(body);
52
53 github.repos.createRelease({
54 user,
55 repo,
56 tag_name: name,
57 target_commitish: 'master',
58 name,
59 body,
60 draft: false,
61 prerelease: false,
62 }, (err) => {
63 checkErr(err);
64 process.exit(0);
65 });
66 });
67});