Add support for (optional) GITHUB_TOKEN env variable

This commit is contained in:
Vendicated 2023-04-10 22:05:21 +02:00
parent d1296d1708
commit 897df3a5d4
No known key found for this signature in database
GPG key ID: A1DC0CFB5615D905
11 changed files with 93 additions and 24 deletions

6
.env.example Normal file
View file

@ -0,0 +1,6 @@
# githubs api has a rate limit of 60/h if not authorised.
# you may quickly hit that and get rate limited. To counteract this, you can provide a github token
# here and it will be used. To do so, create a token at the following links and just leave
# all permissions at the defaults (public repos read only, 0 permissions):
# https://github.com/settings/personal-access-tokens/new
GITHUB_TOKEN=

1
.gitignore vendored
View file

@ -1,2 +1,3 @@
dist dist
node_modules node_modules
.env

View file

@ -10,13 +10,14 @@
"main": "dist/js/main.js", "main": "dist/js/main.js",
"scripts": { "scripts": {
"build": "tsx scripts/build/build.mts", "build": "tsx scripts/build/build.mts",
"build:dev": "pnpm build --dev",
"package": "pnpm build && electron-builder", "package": "pnpm build && electron-builder",
"package:dir": "pnpm build && electron-builder --dir", "package:dir": "pnpm build && electron-builder --dir",
"lint": "eslint . --ext .js,.jsx,.ts,.tsx", "lint": "eslint . --ext .js,.jsx,.ts,.tsx,.mts,.mjs",
"lint:fix": "pnpm lint --fix", "lint:fix": "pnpm lint --fix",
"start": "pnpm build && electron .", "start": "pnpm build && electron .",
"start:dev": "pnpm build --dev && electron .", "start:dev": "pnpm build:dev && electron .",
"start:watch": "tsx scripts/startWatch.mts", "start:watch": "pnpm build:dev && tsx scripts/startWatch.mts",
"test": "pnpm lint && pnpm testTypes", "test": "pnpm lint && pnpm testTypes",
"testTypes": "tsc --noEmit", "testTypes": "tsc --noEmit",
"watch": "pnpm build --watch" "watch": "pnpm build --watch"
@ -26,6 +27,7 @@
"@types/react": "^18.0.33", "@types/react": "^18.0.33",
"@typescript-eslint/eslint-plugin": "^5.57.1", "@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1", "@typescript-eslint/parser": "^5.57.1",
"dotenv": "^16.0.3",
"electron": "^23.2.0", "electron": "^23.2.0",
"electron-builder": "^23.6.0", "electron-builder": "^23.6.0",
"esbuild": "^0.17.14", "esbuild": "^0.17.14",

View file

@ -13,6 +13,9 @@ devDependencies:
'@typescript-eslint/parser': '@typescript-eslint/parser':
specifier: ^5.57.1 specifier: ^5.57.1
version: 5.57.1(eslint@8.38.0)(typescript@5.0.2) version: 5.57.1(eslint@8.38.0)(typescript@5.0.2)
dotenv:
specifier: ^16.0.3
version: 16.0.3
electron: electron:
specifier: ^23.2.0 specifier: ^23.2.0
version: 23.2.0 version: 23.2.0
@ -1390,6 +1393,11 @@ packages:
resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==}
dev: true dev: true
/dotenv@16.0.3:
resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==}
engines: {node: '>=12'}
dev: true
/dotenv@9.0.2: /dotenv@9.0.2:
resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==} resolution: {integrity: sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==}
engines: {node: '>=10'} engines: {node: '>=10'}

View file

@ -1,3 +1,9 @@
/*
* SPDX-License-Identifier: GPL-3.0
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2023 Vendicated and Vencord contributors
*/
import { BuildContext, BuildOptions, context } from "esbuild"; import { BuildContext, BuildOptions, context } from "esbuild";
const isDev = process.argv.includes("--dev"); const isDev = process.argv.includes("--dev");
@ -55,8 +61,10 @@ const watch = process.argv.includes("--watch");
if (watch) { if (watch) {
await Promise.all(contexts.map(ctx => ctx.watch())); await Promise.all(contexts.map(ctx => ctx.watch()));
} else { } else {
await Promise.all(contexts.map(async ctx => { await Promise.all(
contexts.map(async ctx => {
await ctx.rebuild(); await ctx.rebuild();
await ctx.dispose(); await ctx.dispose();
})); })
);
} }

View file

@ -1,3 +1,9 @@
/*
* SPDX-License-Identifier: GPL-3.0
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2023 Vendicated and Vencord contributors
*/
export const VencordFragment = /* #__PURE__*/ Symbol.for("react.fragment"); export const VencordFragment = /* #__PURE__*/ Symbol.for("react.fragment");
export let VencordCreateElement = export let VencordCreateElement = (...args) =>
(...args) => (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args); (VencordCreateElement = Vencord.Webpack.Common.React.createElement)(...args);

11
scripts/start.ts Normal file
View file

@ -0,0 +1,11 @@
/*
* SPDX-License-Identifier: GPL-3.0
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2023 Vendicated and Vencord contributors
*/
import "./utils/dotenv";
import { spawnNodeModuleBin } from "./utils/spawn.mjs";
spawnNodeModuleBin("electron", ["."]);

View file

@ -1,15 +1,10 @@
import { spawn as cpSpawn, SpawnOptions } from "child_process"; /*
import { join } from "path"; * SPDX-License-Identifier: GPL-3.0
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2023 Vendicated and Vencord contributors
*/
const EXT = process.platform === "win32" ? ".cmd" : ""; import "./start";
const OPTS: SpawnOptions = { import { spawnNodeModuleBin } from "./utils/spawn.mjs";
stdio: "inherit", spawnNodeModuleBin("tsx", ["scripts/build/build.mts", "--", "--watch", "--dev"]);
};
function spawn(bin: string, args: string[]) {
cpSpawn(join("node_modules", ".bin", bin + EXT), args, OPTS);
}
spawn("tsx", ["scripts/build/build.mts", "--", "--watch", "--dev"]);
spawn("electron", ["."]);

9
scripts/utils/dotenv.ts Normal file
View file

@ -0,0 +1,9 @@
/*
* SPDX-License-Identifier: GPL-3.0
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2023 Vendicated and Vencord contributors
*/
import { config } from "dotenv";
config();

18
scripts/utils/spawn.mts Normal file
View file

@ -0,0 +1,18 @@
/*
* SPDX-License-Identifier: GPL-3.0
* Vencord Desktop, a desktop app aiming to give you a snappier Discord Experience
* Copyright (c) 2023 Vendicated and Vencord contributors
*/
import { spawn as spaaawn, SpawnOptions } from "child_process";
import { join } from "path";
const EXT = process.platform === "win32" ? ".cmd" : "";
const OPTS: SpawnOptions = {
stdio: "inherit"
};
export function spawnNodeModuleBin(bin: string, args: string[]) {
spaaawn(join("node_modules", ".bin", bin + EXT), args, OPTS);
}

View file

@ -5,6 +5,7 @@
*/ */
import { existsSync, mkdirSync } from "fs"; import { existsSync, mkdirSync } from "fs";
import type { RequestOptions } from "https";
import { join } from "path"; import { join } from "path";
import { USER_AGENT, VENCORD_FILES_DIR } from "../constants"; import { USER_AGENT, VENCORD_FILES_DIR } from "../constants";
@ -15,12 +16,16 @@ const API_BASE = "https://api.github.com/repos/Vendicated/Vencord";
const FILES_TO_DOWNLOAD = ["vencordDesktopMain.js", "preload.js", "vencordDesktopRenderer.js", "renderer.css"]; const FILES_TO_DOWNLOAD = ["vencordDesktopMain.js", "preload.js", "vencordDesktopRenderer.js", "renderer.css"];
export async function githubGet(endpoint: string) { export async function githubGet(endpoint: string) {
return simpleGet(API_BASE + endpoint, { const opts: RequestOptions = {
headers: { headers: {
Accept: "application/vnd.github+json", Accept: "application/vnd.github+json",
"User-Agent": USER_AGENT "User-Agent": USER_AGENT
} }
}); };
if (process.env.GITHUB_TOKEN) opts.headers!.Authorization = `Bearer ${process.env.GITHUB_TOKEN}`;
return simpleGet(API_BASE + endpoint, opts);
} }
export async function downloadVencordFiles() { export async function downloadVencordFiles() {