forked from alpinejs/alpine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelease.js
More file actions
136 lines (101 loc) · 4.14 KB
/
Copy pathrelease.js
File metadata and controls
136 lines (101 loc) · 4.14 KB
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
let { runFromPackage, writeToPackageDotJson, ask, run, getFromPackageDotJson } = require('./utils')
let chalk = require('chalk');
let log = message => console.log(chalk.green(message))
let version = process.argv[2]
let prevVersion = getFromPackageDotJson('alpinejs', 'version')
let fs = require('fs')
let axios = require('axios').create({
headers: { Authorization: `Bearer ${require('./.env.json').GITHUB_TOKEN}` }
})
if (! version) {
return console.log('Whoops, you must pass in a version number to this command as the argument')
}
if (! /[0-9]+\.[0-9]+\.[0-9]+/.test(version)) {
return console.log('Whoops, the supplies version is invalid: '+version)
}
writeNewAlpineVersion()
writeNewDocsVersion()
buildAssets()
run(`open https://github.com/alpinejs/alpine/compare/v${prevVersion}...main`)
setTimeout(() => {
ask('Have you reviewed, committed, and pushed all the files for this release?', () => {
draftRelease(version, () => {
ask('Are you sure you want to publish this release: '+version+'?', () => publish())
})
})
}, 1000)
function writeNewAlpineVersion() {
let file = __dirname+'/../packages/docs/src/en/essentials/installation.md'
let docs = fs.readFileSync(file, 'utf8')
docs = docs.replace(prevVersion, version)
fs.writeFileSync(file, docs)
console.log('Writing new Alpine version to installation docs: '+version);
writeToPackageDotJson('alpinejs', 'version', version)
console.log('Bumping alpinejs package.json: '+version);
writeToPackageDotJson('intersect', 'version', version)
console.log('Bumping @alpinejs/intersect package.json: '+version);
writeToPackageDotJson('persist', 'version', version)
console.log('Bumping @alpinejs/persist package.json: '+version);
}
function writeNewDocsVersion() {
let versionWithRevisionSuffix = `${version}-revision.1`
writeToPackageDotJson('docs', 'version', versionWithRevisionSuffix)
console.log('Bumping @alpinejs/docs package.json: '+version);
}
function buildAssets() {
console.log('Building assets...')
require('./build')
}
function publish() {
console.log('Publishing alpinejs on NPM...');
runFromPackage('alpinejs', 'npm publish')
console.log('Publishing @alpinejs/docs on NPM...');
runFromPackage('docs', 'npm publish --access public')
console.log('Publishing @alpinejs/intersect on NPM...');
runFromPackage('intersect', 'npm publish --access public')
console.log('Publishing @alpinejs/persist on NPM...');
runFromPackage('persist', 'npm publish --access public')
log('\n\nFinished!')
}
async function draftRelease(name, after = () => {}) {
let lastRelease = await getLastRelease()
let since = lastRelease.published_at
let pulls = await getPullRequestsSince(since)
let output = ''
output += "## Added\n\n## Fixed\n\n"
output += pulls.map(pull => `* ${pull.title} [#${pull.number}](${pull.html_url})`).join('\n')
fs.writeFileSync('./changelog.tmp', output)
run('code ./changelog.tmp')
ask('Are you finished editing the changelog?', () => {
let content = fs.readFileSync('./changelog.tmp', 'utf8')
fs.unlinkSync('./changelog.tmp')
tagNewRelease(name, content, after)
})
}
async function getLastRelease() {
let { data: releases } = await axios.get('https://api.github.com/repos/alpinejs/alpine/releases')
let lastRelease = releases.find(release => {
return release.target_commitish === 'main'
&& release.draft === false
})
return lastRelease
}
async function getPullRequestsSince(since) {
let { data: pulls } = await axios.get('https://api.github.com/repos/alpinejs/alpine/pulls?state=closed&sort=updated&direction=desc&base=main')
let pullsSince = pulls.filter(pull => {
if (! pull.merged_at) return false
return pull.merged_at > since
})
return pullsSince
}
function tagNewRelease(name, content, after = () => {}) {
return axios.post('https://api.github.com/repos/alpinejs/alpine/releases', {
name: 'v'+name,
tag_name: 'v'+name,
target_commitish: 'main',
body: content,
draft: false,
}).then(() => {
after()
})
}