- introduce new on_property field for Extractor allowing to define the property to use for the label extraction

- use property (if provided) and allow label extraction via this approach
  - FIX https://github.com/mikepenz/release-changelog-builder-action/issues/208
This commit is contained in:
Mike Penz
2021-03-04 16:16:21 +01:00
parent 9c76068a23
commit 0bbac0be0f
4 changed files with 65 additions and 11 deletions
+5 -1
View File
@@ -9,7 +9,7 @@ export interface Configuration {
empty_template: string
categories: Category[]
ignore_labels: string[]
label_extractor: Transformer[]
label_extractor: Extractor[]
transformers: Transformer[]
tag_resolver: TagResolver
}
@@ -24,6 +24,10 @@ export interface Transformer {
target: string
}
export interface Extractor extends Transformer {
on_property: 'title' | 'author' | 'milestone' | 'body' | undefined
}
export interface TagResolver {
method: string // semver, sort
}
+24 -3
View File
@@ -2,6 +2,7 @@ import {PullRequestInfo, sortPullRequests} from './pullRequests'
import * as core from '@actions/core'
import {ReleaseNotesOptions} from './releaseNotes'
import {
Extractor,
Category,
Configuration,
Transformer,
@@ -24,7 +25,19 @@ export function buildChangelog(
for (const extractor of labelExtractors) {
if (extractor.pattern != null) {
for (const pr of prs) {
const label = pr.body.replace(extractor.pattern, extractor.target)
let label
if (extractor.onProperty !== undefined) {
let value: string = pr[extractor.onProperty]
if (value === undefined) {
core.warning(
`⚠️ the provided property '${extractor.onProperty}' for \`label_extractor\` is not valid`
)
value = pr['body']
}
label = value.replace(extractor.pattern, extractor.target)
} else {
label = pr.body.replace(extractor.pattern, extractor.target)
}
if (label !== '') {
pr.labels.push(label)
}
@@ -222,15 +235,22 @@ function validateTransfomers(
return transformers
.map(transformer => {
try {
let onProperty = undefined
if (transformer.hasOwnProperty('on_property')) {
onProperty = (transformer as Extractor).on_property
}
return {
pattern: new RegExp(transformer.pattern.replace('\\\\', '\\'), 'gu'),
target: transformer.target
target: transformer.target,
onProperty
}
} catch (e) {
core.warning(`⚠️ Bad replacer regex: ${transformer.pattern}`)
return {
pattern: null,
target: ''
target: '',
onProperty: undefined
}
}
})
@@ -240,4 +260,5 @@ function validateTransfomers(
interface RegexTransformer {
pattern: RegExp | null
target: string
onProperty: 'title' | 'author' | 'milestone' | 'body' | undefined
}