84 lines
2.7 KiB
TypeScript
84 lines
2.7 KiB
TypeScript
import { existsSync, readFileSync } from 'node:fs';
|
|
import { resolve, dirname } from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
// 1. Resolve paths and load package manifest
|
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
const root = resolve(__dirname, '..');
|
|
|
|
let id = '';
|
|
let version = '';
|
|
|
|
if (existsSync(resolve(root, 'module.json'))) {
|
|
const moduleJson = JSON.parse(readFileSync(resolve(root, 'module.json'), 'utf8'));
|
|
id = moduleJson.id;
|
|
version = moduleJson.version;
|
|
} else if (existsSync(resolve(root, 'system.json'))) {
|
|
const systemJson = JSON.parse(readFileSync(resolve(root, 'system.json'), 'utf8'));
|
|
id = systemJson.id;
|
|
version = systemJson.version;
|
|
} else if (existsSync(resolve(root, 'dist', 'system.json'))) {
|
|
const systemJson = JSON.parse(readFileSync(resolve(root, 'dist', 'system.json'), 'utf8'));
|
|
id = systemJson.id;
|
|
version = systemJson.version;
|
|
} else {
|
|
console.error("Error: Could not find system.json or module.json manifest!");
|
|
process.exit(1);
|
|
}
|
|
|
|
const zipPath = resolve(root, `${id}-v${version}.zip`);
|
|
|
|
if (!existsSync(zipPath)) {
|
|
console.error(`Error: Packaged zip file not found at ${zipPath}`);
|
|
console.error("Please run 'bun run package' first to generate the zip package.");
|
|
process.exit(1);
|
|
}
|
|
|
|
// 2. Determine ingest URL and API token from environment variables
|
|
const ingestUrl = process.env.FOUNDRY_INGEST_URL;
|
|
const apiToken = process.env.FOUNDRY_INGEST_TOKEN;
|
|
|
|
if (!ingestUrl) {
|
|
console.error("Error: FOUNDRY_INGEST_URL environment variable is not defined!");
|
|
console.error("Please define FOUNDRY_INGEST_URL in your .env file.");
|
|
process.exit(1);
|
|
}
|
|
|
|
if (!apiToken) {
|
|
console.error("Error: FOUNDRY_INGEST_TOKEN environment variable is not defined!");
|
|
console.error("Please define FOUNDRY_INGEST_TOKEN in your .env file.");
|
|
process.exit(1);
|
|
}
|
|
|
|
console.log(`Pushing package "${id}" version ${version}...`);
|
|
console.log(`Target URL: ${ingestUrl}`);
|
|
|
|
// 3. Build multipart form data and perform upload
|
|
const formData = new FormData();
|
|
const fileBlob = Bun.file(zipPath);
|
|
formData.append('file', fileBlob, `${id}-v${version}.zip`);
|
|
|
|
try {
|
|
const response = await fetch(ingestUrl, {
|
|
method: 'POST',
|
|
headers: {
|
|
'X-API-TOKEN': apiToken
|
|
},
|
|
body: formData
|
|
});
|
|
|
|
if (response.ok) {
|
|
const data = await response.json();
|
|
console.log("✓ Package successfully pushed and ingested!");
|
|
console.log(JSON.stringify(data, null, 2));
|
|
} else {
|
|
console.error(`Error: Ingest server returned status ${response.status} ${response.statusText}`);
|
|
const text = await response.text();
|
|
console.error(`Response details: ${text}`);
|
|
process.exit(1);
|
|
}
|
|
} catch (error) {
|
|
console.error("Error connecting to ingest server:", error);
|
|
process.exit(1);
|
|
}
|