Adding check to make sure build/watch occurs inside a plugin directory.
This commit is contained in:
parent
7e2d9cd91a
commit
38e97c7cdb
|
@ -9,6 +9,19 @@ const { runPkgCommand } = require("../exec")
|
||||||
const { join } = require("path")
|
const { join } = require("path")
|
||||||
const { success, error, info } = require("../utils")
|
const { success, error, info } = require("../utils")
|
||||||
|
|
||||||
|
function checkInPlugin() {
|
||||||
|
if (!fs.existsSync("package.json")) {
|
||||||
|
throw new Error(
|
||||||
|
"Please run in a plugin directory - must contain package.json"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
if (!fs.existsSync("schema.json")) {
|
||||||
|
throw new Error(
|
||||||
|
"Please run in a plugin directory - must contain schema.json"
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function init(opts) {
|
async function init(opts) {
|
||||||
const type = opts["init"] || opts
|
const type = opts["init"] || opts
|
||||||
if (!type || !PLUGIN_TYPES_ARR.includes(type)) {
|
if (!type || !PLUGIN_TYPES_ARR.includes(type)) {
|
||||||
|
@ -42,6 +55,8 @@ async function init(opts) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function verify() {
|
async function verify() {
|
||||||
|
// will throw errors if not acceptable
|
||||||
|
checkInPlugin()
|
||||||
console.log(info("Verifying plugin..."))
|
console.log(info("Verifying plugin..."))
|
||||||
const schema = fs.readFileSync("schema.json", "utf8")
|
const schema = fs.readFileSync("schema.json", "utf8")
|
||||||
const pkg = fs.readFileSync("package.json", "utf8")
|
const pkg = fs.readFileSync("package.json", "utf8")
|
||||||
|
|
|
@ -22,6 +22,8 @@ function validateComponent(schema) {
|
||||||
const validator = joi.object({
|
const validator = joi.object({
|
||||||
type: joi.string().allow("component").required(),
|
type: joi.string().allow("component").required(),
|
||||||
metadata: joi.object().unknown(true).required(),
|
metadata: joi.object().unknown(true).required(),
|
||||||
|
hash: joi.string().optional(),
|
||||||
|
version: joi.string().optional(),
|
||||||
schema: joi
|
schema: joi
|
||||||
.object({
|
.object({
|
||||||
name: joi.string().required(),
|
name: joi.string().required(),
|
||||||
|
@ -53,6 +55,8 @@ function validateDatasource(schema) {
|
||||||
const validator = joi.object({
|
const validator = joi.object({
|
||||||
type: joi.string().allow("datasource").required(),
|
type: joi.string().allow("datasource").required(),
|
||||||
metadata: joi.object().unknown(true).required(),
|
metadata: joi.object().unknown(true).required(),
|
||||||
|
hash: joi.string().optional(),
|
||||||
|
version: joi.string().optional(),
|
||||||
schema: joi.object({
|
schema: joi.object({
|
||||||
docs: joi.string(),
|
docs: joi.string(),
|
||||||
friendlyName: joi.string().required(),
|
friendlyName: joi.string().required(),
|
||||||
|
|
|
@ -17,15 +17,12 @@ const bullboard = require("./automations/bullboard")
|
||||||
const { logAlert } = require("@budibase/backend-core/logging")
|
const { logAlert } = require("@budibase/backend-core/logging")
|
||||||
const { pinoSettings } = require("@budibase/backend-core")
|
const { pinoSettings } = require("@budibase/backend-core")
|
||||||
const { Thread } = require("./threads")
|
const { Thread } = require("./threads")
|
||||||
const chokidar = require("chokidar")
|
|
||||||
const fs = require("fs")
|
const fs = require("fs")
|
||||||
const path = require("path")
|
|
||||||
import redis from "./utilities/redis"
|
import redis from "./utilities/redis"
|
||||||
import * as migrations from "./migrations"
|
import * as migrations from "./migrations"
|
||||||
import { events, installation, tenancy } from "@budibase/backend-core"
|
import { events, installation, tenancy } from "@budibase/backend-core"
|
||||||
import { createAdminUser, getChecklist } from "./utilities/workerRequests"
|
import { createAdminUser, getChecklist } from "./utilities/workerRequests"
|
||||||
import { processPlugin } from "./api/controllers/plugin"
|
import { watch } from "./watch"
|
||||||
import { DEFAULT_TENANT_ID } from "@budibase/backend-core/constants"
|
|
||||||
|
|
||||||
const app = new Koa()
|
const app = new Koa()
|
||||||
|
|
||||||
|
@ -144,28 +141,7 @@ module.exports = server.listen(env.PORT || 0, async () => {
|
||||||
env.PLUGINS_DIR &&
|
env.PLUGINS_DIR &&
|
||||||
fs.existsSync(env.PLUGINS_DIR)
|
fs.existsSync(env.PLUGINS_DIR)
|
||||||
) {
|
) {
|
||||||
const watchPath = path.join(env.PLUGINS_DIR, "./**/*.tar.gz")
|
watch()
|
||||||
chokidar
|
|
||||||
.watch(watchPath, {
|
|
||||||
ignored: "**/node_modules",
|
|
||||||
awaitWriteFinish: true,
|
|
||||||
})
|
|
||||||
.on("all", async (event: string, path: string) => {
|
|
||||||
// Sanity checks
|
|
||||||
if (!path?.endsWith(".tar.gz") || !fs.existsSync(path)) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
await tenancy.doInTenant(DEFAULT_TENANT_ID, async () => {
|
|
||||||
try {
|
|
||||||
const split = path.split("/")
|
|
||||||
const name = split[split.length - 1]
|
|
||||||
console.log("Importing plugin:", path)
|
|
||||||
await processPlugin({ name, path })
|
|
||||||
} catch (err) {
|
|
||||||
console.log("Failed to import plugin:", err)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for version updates
|
// check for version updates
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
import path from "path"
|
||||||
|
import * as env from "./environment"
|
||||||
|
import chokidar from "chokidar"
|
||||||
|
import fs from "fs"
|
||||||
|
import { tenancy } from "@budibase/backend-core"
|
||||||
|
import { DEFAULT_TENANT_ID } from "@budibase/backend-core/constants"
|
||||||
|
import { processPlugin } from "./api/controllers/plugin"
|
||||||
|
|
||||||
|
export function watch() {
|
||||||
|
const watchPath = path.join(env.PLUGINS_DIR, "./**/*.tar.gz")
|
||||||
|
chokidar
|
||||||
|
.watch(watchPath, {
|
||||||
|
ignored: "**/node_modules",
|
||||||
|
awaitWriteFinish: true,
|
||||||
|
})
|
||||||
|
.on("all", async (event: string, path: string) => {
|
||||||
|
// Sanity checks
|
||||||
|
if (!path?.endsWith(".tar.gz") || !fs.existsSync(path)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
await tenancy.doInTenant(DEFAULT_TENANT_ID, async () => {
|
||||||
|
try {
|
||||||
|
const split = path.split("/")
|
||||||
|
const name = split[split.length - 1]
|
||||||
|
console.log("Importing plugin:", path)
|
||||||
|
await processPlugin({ name, path })
|
||||||
|
} catch (err) {
|
||||||
|
console.log("Failed to import plugin:", err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue