mirror of
https://github.com/unraid/api.git
synced 2026-01-04 23:50:37 -06:00
feat: improve packing
This commit is contained in:
@@ -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')) {
|
||||||
|
|||||||
@@ -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.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1,2 +1,2 @@
|
|||||||
export * from './fragment-masking.js';
|
export * from "./fragment-masking.js";
|
||||||
export * from './gql.js';
|
export * from "./gql.js";
|
||||||
Reference in New Issue
Block a user