release-please 15.11.1 → 15.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,21 @@
4
4
 
5
5
  [1]: https://www.npmjs.com/package/release-please?activeTab=versions
6
6
 
7
+ ## [15.12.0](https://github.com/googleapis/release-please/compare/v15.11.2...v15.12.0) (2023-07-11)
8
+
9
+
10
+ ### Features
11
+
12
+ * Add PrereleaseVersioningStrategy ([#1981](https://github.com/googleapis/release-please/issues/1981)) ([b070888](https://github.com/googleapis/release-please/commit/b070888f25eff6e28c25014bcf67d6f9d47b9717))
13
+
14
+ ## [15.11.2](https://github.com/googleapis/release-please/compare/v15.11.1...v15.11.2) (2023-07-10)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * **deps:** Update dependency conventional-changelog-conventionalcommits to v6 ([#1974](https://github.com/googleapis/release-please/issues/1974)) ([1998564](https://github.com/googleapis/release-please/commit/1998564555c472f4eb850cdcec99a009dd76f8ca))
20
+ * **deps:** Update dependency conventional-changelog-writer to v6 ([#1975](https://github.com/googleapis/release-please/issues/1975)) ([a6aa293](https://github.com/googleapis/release-please/commit/a6aa293932200dd004024b8c8f6b458c2fa8f570))
21
+
7
22
  ## [15.11.1](https://github.com/googleapis/release-please/compare/v15.11.0...v15.11.1) (2023-07-10)
8
23
 
9
24
 
package/README.md CHANGED
@@ -187,7 +187,7 @@ Release Please automates releases for the following flavors of repositories:
187
187
  | `php` | A repository with a composer.json and a CHANGELOG.md |
188
188
  | `python` | [A Python repository, with a setup.py, setup.cfg, CHANGELOG.md](https://github.com/googleapis/python-storage) and optionally a pyproject.toml and a <project>/\_\_init\_\_.py |
189
189
  | `ruby` | A repository with a version.rb and a CHANGELOG.md |
190
- | `rust` | A Rust repository, with a Cargo.toml (either as a crate or workspace) and a CHANGELOG.md |
190
+ | `rust` | A Rust repository, with a Cargo.toml (either as a crate or workspace, although note that workspaces require a [manifest driven release](https://github.com/googleapis/release-please/blob/main/docs/manifest-releaser.md) and the "cargo-workspace" plugin) and a CHANGELOG.md |
191
191
  | `sfdx` | A repository with a [sfdx-project.json](https://developer.salesforce.com/docs/atlas.en-us.sfdx_dev.meta/sfdx_dev/sfdx_dev_ws_config.htm) and a CHANGELOG.md |
192
192
  | `simple` | [A repository with a version.txt and a CHANGELOG.md](https://github.com/googleapis/gapic-generator) |
193
193
  | `terraform-module` | [A terraform module, with a version in the README.md, and a CHANGELOG.md](https://github.com/terraform-google-modules/terraform-google-project-factory) |
@@ -20,12 +20,14 @@ const always_bump_minor_1 = require("../versioning-strategies/always-bump-minor"
20
20
  const always_bump_major_1 = require("../versioning-strategies/always-bump-major");
21
21
  const service_pack_1 = require("../versioning-strategies/service-pack");
22
22
  const errors_1 = require("../errors");
23
+ const prerelease_1 = require("../versioning-strategies/prerelease");
23
24
  const versioningTypes = {
24
25
  default: options => new default_1.DefaultVersioningStrategy(options),
25
26
  'always-bump-patch': options => new always_bump_patch_1.AlwaysBumpPatch(options),
26
27
  'always-bump-minor': options => new always_bump_minor_1.AlwaysBumpMinor(options),
27
28
  'always-bump-major': options => new always_bump_major_1.AlwaysBumpMajor(options),
28
29
  'service-pack': options => new service_pack_1.ServicePackVersioningStrategy(options),
30
+ prerelease: options => new prerelease_1.PrereleaseVersioningStrategy(options),
29
31
  };
30
32
  function buildVersioningStrategy(options) {
31
33
  const builder = versioningTypes[options.type || 'default'];
@@ -0,0 +1,12 @@
1
+ import { DefaultVersioningStrategy } from './default';
2
+ import { Version } from '../version';
3
+ import { ConventionalCommit } from '..';
4
+ import { VersionUpdater } from '../versioning-strategy';
5
+ /**
6
+ * This versioning strategy will increment the pre-release number for patch
7
+ * bumps if there is a pre-release number (preserving any leading 0s).
8
+ * Example: 1.2.3-beta01 -> 1.2.3-beta02.
9
+ */
10
+ export declare class PrereleaseVersioningStrategy extends DefaultVersioningStrategy {
11
+ determineReleaseType(version: Version, commits: ConventionalCommit[]): VersionUpdater;
12
+ }
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ // Copyright 2023 Google LLC
3
+ //
4
+ // Licensed under the Apache License, Version 2.0 (the "License");
5
+ // you may not use this file except in compliance with the License.
6
+ // You may obtain a copy of the License at
7
+ //
8
+ // http://www.apache.org/licenses/LICENSE-2.0
9
+ //
10
+ // Unless required by applicable law or agreed to in writing, software
11
+ // distributed under the License is distributed on an "AS IS" BASIS,
12
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ // See the License for the specific language governing permissions and
14
+ // limitations under the License.
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.PrereleaseVersioningStrategy = void 0;
17
+ const default_1 = require("./default");
18
+ const version_1 = require("../version");
19
+ const versioning_strategy_1 = require("../versioning-strategy");
20
+ const PRERELEASE_PATTERN = /^(?<type>[a-z]+)(?<number>\d+)$/;
21
+ class PrereleasePatchVersionUpdate {
22
+ /**
23
+ * Returns the new bumped version
24
+ *
25
+ * @param {Version} version The current version
26
+ * @returns {Version} The bumped version
27
+ */
28
+ bump(version) {
29
+ if (version.preRelease) {
30
+ const match = version.preRelease.match(PRERELEASE_PATTERN);
31
+ if (match === null || match === void 0 ? void 0 : match.groups) {
32
+ const numberLength = match.groups.number.length;
33
+ const nextPrereleaseNumber = Number(match.groups.number) + 1;
34
+ const paddedNextPrereleaseNumber = `${nextPrereleaseNumber}`.padStart(numberLength, '0');
35
+ const nextPrerelease = `${match.groups.type}${paddedNextPrereleaseNumber}`;
36
+ return new version_1.Version(version.major, version.minor, version.patch, nextPrerelease, version.build);
37
+ }
38
+ }
39
+ return new version_1.Version(version.major, version.minor, version.patch + 1, version.preRelease, version.build);
40
+ }
41
+ }
42
+ class PrereleaseMinorVersionUpdate {
43
+ /**
44
+ * Returns the new bumped version
45
+ *
46
+ * @param {Version} version The current version
47
+ * @returns {Version} The bumped version
48
+ */
49
+ bump(version) {
50
+ if (version.preRelease) {
51
+ const match = version.preRelease.match(PRERELEASE_PATTERN);
52
+ if (match === null || match === void 0 ? void 0 : match.groups) {
53
+ const numberLength = match.groups.number.length;
54
+ const prereleaseNumber = Number(match.groups.number);
55
+ let nextPrereleaseNumber = 1;
56
+ let nextMinorNumber = version.minor + 1;
57
+ let nextPatchNumber = 0;
58
+ if (version.patch === 0) {
59
+ // this is already the next minor candidate, then bump the pre-release number
60
+ nextPrereleaseNumber = prereleaseNumber + 1;
61
+ nextMinorNumber = version.minor;
62
+ nextPatchNumber = version.patch;
63
+ }
64
+ const paddedNextPrereleaseNumber = `${nextPrereleaseNumber}`.padStart(numberLength, '0');
65
+ const nextPrerelease = `${match.groups.type}${paddedNextPrereleaseNumber}`;
66
+ return new version_1.Version(version.major, nextMinorNumber, nextPatchNumber, nextPrerelease, version.build);
67
+ }
68
+ }
69
+ return new version_1.Version(version.major, version.minor + 1, 0, version.preRelease, version.build);
70
+ }
71
+ }
72
+ class PrereleaseMajorVersionUpdate {
73
+ /**
74
+ * Returns the new bumped version
75
+ *
76
+ * @param {Version} version The current version
77
+ * @returns {Version} The bumped version
78
+ */
79
+ bump(version) {
80
+ if (version.preRelease) {
81
+ const match = version.preRelease.match(PRERELEASE_PATTERN);
82
+ if (match === null || match === void 0 ? void 0 : match.groups) {
83
+ const numberLength = match.groups.number.length;
84
+ const prereleaseNumber = Number(match.groups.number);
85
+ let nextPrereleaseNumber = 1;
86
+ let nextMajorNumber = version.major + 1;
87
+ let nextMinorNumber = 0;
88
+ let nextPatchNumber = 0;
89
+ if (version.patch === 0 && version.minor === 0) {
90
+ // this is already the next major candidate, then bump the pre-release number
91
+ nextPrereleaseNumber = prereleaseNumber + 1;
92
+ nextMajorNumber = version.major;
93
+ nextMinorNumber = version.minor;
94
+ nextPatchNumber = version.patch;
95
+ }
96
+ const paddedNextPrereleaseNumber = `${nextPrereleaseNumber}`.padStart(numberLength, '0');
97
+ const nextPrerelease = `${match.groups.type}${paddedNextPrereleaseNumber}`;
98
+ return new version_1.Version(nextMajorNumber, nextMinorNumber, nextPatchNumber, nextPrerelease, version.build);
99
+ }
100
+ }
101
+ return new version_1.Version(version.major + 1, 0, 0, version.preRelease, version.build);
102
+ }
103
+ }
104
+ /**
105
+ * This versioning strategy will increment the pre-release number for patch
106
+ * bumps if there is a pre-release number (preserving any leading 0s).
107
+ * Example: 1.2.3-beta01 -> 1.2.3-beta02.
108
+ */
109
+ class PrereleaseVersioningStrategy extends default_1.DefaultVersioningStrategy {
110
+ determineReleaseType(version, commits) {
111
+ // iterate through list of commits and find biggest commit type
112
+ let breaking = 0;
113
+ let features = 0;
114
+ for (const commit of commits) {
115
+ const releaseAs = commit.notes.find(note => note.title === 'RELEASE AS');
116
+ if (releaseAs) {
117
+ // commits are handled newest to oldest, so take the first one (newest) found
118
+ this.logger.debug(`found Release-As: ${releaseAs.text}, forcing version`);
119
+ return new versioning_strategy_1.CustomVersionUpdate(version_1.Version.parse(releaseAs.text).toString());
120
+ }
121
+ if (commit.breaking) {
122
+ breaking++;
123
+ }
124
+ else if (commit.type === 'feat' || commit.type === 'feature') {
125
+ features++;
126
+ }
127
+ }
128
+ if (breaking > 0) {
129
+ if (version.major < 1 && this.bumpMinorPreMajor) {
130
+ return new PrereleaseMinorVersionUpdate();
131
+ }
132
+ else {
133
+ return new PrereleaseMajorVersionUpdate();
134
+ }
135
+ }
136
+ else if (features > 0) {
137
+ if (version.major < 1 && this.bumpPatchForMinorPreMajor) {
138
+ return new PrereleasePatchVersionUpdate();
139
+ }
140
+ else {
141
+ return new PrereleaseMinorVersionUpdate();
142
+ }
143
+ }
144
+ return new PrereleasePatchVersionUpdate();
145
+ }
146
+ }
147
+ exports.PrereleaseVersioningStrategy = PrereleaseVersioningStrategy;
148
+ //# sourceMappingURL=prerelease.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "release-please",
3
- "version": "15.11.1",
3
+ "version": "15.12.0",
4
4
  "description": "generate release PRs based on the conventionalcommits.org spec",
5
5
  "main": "./build/src/index.js",
6
6
  "bin": "./build/src/bin/release-please.js",
@@ -57,7 +57,7 @@
57
57
  "@types/yargs": "^17.0.0",
58
58
  "ajv": "^8.11.0",
59
59
  "ajv-formats": "^2.1.1",
60
- "c8": "^7.0.0",
60
+ "c8": "^8.0.0",
61
61
  "chai": "^4.2.0",
62
62
  "cross-env": "^7.0.0",
63
63
  "gts": "^3.1.0",
@@ -82,8 +82,8 @@
82
82
  "@xmldom/xmldom": "^0.8.4",
83
83
  "chalk": "^4.0.0",
84
84
  "code-suggester": "^4.2.0",
85
- "conventional-changelog-conventionalcommits": "^5.0.0",
86
- "conventional-changelog-writer": "^5.0.0",
85
+ "conventional-changelog-conventionalcommits": "^6.0.0",
86
+ "conventional-changelog-writer": "^6.0.0",
87
87
  "conventional-commits-filter": "^3.0.0",
88
88
  "detect-indent": "^6.1.0",
89
89
  "diff": "^5.0.0",