diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5aaef6d..78e0221 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -658,4 +658,108 @@ jobs: FILES: 'test-file.json' EXPECTED_VERSION: '1.5.0' + test-pre-release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + path: "./" + - run: npm ci --prod + + - run: "git config --global user.email 'changelog@github.com'" + - run: "git config --global user.name 'Awesome Github action'" + - run: "git add . && git commit --allow-empty -m 'feat: Added fake file so version will be bumped'" + + - name: Generate changelog + id: changelog + uses: ./ + env: + ENV: 'dont-use-git' + EXPECTED_TAG: 'v1.4.6-rc.0' + with: + github-token: ${{ secrets.github_token }} + version-file: 'test-file.json' + pre-release: true + + - name: Show file + run: | + echo "$( { - let major, minor, patch + let newVersion + + const prerelease = core.getBooleanInput('pre-release') + const identifier = core.getInput('pre-release-identifier') if (version) { - [major, minor, patch] = version.split('.') - - switch (releaseType) { - case 'major': - major = parseInt(major, 10) + 1 - minor = 0 - patch = 0 - break - - case 'minor': - minor = parseInt(minor, 10) + 1 - patch = 0 - break - - default: - patch = parseInt(patch, 10) + 1 - } + newVersion = semver.inc(version, (prerelease ? 'prerelease' : releaseType), identifier) } else { - let version = semverValid(core.getInput('fallback-version')) + let version = semver.valid(core.getInput('fallback-version')) if (version) { - [major, minor, patch] = version.split('.') + newVersion = version } else { // default - major = 0 - minor = 1 - patch = 0 + newVersion = '0.1.0' } - core.info(`The version could not be detected, using fallback version '${major}.${minor}.${patch}'.`) + core.info(`The version could not be detected, using fallback version '${newVersion}'.`) } const preChangelogGenerationFile = core.getInput('pre-changelog-generation') - let newVersion = `${major}.${minor}.${patch}` - if (preChangelogGenerationFile) { const preChangelogGenerationScript = requireScript(preChangelogGenerationFile) diff --git a/src/helpers/generateChangelog.js b/src/helpers/generateChangelog.js index e3a42b9..3f18142 100644 --- a/src/helpers/generateChangelog.js +++ b/src/helpers/generateChangelog.js @@ -10,13 +10,15 @@ const conventionalChangelog = require('conventional-changelog') * @param releaseCount * @param config * @param gitPath + * @param skipUnstable * @returns {*} */ -const getChangelogStream = (tagPrefix, preset, version, releaseCount, config, gitPath) => conventionalChangelog({ +const getChangelogStream = (tagPrefix, preset, version, releaseCount, config, gitPath, skipUnstable) => conventionalChangelog({ preset, releaseCount: parseInt(releaseCount, 10), tagPrefix, - config + config, + skipUnstable }, { version, @@ -40,10 +42,11 @@ module.exports = getChangelogStream * @param releaseCount * @param config * @param gitPath + * @param skipUnstable * @returns {Promise} */ -module.exports.generateStringChangelog = (tagPrefix, preset, version, releaseCount, config, gitPath) => new Promise((resolve, reject) => { - const changelogStream = getChangelogStream(tagPrefix, preset, version, releaseCount, config, gitPath) +module.exports.generateStringChangelog = (tagPrefix, preset, version, releaseCount, config, gitPath, skipUnstable) => new Promise((resolve, reject) => { + const changelogStream = getChangelogStream(tagPrefix, preset, version, releaseCount, config, gitPath, skipUnstable) let changelog = '' diff --git a/src/index.js b/src/index.js index 037196d..0c05e1c 100644 --- a/src/index.js +++ b/src/index.js @@ -47,6 +47,7 @@ async function run() { const gitPath = core.getInput('git-path') const skipCi = core.getBooleanInput('skip-ci') const createSummary = core.getBooleanInput('create-summary') + const prerelease = core.getBooleanInput('pre-release') if (skipCi) { gitCommitMessage += ' [skip ci]' @@ -84,7 +85,7 @@ async function run() { const config = conventionalConfigFile && requireScript(conventionalConfigFile) - conventionalRecommendedBump({ preset, tagPrefix, config }, async (error, recommendation) => { + conventionalRecommendedBump({ preset, tagPrefix, config, skipUnstable: !prerelease }, async (error, recommendation) => { if (error) { core.setFailed(error.message) return @@ -146,7 +147,7 @@ async function run() { } // Generate the string changelog - const stringChangelog = await changelog.generateStringChangelog(tagPrefix, preset, newVersion, 1, config, gitPath) + const stringChangelog = await changelog.generateStringChangelog(tagPrefix, preset, newVersion, 1, config, gitPath, !prerelease) core.info('Changelog generated') core.info(stringChangelog) diff --git a/src/version/git.js b/src/version/git.js index 5e8fe59..40e95f9 100644 --- a/src/version/git.js +++ b/src/version/git.js @@ -9,8 +9,9 @@ module.exports = class Git extends BaseVersioning { bump = (releaseType) => { return new Promise((resolve) => { const tagPrefix = core.getInput('tag-prefix') + const prerelease = core.getBooleanInput('pre-release') - gitSemverTags({ tagPrefix, }, async (err, tags) => { + gitSemverTags({ tagPrefix, skipUnstable: !prerelease }, async (err, tags) => { const currentVersion = tags.length > 0 ? tags.shift().replace(tagPrefix, '') : null // Get the new version diff --git a/test-file-pre-release.json b/test-file-pre-release.json new file mode 100644 index 0000000..c36ad91 --- /dev/null +++ b/test-file-pre-release.json @@ -0,0 +1,4 @@ +{ + "name": "Test JSON", + "version": "1.4.6-alpha.0" +}