Skip to content

Commit 803743b

Browse files
feat(release): add config repository for release (#48)
* feat(release): add config repo for release * refactor: try to make config and comment clearer * update TemplateData * fix: #48 (comment) * clean comments --------- Co-authored-by: Northword <[email protected]>
1 parent e8a0d55 commit 803743b

6 files changed

Lines changed: 72 additions & 42 deletions

File tree

src/config.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ function resolveConfig(config: Config): Context {
6161
config.updateURL = template(config.updateURL, templateData);
6262
config.xpiDownloadLink = template(config.xpiDownloadLink, templateData);
6363
config.build.define = mapValues(config.build.define, v => template(v, templateData));
64+
config.release.github.repository = template(config.release.github.repository, templateData);
65+
config.release.gitee.repository = template(config.release.gitee.repository, templateData);
6466

6567
const hooks = createHooks<Hooks>();
6668
hooks.addHooks(config.build.hooks);
@@ -155,6 +157,7 @@ const defaultConfig = {
155157
changelog: "",
156158
github: {
157159
enable: "ci",
160+
repository: "{{owner}}/{{repo}}",
158161
updater: "release",
159162
comment: false,
160163
releaseNote: (ctx) => {
@@ -163,6 +166,7 @@ const defaultConfig = {
163166
},
164167
gitee: {
165168
enable: "false",
169+
repository: "{{owner}}/{{repo}}",
166170
updater: "release",
167171
comment: false,
168172
releaseNote: (ctx) => {

src/core/releaser/base.ts

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,5 @@ export abstract class ReleaseBase extends Base {
2020
}
2121
}
2222

23-
get owner(): string {
24-
return this.ctx.templateData.owner;
25-
}
26-
27-
get repo(): string {
28-
return this.ctx.templateData.repo;
29-
}
23+
abstract get remote(): { owner: string; repo: string };
3024
}

src/core/releaser/gitee.ts

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,14 +60,12 @@ export default class Gitee extends ReleaseBase {
6060
prerelease = false,
6161
) {
6262
const old = await this.client.getV5ReposOwnerRepoReleasesTagsTag({
63-
owner: this.owner,
64-
repo: this.repo,
63+
...this.remote,
6564
tag,
6665
});
6766
if (old?.id) {
6867
return this.client.patchV5ReposOwnerRepoReleasesId({
69-
owner: this.owner,
70-
repo: this.repo,
68+
...this.remote,
7169
name,
7270
body,
7371
prerelease,
@@ -76,8 +74,7 @@ export default class Gitee extends ReleaseBase {
7674
});
7775
}
7876
return this.client.postV5ReposOwnerRepoReleases({
79-
owner: this.owner,
80-
repo: this.repo,
77+
...this.remote,
8178
name,
8279
body,
8380
prerelease,
@@ -89,8 +86,7 @@ export default class Gitee extends ReleaseBase {
8986
async refreshAttach(releaseId: number, file: string) {
9087
const assets
9188
= await this.client.getV5ReposOwnerRepoReleasesReleaseIdAttachFiles({
92-
owner: this.owner,
93-
repo: this.repo,
89+
...this.remote,
9490
releaseId,
9591
});
9692
const fileBuffer = fs.readFileSync(file);
@@ -99,8 +95,7 @@ export default class Gitee extends ReleaseBase {
9995
if (asset.name === basename(file)) {
10096
await this.client
10197
.deleteV5ReposOwnerRepoReleasesReleaseIdAttachFilesAttachFileId({
102-
owner: this.owner,
103-
repo: this.repo,
98+
...this.remote,
10499
releaseId,
105100
attachFileId: asset.id!,
106101
})
@@ -109,10 +104,17 @@ export default class Gitee extends ReleaseBase {
109104
}
110105
}
111106
this.client.postV5ReposOwnerRepoReleasesReleaseIdAttachFiles({
112-
owner: this.owner,
113-
repo: this.repo,
107+
...this.remote,
114108
releaseId,
115109
file: new File([fileBuffer], basename(file), { type: "application/octet-stream" }),
116110
});
117111
}
112+
113+
get remote() {
114+
const [owner, repo] = this.ctx.release.gitee.repository.split("/");
115+
return {
116+
owner,
117+
repo,
118+
};
119+
}
118120
}

src/core/releaser/github.ts

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ export default class GitHub extends ReleaseBase {
3333
const { version, dist, xpiName } = this.ctx;
3434

3535
const release = await this.createRelease({
36-
owner: this.owner,
37-
repo: this.repo,
36+
...this.remote,
3837
tag_name: this.ctx.release.bumpp
3938
.tag!.toString().replaceAll("%s", version),
4039
name: `Release v${version}`,
@@ -54,8 +53,7 @@ export default class GitHub extends ReleaseBase {
5453
async getReleaseByTag(tag: string) {
5554
return await this.client.rest.repos
5655
.getReleaseByTag({
57-
owner: this.owner,
58-
repo: this.repo,
56+
...this.remote,
5957
tag,
6058
})
6159
.catch((e) => {
@@ -92,8 +90,7 @@ export default class GitHub extends ReleaseBase {
9290
this.logger.debug(`Uploading ${asset} to release ${releaseID}`);
9391
return await this.client.rest.repos
9492
.uploadReleaseAsset({
95-
owner: this.owner,
96-
repo: this.repo,
93+
...this.remote,
9794
release_id: releaseID,
9895
data: fs.readFileSync(asset) as unknown as string,
9996
headers: {
@@ -123,8 +120,7 @@ export default class GitHub extends ReleaseBase {
123120
const release
124121
= (await this.getReleaseByTag(updater))
125122
?? (await this.createRelease({
126-
owner: this.owner,
127-
repo: this.repo,
123+
...this.remote,
128124
tag_name: updater,
129125
prerelease: true,
130126
make_latest: "false",
@@ -135,8 +131,7 @@ export default class GitHub extends ReleaseBase {
135131

136132
const existAssets = await this.client.rest.repos
137133
.listReleaseAssets({
138-
owner: this.owner,
139-
repo: this.repo,
134+
...this.remote,
140135
release_id: release.id,
141136
})
142137
.then((res) => {
@@ -148,8 +143,7 @@ export default class GitHub extends ReleaseBase {
148143
if (assets.includes(existAsset.name)) {
149144
this.logger.debug(`Delete existed asset ${existAsset.name} in release ${updater}`);
150145
await this.client.rest.repos.deleteReleaseAsset({
151-
owner: this.owner,
152-
repo: this.repo,
146+
...this.remote,
153147
asset_id: existAsset.id,
154148
});
155149
}
@@ -161,8 +155,7 @@ export default class GitHub extends ReleaseBase {
161155
}
162156

163157
await this.client.rest.repos.updateRelease({
164-
owner: this.owner,
165-
repo: this.repo,
158+
...this.remote,
166159
release_id: release.id,
167160
name: "Release Manifest",
168161
body: `This release is used to host \`update.json\`, please do not delete or modify it! \n Updated in UTC ${new Date().toISOString()} for version ${version}`,
@@ -188,4 +181,12 @@ export default class GitHub extends ReleaseBase {
188181

189182
return client;
190183
}
184+
185+
get remote() {
186+
const [owner, repo] = this.ctx.release.github.repository.split("/");
187+
return {
188+
owner,
189+
repo,
190+
};
191+
}
191192
}

src/types/config.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -85,17 +85,29 @@ export interface Config {
8585
/**
8686
* The download link of XPI.
8787
*
88+
* Some placeholders are available, see Context.templateData.
89+
*
8890
* XPI 文件的地址。
8991
*
92+
* 一些可用的占位符请参阅 Context.templateData。
93+
*
9094
* @default `https://github.com/{{owner}}/{{repo}}/release/download/v{{version}}/{{xpiName}}.xpi`
95+
*
96+
* @see {@link Context.templateData}
9197
*/
9298
xpiDownloadLink: string;
9399
/**
94100
* The uri of update.json.
95101
*
102+
* Some placeholders are available, see Context.templateData.
103+
*
96104
* update.json 文件的地址。
97105
*
106+
* 一些可用的占位符请参阅 Context.templateData。
107+
*
98108
* @default `https://github.com/{{owner}}/{{repo}}/release/download/release/update.json`
109+
*
110+
* @see {@link Context.templateData}
99111
*/
100112
updateURL: string;
101113

@@ -166,6 +178,8 @@ export interface BuildConfig {
166178
*
167179
* - 在构建时,脚手架使用占位符的 key 建立正则模式 `/__${key}__/g`,并将匹配到的内容替换为 `value`。
168180
* - 替换发生在 `assets` 下的所有文件。
181+
*
182+
* @see {@link Context.templateData}
169183
*/
170184
define: {
171185
[key: string]: string;
@@ -472,6 +486,15 @@ export interface ReleaseConfig {
472486
* @default "ci"
473487
*/
474488
enable: "ci" | "local" | "always" | "false";
489+
/**
490+
* The information of remote repository.
491+
*
492+
* Will be extracted from the `repository` property in `package.json` by default.
493+
*
494+
* @default {{owner}}/{{repo}}
495+
* @see {@link Context.templateData}
496+
*/
497+
repository: string;
475498
/**
476499
* Upload update.json to release.
477500
*
@@ -497,15 +520,8 @@ export interface ReleaseConfig {
497520

498521
/**
499522
* Release to Gitee
500-
*
501-
* @todo Not implemented yet
502523
*/
503-
gitee: {
504-
enable: "ci" | "local" | "always" | "false";
505-
updater: string | false;
506-
comment: boolean;
507-
releaseNote: (ctx: Context) => string;
508-
};
524+
gitee: ReleaseConfig["github"];
509525

510526
hooks: Partial<ReleaseHooks>;
511527
};

src/types/index.ts

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,20 @@ interface Context extends Config {
1919
version: string;
2020
hooks: Hookable<Hooks>;
2121
logger: InstanceType<typeof Log>;
22-
templateData: { [placeholder: string]: string };
22+
templateData: TemplateData;
23+
}
24+
25+
export interface TemplateData {
26+
/**
27+
* `owner` and `repo` will be extracted from the `repository` property in `package.json`.
28+
*/
29+
owner: string;
30+
repo: string;
31+
version: string;
32+
isPreRelease: string;
33+
updateJson: "update-beta.json" | "update.json" | string;
34+
xpiName: string;
35+
buildTime: string;
2336
}
2437

2538
export { Config, Context, Hooks, OverrideConfig, UserConfig };

0 commit comments

Comments
 (0)