wishthis/node_modules/fomantic-ui/scripts/nightly-version.js
2022-04-07 09:06:43 +02:00

91 lines
2.9 KiB
JavaScript

// node
const fs = require('fs')
const path = require('path')
const childProcess = require('child_process')
// npm
const fetch = require('node-fetch')
const semver = require('semver')
const actions = require('@actions/core')
// pkg
const pkg = require('../package.json')
const process = require('process')
const ghBase = 'https://api.github.com'
const repoUrlPath = 'fomantic/Fomantic-UI'
const npmBase = 'https://registry.npmjs.org'
const npmPackage = 'fomantic-ui'
const currentRev = childProcess // get the current rev from the repo
.execSync('git rev-parse HEAD')
.toString()
.trim()
.slice(0, 7)
const getNextVersion = async function () {
const versions = await fetch(`${ghBase}/repos/${repoUrlPath}/milestones`)
.then(r => r.json())
.then(milestones => milestones.filter(m => m.title.indexOf('x') === -1)) // remove all versions with `x` in it
.then(versions => versions.map(m => m.title)) // create array of versions
.then(versions => semver.sort(versions))
// Return first entry aka the smallest version in milestones which would therefore
// be the next version
return semver.parse(versions[0])
}
const getPublishedVersion = async function () {
// get the latest published nightly tagged version
return semver.parse(
await fetch(`${npmBase}/${npmPackage}`)
.then(r => r.json())
.then(p => {
let nightly = p['dist-tags'].nightly ?? '';
let versionInfo = p.versions[nightly] ?? {};
let buildCommit = nightly.indexOf('+')===-1 && versionInfo.gitHead ? '+'+(versionInfo.gitHead ?? '').slice(0,7) : '';
return nightly+buildCommit;
})
)
}
const getNightlyVersion = async function () {
const next = semver.parse(await getNextVersion())
const current = semver.parse(await getPublishedVersion())
if (current.build[0] === currentRev) {
actions.setOutput('shouldPublish', false)
console.log('No new commits since last publish. Exiting.')
process.exit(0)
return
}
let nightlyVersion = `${next.version}-beta.0`
// Check if published version is the same version as next version.
// Only check major, minor and patch as previously published nightly
// versions would include prerelease tag and build metadata
if (semver.eq(`${next.major}.${next.minor}.${next.patch}`, `${current.major}.${current.minor}.${current.patch}`)) {
// If they match then a nightly version has already been published, so we need to increment
// the prerelease and add the new rev as build metadata
nightlyVersion = semver.inc(
`${next.version}-beta.${current.prerelease[1]}`,
'prerelease'
)
}
actions.setOutput('shouldPublish', 'yes')
return `${nightlyVersion}+${currentRev}`
}
getNightlyVersion()
.then(nightlyVersion => {
pkg.version = nightlyVersion
})
.then(() => {
fs.writeFileSync(
path.resolve(__dirname, '../package.json'),
JSON.stringify(pkg, null, 2)
)
})
.then(() => console.log(`Done (${pkg.version})`))