release
This commit is contained in:
67
.gitea/scripts/downloadArtifactByName.js
Normal file
67
.gitea/scripts/downloadArtifactByName.js
Normal file
@@ -0,0 +1,67 @@
|
||||
// .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);
|
||||
});
|
||||
Reference in New Issue
Block a user