The workflow was written for github.com: actions/upload-artifact failed on the Gitea runner, softprops/action-gh-release only talks to the GitHub API, and gen-manifest.js hardcoded github.com URLs. - drop the artifact upload (release assets are the deliverable) - upload release assets with tools/release-gitea.js, a dependency-free Gitea API client; re-running a tag replaces the attachments - gen-manifest.js takes --server/PUBLIC_SERVER_URL and knows that Gitea spells the latest-asset URL /releases/download/latest/<file> - PUBLIC_SERVER_URL is set explicitly because the runner only sees the instance's internal LAN address Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
b137bf9eda
commit
bf2daac146
+26
-9
@@ -7,12 +7,16 @@
|
||||
* can be added under Homebrew Channel ->
|
||||
* Settings -> Add repository
|
||||
*
|
||||
* Both are uploaded as release assets, so the stable repository URL is
|
||||
* https://github.com/<owner>/<repo>/releases/latest/download/apps.json
|
||||
* and the manifest/ipk URLs inside point at the exact tagged release.
|
||||
* Both are uploaded as release assets, so the repository URL stays stable
|
||||
* across releases, while the manifest/ipk URLs inside point at the exact
|
||||
* tagged release.
|
||||
*
|
||||
* Usage: node tools/gen-manifest.js [--repo owner/repo] [--tag v1.0.0]
|
||||
* On GitHub Actions both are picked up from the environment.
|
||||
* Works against GitHub and Gitea/Forgejo; they spell the "latest release
|
||||
* asset" URL differently, which is the only thing --server changes.
|
||||
*
|
||||
* Usage: node tools/gen-manifest.js [--server https://host] [--repo owner/repo]
|
||||
* [--tag v1.0.0]
|
||||
* On GitHub/Gitea Actions all three are picked up from the environment.
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
@@ -34,6 +38,15 @@ const tag = arg(
|
||||
process.env.GITHUB_REF_TYPE === 'tag' ? process.env.GITHUB_REF_NAME : `v${pkg.version}`,
|
||||
);
|
||||
|
||||
// PUBLIC_SERVER_URL wins over GITHUB_SERVER_URL because a Gitea runner is
|
||||
// handed the instance's internal URL (a LAN address), which is useless in a
|
||||
// manifest the TV has to fetch.
|
||||
const server = arg(
|
||||
'--server',
|
||||
process.env.PUBLIC_SERVER_URL || process.env.GITHUB_SERVER_URL || 'https://github.com',
|
||||
).replace(/\/+$/, '');
|
||||
const isGitHub = /(^|\.)github\.com$/i.test(new URL(server).hostname);
|
||||
|
||||
const ipkName = `${pkg.name}_${pkg.version}_all.ipk`;
|
||||
const ipkPath = path.join(root, 'dist', ipkName);
|
||||
if (!fs.existsSync(ipkPath)) {
|
||||
@@ -42,8 +55,12 @@ if (!fs.existsSync(ipkPath)) {
|
||||
}
|
||||
|
||||
const ipk = fs.readFileSync(ipkPath);
|
||||
const releaseBase = repository
|
||||
? `https://github.com/${repository}/releases/download/${tag}`
|
||||
const releaseBase = repository ? `${server}/${repository}/releases/download/${tag}` : null;
|
||||
// GitHub: /releases/latest/download/<file>, Gitea: /releases/download/latest/<file>
|
||||
const latestBase = repository
|
||||
? isGitHub
|
||||
? `${server}/${repository}/releases/latest/download`
|
||||
: `${server}/${repository}/releases/download/latest`
|
||||
: null;
|
||||
|
||||
if (!releaseBase) {
|
||||
@@ -65,7 +82,7 @@ const manifest = {
|
||||
title: pkg.title,
|
||||
appDescription: pkg.description,
|
||||
iconUri,
|
||||
sourceUrl: repository ? `https://github.com/${repository}` : undefined,
|
||||
sourceUrl: repository ? `${server}/${repository}` : undefined,
|
||||
rootRequired: true,
|
||||
ipkUrl: releaseBase ? `${releaseBase}/${ipkName}` : ipkName,
|
||||
ipkHash: { sha256: crypto.createHash('sha256').update(ipk).digest('hex') },
|
||||
@@ -99,6 +116,6 @@ console.log(`repository: dist/apps.json`);
|
||||
if (repository) {
|
||||
console.log(
|
||||
`\nAdd this in Homebrew Channel -> Settings -> Add repository:\n` +
|
||||
` https://github.com/${repository}/releases/latest/download/apps.json`,
|
||||
` ${latestBase}/apps.json`,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user