Initial commit
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user