Bundle latest client library with the server and use it when updating apps in production

This commit is contained in:
Andrew Kingston 2021-07-09 12:33:09 +01:00
parent bd27aa0caf
commit ef4a0f8c79
3 changed files with 23 additions and 5 deletions

View File

@ -2,6 +2,7 @@ node_modules/
myapps/
.env
builder/*
client/*
public/
db/dev.db/
dist

View File

@ -13,7 +13,8 @@
"postbuild": "copyfiles -u 1 src/**/*.svelte dist/ && copyfiles -u 1 src/**/*.hbs dist/ && copyfiles -u 1 src/**/*.json dist/",
"test": "jest --coverage --maxWorkers=2",
"test:watch": "jest --watch",
"build:docker": "docker build . -t app-service",
"predocker": "copyfiles -f ../client/dist/budibase-client.js ../standard-components/manifest.json client",
"build:docker": "yarn run predocker && docker build . -t app-service",
"run:docker": "node dist/index.js",
"dev:stack:up": "node scripts/dev/manage.js up",
"dev:stack:down": "node scripts/dev/manage.js down",

View File

@ -2,6 +2,9 @@ const { join } = require("path")
const { ObjectStoreBuckets } = require("../../constants")
const fs = require("fs")
const { upload, retrieveToTmp, streamUpload } = require("./utilities")
const { resolve } = require("../centralPath")
const env = require("../../environment")
const TOP_LEVEL_PATH = join(__dirname, "..", "..", "..")
/**
* Client library paths in the object store:
@ -86,13 +89,26 @@ exports.backupClientLibrary = async appId => {
* @returns {Promise<void>}
*/
exports.updateClientLibrary = async appId => {
let manifest, client
if (false && env.isDev()) {
// Load the symlinked version in dev which is always the newest
manifest = require.resolve("@budibase/standard-components/manifest.json")
client = require.resolve("@budibase/client")
} else {
// Load the bundled version in prod
manifest = resolve(TOP_LEVEL_PATH, "client", "manifest.json")
client = resolve(TOP_LEVEL_PATH, "client", "budibase-client.js")
console.log(manifest)
console.log(client)
}
// Upload latest component manifest
await streamUpload(
ObjectStoreBuckets.APPS,
join(appId, "manifest.json"),
fs.createReadStream(
require.resolve("@budibase/standard-components/manifest.json")
),
fs.createReadStream(manifest),
{
ContentType: "application/json",
}
@ -102,7 +118,7 @@ exports.updateClientLibrary = async appId => {
await streamUpload(
ObjectStoreBuckets.APPS,
join(appId, "budibase-client.js"),
fs.createReadStream(require.resolve("@budibase/client")),
fs.createReadStream(client),
{
ContentType: "application/javascript",
}