release-please
Version:
generate release PRs based on the conventionalcommits.org spec
146 lines • 6.14 kB
JavaScript
// Copyright 2021 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.PullRequestTitle = exports.generateMatchPattern = void 0;
const logger_1 = require("./logger");
const version_1 = require("../version");
// cannot import from '..' - transpiled code references to RELEASE_PLEASE
// at the script level are undefined, they are only defined inside function
// or instance methods/properties.
const DEFAULT_PR_TITLE_PATTERN = 'chore${scope}: release${component} ${version}';
const COMPONENT_NO_SPACE = false;
function generateMatchPattern(pullRequestTitlePattern, componentNoSpace, logger = logger_1.logger) {
if (pullRequestTitlePattern &&
pullRequestTitlePattern.search(/\$\{scope\}/) === -1)
logger.warn("pullRequestTitlePattern miss the part of '${scope}'");
if (pullRequestTitlePattern &&
pullRequestTitlePattern.search(/\$\{component\}/) === -1)
logger.warn("pullRequestTitlePattern miss the part of '${component}'");
if (pullRequestTitlePattern &&
pullRequestTitlePattern.search(/\$\{version\}/) === -1)
logger.warn("pullRequestTitlePattern miss the part of '${version}'");
return new RegExp(`^${(pullRequestTitlePattern || DEFAULT_PR_TITLE_PATTERN)
.replace('[', '\\[') // TODO: handle all regex escaping
.replace(']', '\\]')
.replace('(', '\\(')
.replace(')', '\\)')
.replace('${scope}', '(\\((?<branch>[\\w-./]+)\\))?')
.replace('${component}', componentNoSpace === true
? '?(?<component>@?[\\w-./]*)?'
: ' ?(?<component>@?[\\w-./]*)?')
.replace('${version}', 'v?(?<version>[0-9].*)')
.replace('${branch}', '(?<branch>[\\w-./]+)?')}$`);
}
exports.generateMatchPattern = generateMatchPattern;
class PullRequestTitle {
constructor(opts) {
this.version = opts.version;
this.component = opts.component;
this.targetBranch = opts.targetBranch;
this.pullRequestTitlePattern =
opts.pullRequestTitlePattern || DEFAULT_PR_TITLE_PATTERN;
this.componentNoSpace = opts.componentNoSpace || COMPONENT_NO_SPACE;
this.matchPattern = generateMatchPattern(this.pullRequestTitlePattern, this.componentNoSpace, opts.logger);
}
static parse(title, pullRequestTitlePattern, componentNoSpace, logger = logger_1.logger) {
const matchPattern = generateMatchPattern(pullRequestTitlePattern, componentNoSpace, logger);
const match = title.match(matchPattern);
if (match === null || match === void 0 ? void 0 : match.groups) {
return new PullRequestTitle({
version: match.groups['version']
? version_1.Version.parse(match.groups['version'])
: undefined,
component: match.groups['component'],
targetBranch: match.groups['branch'],
pullRequestTitlePattern,
componentNoSpace,
logger,
});
}
return undefined;
}
static ofComponentVersion(component, version, pullRequestTitlePattern, componentNoSpace) {
return new PullRequestTitle({
version,
component,
pullRequestTitlePattern,
componentNoSpace,
});
}
static ofVersion(version, pullRequestTitlePattern, componentNoSpace) {
return new PullRequestTitle({
version,
pullRequestTitlePattern,
componentNoSpace,
});
}
static ofTargetBranchVersion(targetBranch, version, pullRequestTitlePattern, componentNoSpace) {
return new PullRequestTitle({
version,
targetBranch,
pullRequestTitlePattern,
componentNoSpace,
});
}
static ofComponentTargetBranchVersion(component, targetBranch, version, pullRequestTitlePattern, componentNoSpace) {
return new PullRequestTitle({
version,
component,
targetBranch,
pullRequestTitlePattern,
componentNoSpace,
});
}
static ofTargetBranch(targetBranch, pullRequestTitlePattern, componentNoSpace) {
return new PullRequestTitle({
targetBranch,
pullRequestTitlePattern,
componentNoSpace,
});
}
getTargetBranch() {
return this.targetBranch;
}
getComponent() {
return this.component;
}
getVersion() {
return this.version;
}
toString() {
var _a;
const scope = this.targetBranch ? `(${this.targetBranch})` : '';
const component = this.componentNoSpace === true
? this.component
? `${this.component}`
: ''
: this.component
? ` ${this.component}`
: '';
const version = (_a = this.version) !== null && _a !== void 0 ? _a : '';
if (this.componentNoSpace === true && !component) {
console.log('`component` is empty. Removing component from title pattern..');
this.pullRequestTitlePattern = this.pullRequestTitlePattern.replace('${component} ', '');
}
return this.pullRequestTitlePattern
.replace('${scope}', scope)
.replace('${component}', component)
.replace('${version}', version.toString())
.replace('${branch}', this.targetBranch || '')
.trim();
}
}
exports.PullRequestTitle = PullRequestTitle;
//# sourceMappingURL=pull-request-title.js.map
;