diff --git a/packages/backend-core/src/migrations/migrations.ts b/packages/backend-core/src/migrations/migrations.ts index 2e3524775f..ab72091d56 100644 --- a/packages/backend-core/src/migrations/migrations.ts +++ b/packages/backend-core/src/migrations/migrations.ts @@ -87,6 +87,7 @@ export const runMigration = async ( const lengthStatement = length > 1 ? `[${count}/${length}]` : "" const db = getDB(dbName) + try { const doc = await getMigrationsDoc(db) diff --git a/packages/server/src/sdk/app/backups/constants.ts b/packages/server/src/sdk/app/backups/constants.ts index 2f011ea2de..0584fcb3d0 100644 --- a/packages/server/src/sdk/app/backups/constants.ts +++ b/packages/server/src/sdk/app/backups/constants.ts @@ -1,2 +1,3 @@ export const DB_EXPORT_FILE = "db.txt" export const GLOBAL_DB_EXPORT_FILE = "global.txt" +export const STATIC_APP_FILES = ["manifest.json", "budibase-client.js"] diff --git a/packages/server/src/sdk/app/backups/exports.ts b/packages/server/src/sdk/app/backups/exports.ts index 25bd1f4795..c10f106451 100644 --- a/packages/server/src/sdk/app/backups/exports.ts +++ b/packages/server/src/sdk/app/backups/exports.ts @@ -7,10 +7,15 @@ import { TABLE_ROW_PREFIX, USER_METDATA_PREFIX, } from "../../../db/utils" -import { DB_EXPORT_FILE, GLOBAL_DB_EXPORT_FILE } from "./constants" +import { + DB_EXPORT_FILE, + GLOBAL_DB_EXPORT_FILE, + STATIC_APP_FILES, +} from "./constants" import fs from "fs" import { join } from "path" import env from "../../../environment" + const uuid = require("uuid/v4") const tar = require("tar") const MemoryStream = require("memorystream") @@ -91,14 +96,25 @@ export async function exportApp(appId: string, config?: ExportOpts) { const prodAppId = dbCore.getProdAppID(appId) const appPath = `${prodAppId}/` // export bucket contents - let tmpPath + let tmpPath = createTempFolder(uuid()) if (!env.isTest()) { - tmpPath = await objectStore.retrieveDirectory( - ObjectStoreBuckets.APPS, - appPath - ) - } else { - tmpPath = createTempFolder(uuid()) + // write just the static files + if (config?.excludeRows) { + for (let path of STATIC_APP_FILES) { + const contents = await objectStore.retrieve( + ObjectStoreBuckets.APPS, + join(appPath, path) + ) + fs.writeFileSync(join(tmpPath, path), contents) + } + } + // get all of the files + else { + tmpPath = await objectStore.retrieveDirectory( + ObjectStoreBuckets.APPS, + appPath + ) + } } const downloadedPath = join(tmpPath, appPath) if (fs.existsSync(downloadedPath)) { diff --git a/packages/server/src/sdk/app/rows/attachments.ts b/packages/server/src/sdk/app/rows/attachments.ts index 67f58f8f2c..bd04f64146 100644 --- a/packages/server/src/sdk/app/rows/attachments.ts +++ b/packages/server/src/sdk/app/rows/attachments.ts @@ -13,13 +13,13 @@ function generateAttachmentFindParams( ) { const params: CouchFindOptions = { selector: { + $or: attachmentCols.map(col => ({ [col]: { $exists: true } })), _id: { $regex: `^${DocumentType.ROW}${SEPARATOR}${tableId}`, }, }, limit: FIND_LIMIT, } - attachmentCols.forEach(col => (params.selector[col] = { $exists: true })) if (bookmark) { params.bookmark = bookmark }