Skip to content

Commit

Permalink
chore: tweak
Browse files Browse the repository at this point in the history
  • Loading branch information
northword committed Jan 28, 2024
1 parent fb6197d commit 0965db7
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 109 deletions.
5 changes: 3 additions & 2 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,9 +40,10 @@ jobs:
run: |
pnpm run build
- name: Release to GitHub
- name: Release
run: |
pnpm dlx release-it --no-increment --no-git --npm.publish --github.release --ci --VV
pnpm publish
pnpm exec release-it --no-increment --no-git --no.npm --github.release --ci --VV
sleep 1s
- name: Notify release
Expand Down
7 changes: 0 additions & 7 deletions .npmignore

This file was deleted.

20 changes: 10 additions & 10 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@
},
"packageManager": "[email protected]",
"dependencies": {
"@inquirer/prompts": "^3.3.0",
"@inquirer/prompts": "^3.3.2",
"@octokit/rest": "^20.0.2",
"bumpp": "^9.3.0",
"chalk": "^5.3.0",
Expand All @@ -61,29 +61,29 @@
"commander": "^11.1.0",
"compressing": "^1.10.0",
"cosmiconfig": "^9.0.0",
"dotenv": "^16.3.1",
"esbuild": "^0.19.11",
"dotenv": "^16.4.1",
"esbuild": "^0.19.12",
"fast-glob": "^3.3.2",
"fs-extra": "^11.2.0",
"lodash": "^4.17.21",
"octokit": "^3.1.2",
"mime": "^4.0.1",
"ora": "^8.0.1",
"release-it": "^17.0.1",
"release-it": "^17.0.3",
"replace-in-file": "^7.1.0",
"update-notifier": "^7.0.0",
"web-ext": "^7.10.0"
"web-ext": "^7.11.0"
},
"devDependencies": {
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
"@types/fs-extra": "^11.0.4",
"@types/lodash": "^4.14.202",
"@types/node": "^20.11.4",
"@types/node": "^20.11.9",
"@types/update-notifier": "^6.0.8",
"@typescript-eslint/eslint-plugin": "^6.19.0",
"@typescript-eslint/parser": "^6.19.0",
"@typescript-eslint/eslint-plugin": "^6.19.1",
"@typescript-eslint/parser": "^6.19.1",
"eslint": "^8.56.0",
"eslint-config-prettier": "^9.1.0",
"prettier": "^3.2.3",
"prettier": "^3.2.4",
"typescript": "^5.3.3"
},
"release-it": {
Expand Down
7 changes: 2 additions & 5 deletions src/lib/config.ts → src/config.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Config, UserConfig } from "../types";
import { Config, UserConfig } from "./types";
import { cosmiconfig } from "cosmiconfig";
import * as dotenv from "dotenv";
import { default as fs } from "fs-extra";
Expand Down Expand Up @@ -188,10 +188,7 @@ export async function loadConfig(file?: string): Promise<Config> {
dataDir: dotenvResult["dataDir"],
},
pkgUser: pkg,
pkgAbsolute: path.join(
path.dirname(fileURLToPath(import.meta.url)),
"../..",
),
pkgAbsolute: path.join(path.dirname(fileURLToPath(import.meta.url)), "../"),
} satisfies Config;

// merge config
Expand Down
2 changes: 1 addition & 1 deletion src/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { defineConfig, loadConfig } from "./config.js";
import Build from "./lib/build.js";
import { defineConfig, loadConfig } from "./lib/config.js";
import Create from "./lib/create.js";
import Release from "./lib/release.js";
import Serve from "./lib/serve.js";
Expand Down
25 changes: 0 additions & 25 deletions src/lib/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -271,29 +271,4 @@ export default class Build extends LibBase {
// filename: `${this.pkg.name ?? "name"}.xpi`,
// });
}

// private get version() {
// return this.config.define.buildVersion;
// }
// private get addonName() {
// return this.config.define.addonName;
// }
// private get addonID() {
// return this.config.define.addonID;
// }
// private get addonRef() {
// return this.config.define.addonRef;
// }
// private get addonInstence() {
// return this.config.define.addonInstance;
// }
// private get updateLink() {
// return this.config.define.updateLink;
// }
// private get updateURL() {
// return this.config.define.updateURL;
// }
// private get xpiName() {
// return this.config.define.xpiName;
// }
}
137 changes: 78 additions & 59 deletions src/lib/release.ts
Original file line number Diff line number Diff line change
@@ -1,21 +1,22 @@
import { Config } from "../types.js";
import { LibBase } from "../utils/libBase.js";
import { Octokit } from "@octokit/rest";
import versionBump from "bumpp";
import ci from "ci-info";
import { default as glob } from "fast-glob";
import fs from "fs-extra";
import _ from "lodash";
import { Octokit } from "octokit";
import mime from "mime";
import path from "path";
import releaseIt from "release-it";

export default class Release extends LibBase {
isCI: boolean;
client: Octokit["rest"];
client: Octokit;
constructor(config: Config) {
super(config);
this.isCI = ci.isCI;
this.client = this.getClient().rest;
this.client = this.getClient();
}

/**
Expand All @@ -35,8 +36,7 @@ export default class Release extends LibBase {
);
}
this.uploadXPI();
// this.createRelease();
// this.uploadAssets();
this.uploadUpdateJSON();
}
}

Expand Down Expand Up @@ -74,78 +74,97 @@ export default class Release extends LibBase {
releaseIt(_.defaultsDeep(releaseItConfig, this.config.release.releaseIt));
}

// @ts-ignore 01111
async getRelease(tag: string, isPreRelease: boolean) {
try {
return await this.client.repos.getReleaseByTag({
async getReleaseByTag(tag: string) {
return await this.client.repos
.getReleaseByTag({
owner: this.owner,
repo: this.repo,
tag: tag,
})
.then((res) => {
if (res.status == 200) {
return res.data;
}
})
.catch((err) => {
this.logger.debug(err);
return undefined;
});
} catch {
return await this.client.repos.createRelease({
owner: this.owner,
repo: this.repo,
tag_name: tag,
prerelease: isPreRelease,
});
}
}

async uploadAsset(
release: any,
asset: string,
contentType: string,
isUpdate: boolean,
async creatRelease(
options: Parameters<Octokit["repos"]["createRelease"]>[0],
) {
this.logger.debug(
`uploading ${path.basename(asset)} to ${release.data.tag_name}`,
);
const name = path.basename(asset);
// const contentType = mime.contentType(name) || 'application/octet-stream';
const contentLength = fs.statSync(asset).size;

const exists = (
await this.client.repos.listReleaseAssets({
owner: this.owner,
repo: this.repo,
release_id: release.data.id,
return await this.client.repos
.createRelease(options)
.then((res) => {
if (res.status == 201) {
return res.data;
}
})
).data.find((a) => a.name === name);
if (exists && isUpdate) {
await this.client.repos.deleteReleaseAsset({
owner: this.owner,
repo: this.repo,
asset_id: exists.id,
.catch((err) => {
this.logger.debug(err);
return undefined;
});
} else {
throw new Error(
`failed to upload ${path.basename(asset)} to ${release.data.html_url}: asset exists`,
);
}
}

try {
await this.client.repos.uploadReleaseAsset({
async uploadAsset(releaseID: number, asset: string) {
return await this.client.repos
.uploadReleaseAsset({
owner: this.owner,
repo: this.repo,
url: release.data.upload_url,
release_id: release.data.id,
release_id: releaseID,
data: fs.readFileSync(asset) as unknown as string,
headers: {
"content-type": contentType,
"content-length": contentLength,
"content-type": mime.getType(asset) || "application/octet-stream",
"content-length": fs.statSync(asset).size,
},
name,
name: path.basename(asset),
})
.then((res) => {
return res.data;
});
} catch (err) {
throw new Error(
`failed to upload ${path.basename(asset)} to ${release.data.html_url}: ${err}`,
);
}
}

uploadUpdateJSON() {
//
async uploadUpdateJSON() {
const assets = ["update.json", "update-beta.json"];

const release =
(await this.getReleaseByTag("release")) ??
(await this.creatRelease({
owner: this.owner,
repo: this.repo,
tag_name: "release",
name: "Release Manifest",
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 ${this.version}`,
make_latest: "false",
}));

if (!release) throw new Error("Get or create 'release' failed.");

const existAssets = await this.client.repos
.listReleaseAssets({
owner: this.owner,
repo: this.repo,
release_id: release.id,
})
.then((res) => {
return res.data.filter((asset) => assets.includes(asset.name));
});

if (existAssets) {
for (const existAsset of existAssets) {
await this.client.repos.deleteReleaseAsset({
owner: this.owner,
repo: this.repo,
asset_id: existAsset.id,
});
}
}

for (const asset of assets) {
await this.uploadAsset(release.id, path.join(this.config.dist, asset));
}
}

getClient(): Octokit {
Expand Down

0 comments on commit 0965db7

Please sign in to comment.