feat: improve packing

This commit is contained in:
Eli Bosley
2025-02-04 11:27:31 -05:00
parent 073a51572a
commit 3c61a615f0
3 changed files with 42 additions and 31 deletions

View File

@@ -1,10 +1,13 @@
#!/usr/bin/env zx #!/usr/bin/env zx
import { cp, mkdir, writeFile } from 'fs/promises';
import { exit } from 'process'; import { exit } from 'process';
import { cd, $ } from 'zx';
import { $, cd } from 'zx';
import { getDeploymentVersion } from './get-deployment-version.mjs'; import { getDeploymentVersion } from './get-deployment-version.mjs';
try { try {
// Enable colours in output // Enable colours in output
process.env.FORCE_COLOR = '1'; process.env.FORCE_COLOR = '1';
@@ -12,20 +15,17 @@ try {
process.env.WORKDIR ??= process.env.PWD; process.env.WORKDIR ??= process.env.PWD;
cd(process.env.WORKDIR); cd(process.env.WORKDIR);
await $`rm -rf ./deploy/*`;
// Create deployment directories - ignore if they already exist // Create deployment directories - ignore if they already exist
await $`mkdir -p ./deploy/release`; await mkdir('./deploy/release', { recursive: true });
await $`mkdir -p ./deploy/pre-pack`; await mkdir('./deploy/pre-pack', { recursive: true });
await $`rm -rf ./deploy/release/*`;
await $`rm -rf ./deploy/pre-pack/*`;
// Build Generated Types // Build Generated Types
await $`npm run codegen`; await $`npm run codegen`;
await $`npm run build`; await $`npm run build`;
// Copy app files to plugin directory // Copy app files to plugin directory
await $`cp -r ./src/ ./deploy/pre-pack/src/`; await cp('./dist', './deploy/pre-pack/dist', { recursive: true });
await $`cp -r ./dist/ ./deploy/pre-pack/dist/`;
// Copy environment to deployment directory // Copy environment to deployment directory
const files = [ const files = [
@@ -35,10 +35,10 @@ try {
'codegen.ts', 'codegen.ts',
'ecosystem.config.json', 'ecosystem.config.json',
'vite.config.ts', 'vite.config.ts',
] ];
for (const file of files) { for (const file of files) {
await $`cp ./${file} ./deploy/pre-pack/${file}`; await cp(`./${file}`, `./deploy/pre-pack/${file}`);
} }
// Get package details // Get package details
@@ -49,28 +49,39 @@ try {
const deploymentVersion = getDeploymentVersion(process.env, version); const deploymentVersion = getDeploymentVersion(process.env, version);
// Create deployment package.json // Create deployment package.json
await $`echo ${JSON.stringify({ await writeFile(
...rest, './deploy/pre-pack/package.json',
name, JSON.stringify(
version: deploymentVersion, {
})} > ./deploy/pre-pack/package.json`; name,
version: deploymentVersion,
...rest,
},
null,
2
)
);
// # Create final tgz // # Create final tgz
await $`cp ./README.md ./deploy/pre-pack/`; await cp('./README.md', './deploy/pre-pack/README.md');
await $`cp -r ./node_modules ./deploy/pre-pack/node_modules`; await cp('./node_modules', './deploy/pre-pack/node_modules', { recursive: true });
// Install production dependencies // Install production dependencies
cd('./deploy/pre-pack');
await $`npm prune --omit=dev`; console.log('Installing dependencies...');
await $`npm install --omit=dev`;
await $`npm install github:unraid/libvirt`;
// Now we'll pack everything in the pre-pack directory $.verbose = true;
await $`tar -czf ../unraid-api-${deploymentVersion}.tgz .`; await $`npm --prefix ./deploy/pre-pack prune --omit=dev`;
await $`npm --prefix ./deploy/pre-pack install --omit=dev`;
// Move unraid-api.tgz to release directory // Ensure that we don't have any dev dependencies left
await $`mv ../unraid-api-${deploymentVersion}.tgz ../release`; console.log('Installed dependencies:');
await $`npm --prefix ./deploy/pre-pack ls --omit=dev --depth=0`;
console.log('Dependencies installed, packing...');
// Now we'll pack everything in the pre-pack directory to the release directory
await $`tar -czf ./deploy/release/unraid-api-${deploymentVersion}.tgz ./deploy/pre-pack/`;
console.log('Packing complete, build finished.');
} catch (error) { } catch (error) {
// Error with a command // Error with a command
if (Object.keys(error).includes('stderr')) { if (Object.keys(error).includes('stderr')) {

View File

@@ -15,7 +15,7 @@ import type { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-
*/ */
const documents = { const documents = {
"\n mutation sendRemoteGraphQLResponse($input: RemoteGraphQLServerInput!) {\n remoteGraphQLResponse(input: $input)\n }\n": types.sendRemoteGraphQLResponseDocument, "\n mutation sendRemoteGraphQLResponse($input: RemoteGraphQLServerInput!) {\n remoteGraphQLResponse(input: $input)\n }\n": types.sendRemoteGraphQLResponseDocument,
"\n fragment RemoteGraphQLEventFragment on RemoteGraphQLEvent {\n remoteGraphQLEventData: data {\n type\n body\n sha256\n }\n }\n": types.RemoteGraphQLEventFragmentFragmentDoc, "\n fragment RemoteGraphQLEventFragment on RemoteGraphQLEvent {\n remoteGraphQLEventData: data {\n type\n body\n sha256\n }\n }\n": types.RemoteGraphQLEventFragmentFragmentDoc,
"\n subscription events {\n events {\n __typename\n ... on ClientConnectedEvent {\n connectedData: data {\n type\n version\n apiKey\n }\n connectedEvent: type\n }\n ... on ClientDisconnectedEvent {\n disconnectedData: data {\n type\n version\n apiKey\n }\n disconnectedEvent: type\n }\n ...RemoteGraphQLEventFragment\n }\n }\n": types.eventsDocument, "\n subscription events {\n events {\n __typename\n ... on ClientConnectedEvent {\n connectedData: data {\n type\n version\n apiKey\n }\n connectedEvent: type\n }\n ... on ClientDisconnectedEvent {\n disconnectedData: data {\n type\n version\n apiKey\n }\n disconnectedEvent: type\n }\n ...RemoteGraphQLEventFragment\n }\n }\n": types.eventsDocument,
}; };
@@ -40,7 +40,7 @@ export function graphql(source: "\n mutation sendRemoteGraphQLResponse($input
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */
export function graphql(source: "\n fragment RemoteGraphQLEventFragment on RemoteGraphQLEvent {\n remoteGraphQLEventData: data {\n type\n body\n sha256\n }\n }\n"): (typeof documents)["\n fragment RemoteGraphQLEventFragment on RemoteGraphQLEvent {\n remoteGraphQLEventData: data {\n type\n body\n sha256\n }\n }\n"]; export function graphql(source: "\n fragment RemoteGraphQLEventFragment on RemoteGraphQLEvent {\n remoteGraphQLEventData: data {\n type\n body\n sha256\n }\n }\n"): (typeof documents)["\n fragment RemoteGraphQLEventFragment on RemoteGraphQLEvent {\n remoteGraphQLEventData: data {\n type\n body\n sha256\n }\n }\n"];
/** /**
* The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients. * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
*/ */

View File

@@ -1,2 +1,2 @@
export * from './fragment-masking.js'; export * from "./fragment-masking.js";
export * from './gql.js'; export * from "./gql.js";