Move everything away from pnpm and use bun (#278)

* testing bun migration

* e

* try no node

* test noxos

* reporter?

* reporter2

* Fix Patches

* change readme(s)

* make readme simpler

* bleh

---------

Co-authored-by: thororen1234 <78185467+thororen1234@users.noreply.github.com>
This commit is contained in:
Creation's 2025-06-04 11:17:57 -04:00 committed by GitHub
parent 608ffa0764
commit fbd1d1b551
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 184 additions and 5492 deletions

View file

@ -10,76 +10,54 @@ env:
GITHUB_TOKEN: ${{ secrets.ETOKEN }}
REPO: Equicord/Equibored
USERNAME: GitHub-Actions
permissions: write-all
jobs:
Build:
name: Build Equicord
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v3
- name: Use Node.js 20
uses: actions/setup-node@v4
- uses: oven-sh/setup-bun@v2
with:
node-version: 20
cache: "pnpm"
bun-version: latest
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
run: bun install
- name: Build web
run: pnpm buildWebStandalone
run: bun run buildWebStandalone
- name: Build
run: pnpm buildStandalone
run: bun run buildStandalone
- name: Generate plugin list
run: pnpm generatePluginJson dist/plugins.json
run: bun run generatePluginJson dist/plugins.json
- name: Generate Equicord plugin list
run: pnpm generateEquicordPluginJson dist/equicordplugins.json
run: bun run generateEquicordPluginJson dist/equicordplugins.json
- name: Collect files to be released
run: |
cd dist
mkdir release
cp browser/browser.* release
cp Vencord.user.{js,js.LEGAL.txt} release
# copy the plugin data jsons, the extension zips and the desktop/vesktop asars
cp *.{json,zip,asar} release
# legacy un-asared files
cp desktop/* release
for file in equibop/*; do
filename=$(basename "$file")
cp "$file" "release/equibop${filename^}"
done
find release -size 0 -delete
rm release/package.json
rm release/*.map
- name: Upload Equicord Stable
if: ${{ github.ref_name == 'main' }}
run: |
gh release upload latest --clobber dist/release/*
- name: Upload Plugins JSON to Equibored repo
run: |
git config --global user.name "GitHub-Actions"
git config --global user.email actions@github.com
git clone https://$USERNAME:$GITHUB_TOKEN@github.com/$REPO.git plugins
cd plugins
cp ../dist/release/*plugins.json .
git add -A
git commit -m "Plugins for https://github.com/$GITHUB_REPOSITORY/commit/$GITHUB_SHA"
git push --force https://$USERNAME:$GITHUB_TOKEN@github.com/$REPO.git

View file

@ -16,56 +16,39 @@ jobs:
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v3
- name: Use Node.js 20
uses: actions/setup-node@v4
- uses: oven-sh/setup-bun@v2
with:
node-version: 20
cache: "pnpm"
bun-version: latest
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
run: bun install
- name: Build web
run: pnpm buildWebStandalone
run: bun run buildWebStandalone
- name: Build
run: pnpm buildStandalone
run: bun run buildStandalone
- name: Generate plugin list
run: pnpm generatePluginJson dist/vencordplugins.json
run: bun run generatePluginJson dist/vencordplugins.json
- name: Generate Equicord plugin list
run: pnpm generateEquicordPluginJson dist/equicordplugins.json
run: bun run generateEquicordPluginJson dist/equicordplugins.json
- name: Collect files to be released
run: |
cd dist
mkdir release
cp browser/browser.* release
cp Vencord.user.{js,js.LEGAL.txt} release
# copy the plugin data jsons, the extension zips and the desktop/vesktop asars
cp *.{json,zip,asar} release
# legacy un-asared files
cp desktop/* release
for file in equibop/*; do
filename=$(basename "$file")
cp "$file" "release/equibop${filename^}"
done
find release -size 0 -delete
rm release/package.json
rm release/*.map
- name: Get current date
id: date
run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
run: echo "date=$(date +'%Y-%m-%d')" >> $GITHUB_OUTPUT
- name: Upload Equicord Stable
run: |
gh release create ${{ steps.date.outputs.date }} --latest=false

View file

@ -32,17 +32,14 @@ jobs:
- uses: actions/checkout@v4
if: ${{ github.event_name == 'workflow_dispatch' }}
- uses: pnpm/action-setup@v3 # Install pnpm using packageManager key in package.json
- uses: oven-sh/setup-bun@v2
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
bun-version: latest
- name: Install dependencies
run: |
pnpm install --no-frozen-lockfile
bun install
- name: Install Google Chrome
id: setup-chrome
@ -51,7 +48,7 @@ jobs:
chrome-version: stable
- name: Build Equicord Reporter Version
run: pnpm buildReporter
run: bun run buildReporter
- name: Run Reporter
timeout-minutes: 10
@ -59,7 +56,7 @@ jobs:
export PATH="$PWD/node_modules/.bin:$PATH"
export CHROMIUM_BIN=${{ steps.setup-chrome.outputs.chrome-path }}
esbuild scripts/generateReport.ts > dist/report.mjs
bun build scripts/generateReport.ts --outfile dist/report.mjs --target bun
stable_output_file=$(mktemp)
canary_output_file=$(mktemp)
@ -72,20 +69,20 @@ jobs:
fi
if [[ "$branch" = "both" || "$branch" = "stable" ]]; then
node dist/report.mjs > "$stable_output_file" &
bun run dist/report.mjs > "$stable_output_file" &
pids+=" $!"
fi
if [[ "$branch" = "both" || "$branch" = "canary" ]]; then
USE_CANARY=true node dist/report.mjs > "$canary_output_file" &
USE_CANARY=true bun run dist/report.mjs > "$canary_output_file" &
pids+=" $!"
fi
exit_code=0
for pid in $pids; do
if ! wait "$pid"; then
exit_code=1
fi
if ! wait "$pid"; then
exit_code=1
fi
done
cat "$stable_output_file" "$canary_output_file" >> $GITHUB_STEP_SUMMARY

View file

@ -8,30 +8,24 @@ on:
branches:
- main
- dev
jobs:
Test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: pnpm/action-setup@v3 # Install pnpm using packageManager key in package.json
- uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: 20
cache: "pnpm"
- name: Install dependencies
run: pnpm install --no-frozen-lockfile
run: bun install
- name: Lint & Test if desktop version compiles
run: pnpm test
run: bun run test
- name: Test if web version compiles
run: pnpm buildWeb
run: bun run buildWeb
- name: Test if plugin structure is valid
run: pnpm generatePluginJson
run: bun run generatePluginJson

1
.gitignore vendored
View file

@ -18,7 +18,6 @@ npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
*.tsbuildinfo
src/userplugins

103
.vscode/tasks.json vendored
View file

@ -1,63 +1,44 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "pnpm build",
"group": {
"kind": "build",
"isDefault": true
}
},
{
// for use with the vencord companion extension
"label": "Build Companion Reporter",
"type": "shell",
"command": "pnpm build --dev --reporter --companion-test",
"presentation": {
"echo": true,
"reveal": "silent",
"panel": "shared",
"showReuseMessage": true,
"clear": true
}
},
{
"label": "Build Dev",
"type": "shell",
"command": "pnpm build --dev",
"group": "build"
},
{
// for use with the vencord companion extension
"label": "Build Companion Reporter",
"type": "shell",
"command": "pnpm build --dev --reporter --companion-test",
"presentation": {
"echo": true,
"reveal": "silent",
"panel": "shared",
"showReuseMessage": true,
"clear": true
}
},
{
"label": "Build Dev",
"type": "shell",
"command": "pnpm build --dev",
"group": "build"
},
{
"label": "Watch",
"type": "shell",
"command": "pnpm watch",
"problemMatcher": [],
"group": {
"kind": "build"
}
}
]
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "bun run build",
"group": {
"kind": "build",
"isDefault": true
}
},
{
// for use with the vencord companion extension
"label": "Build Companion Reporter",
"type": "shell",
"command": "bun run build --dev --reporter --companion-test",
"presentation": {
"echo": true,
"reveal": "silent",
"panel": "shared",
"showReuseMessage": true,
"clear": true
}
},
{
"label": "Build Dev",
"type": "shell",
"command": "bun run build --dev",
"group": "build"
},
{
"label": "Watch",
"type": "shell",
"command": "bun run watch",
"problemMatcher": [],
"group": {
"kind": "build"
}
}
]
}

View file

@ -240,15 +240,10 @@ sh -c "$(curl -sS https://raw.githubusercontent.com/Equicord/Equicord/refs/heads
### Dependencies
[Git](https://git-scm.com/download) and [Node.JS LTS](https://nodejs.dev/en/) are required.
[Git](https://git-scm.com/download) and [Bun](https://bun.sh/docs/installation) are required.
Install `pnpm`:
> :exclamation: This next command may need to be run as admin/root depending on your system, and you may need to close and reopen your terminal for pnpm to be in your PATH.
```shell
npm i -g pnpm
```
Install Bun:
> :exclamation: This next command may need to be run as admin/root depending on your system, and you may need to close and reopen your terminal for Bun to be in your PATH.
> :exclamation: **IMPORTANT** Make sure you aren't using an admin/root terminal from here onwards. It **will** mess up your Discord/Equicord instance and you **will** most likely have to reinstall.
@ -260,21 +255,18 @@ cd Equicord
```
Install dependencies:
```shell
pnpm install --no-frozen-lockfile
bun install
```
Build Equicord:
```shell
pnpm build
bun run build
```
Inject Equicord into your client:
```shell
pnpm inject
bun run inject
```
## Credits

View file

@ -1,122 +1,100 @@
{
"name": "equicord",
"private": "true",
"version": "1.12.2",
"description": "The other cutest Discord client mod",
"homepage": "https://github.com/Equicord/Equicord#readme",
"bugs": {
"url": "https://github.com/Equicord/Equicord/issues"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Equicord/Equicord.git"
},
"license": "GPL-3.0-or-later",
"author": "Equicord",
"scripts": {
"build": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/build.mjs",
"buildStandalone": "pnpm build --standalone",
"buildWeb": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/buildWeb.mjs",
"buildWebStandalone": "pnpm buildWeb --standalone",
"buildReporter": "pnpm buildWebStandalone --reporter --skip-extension",
"buildReporterDesktop": "pnpm build --reporter",
"watch": "pnpm build --watch",
"dev": "pnpm watch",
"watchWeb": "pnpm buildWeb --watch",
"generatePluginJson": "tsx scripts/generatePluginList.ts",
"generateEquicordPluginJson": "tsx scripts/generateEquicordPluginList.ts",
"generateTypes": "tspc --emitDeclarationOnly --declaration --outDir packages/vencord-types --allowJs false",
"inject": "node scripts/runInstaller.mjs -- --install",
"uninject": "node scripts/runInstaller.mjs -- --uninstall",
"lint": "eslint",
"lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins",
"lint:fix": "pnpm lint --fix",
"test": "pnpm buildStandalone && pnpm testTsc && pnpm lint:fix && pnpm lint-styles && pnpm generatePluginJson",
"testWeb": "pnpm lint && pnpm buildWeb && pnpm testTsc",
"testTsc": "tsc --noEmit"
},
"dependencies": {
"@ffmpeg/ffmpeg": "^0.12.10",
"@ffmpeg/util": "^0.12.1",
"@intrnl/xxhash64": "^0.1.2",
"@sapphi-red/web-noise-suppressor": "0.3.5",
"@types/less": "^3.0.6",
"@types/stylus": "^0.48.42",
"@types/tinycolor2": "^1.4.6",
"@vap/core": "0.0.12",
"@vap/shiki": "0.10.5",
"fflate": "^0.8.2",
"gifenc": "github:mattdesl/gifenc#64842fca317b112a8590f8fef2bf3825da8f6fe3",
"jsqr": "1.4.0",
"idb": "8.0.0",
"monaco-editor": "^0.52.2",
"nanoid": "^5.1.5",
"socket.io": "^4.8.1",
"usercss-meta": "^0.12.0",
"openai": "^4.30.0",
"virtual-merge": "^1.0.1"
},
"devDependencies": {
"@stylistic/eslint-plugin": "^4.2.0",
"@electron/asar": "^3.2.10",
"@types/chrome": "^0.0.312",
"@types/diff": "^7.0.2",
"@types/lodash": "^4.17.14",
"@types/node": "^22.13.13",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@types/yazl": "^2.4.5",
"diff": "^7.0.0",
"discord-types": "^1.3.26",
"esbuild": "^0.25.1",
"eslint": "9.20.1",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-react": "^7.37.3",
"eslint-plugin-simple-header": "^1.2.1",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unused-imports": "^4.1.4",
"highlight.js": "11.11.1",
"html-minifier-terser": "^7.2.0",
"moment": "^2.22.2",
"puppeteer-core": "^24.4.0",
"standalone-electron-types": "^34.2.0",
"stylelint": "^16.17.0",
"stylelint-config-standard": "^37.0.0",
"ts-patch": "^3.3.0",
"ts-pattern": "^5.6.0",
"tsx": "^4.19.3",
"type-fest": "^4.38.0",
"typed-emitter": "^2.1.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.28.0",
"typescript-transform-paths": "^3.5.5",
"zip-local": "^0.3.5",
"zustand": "^3.7.2"
},
"packageManager": "pnpm@10.4.1",
"pnpm": {
"patchedDependencies": {
"eslint@9.20.1": "patches/eslint@9.20.1.patch",
"@types/less@3.0.6": "patches/@types__less@3.0.6.patch"
},
"peerDependencyRules": {
"ignoreMissing": [
"eslint-plugin-import",
"eslint"
]
},
"allowedDeprecatedVersions": {
"source-map-resolve": "*",
"resolve-url": "*",
"source-map-url": "*",
"urix": "*",
"q": "*"
},
"onlyBuiltDependencies": [
"esbuild"
]
},
"engines": {
"node": ">=18"
}
"name": "equicord",
"private": "true",
"version": "1.12.2",
"description": "The other cutest Discord client mod",
"homepage": "https://github.com/Equicord/Equicord#readme",
"bugs": {
"url": "https://github.com/Equicord/Equicord/issues"
},
"repository": {
"type": "git",
"url": "git+https://github.com/Equicord/Equicord.git"
},
"license": "GPL-3.0-or-later",
"author": "Equicord",
"scripts": {
"build": "bun run scripts/build/build.mjs",
"buildStandalone": "bun run build --standalone",
"buildWeb": "bun run scripts/build/buildWeb.mjs",
"buildWebStandalone": "bun run buildWeb --standalone",
"buildReporter": "bun run buildWebStandalone --reporter --skip-extension",
"buildReporterDesktop": "bun run build --reporter",
"watch": "bun run build --watch",
"dev": "bun run watch",
"watchWeb": "bun run buildWeb --watch",
"generatePluginJson": "bun run scripts/generatePluginList.ts",
"generateEquicordPluginJson": "bun run scripts/generateEquicordPluginList.ts",
"generateTypes": "tspc --emitDeclarationOnly --declaration --outDir packages/vencord-types --allowJs false",
"inject": "bun run scripts/runInstaller.mjs --install",
"uninject": "bun run scripts/runInstaller.mjs --uninstall",
"lint": "eslint",
"lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins",
"lint:fix": "bun run lint --fix",
"test": "bun run buildStandalone && bun run testTsc && bun run lint:fix && bun run lint-styles && bun run generatePluginJson",
"testWeb": "bun run lint && bun run buildWeb && bun run testTsc",
"testTsc": "tsc --noEmit"
},
"dependencies": {
"@ffmpeg/ffmpeg": "^0.12.10",
"@ffmpeg/util": "^0.12.1",
"@intrnl/xxhash64": "^0.1.2",
"@sapphi-red/web-noise-suppressor": "0.3.5",
"@types/less": "^3.0.6",
"@types/stylus": "^0.48.42",
"@types/tinycolor2": "^1.4.6",
"@vap/core": "0.0.12",
"@vap/shiki": "0.10.5",
"fflate": "^0.8.2",
"gifenc": "github:mattdesl/gifenc#64842fca317b112a8590f8fef2bf3825da8f6fe3",
"jsqr": "1.4.0",
"idb": "8.0.0",
"monaco-editor": "^0.52.2",
"nanoid": "^5.1.5",
"socket.io": "^4.8.1",
"usercss-meta": "^0.12.0",
"openai": "^4.30.0",
"virtual-merge": "^1.0.1"
},
"devDependencies": {
"@electron/asar": "^3.2.10",
"@stylistic/eslint-plugin": "^4.2.0",
"@types/chrome": "^0.0.312",
"@types/diff": "^7.0.2",
"@types/lodash": "^4.17.14",
"@types/node": "^22.13.13",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@types/yazl": "^2.4.5",
"diff": "^7.0.0",
"discord-types": "^1.3.26",
"esbuild": "^0.25.1",
"eslint": "^8.57.0",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-react": "^7.37.3",
"eslint-plugin-simple-header": "^1.2.1",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unused-imports": "^4.1.4",
"highlight.js": "11.11.1",
"html-minifier-terser": "^7.2.0",
"moment": "^2.22.2",
"puppeteer-core": "^24.4.0",
"standalone-electron-types": "^34.2.0",
"stylelint": "^16.17.0",
"stylelint-config-standard": "^37.0.0",
"ts-patch": "^3.3.0",
"ts-pattern": "^5.6.0",
"type-fest": "^4.41.0",
"typescript": "^5.8.2",
"typescript-eslint": "^8.28.0",
"typescript-transform-paths": "^3.5.5",
"zip-local": "^0.3.5",
"zustand": "^3.7.2"
},
"packageManager": "bun@1.1.0",
"trustedDependencies": ["esbuild"],
"engines": {
"node": ">=18",
"bun": ">=1.0.0"
}
}

View file

@ -1,5 +1,5 @@
# How to publish
1. run `pnpm generateTypes` in the project root
1. run `bun generateTypes` in the project root
2. bump package.json version
3. npm publish

View file

@ -7,5 +7,5 @@ npm i @vencord/types
yarn add @vencord/types
pnpm add @vencord/types
bun add @vencord/types
```

5192
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff

View file

@ -1,2 +0,0 @@
packages:
- packages/*

View file

@ -41,15 +41,6 @@ export default definePlugin({
},
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled,
},
// Also taken from AnonymiseFileNames
{
find: 'addFilesTo:"message.attachments"',
replacement: {
match: /(\i.uploadFiles\((\i),)/,
replace: "$2.forEach(f=>f.filename=$self.fixExt(f)),$1",
},
predicate: () => !Settings.plugins.AnonymiseFileNames.enabled,
}
],
fixExt(upload: ExtUpload) {
const file = upload.filename;

View file

@ -85,13 +85,6 @@ export default definePlugin({
replace: "$1.forEach($self.anonymise),$&"
},
},
{
find: 'addFilesTo:"message.attachments"',
replacement: {
match: /\i.uploadFiles\((\i),/,
replace: "$1.forEach($self.anonymise),$&"
}
},
{
find: "#{intl::ATTACHMENT_UTILITIES_SPOILER}",
replacement: {

View file

@ -61,7 +61,7 @@ export default definePlugin({
start() {
// if we're running the reporter, we need to initws in the reporter file to avoid a race condition
if (!IS_DEV) throw new Error("This plugin requires dev mode to run, please build with pnpm build --dev");
if (!IS_DEV) throw new Error("This plugin requires dev mode to run, please build with bun run build --dev");
initWs();
},

View file

@ -133,7 +133,7 @@ export default definePlugin({
{
find: "Copy image not supported",
replacement: {
match: /(?<=(?:canSaveImage|canCopyImage)\(\i?\)\{.{0,50})!\i\.isPlatformEmbedded/g,
match: /(?<=(?:canSaveImage|canCopyImage)\((\i,\i)?\)\{.{0,150})!\i\.isPlatformEmbedded/g,
replace: "false"
}
},
@ -147,7 +147,7 @@ export default definePlugin({
replace: "false"
},
{
match: /return\s*?\[.{0,50}?(?=\?.{0,100}?id:"copy-image")/,
match: /return\s*?\[.{0,50}?(?=\?.{0,25}?id:"copy-image")/,
replace: "return [true"
},
{