UNPKG

@denixjg/publisher-gitea

Version:

Publish your Electron Forge apps to Gitea with ease

100 lines (99 loc) 4.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const node_path_1 = __importDefault(require("node:path")); const chalk_1 = __importDefault(require("chalk")); const log_symbols_1 = __importDefault(require("log-symbols")); const publisher_base_1 = require("@electron-forge/publisher-base"); const gitea_1 = require("./util/gitea"); const no_release_error_1 = require("./util/no-release-error"); class PublisherGitea extends publisher_base_1.PublisherBase { constructor() { super(...arguments); this.name = "gitea"; } async publish({ makeResults, setStatusLine, }) { var _a; const { config } = this; const preReleaseArtifacts = {}; for (const makeResult of makeResults) { const version = makeResult.packageJSON.version; if (!preReleaseArtifacts[version]) { preReleaseArtifacts[version] = []; } preReleaseArtifacts[version].push(makeResult); } if (!(config.repository && typeof config.repository === "object" && config.repository.owner && config.repository.name)) { throw new Error('In order to publish to Gitea, you must set the "repository.owner" and "repository.name" properties in your Forge config.'); } if (!config.baseUrl) { throw new Error('In order to publish to Gitea, you must set the "baseUrl" property in your Forge config.'); } const gitea = new gitea_1.Gitea(config.authToken, config.baseUrl); for (const releaseVersion of Object.keys(preReleaseArtifacts)) { let release; const artifacts = preReleaseArtifacts[releaseVersion]; const releaseName = `${(_a = config.tagPrefix) !== null && _a !== void 0 ? _a : "v"}${releaseVersion}`; setStatusLine(`Searching for release ${releaseName}`); try { const releases = await gitea.listReleases(config.repository.owner, config.repository.name); release = releases.find((r) => r.tag_name === releaseName); if (!release) { throw new no_release_error_1.NoReleaseError(404); } } catch (error) { if (!(error instanceof no_release_error_1.NoReleaseError && error.code === 404)) { throw error; } release = await gitea.createRelease(config.repository.owner, config.repository.name, { tag_name: releaseName, name: releaseName, draft: config.draft !== false, prerelease: config.prerelease === true, }); } let uploaded = 0; const updateUploadStatus = () => { setStatusLine(`Uploading distributable (${uploaded}/${artifacts.length} to ${releaseName})`); }; updateUploadStatus(); await Promise.all(artifacts .flatMap((artifact) => artifact.artifacts) .map(async (artifactPath) => { const done = () => { uploaded++; updateUploadStatus(); }; const artifactName = node_path_1.default.basename(artifactPath); const sanitizedArtifactName = gitea_1.Gitea.sanitizeName(artifactName); const asset = release === null || release === void 0 ? void 0 : release.assets.find((a) => a.name === sanitizedArtifactName); if (asset !== undefined) { if (config.force === true) { await gitea.deleteReleaseAsset(config.repository.owner, config.repository.name, release.id, asset.id); } else { return done(); } } try { const uploadedAsset = await gitea.uploadReleaseAsset(config.repository.owner, config.repository.name, release.id, artifactPath, sanitizedArtifactName); if (uploadedAsset.name !== sanitizedArtifactName) { console.warn(log_symbols_1.default.warning, chalk_1.default.yellow(`Expected asset name to be '${sanitizedArtifactName}' - got '${uploadedAsset.name}'`)); } } catch (error) { console.error(`Error uploading asset '${artifactName}':`, error); throw error; } return done(); })); } } } exports.default = PublisherGitea;