@denixjg/publisher-gitea
Version:
Publish your Electron Forge apps to Gitea with ease
100 lines (99 loc) • 4.82 kB
JavaScript
;
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;