Initial commit

This commit is contained in:
Amsyar Rasyiq 2023-01-24 15:56:43 +00:00
commit f7f29d2b04
9 changed files with 159 additions and 0 deletions

47
.github/workflows/deploy.yml vendored Normal file
View file

@ -0,0 +1,47 @@
name: Build and deploy
on:
push:
branches: [master]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Prepare environment
uses: actions/setup-node@v2
with:
node-version: "16"
- run: npm install --global pnpm
- name: Install deps
run: pnpm m i
- name: Build plugin(s)
run: node ./build.mjs
# Foolproof feature:
# - Copies over README so that the root of the deployed website shows it
# - Changes 404 page to README so that you don't get lost while clicking links
# If you remove this step then you should probably remove the enable_jekyll option in the next one
- name: Copy additional files
run: |
cp README.md dist/README.md
printf -- "---\npermalink: /404.html\n---\n" > dist/404.md
printf -- "> **Note:** You accessed a link that returned a 404, probably by clicking one of the plugin links. You're supposed to copy the link address and add it into Vendetta.\n\n" >> dist/404.md
cat README.md >> dist/404.md
# Documentation: https://github.com/peaceiris/actions-gh-pages
- name: Deploy to GitHub Pages
uses: peaceiris/actions-gh-pages@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
publish_dir: ./dist
# Makes it so the md files in the previous step get processed by GitHub Pages
enable_jekyll: true
# This creates the CNAME file required to host GitHub Pages on a custom domain
# cname: example.com

5
.gitignore vendored Normal file
View file

@ -0,0 +1,5 @@
node_modules/
dist/
pnpm-lock.yaml
yarn.lock
package-lock.json

7
README.md Normal file
View file

@ -0,0 +1,7 @@
# Vendetta Plugins Template
This repo contains a template for creating [Vendetta](https://github.com/vendetta-mod/Vendetta) plugins.
# How to install?
Paste a plugin URL into the Plugins page of Vendetta, following a basic format of:
https://`YOUR_GITHUB_USERNAME`.github.io/`REPO_NAME`/`PLUGIN_NAME`

53
build.mjs Normal file
View file

@ -0,0 +1,53 @@
import { rollup } from "rollup";
import { readFile, writeFile, readdir } from "fs/promises";
import { createHash } from "crypto";
import esbuild from "rollup-plugin-esbuild";
import nodeResolve from "@rollup/plugin-node-resolve";
import commonjs from "@rollup/plugin-commonjs";
for (let plug of await readdir("./plugins")) {
const manifest = JSON.parse(await readFile(`./plugins/${plug}/manifest.json`));
const outName = manifest.main.split("/").reverse()[0];
const outPath = `./dist/${plug}/${outName}`;
try {
const bundle = await rollup({
input: `./plugins/${plug}/${manifest.main}`,
onwarn: () => {},
plugins: [
nodeResolve(),
commonjs(),
esbuild({
target: "esnext",
minify: true,
})
],
});
await bundle.write({
file: outPath,
globals(id) {
if (id.startsWith("@vendetta")) return id.substring(1).replace(/\//g, ".");
const map = {
react: "window.React",
};
return map[id] || null;
},
format: "iife",
compact: true,
exports: "named",
});
await bundle.close();
const toHash = await readFile(outPath);
manifest.hash = createHash("sha256").update(toHash).digest("hex");
manifest.main = outName;
await writeFile(`./dist/${plug}/manifest.json`, JSON.stringify(manifest));
console.log(`Successfully built ${manifest.name}!`);
} catch (e) {
console.error("Failed to build plugin...", e);
process.exit(1);
}
}

12
package.json Normal file
View file

@ -0,0 +1,12 @@
{
"scripts": {
"build": "node build.mjs"
},
"devDependencies": {
"@rollup/plugin-commonjs": "^24.0.0",
"@rollup/plugin-node-resolve": "^15.0.1",
"esbuild": "^0.16.14",
"rollup": "^3.9.1",
"rollup-plugin-esbuild": "^5.0.0"
}
}

View file

@ -0,0 +1,14 @@
{
"name": "Template Plugin",
"description": "A plugin for use as a template.",
"authors": [
{
"name": "You!",
"id": "YOUR_ID_HERE"
}
],
"main": "src/index.js",
"vendetta": {
"icon": "ic_badge_staff"
}
}

View file

@ -0,0 +1,7 @@
import { FormText } from "@vendetta/ui/components/Forms";
export default () => (
<FormText>
Hello, world!
</FormText>
)

View file

@ -0,0 +1,12 @@
import { logger } from "@vendetta";
import Settings from "./Settings";
export default {
onLoad: () => {
logger.log("Hello world!");
},
onUnload: () => {
logger.log("Goodbye, world.");
},
settings: Settings,
}

2
pnpm-workspace.yaml Normal file
View file

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