fix: replace inherited updater provider in Gitea packages
This commit is contained in:
@@ -5,7 +5,7 @@ import os from "node:os";
|
||||
import path from "node:path";
|
||||
import { after, test } from "node:test";
|
||||
import { createRequire } from "node:module";
|
||||
import { expectedLinuxAssets, writeChecksums, verifyLocal, verifyRemote, UPDATE_URL } from "../scripts/gitea-release.mjs";
|
||||
import { expectedLinuxAssets, writeChecksums, verifyLocal, verifyRemote, verifyPackagedUpdater, UPDATE_URL } from "../scripts/gitea-release.mjs";
|
||||
|
||||
const root = await fs.mkdtemp(path.join(os.tmpdir(), "lh-gitea-gate-"));
|
||||
after(() => fs.rm(root, { recursive: true, force: true }));
|
||||
@@ -39,6 +39,7 @@ test("updater cannot point at traversal paths, other versions, or substituted in
|
||||
["traversal", (feed: any) => { feed.files[0].url = "../outside.AppImage"; }, /reference exactly/],
|
||||
["version", (feed: any) => { feed.version = "0.3.7"; }, /metadata version/],
|
||||
["hash", (feed: any) => { feed.files[0].sha512 = "bad"; }, /update checksum/],
|
||||
["duplicate", (feed: any) => { feed.files.push({ ...feed.files[1] }); }, /reference exactly/],
|
||||
] as const) {
|
||||
const directory = await fixture(name);
|
||||
const file = path.join(directory, "latest-linux.yml");
|
||||
@@ -73,11 +74,24 @@ test("remote verification downloads and hashes every draft attachment, and refus
|
||||
test("release configuration preserves packaging while replacing the upstream update origin", async () => {
|
||||
const require = createRequire(import.meta.url);
|
||||
const yaml = require("js-yaml");
|
||||
const config = yaml.load(await fs.readFile(new URL("../electron-builder.gitea.yml", import.meta.url), "utf8"));
|
||||
assert.equal(config.extends, "./electron-builder.yml");
|
||||
assert.deepEqual(config.publish, [{ provider: "generic", url: UPDATE_URL }]);
|
||||
const { getConfig } = require("app-builder-lib/out/util/config/config.js");
|
||||
const config = await getConfig(path.resolve(import.meta.dirname, ".."), "electron-builder.gitea.yml", null);
|
||||
assert.deepEqual(config.publish, { provider: "generic", url: UPDATE_URL });
|
||||
assert.equal(config.appId, "com.learnharness.LearnHarness");
|
||||
assert.deepEqual(config.linux.target.map((target: any) => target.target), ["AppImage", "deb"]);
|
||||
const workflow = yaml.load(await fs.readFile(new URL("../.gitea/workflows/release.yml", import.meta.url), "utf8"));
|
||||
assert(workflow.on.workflow_dispatch);
|
||||
assert(!workflow.on.pull_request, "untrusted pull requests must not run release publishing");
|
||||
assert.equal(workflow.permissions.releases, "write");
|
||||
});
|
||||
test("packaged updater verification refuses inherited GitHub or incorrect generic destinations", async () => {
|
||||
const directory = path.join(root, "package");
|
||||
await fs.mkdir(path.join(directory, "resources"), { recursive: true });
|
||||
const file = path.join(directory, "resources", "app-update.yml");
|
||||
await fs.writeFile(file, JSON.stringify({ provider: "github", owner: "amosblomqvist", repo: "learnharness" }));
|
||||
await assert.rejects(verifyPackagedUpdater(directory), /Gitea generic provider/);
|
||||
await fs.writeFile(file, JSON.stringify({ provider: "generic", url: "https://other.example" }));
|
||||
await assert.rejects(verifyPackagedUpdater(directory), /public Gitea release feed/);
|
||||
await fs.writeFile(file, JSON.stringify({ provider: "generic", url: UPDATE_URL }));
|
||||
await verifyPackagedUpdater(directory);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user