UNPKG

1.98 kBJavaScriptView Raw
1const meta = require('github-action-meta')
2const readJSON = require('./read-json')
3
4const CONFIG_KEY = '@primer/publish'
5
6const RELEASE_BRANCH_PATTERN = /^release-(.+)$/
7const RELEASE_CANDIDATE_PREID = 'rc'
8const RELEASE_CANDIDATE_TAG = 'next'
9
10const CANARY_VERSION = '0.0.0'
11const CANARY_TAG = 'canary'
12
13// eslint-disable-next-line no-unused-vars
14module.exports = function getContext(options) {
15 const packageJson = readJSON('package.json')
16 if (!packageJson) {
17 throw new Error(`Unable to read package.json in ${process.cwd()}!`)
18 }
19 const {name} = packageJson
20
21 // basic sanity checks
22 if (packageJson.private === true) {
23 throw new Error(`"private" is true in package.json; bailing`)
24 } else if (!name) {
25 throw new Error(`package.json is missing a "name" field`)
26 }
27
28 const config = packageJson[CONFIG_KEY] || {}
29 const {releaseBranch = 'master', releaseTag = 'latest'} = config
30
31 let version
32 let status
33 let tag = releaseTag
34
35 const {sha, branch} = meta.git
36 const repo = meta.repo.toString()
37
38 if (branch === releaseBranch) {
39 version = packageJson.version
40 } else {
41 let match
42 const shortSha = sha.substr(0, 7)
43 if ((match = branch.match(RELEASE_BRANCH_PATTERN))) {
44 const v = match[1]
45 status = Object.assign(
46 {
47 context: `npm version`
48 },
49 v === packageJson.version
50 ? {
51 state: 'success',
52 description: v
53 }
54 : {
55 state: 'pending',
56 description: `Remember to set "version": "${v}" in package.json`,
57 url: `https://github.com/${repo}/edit/${branch}/package.json`
58 }
59 )
60 const preid = RELEASE_CANDIDATE_PREID
61 version = `${v}-${preid}.${shortSha}`
62 tag = RELEASE_CANDIDATE_TAG
63 } else {
64 const v = CANARY_VERSION
65 version = `${v}-${shortSha}`
66 tag = CANARY_TAG
67 }
68 }
69
70 return Promise.resolve({name, version, tag, config, packageJson, status})
71}