46 lines
2.4 KiB
JavaScript
46 lines
2.4 KiB
JavaScript
|
const fs = require('node:fs/promises');
|
||
|
const util = require('node:util');
|
||
|
const { argv } = require('node:process');
|
||
|
const exec = util.promisify(require('node:child_process').exec);
|
||
|
|
||
|
const version = argv[2]
|
||
|
|
||
|
const getPastClientVersion = async () => {
|
||
|
const manifestRaw = await fetch(`https://api.github.com/repos/budibase/budibase/contents/packages/client/manifest.json?ref=v${version}`).then(r => r.json());
|
||
|
|
||
|
// GitHub response will contain a message field containing the following string if the version can't be found.
|
||
|
if (manifestRaw?.message?.includes("No commit found")) {
|
||
|
throw `Can't find a GitHub tag with version "${version}"`
|
||
|
}
|
||
|
|
||
|
const manifest = Buffer.from(manifestRaw.content, 'base64').toString('utf8')
|
||
|
|
||
|
await fs.mkdir(`packages/server/build/oldClientVersions/${version}`, { recursive: true });
|
||
|
await fs.writeFile(`packages/server/build/oldClientVersions/${version}/manifest.json`, manifest)
|
||
|
|
||
|
const npmRegistry = await fetch(`https://registry.npmjs.org/@budibase/client/${version}`).then(r => r.json());
|
||
|
|
||
|
// The json response from npm is just a string starting with the following if the version can't be found
|
||
|
if (typeof npmRegistry === "string" && npmRegistry.startsWith("version not found")) {
|
||
|
throw `Can't find @budibase/client with version "${version}" in npm registry`
|
||
|
}
|
||
|
|
||
|
// Create a temp directory to store the @budibase/client library in
|
||
|
await fs.mkdir("clientVersionTmp", { recursive: true });
|
||
|
|
||
|
// Get the tarball of the @budibase/client library and pipe it into tar to extract it
|
||
|
await exec(`curl -L ${npmRegistry.dist.tarball} --output - | tar -xvzf - -C clientVersionTmp`);
|
||
|
|
||
|
// Copy the compiled client version we want to the oldClientVersions dir and delete the temp directory
|
||
|
await fs.copyFile('./clientVersionTmp/package/dist/budibase-client.js', `./packages/server/build/oldClientVersions/${version}/app.js`);
|
||
|
await fs.rm("clientVersionTmp", { recursive: true });
|
||
|
|
||
|
// Check what client versions the user has locally and update the `clientVersions.json` file in the builder so that they can be selected
|
||
|
const rootDir = await fs.readdir('packages/server/build/oldClientVersions/', { withFileTypes: true });
|
||
|
const dirs = rootDir.filter(entry => entry.isDirectory()).map(dir => dir.name);
|
||
|
|
||
|
await fs.writeFile("packages/builder/src/components/deploy/clientVersions.json", JSON.stringify(dirs))
|
||
|
}
|
||
|
|
||
|
getPastClientVersion().catch(e => console.error(e));
|