-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.releaserc.js
More file actions
114 lines (109 loc) · 3.92 KB
/
Copy path.releaserc.js
File metadata and controls
114 lines (109 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/**
* semantic-release config — Linearr
*
* Default behavior: every releasable commit type produces a PATCH bump.
* Override mechanisms:
* 1. RELEASE_LEVEL env var (set by workflow_dispatch UI: patch | minor | major)
* 2. Commit body marker: "release-as: minor" or "release-as: major"
* (parsed via the customRules array below)
*
* "release: false" types (docs, chore, style, test, build, ci) never trigger
* a release on their own.
*/
const RELEASE_LEVEL = process.env.RELEASE_LEVEL || 'patch'
const VALID_LEVELS = ['patch', 'minor', 'major']
const level = VALID_LEVELS.includes(RELEASE_LEVEL) ? RELEASE_LEVEL : 'patch'
module.exports = {
tagFormat: 'v${version}',
branches: [
'main',
// release/0.0.1 is the active pre-1.0 prerelease line: it publishes NNN-rc.N.
// NOTE: do NOT add a `range` here — a `range` turns this into a semantic-release
// *maintenance* branch (for patching an OLD line after main has moved past it),
// which fails with "release X out of range" given the 1.x release commits in
// history. Staying on 0.0.x is instead enforced by the v0.0.0 anchor tag +
// patch-only bumps (level below), not by a range.
{ name: 'release/0.0.1', prerelease: 'rc' },
{ name: 'dev', prerelease: 'dev' },
],
plugins: [
[
'@semantic-release/commit-analyzer',
{
preset: 'conventionalcommits',
releaseRules: [
// Releasable types — all default to RELEASE_LEVEL (patch unless overridden)
{ type: 'feat', release: level },
{ type: 'fix', release: level },
{ type: 'perf', release: level },
{ type: 'refactor', release: level },
// Hidden / non-releasable types
{ type: 'docs', release: false },
{ type: 'chore', release: false },
{ type: 'style', release: false },
{ type: 'test', release: false },
{ type: 'build', release: false },
{ type: 'ci', release: false },
// Per-commit override — body containing "release-as: minor" or "release-as: major"
{ subject: '*release-as: minor*', release: 'minor' },
{ subject: '*release-as: major*', release: 'major' },
// BREAKING CHANGE — patch by default (intentional: pre-1.0 stability).
// Override with workflow_dispatch RELEASE_LEVEL=major when ready.
{ breaking: true, release: level },
],
parserOpts: {
noteKeywords: ['BREAKING CHANGE', 'BREAKING-CHANGE', 'BREAKING'],
},
},
],
[
'@semantic-release/release-notes-generator',
{
preset: 'conventionalcommits',
presetConfig: {
types: [
{ type: 'feat', section: 'Features' },
{ type: 'fix', section: 'Bug Fixes' },
{ type: 'perf', section: 'Performance' },
{ type: 'refactor', section: 'Refactoring' },
{ type: 'docs', hidden: true },
{ type: 'chore', hidden: true },
{ type: 'style', hidden: true },
{ type: 'test', hidden: true },
{ type: 'build', hidden: true },
{ type: 'ci', hidden: true },
],
},
},
],
[
'@semantic-release/changelog',
{ changelogFile: 'frontend/CHANGELOG.md' },
],
[
'@semantic-release/exec',
{
// Sync frontend/package.json version to match the computed release version
prepareCmd:
'cd frontend && npm version ${nextRelease.version} --no-git-tag-version --allow-same-version',
},
],
[
'@semantic-release/git',
{
assets: ['frontend/package.json', 'frontend/CHANGELOG.md'],
message:
'chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}',
},
],
[
'@semantic-release/github',
{
successComment: false,
failComment: false,
labels: false,
releasedLabels: false,
},
],
],
}