@denixjg/publisher-gitea
Version:
Publish your Electron Forge apps to Gitea with ease
92 lines (91 loc) • 3.73 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Gitea = void 0;
const fs_extra_1 = __importDefault(require("fs-extra"));
const node_fetch_1 = __importDefault(require("node-fetch"));
const mime_types_1 = __importDefault(require("mime-types"));
const form_data_1 = __importDefault(require("form-data"));
class Gitea {
constructor(authToken, baseUrl) {
this.authToken = authToken || process.env.GITEA_TOKEN || "";
this.baseUrl = baseUrl || "";
if (!this.authToken) {
throw new Error("No Gitea authentication token provided. Set one in the publisher config or via the GITEA_TOKEN environment variable.");
}
if (!this.baseUrl) {
throw new Error("No Gitea base URL provided. Set one in the publisher config.");
}
this.baseUrl = this.baseUrl.replace(/\/$/, "");
}
async listReleases(owner, repo) {
const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases`;
const response = await (0, node_fetch_1.default)(url, {
headers: {
Accept: "application/json",
Authorization: `token ${this.authToken}`,
},
});
if (!response.ok) {
throw new Error(`Failed to list releases: ${response.statusText}`);
}
const releases = (await response.json());
return releases;
}
async createRelease(owner, repo, options) {
const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases`;
const response = await (0, node_fetch_1.default)(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
Authorization: `token ${this.authToken}`,
},
body: JSON.stringify(options),
});
if (!response.ok) {
throw new Error(`Failed to create release: ${response.statusText}`);
}
const release = (await response.json());
return release;
}
async deleteReleaseAsset(owner, repo, releaseId, assetId) {
const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases/${releaseId}/assets/${assetId}`;
const response = await (0, node_fetch_1.default)(url, {
method: "DELETE",
headers: {
Authorization: `token ${this.authToken}`,
},
});
if (!response.ok) {
throw new Error(`Failed to delete release asset: ${response.statusText}`);
}
}
async uploadReleaseAsset(owner, repo, releaseId, filePath, fileName) {
const url = `${this.baseUrl}/api/v1/repos/${owner}/${repo}/releases/${releaseId}/assets`;
const fileContent = await fs_extra_1.default.readFile(filePath);
const form = new form_data_1.default();
form.append("attachment", fileContent, {
filename: fileName,
contentType: mime_types_1.default.lookup(filePath) || "application/octet-stream",
});
const response = await (0, node_fetch_1.default)(url, {
method: "POST",
headers: {
Authorization: `token ${this.authToken}`,
},
body: form,
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Failed to upload asset: ${errorText}`);
}
const asset = (await response.json());
return asset;
}
static sanitizeName(name) {
return name.replace(/[^\w.-]/g, "-");
}
}
exports.Gitea = Gitea;