Skip to content

Commit c10abe0

Browse files
committed
chore: tag backported workspaces during publish script
1 parent 5866217 commit c10abe0

File tree

1 file changed

+29
-30
lines changed

1 file changed

+29
-30
lines changed

scripts/publish.js

+29-30
Original file line numberDiff line numberDiff line change
@@ -1,59 +1,58 @@
11
const semver = require('semver')
22
const log = require('proc-log')
33
const pacote = require('pacote')
4-
const { run, git, npm, pkg, spawn } = require('./util.js')
4+
const { run, git, npm, pkg: cli, spawn } = require('./util.js')
55

66
const resetdeps = () => npm('run', 'resetdeps')
77

88
const op = () => spawn('op', 'item', 'get', 'npm', '--otp', { out: true, ok: true })
99

10-
const TAGS = {
11-
// cli is always published to next-MAJOR
12-
root: (v) => ({ tag: `next-${semver.major(v)}` }),
13-
// workspaces are always published to latest, except prereleases
14-
workspace: () => ({ tag: 'latest', preTag: 'prerelease' }),
10+
const getVersion = async (s) => {
11+
const mani = await pacote.manifest(s, { preferOnline: true })
12+
return mani.version
13+
}
14+
const getLatest = async (s) => {
15+
const pack = await pacote.packument(s, { preferOnline: true })
16+
return pack['dist-tags'].latest
17+
}
18+
19+
const TAG = {
20+
cli: ({ version }) => `next-${semver.major(version)}`,
21+
workspace: async ({ name, version }) => {
22+
const { prerelease, major } = semver.parse(version)
23+
if (prerelease.length) {
24+
return 'prerelease'
25+
}
26+
if (major === await getLatest(name).then(v => semver.major(v))) {
27+
return 'latest'
28+
}
29+
return 'backport'
30+
},
1531
}
1632

17-
const needsPublish = async ({ pkg: { private, name, version }, force, tags: getTags }) => {
33+
const needsPublish = async ({ private, name, version }, { force, getTag }) => {
1834
if (private) {
1935
return
2036
}
2137

22-
const tags = getTags(version)
23-
const tag = semver.parse(version).prerelease.length && tags.preTag
24-
? tags.preTag
25-
: tags.tag
26-
27-
if (force) {
28-
return tag
29-
}
30-
31-
const mani = await pacote.manifest(`${name}@${tag}`, { preferOnline: true })
32-
if (version !== mani.version) {
38+
const tag = await getTag({ name, version })
39+
if (force || version !== await getVersion(`${name}@${tag}`)) {
3340
return tag
3441
}
3542
}
3643

37-
const getPublishes = async ({ force }) => {
44+
const getPublishes = async (opts) => {
3845
const publish = []
3946

40-
for (const { name, pkg: ws } of await pkg.mapWorkspaces()) {
47+
for (const { name, pkg } of await cli.mapWorkspaces()) {
4148
publish.push({
4249
workspace: name,
43-
tag: await needsPublish({
44-
force,
45-
pkg: ws,
46-
tags: TAGS.workspace,
47-
}),
50+
tag: await needsPublish(pkg, { ...opts, getTag: TAG.workspace }),
4851
})
4952
}
5053

5154
publish.push({
52-
tag: await needsPublish({
53-
force,
54-
pkg,
55-
tags: TAGS.root,
56-
}),
55+
tag: await needsPublish(cli, { ...opts, getTag: TAG.cli }),
5756
})
5857

5958
return publish.filter(p => p.tag)

0 commit comments

Comments
 (0)