1 | const meta = require('github-action-meta')
|
2 | const readJSON = require('./read-json')
|
3 |
|
4 | const CONFIG_KEY = '@primer/publish'
|
5 |
|
6 | const RELEASE_BRANCH_PATTERN = /^release-(.+)$/
|
7 | const RELEASE_CANDIDATE_PREID = 'rc'
|
8 | const RELEASE_CANDIDATE_TAG = 'next'
|
9 |
|
10 | const CANARY_VERSION = '0.0.0'
|
11 | const CANARY_TAG = 'canary'
|
12 |
|
13 |
|
14 | module.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 |
|
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 | }
|