feat: Allow to specify a config file
parent
fb36467281
commit
f0fabf6d88
|
@ -259,3 +259,24 @@ jobs:
|
|||
with:
|
||||
github-token: ${{ secrets.github_token }}
|
||||
version-file: 'package.json, package-lock.json'
|
||||
|
||||
test-config-file-path:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v2
|
||||
with:
|
||||
path: "./"
|
||||
|
||||
- name: Install Packages
|
||||
run: yarn
|
||||
|
||||
- name: Generate Changelog
|
||||
id: changelog
|
||||
uses: ./
|
||||
env:
|
||||
ENV: 'dont-use-git'
|
||||
with:
|
||||
github-token: ${{ secrets.github_token }}
|
||||
skip-version-file: 'true'
|
||||
config-file-path: './test-changelog.config.js'
|
||||
|
|
21
README.md
21
README.md
|
@ -20,6 +20,7 @@ This action will bump version, tag commit and generate a changelog with conventi
|
|||
- **Optional** `skip-commit`: Do create a release commit. Default `'false'`.
|
||||
- **Optional** `pre-commit`: Path to the pre-commit script file. No hook by default.
|
||||
- **Optional** `fallback-version`: The fallback version, if no older one can be detected, or if it is the first one. Default `'0.1.0'`
|
||||
- **Optional** `config-file-path`: Path to the conventional changelog config file. If set, the preset setting will be ignored
|
||||
|
||||
### Pre-Commit hook
|
||||
|
||||
|
@ -51,6 +52,23 @@ export function preCommit(props: Props): void {}
|
|||
|
||||
A bunch of useful environment variables are available to the script with `process.env`. See [docs.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables](https://docs.github.com/en/actions/configuring-and-managing-workflows/using-environment-variables) to learn more.
|
||||
|
||||
### Config-File-Path
|
||||
A config file to define the conventional commit settings. Use it if you need to override values like `issuePrefix` or `issueUrlFormat`. If you set a `config-file-path`, the `preset` setting will be ignored. Therefore use an existing config and override the values you want to adjust.
|
||||
|
||||
example:
|
||||
```javascript
|
||||
'use strict'
|
||||
const config = require('conventional-changelog-conventionalcommits');
|
||||
|
||||
module.exports = config({
|
||||
"issuePrefixes": ["TN-"],
|
||||
"issueUrlFormat": "https://jira.example.com/browse/{{prefix}}{{id}}"
|
||||
})
|
||||
```
|
||||
The specified path can be relative or absolute. If it is relative, then it will be based on the `GITHUB_WORKSPACE` path.
|
||||
|
||||
Make sure to install all required packages in the workflow before executing this action.
|
||||
|
||||
## Outputs
|
||||
|
||||
- `changelog`: The generated changelog for the new version.
|
||||
|
@ -185,6 +203,9 @@ $ act -j test-pre-commit -P ubuntu-latest=nektos/act-environments-ubuntu:18.04 -
|
|||
|
||||
# To run / multiple files test
|
||||
$ act -j multiple-files -P ubuntu-latest=nektos/act-environments-ubuntu:18.04 -s github_token=fake-token
|
||||
|
||||
# To run / config file path test
|
||||
$ act -j test-config-file-path -P ubuntu-latest=nektos/act-environments-ubuntu:18.04 -s github_token=fake-token
|
||||
```
|
||||
|
||||
## [License](./LICENSE)
|
||||
|
|
|
@ -86,6 +86,9 @@ inputs:
|
|||
fallback-version:
|
||||
description: 'The fallback version, if no older one can be detected, or if it is the first one'
|
||||
default: '0.1.0'
|
||||
|
||||
config-file-path:
|
||||
description: 'Path to the conventional changelog config file. If set, the preset setting will be ignored'
|
||||
required: false
|
||||
|
||||
|
||||
|
|
|
@ -10,15 +10,19 @@ const conventionalChangelog = require('conventional-changelog')
|
|||
* @param releaseCount
|
||||
* @returns {*}
|
||||
*/
|
||||
const getChangelogStream = (tagPrefix, preset, version, releaseCount) => conventionalChangelog({
|
||||
preset,
|
||||
releaseCount: parseInt(releaseCount, 10),
|
||||
tagPrefix,
|
||||
},
|
||||
const getChangelogStream = (tagPrefix, preset, version, releaseCount, config) => conventionalChangelog({
|
||||
preset,
|
||||
releaseCount: parseInt(releaseCount, 10),
|
||||
tagPrefix,
|
||||
config
|
||||
},
|
||||
{
|
||||
version,
|
||||
currentTag: `${tagPrefix}${version}`,
|
||||
},
|
||||
{},
|
||||
config && config.parserOpts,
|
||||
config && config.writerOpts
|
||||
)
|
||||
|
||||
module.exports = getChangelogStream
|
||||
|
@ -32,8 +36,8 @@ module.exports = getChangelogStream
|
|||
* @param releaseCount
|
||||
* @returns {Promise<string>}
|
||||
*/
|
||||
module.exports.generateStringChangelog = (tagPrefix, preset, version, releaseCount) => new Promise((resolve, reject) => {
|
||||
const changelogStream = getChangelogStream(tagPrefix, preset, version, releaseCount)
|
||||
module.exports.generateStringChangelog = (tagPrefix, preset, version, releaseCount, config) => new Promise((resolve, reject) => {
|
||||
const changelogStream = getChangelogStream(tagPrefix, preset, version, releaseCount, config)
|
||||
|
||||
let changelog = ''
|
||||
|
||||
|
@ -54,8 +58,8 @@ module.exports.generateStringChangelog = (tagPrefix, preset, version, releaseCou
|
|||
* @param releaseCount
|
||||
* @returns {Promise<>}
|
||||
*/
|
||||
module.exports.generateFileChangelog = (tagPrefix, preset, version, fileName, releaseCount) => new Promise((resolve) => {
|
||||
const changelogStream = getChangelogStream(tagPrefix, preset, version, releaseCount)
|
||||
module.exports.generateFileChangelog = (tagPrefix, preset, version, fileName, releaseCount, config) => new Promise((resolve) => {
|
||||
const changelogStream = getChangelogStream(tagPrefix, preset, version, releaseCount, config)
|
||||
|
||||
changelogStream
|
||||
.pipe(fs.createWriteStream(fileName))
|
||||
|
|
19
src/index.js
19
src/index.js
|
@ -5,13 +5,14 @@ const path = require('path')
|
|||
const getVersioning = require('./version')
|
||||
const git = require('./helpers/git')
|
||||
const changelog = require('./helpers/generateChangelog')
|
||||
const resolve = require('path').resolve
|
||||
|
||||
async function handleVersioningByExtension(ext, file, versionPath, releaseType) {
|
||||
const versioning = getVersioning(ext)
|
||||
|
||||
// File type not supported
|
||||
if (versioning === null) {
|
||||
throw new Error(`File extension "${ext}" from file "${x}" is not supported`)
|
||||
throw new Error(`File extension "${ext}" from file "${file}" is not supported`)
|
||||
}
|
||||
|
||||
versioning.init(path.resolve(file), versionPath)
|
||||
|
@ -28,7 +29,7 @@ async function run() {
|
|||
const gitUserName = core.getInput('git-user-name')
|
||||
const gitUserEmail = core.getInput('git-user-email')
|
||||
const tagPrefix = core.getInput('tag-prefix')
|
||||
const preset = core.getInput('preset')
|
||||
const preset = !core.getInput('config-file-path') ? core.getInput('preset') : ''
|
||||
const preCommit = core.getInput('pre-commit')
|
||||
const outputFile = core.getInput('output-file')
|
||||
const releaseCount = core.getInput('release-count')
|
||||
|
@ -37,6 +38,7 @@ async function run() {
|
|||
const skipVersionFile = core.getInput('skip-version-file').toLowerCase() === 'true'
|
||||
const skipCommit = core.getInput('skip-commit').toLowerCase() === 'true'
|
||||
const skipEmptyRelease = core.getInput('skip-on-empty').toLowerCase() === 'true'
|
||||
const conventionalConfigFile = core.getInput('config-file-path')
|
||||
|
||||
core.info(`Using "${preset}" preset`)
|
||||
core.info(`Using "${gitCommitMessage}" as commit message`)
|
||||
|
@ -47,6 +49,7 @@ async function run() {
|
|||
core.info(`Using "${versionPath}" as version path`)
|
||||
core.info(`Using "${tagPrefix}" as tag prefix`)
|
||||
core.info(`Using "${outputFile}" as output file`)
|
||||
core.info(`Using "${conventionalConfigFile}" as config file`)
|
||||
|
||||
if (preCommit) {
|
||||
core.info(`Using "${preCommit}" as pre-commit script`)
|
||||
|
@ -58,7 +61,9 @@ async function run() {
|
|||
core.info('Pull to make sure we have the full git history')
|
||||
await git.pull()
|
||||
|
||||
conventionalRecommendedBump({ preset, tagPrefix }, async(error, recommendation) => {
|
||||
const config = conventionalConfigFile && require(resolve(process.cwd(), conventionalConfigFile));
|
||||
|
||||
conventionalRecommendedBump({ preset, tagPrefix, config }, async (error, recommendation) => {
|
||||
if (error) {
|
||||
core.setFailed(error.message)
|
||||
return
|
||||
|
@ -96,7 +101,7 @@ async function run() {
|
|||
|
||||
|
||||
// Generate the string changelog
|
||||
const stringChangelog = await changelog.generateStringChangelog(tagPrefix, preset, newVersion, 1)
|
||||
const stringChangelog = await changelog.generateStringChangelog(tagPrefix, preset, newVersion, 1, config)
|
||||
core.info('Changelog generated')
|
||||
core.info(stringChangelog)
|
||||
|
||||
|
@ -114,7 +119,7 @@ async function run() {
|
|||
// If output file === 'false' we don't write it to file
|
||||
if (outputFile !== 'false') {
|
||||
// Generate the changelog
|
||||
await changelog.generateFileChangelog(tagPrefix, preset, newVersion, outputFile, releaseCount)
|
||||
await changelog.generateFileChangelog(tagPrefix, preset, newVersion, outputFile, releaseCount, config)
|
||||
}
|
||||
|
||||
const gitTag = `${tagPrefix}${newVersion}`
|
||||
|
@ -135,9 +140,9 @@ async function run() {
|
|||
await git.createTag(gitTag)
|
||||
|
||||
core.info('Push all changes')
|
||||
try{
|
||||
try {
|
||||
await git.push()
|
||||
}catch (error) {
|
||||
} catch (error) {
|
||||
core.setFailed(error.message)
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
'use strict'
|
||||
const config = require('conventional-changelog-conventionalcommits');
|
||||
|
||||
module.exports = config({
|
||||
"types": [
|
||||
{ type: 'feat', section: 'New Features' },
|
||||
{ type: 'fix', section: 'Bugs' }
|
||||
]
|
||||
})
|
Loading…
Reference in New Issue