forked from parse-community/Parse-SDK-Flutter
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrelease.config.js
More file actions
145 lines (129 loc) · 4.48 KB
/
release.config.js
File metadata and controls
145 lines (129 loc) · 4.48 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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
/**
* Semantic Release Config
*/
const fs = require('fs').promises;
const path = require('path');
// Get env vars
const ref = process.env.GITHUB_REF;
const serverUrl = process.env.GITHUB_SERVER_URL;
const repository = process.env.GITHUB_REPOSITORY;
const repositoryUrl = serverUrl + '/' + repository;
const pkgName = process.env.PKG_NAME; // dart or flutter
// Declare params
const resourcePath = './.releaserc/';
const templates = {
main: { file: 'template.hbs', text: undefined },
header: { file: 'header.hbs', text: undefined },
commit: { file: 'commit.hbs', text: undefined },
footer: { file: 'footer.hbs', text: undefined },
};
// Declare semantic config
async function config() {
// Get branch
const branch = ref.split('/').pop();
console.log(`Running on branch: ${branch}`);
// Determine package from tag or env var
const packageName = pkgName || 'root';
console.log(`Running semantic-release for package: ${packageName}`);
// Set changelog file based on package
const changelogFile = packageName === 'root'
? `./CHANGELOG.md`
: `./CHANGELOG.md`;
console.log(`Changelog file output to: ${changelogFile}`);
// Load template file contents
await loadTemplates();
// Set tag format based on package
const tagFormat = packageName === 'root'
? '${version}'
: `${packageName}-\${version}`;
// Build git assets array based on package
const gitAssets = packageName === 'root'
? [changelogFile, 'package.json', 'package-lock.json']
: [
changelogFile,
'pubspec.yaml',
'../../package.json',
'../../package-lock.json'
];
const config = {
extends: 'semantic-release-monorepo',
branches: [
'master',
// { name: 'alpha', prerelease: true },
// { name: 'beta', prerelease: true },
'next-major',
// Long-Term-Support branches
// { name: 'release-1', range: '1.x.x', channel: '1.x' },
// { name: 'release-2', range: '2.x.x', channel: '2.x' },
// { name: 'release-3', range: '3.x.x', channel: '3.x' },
// { name: 'release-4', range: '4.x.x', channel: '4.x' },
],
dryRun: false,
debug: true,
ci: true,
tagFormat: tagFormat,
plugins: [
['@semantic-release/commit-analyzer', {
preset: 'angular',
releaseRules: [
{ type: 'docs', scope: 'README', release: 'patch' },
{ scope: 'no-release', release: false },
],
parserOpts: {
noteKeywords: [ 'BREAKING CHANGE', 'BREAKING CHANGES', 'BREAKING' ],
},
}],
['@semantic-release/release-notes-generator', {
preset: 'angular',
parserOpts: {
noteKeywords: ['BREAKING CHANGE', 'BREAKING CHANGES', 'BREAKING']
},
writerOpts: {
commitsSort: ['subject', 'scope'],
mainTemplate: templates.main.text,
headerPartial: templates.header.text,
commitPartial: templates.commit.text,
footerPartial: templates.footer.text,
},
}],
['@semantic-release/changelog', {
'changelogFile': changelogFile,
}],
['@semantic-release/exec', {
prepareCmd: packageName !== 'root'
? `node ../../scripts/update-version.js pubspec.yaml \${nextRelease.version}`
: 'echo "No version update needed for root"',
}],
['@semantic-release/npm', {
'npmPublish': false,
}],
['@semantic-release/git', {
assets: gitAssets,
message: `chore(release): ${packageName === 'root' ? '' : packageName + ' '}` +
'\${nextRelease.version}\n\n\${nextRelease.notes}'
}],
['@semantic-release/github', {
releaseName: packageName !== 'root' ? `${packageName}-\${nextRelease.version}` : '\${nextRelease.version}',
successComment: getReleaseComment(),
labels: ['type:ci'],
releasedLabels: ['state:released<%= nextRelease.channel ? `-\${nextRelease.channel}` : "" %>']
}],
],
};
return config;
}
async function loadTemplates() {
for (const template of Object.keys(templates)) {
const text = await readFile(path.resolve(__dirname, resourcePath, templates[template].file));
templates[template].text = text;
}
}
async function readFile(filePath) {
return await fs.readFile(filePath, 'utf-8');
}
function getReleaseComment() {
const url = repositoryUrl + '/releases/tag/${nextRelease.gitTag}';
let comment = '🎉 This change has been released in version [${nextRelease.version}](' + url + ')';
return comment;
}
module.exports = config();