91 lines
2.9 KiB
JavaScript
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})`))
|