diff --git a/src/createForgejoRelease.mjs b/src/createForgejoRelease.mjs index 74a0d94..00e80d5 100644 --- a/src/createForgejoRelease.mjs +++ b/src/createForgejoRelease.mjs @@ -1,12 +1,22 @@ -import { createReadStream } from "fs"; import axios from "axios"; import { config } from "dotenv"; -import { assertEnvKey } from "./utils.mjs"; +import { assertEnvKey, addReleaseAsset } from "./utils.mjs"; config({ quiet: true }); assertEnvKey("MANIFEST"); +assertEnvKey("TAG"); +assertEnvKey("FORGEJO_SERVER_URL"); +assertEnvKey("FORGEJO_API_URL"); +assertEnvKey("FORGEJO_REPOSITORY"); +assertEnvKey("FORGEJO_TOKEN"); +assertEnvKey("FORGEJO_REF_NAME"); const MANIFEST_FILE = process.env.MANIFEST; +const MANIFEST_NAME = MANIFEST_FILE.split(`/`).at(-1); +if (!MANIFEST_NAME) { + console.error(`Failed to parse manifest name from: ${MANIFEST_FILE}`); + process.exit(1); +}; const { TAG, @@ -17,21 +27,6 @@ const { FORGEJO_REF_NAME: TARGET_REF, } = process.env; -async function addReleaseAsset(releaseID, name, filepath) { - const stream = createReadStream(filepath); - return axios.post( - `${API}/repos/${REPO}/releases/${releaseID}/assets`, - { attachment: stream, }, - { - headers: { - Authorization: `token ${TOKEN}`, - "Content-Type": `multipart/form-data`, - }, - params: { name }, - } - ); -}; - // Initial Release Data const release = await axios.post( `${API}/repos/${REPO}/releases`, @@ -48,15 +43,9 @@ const release = await axios.post( } ); -const manifestName = MANIFEST_FILE.split(`/`).at(-1); -if (!manifestName) { - console.error(`Failed to parse manifest name from: ${MANIFEST_FILE}`); - process.exit(1); -}; - try { - await addReleaseAsset(release.data.id, `release.zip`, `release.zip`); - await addReleaseAsset(release.data.id, manifestName, MANIFEST_FILE); + await addReleaseAsset(release.data.upload_url, `release.zip`, `release.zip`); + await addReleaseAsset(release.data.upload_url, MANIFEST_NAME, MANIFEST_FILE); } catch (e) { console.error(`Failed to add assets to the release`); process.exit(1); diff --git a/src/utils.mjs b/src/utils.mjs index f7a07fc..a5d73c0 100644 --- a/src/utils.mjs +++ b/src/utils.mjs @@ -1,4 +1,5 @@ import { readFile } from "fs/promises"; +import { createReadStream } from "fs"; export async function getManifest(manifest) { let data = undefined; @@ -18,3 +19,18 @@ export function assertEnvKey(key, { checkTruthiness = true } = {}) { process.exit(1); }; }; + +export async function addReleaseAsset(url, name, filepath) { + const stream = createReadStream(filepath); + return axios.post( + url, + { attachment: stream, }, + { + headers: { + Authorization: `token ${TOKEN}`, + "Content-Type": `multipart/form-data`, + }, + params: { name }, + } + ); +};