67 lines
2.1 KiB
JavaScript
67 lines
2.1 KiB
JavaScript
// .gitea/scripts/downloadArtifactByName.js
|
|
// Purpose: Download and extract a single artifact by name from a given run.
|
|
// Env inputs:
|
|
// GITEA_BASE_URL, OWNER, REPO, GITEA_PAT
|
|
// RUN_ID -> numeric/string
|
|
// ARTIFACT_NAME -> e.g. "frontend" or "webapi"
|
|
// OUTPUT_DIR -> e.g. "artifacts/frontend"
|
|
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const { execSync } = require("child_process");
|
|
|
|
(async () => {
|
|
const BASE = process.env.GITEA_BASE_URL;
|
|
const OWNER = process.env.OWNER;
|
|
const REPO = process.env.REPO;
|
|
const TOKEN = process.env.GITEA_PAT;
|
|
const RUN_ID = process.env.RUN_ID;
|
|
const NAME = process.env.ARTIFACT_NAME;
|
|
const OUT_DIR = process.env.OUTPUT_DIR || path.join("artifacts", NAME || "");
|
|
|
|
if (!BASE || !OWNER || !REPO) {
|
|
console.error("Missing one of: GITEA_BASE_URL, OWNER, REPO");
|
|
process.exit(1);
|
|
}
|
|
if (!TOKEN) {
|
|
console.error("Missing GITEA_PAT");
|
|
process.exit(1);
|
|
}
|
|
if (!RUN_ID || !NAME) {
|
|
console.error("Missing RUN_ID or ARTIFACT_NAME");
|
|
process.exit(1);
|
|
}
|
|
|
|
const url = `${BASE}/${OWNER}/${REPO}/actions/runs/${RUN_ID}/artifacts/${encodeURIComponent(NAME)}`;
|
|
const zipPath = path.join(process.cwd(), `${NAME}.zip`);
|
|
fs.mkdirSync(OUT_DIR, { recursive: true });
|
|
|
|
console.log(`Downloading artifact "${NAME}" from run ${RUN_ID}`);
|
|
console.log(`GET ${url}`);
|
|
|
|
const res = await fetch(url, {
|
|
method: "GET",
|
|
redirect: "follow",
|
|
headers: { Authorization: `token ${TOKEN}` }
|
|
});
|
|
|
|
if (!res.ok) {
|
|
const text = await res.text().catch(() => "");
|
|
console.error(`Download failed: ${res.status} ${res.statusText}\n${text}`);
|
|
process.exit(1);
|
|
}
|
|
|
|
const buf = Buffer.from(await res.arrayBuffer());
|
|
fs.writeFileSync(zipPath, buf);
|
|
|
|
console.log(`Saved ZIP -> ${zipPath}`);
|
|
console.log(`Extracting to -> ${OUT_DIR}`);
|
|
|
|
execSync(`unzip -o "${zipPath}" -d "${OUT_DIR}"`, { stdio: "inherit" });
|
|
fs.unlinkSync(zipPath);
|
|
|
|
console.log("Done.");
|
|
})().catch(err => {
|
|
console.error(err.stack || err.message || String(err));
|
|
process.exit(1);
|
|
}); |