@wyxos/zephyr 0.9.3 → 0.9.4
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/package.json
CHANGED
|
@@ -97,6 +97,41 @@ function formatVersionReferenceLabel(reference, currentVersion) {
|
|
|
97
97
|
return `${prefix} ${reference.shortHash} (${reference.version})`
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
+
|
|
101
|
+
async function readRecentAppCommitSubjects(rootDir, versionReference, {runCommand} = {}) {
|
|
102
|
+
if (!versionReference?.hash || typeof runCommand !== 'function') {
|
|
103
|
+
return ''
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
const {stdout = ''} = await runCommand('git', [
|
|
108
|
+
'log',
|
|
109
|
+
'--format=%s',
|
|
110
|
+
'--max-count=80',
|
|
111
|
+
`${versionReference.hash}..HEAD`
|
|
112
|
+
], {
|
|
113
|
+
capture: true,
|
|
114
|
+
cwd: rootDir
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
return stdout.trim()
|
|
118
|
+
} catch {
|
|
119
|
+
return ''
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function inferMinimumReleaseTypeFromCommitSubjects(commitSubjects) {
|
|
124
|
+
if (/breaking change|breaking changes|^[a-z]+(?:\(.+\))?!:/im.test(commitSubjects)) {
|
|
125
|
+
return 'major'
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
if (/\bfeat(?:\(.+\))?:/im.test(commitSubjects)) {
|
|
129
|
+
return 'minor'
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
return null
|
|
133
|
+
}
|
|
134
|
+
|
|
100
135
|
async function resolveDeploymentVersionValue(rootDir, {
|
|
101
136
|
versionArg = null,
|
|
102
137
|
pkg,
|
|
@@ -112,6 +147,7 @@ async function resolveDeploymentVersionValue(rootDir, {
|
|
|
112
147
|
|
|
113
148
|
const versionBumps = await readVersionBumpCommits(rootDir, {runCommand})
|
|
114
149
|
const versionReference = selectVersionSuggestionReference(pkg.version, versionBumps)
|
|
150
|
+
const commitSubjects = await readRecentAppCommitSubjects(rootDir, versionReference, {runCommand})
|
|
115
151
|
|
|
116
152
|
return await resolveReleaseType({
|
|
117
153
|
currentVersion: pkg.version,
|
|
@@ -123,7 +159,8 @@ async function resolveDeploymentVersionValue(rootDir, {
|
|
|
123
159
|
logStep: logProcessing,
|
|
124
160
|
logWarning,
|
|
125
161
|
latestTag: versionReference?.hash ?? null,
|
|
126
|
-
referenceLabel: formatVersionReferenceLabel(versionReference, pkg.version)
|
|
162
|
+
referenceLabel: formatVersionReferenceLabel(versionReference, pkg.version),
|
|
163
|
+
minimumReleaseType: inferMinimumReleaseTypeFromCommitSubjects(commitSubjects)
|
|
127
164
|
})
|
|
128
165
|
}
|
|
129
166
|
|
|
@@ -79,12 +79,12 @@ function inferReleaseTypeHeuristically({
|
|
|
79
79
|
return 'patch'
|
|
80
80
|
}
|
|
81
81
|
|
|
82
|
-
function
|
|
82
|
+
function applyReleaseTypeFloor(releaseType, floorReleaseType) {
|
|
83
83
|
const releaseWeight = RELEASE_TYPE_WEIGHTS[releaseType] ?? -1
|
|
84
|
-
const
|
|
84
|
+
const floorWeight = RELEASE_TYPE_WEIGHTS[floorReleaseType] ?? -1
|
|
85
85
|
|
|
86
|
-
if (
|
|
87
|
-
return
|
|
86
|
+
if (floorWeight > releaseWeight) {
|
|
87
|
+
return floorReleaseType
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
return releaseType
|
|
@@ -187,7 +187,8 @@ async function suggestReleaseType(rootDir = process.cwd(), {
|
|
|
187
187
|
logStep,
|
|
188
188
|
logWarning,
|
|
189
189
|
latestTag = null,
|
|
190
|
-
referenceLabel = null
|
|
190
|
+
referenceLabel = null,
|
|
191
|
+
minimumReleaseType = null
|
|
191
192
|
} = {}) {
|
|
192
193
|
const context = await buildReleaseSuggestionContext(rootDir, {
|
|
193
194
|
runCommand,
|
|
@@ -197,7 +198,10 @@ async function suggestReleaseType(rootDir = process.cwd(), {
|
|
|
197
198
|
referenceLabel
|
|
198
199
|
})
|
|
199
200
|
const allowedSuggestedReleaseTypes = resolveSuggestedReleaseTypeOptions(currentVersion)
|
|
200
|
-
const heuristicReleaseType =
|
|
201
|
+
const heuristicReleaseType = applyReleaseTypeFloor(
|
|
202
|
+
inferReleaseTypeHeuristically(context),
|
|
203
|
+
sanitizeSuggestedReleaseType(minimumReleaseType, allowedSuggestedReleaseTypes)
|
|
204
|
+
)
|
|
201
205
|
|
|
202
206
|
if (!commandExistsImpl('codex')) {
|
|
203
207
|
return {
|
|
@@ -254,7 +258,7 @@ async function suggestReleaseType(rootDir = process.cwd(), {
|
|
|
254
258
|
}
|
|
255
259
|
}
|
|
256
260
|
|
|
257
|
-
const flooredReleaseType =
|
|
261
|
+
const flooredReleaseType = applyReleaseTypeFloor(releaseType, heuristicReleaseType)
|
|
258
262
|
|
|
259
263
|
return {
|
|
260
264
|
...context,
|
|
@@ -287,7 +291,8 @@ export async function resolveReleaseType({
|
|
|
287
291
|
logStep,
|
|
288
292
|
logWarning,
|
|
289
293
|
latestTag = null,
|
|
290
|
-
referenceLabel = null
|
|
294
|
+
referenceLabel = null,
|
|
295
|
+
minimumReleaseType = null
|
|
291
296
|
} = {}) {
|
|
292
297
|
if (releaseType) {
|
|
293
298
|
return releaseType
|
|
@@ -300,7 +305,8 @@ export async function resolveReleaseType({
|
|
|
300
305
|
logStep,
|
|
301
306
|
logWarning,
|
|
302
307
|
latestTag,
|
|
303
|
-
referenceLabel
|
|
308
|
+
referenceLabel,
|
|
309
|
+
minimumReleaseType
|
|
304
310
|
})
|
|
305
311
|
const rangeLabel = suggested.referenceLabel || suggested.latestTag
|
|
306
312
|
? `based on changes since ${suggested.referenceLabel || suggested.latestTag}`
|