89 lines
3.1 KiB
JavaScript
89 lines
3.1 KiB
JavaScript
const core = require('@actions/core')
|
|
const conventionalRecommendedBump = require('conventional-recommended-bump')
|
|
|
|
const git = require('./helpers/git')
|
|
const packageJson = require('./helpers/packageJson')
|
|
const changelog = require('./helpers/generateChangelog')
|
|
|
|
async function run() {
|
|
try {
|
|
const commitMessage = core.getInput('git-message')
|
|
const tagPrefix = core.getInput('tag-prefix')
|
|
const preset = core.getInput('preset')
|
|
const outputFile = core.getInput('output-file')
|
|
const releaseCount = core.getInput('release-count')
|
|
const packageJsonToUse = core.getInput('package-json')
|
|
const skipOnEmptyRelease = core.getInput('skip-on-empty').toLowerCase() === 'true'
|
|
|
|
core.info(`Using "${preset}" preset`)
|
|
core.info(`Using "${commitMessage}" as commit message`)
|
|
core.info(`Using "${releaseCount}" release count`)
|
|
core.info(`Using "${packageJsonToUse}"`)
|
|
core.info(`Using "${tagPrefix}" as tag prefix`)
|
|
core.info(`Using "${outputFile}" as output file`)
|
|
|
|
core.info('Pull to make sure we have the full git history')
|
|
await git.pull()
|
|
|
|
conventionalRecommendedBump({ preset, tagPrefix }, async (error, recommendation) => {
|
|
if (error) {
|
|
core.setFailed(error.message)
|
|
return
|
|
}
|
|
|
|
core.info(`Recommended release type: ${recommendation.releaseType}`)
|
|
recommendation.reason && core.info(`because: ${recommendation.reason}`)
|
|
|
|
// Bump the version in the package.json
|
|
const jsonPackage = packageJson.bump(
|
|
packageJson.get(),
|
|
recommendation.releaseType,
|
|
)
|
|
|
|
const stringChangelog = await changelog.generateStringChangelog(tagPrefix, preset, jsonPackage, 1)
|
|
core.info('Changelog generated')
|
|
core.info(stringChangelog)
|
|
|
|
const cleanChangelog = stringChangelog.split('\n').slice(3).join('\n').trim()
|
|
|
|
if (skipOnEmptyRelease && cleanChangelog === '') {
|
|
core.info('Generated changelog is empty so we skip this step')
|
|
core.setOutput('skipped', 'true')
|
|
return
|
|
}
|
|
|
|
// Update the package.json file
|
|
packageJson.update(jsonPackage)
|
|
|
|
core.info(`New version: ${jsonPackage.version}`)
|
|
|
|
// If output file === 'false' we don't write it to file
|
|
if (outputFile !== 'false') {
|
|
// Generate the changelog
|
|
await changelog.generateFileChangelog(tagPrefix, preset, jsonPackage, outputFile, releaseCount)
|
|
}
|
|
|
|
core.info('Push all changes')
|
|
|
|
// Add changed files to git
|
|
await git.add('.')
|
|
await git.commit(commitMessage.replace('{version}', `${tagPrefix}${jsonPackage.version}`))
|
|
await git.createTag(`${tagPrefix}${jsonPackage.version}`)
|
|
await git.push()
|
|
|
|
// Set outputs so other actions (for example actions/create-release) can use it
|
|
core.setOutput('changelog', stringChangelog)
|
|
// Removes the version number from the changelog
|
|
core.setOutput('clean_changelog', cleanChangelog)
|
|
core.setOutput('version', jsonPackage.version)
|
|
core.setOutput('tag', `${tagPrefix}${jsonPackage.version}`)
|
|
core.setOutput('skipped', 'false')
|
|
})
|
|
|
|
} catch (error) {
|
|
core.setFailed(error.message)
|
|
}
|
|
}
|
|
|
|
run()
|