@@ -4,20 +4,30 @@ const path = require('node:path');
|
||||
function releaseEnvironment(context) {
|
||||
const env = context.env ?? process.env;
|
||||
const serverUrl = env.GITEA_URL?.replace(/\/$/, '');
|
||||
const publicUrl = env.GITEA_PUBLIC_URL?.replace(/\/$/, '');
|
||||
const repository = env.GITEA_REPOSITORY;
|
||||
const token = env.GITEA_TOKEN;
|
||||
|
||||
if (!serverUrl || !repository || !token) {
|
||||
throw new Error('GITEA_URL, GITEA_REPOSITORY, and GITEA_TOKEN are required');
|
||||
if (!serverUrl || !publicUrl || !repository || !token) {
|
||||
throw new Error(
|
||||
'GITEA_URL, GITEA_PUBLIC_URL, GITEA_REPOSITORY, and GITEA_TOKEN are required',
|
||||
);
|
||||
}
|
||||
if (!/^https?:\/\//.test(serverUrl)) {
|
||||
throw new Error('GITEA_URL must be an HTTP(S) URL');
|
||||
}
|
||||
if (!/^https?:\/\//.test(publicUrl)) {
|
||||
throw new Error('GITEA_PUBLIC_URL must be an HTTP(S) URL');
|
||||
}
|
||||
if (!/^[^/]+\/[^/]+$/.test(repository)) {
|
||||
throw new Error('GITEA_REPOSITORY must use the owner/repository format');
|
||||
}
|
||||
|
||||
return { serverUrl, repository, token };
|
||||
return { serverUrl, publicUrl, repository, token };
|
||||
}
|
||||
|
||||
function makeUrlsPublic(value, serverUrl, publicUrl) {
|
||||
return value?.split(serverUrl).join(publicUrl);
|
||||
}
|
||||
|
||||
async function giteaRequest(url, token, options = {}) {
|
||||
@@ -43,10 +53,11 @@ module.exports.verifyConditions = async (_pluginConfig, context) => {
|
||||
|
||||
module.exports.prepare = async (pluginConfig, context) => {
|
||||
const { nextRelease, cwd } = context;
|
||||
const notes = nextRelease.notes?.trim();
|
||||
if (!notes) return;
|
||||
const rawNotes = nextRelease.notes?.trim();
|
||||
if (!rawNotes) return;
|
||||
|
||||
const { serverUrl, repository } = releaseEnvironment(context);
|
||||
const { serverUrl, publicUrl, repository } = releaseEnvironment(context);
|
||||
const notes = makeUrlsPublic(rawNotes, serverUrl, publicUrl);
|
||||
const changelogPath = path.resolve(cwd, pluginConfig.changelogFile ?? 'CHANGELOG.md');
|
||||
const releaseJsonPath = path.resolve(cwd, pluginConfig.releaseJsonPath ?? 'patches-bundle.json');
|
||||
|
||||
@@ -67,7 +78,7 @@ module.exports.prepare = async (pluginConfig, context) => {
|
||||
const releaseData = {
|
||||
created_at: new Date().toISOString().replace(/\.\d{3}Z$/, ''),
|
||||
description: notes,
|
||||
download_url: `${serverUrl}/${repository}/releases/download/${nextRelease.gitTag}/${assetName}`,
|
||||
download_url: `${publicUrl}/${repository}/releases/download/${nextRelease.gitTag}/${assetName}`,
|
||||
signature_download_url: '',
|
||||
version,
|
||||
};
|
||||
@@ -75,7 +86,7 @@ module.exports.prepare = async (pluginConfig, context) => {
|
||||
};
|
||||
|
||||
module.exports.publish = async (pluginConfig, context) => {
|
||||
const { serverUrl, repository, token } = releaseEnvironment(context);
|
||||
const { serverUrl, publicUrl, repository, token } = releaseEnvironment(context);
|
||||
const { branch, cwd, nextRelease } = context;
|
||||
const repositoryPath = repository.split('/').map(encodeURIComponent).join('/');
|
||||
const apiUrl = `${serverUrl}/api/v1/repos/${repositoryPath}`;
|
||||
@@ -96,7 +107,7 @@ module.exports.publish = async (pluginConfig, context) => {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({
|
||||
body: nextRelease.notes,
|
||||
body: makeUrlsPublic(nextRelease.notes, serverUrl, publicUrl),
|
||||
draft: false,
|
||||
name: nextRelease.name,
|
||||
prerelease: false,
|
||||
|
||||
Reference in New Issue
Block a user