ci(embedded-mpv): keep Windows runtime pin available (#1495)

This commit is contained in:
4gray authored and GitHub committed 2026-08-29 21:24:06 +02:00
1 parent 29ca94aa43
commit f04f67728e
14 files changed
+972 -75

No files matched your search

@@ -5,6 +5,7 @@ import os from 'node:os';
import { dirname, join } from 'node:path';
import test from 'node:test';
import { fileURLToPath } from 'node:url';
import { readWindowsRuntimePin } from '../embedded-mpv/windows-runtime-pin.mjs';
const currentDir = dirname(fileURLToPath(import.meta.url));
const require = createRequire(import.meta.url);
@@ -15,6 +16,18 @@ const buildAndMakeWorkflow = fs.readFileSync(
join(currentDir, '..', '..', '.github', 'workflows', 'build-and-make.yaml'),
'utf8'
);
const windowsRuntimeRefreshWorkflow = fs.readFileSync(
join(
currentDir,
'..',
'..',
'.github',
'workflows',
'refresh-windows-embedded-mpv-runtime.yaml'
),
'utf8'
);
const windowsRuntimePin = readWindowsRuntimePin();
const electronBuilderConfig = JSON.parse(
fs.readFileSync(
join(currentDir, '..', '..', 'electron-builder.json'),
@@ -874,16 +887,6 @@ test('Windows CI packages embedded MPV from a staged x64 runtime', () => {
const requireEmbeddedMpvLines = buildAndMakeWorkflow
.split(/\r?\n/)
.filter((line) => line.includes('IPTVNATOR_REQUIRE_EMBEDDED_MPV:'));
const defaultRuntimeUrls = [
...buildAndMakeWorkflow.matchAll(
/IPTVNATOR_DEFAULT_WINDOWS_EMBEDDED_MPV_RUNTIME_URL:\s+(\S+)/g
),
].map((match) => match[1]);
const defaultRuntimeSha256s = [
...buildAndMakeWorkflow.matchAll(
/IPTVNATOR_DEFAULT_WINDOWS_EMBEDDED_MPV_RUNTIME_SHA256:\s+([a-f0-9]{64})/g
),
].map((match) => match[1]);
assert.equal(
packageMetadata.scripts?.['embedded-mpv:stage-runtime:windows-archive'],
@@ -896,27 +899,61 @@ test('Windows CI packages embedded MPV from a staged x64 runtime', () => {
assert.match(buildAndMakeWorkflow, /runner:\s+windows-2022/);
assert.match(
buildAndMakeWorkflow,
/IPTVNATOR_WINDOWS_EMBEDDED_MPV_RUNTIME_URL/
/name:\s+Resolve pinned Windows Embedded MPV runtime/
);
assert.match(
buildAndMakeWorkflow,
/IPTVNATOR_WINDOWS_EMBEDDED_MPV_RUNTIME_SHA256/
/node tools\/embedded-mpv\/windows-runtime-pin\.mjs --github-output/
);
assert.match(
buildAndMakeWorkflow,
/IPTVNATOR_DEFAULT_WINDOWS_EMBEDDED_MPV_RUNTIME_URL: https:\/\/github\.com\/zhongfly\/mpv-winbuild\/releases\/download\//
/WINDOWS_RUNTIME_URL:\s+\$\{\{ steps\.windows-embedded-mpv-runtime-pin\.outputs\.url \}\}/
);
assert.deepEqual(
[...new Set(defaultRuntimeUrls)],
[
'https://github.com/zhongfly/mpv-winbuild/releases/download/2026-07-17-94335ab87a/mpv-dev-lgpl-x86_64-20260717-git-94335ab87a.7z',
]
assert.match(
buildAndMakeWorkflow,
/WINDOWS_RUNTIME_SHA256:\s+\$\{\{ steps\.windows-embedded-mpv-runtime-pin\.outputs\.sha256 \}\}/
);
assert.deepEqual(
[...new Set(defaultRuntimeSha256s)],
['6014aa0e6d8e98cdba90f5288295a7105d7d14ab0ca906f51465eeb478d5fea0']
assert.doesNotMatch(
buildAndMakeWorkflow,
/(?:vars|secrets)\.IPTVNATOR_WINDOWS_EMBEDDED_MPV_RUNTIME/
);
assert.doesNotMatch(buildAndMakeWorkflow, /zhongfly\/mpv-winbuild/);
assert.equal(windowsRuntimePin.repository, 'zhongfly/mpv-winbuild');
assert.match(windowsRuntimePin.asset.name, /^mpv-dev-lgpl-x86_64-/);
assert.match(windowsRuntimePin.asset.sha256, /^[a-f0-9]{64}$/);
assert.match(
windowsRuntimePin.upstream.licenseClaim,
/checksum and archive layout, not the complete transitive license closure/
);
assert.match(
windowsRuntimeRefreshWorkflow,
/node tools\/embedded-mpv\/update-windows-runtime-pin\.mjs/
);
assert.match(
windowsRuntimeRefreshWorkflow,
/node --test\s+tools\/embedded-mpv\/windows-runtime-pin\.test\.mjs/
);
assert.doesNotMatch(
windowsRuntimeRefreshWorkflow,
/electron-package-identity\.test\.mjs/
);
assert.match(
windowsRuntimeRefreshWorkflow,
/automation\/windows-embedded-mpv-runtime-pin/
);
assert.match(windowsRuntimeRefreshWorkflow, /secrets\.PAT/);
assert.match(
windowsRuntimeRefreshWorkflow,
/actions\/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1/
);
assert.match(
windowsRuntimeRefreshWorkflow,
/actions\/setup-node@820762786026740c76f36085b0efc47a31fe5020/
);
assert.doesNotMatch(
windowsRuntimeRefreshWorkflow,
/actions\/(?:checkout|setup-node)@v\d+/
);
assert.match(buildAndMakeWorkflow, /refs\/tags\/v\*/);
assert.match(
buildAndMakeWorkflow,
/name:\s+Override Windows arch in electron-builder\.json/
@@ -927,6 +964,14 @@ test('Windows CI packages embedded MPV from a staged x64 runtime', () => {
);
assert.match(embeddedMpvStageRuntimeSource, /\.dll\.a/);
assert.match(embeddedMpvBuildSource, /\.dll\.a/);
assert.match(
embeddedMpvWindowsArchiveStageSource,
/checksum-and-layout-only/
);
assert.match(
embeddedMpvWindowsArchiveStageSource,
/not-independently-verified/
);
assert.ok(requireEmbeddedMpvLines.length > 0);
for (const line of requireEmbeddedMpvLines) {
assert.doesNotMatch(line, /cache-hit/);
+14 -4
View File
@@ -13,6 +13,7 @@
"{workspaceRoot}/electron-builder.json",
"{workspaceRoot}/.github/workflows/build-and-make.yaml",
"{workspaceRoot}/.github/workflows/publish-snap.yaml",
"{workspaceRoot}/.github/workflows/refresh-windows-embedded-mpv-runtime.yaml",
"{workspaceRoot}/apps/electron-backend/build-embedded-mpv.js",
"{workspaceRoot}/apps/electron-backend/project.json",
"{workspaceRoot}/apps/electron-backend/native/src/embedded_mpv_win32.cc",
@@ -52,10 +53,14 @@
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.d.cts",
"{workspaceRoot}/tools/embedded-mpv/stage-runtime.mjs",
"{workspaceRoot}/tools/embedded-mpv/stage-windows-runtime-archive.mjs"
"{workspaceRoot}/tools/embedded-mpv/stage-windows-runtime-archive.mjs",
"{workspaceRoot}/tools/embedded-mpv/update-windows-runtime-pin.mjs",
"{workspaceRoot}/tools/embedded-mpv/windows-runtime-pin.json",
"{workspaceRoot}/tools/embedded-mpv/windows-runtime-pin.mjs",
"{workspaceRoot}/tools/embedded-mpv/windows-runtime-pin.test.mjs"
],
"options": {
"command": "node --test tools/packaging/electron-package-identity.test.mjs tools/packaging/asar-dependency-closure.test.mjs tools/packaging/embedded-mpv-arch.test.mjs tools/packaging/flatpak-launcher-validation.test.mjs tools/packaging/configure-linux-frame-copy-build.test.mjs tools/packaging/linux-after-pack.test.mjs tools/packaging/linux-frame-copy-profile.test.mjs tools/packaging/prepare-linux-runtime-source-snapshot.test.mjs tools/packaging/publish-snap-workflow.test.mjs tools/packaging/release-snap-assets.test.mjs tools/packaging/verify-linux-frame-copy-runtime.test.mjs tools/embedded-mpv/build-linux-runtime.test.mjs tools/embedded-mpv/download-pinned-source.test.mjs tools/embedded-mpv/generate-linux-runtime-notices.test.mjs tools/embedded-mpv/linux-runtime-manifest.test.mjs",
"command": "node --test tools/packaging/electron-package-identity.test.mjs tools/packaging/asar-dependency-closure.test.mjs tools/packaging/embedded-mpv-arch.test.mjs tools/packaging/flatpak-launcher-validation.test.mjs tools/packaging/configure-linux-frame-copy-build.test.mjs tools/packaging/linux-after-pack.test.mjs tools/packaging/linux-frame-copy-profile.test.mjs tools/packaging/prepare-linux-runtime-source-snapshot.test.mjs tools/packaging/publish-snap-workflow.test.mjs tools/packaging/release-snap-assets.test.mjs tools/packaging/verify-linux-frame-copy-runtime.test.mjs tools/embedded-mpv/build-linux-runtime.test.mjs tools/embedded-mpv/download-pinned-source.test.mjs tools/embedded-mpv/generate-linux-runtime-notices.test.mjs tools/embedded-mpv/linux-runtime-manifest.test.mjs tools/embedded-mpv/windows-runtime-pin.test.mjs",
"cwd": "{workspaceRoot}"
}
},
@@ -67,6 +72,7 @@
"{workspaceRoot}/tools/eslint/**/*",
"{workspaceRoot}/.github/workflows/build-and-make.yaml",
"{workspaceRoot}/.github/workflows/publish-snap.yaml",
"{workspaceRoot}/.github/workflows/refresh-windows-embedded-mpv-runtime.yaml",
"{workspaceRoot}/tools/packaging/prepare-linux-runtime-source-snapshot.cjs",
"{workspaceRoot}/tools/packaging/prepare-linux-runtime-source-snapshot.test.mjs",
"{workspaceRoot}/tools/packaging/publish-snap-workflow.test.mjs",
@@ -81,9 +87,13 @@
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/linux-source-archive-contract.d.cts",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.cjs",
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.d.cts"
"{workspaceRoot}/tools/embedded-mpv/runtime-probe-contract.d.cts",
"{workspaceRoot}/tools/embedded-mpv/stage-windows-runtime-archive.mjs",
"{workspaceRoot}/tools/embedded-mpv/update-windows-runtime-pin.mjs",
"{workspaceRoot}/tools/embedded-mpv/windows-runtime-pin.mjs",
"{workspaceRoot}/tools/embedded-mpv/windows-runtime-pin.test.mjs"
],
"command": "eslint \"tools/packaging/**/*.{js,cjs,mjs,ts}\" \"tools/embedded-mpv/build-macos-runtime.mjs\" \"tools/embedded-mpv/build-linux-runtime.{mjs,test.mjs}\" \"tools/embedded-mpv/download-pinned-source.{mjs,test.mjs}\" \"tools/embedded-mpv/generate-linux-runtime-notices.{cjs,test.mjs}\" \"tools/embedded-mpv/linux-source-archive-contract.cjs\" \"tools/embedded-mpv/runtime-probe-contract.cjs\""
"command": "eslint \"tools/packaging/**/*.{js,cjs,mjs,ts}\" \"tools/embedded-mpv/build-macos-runtime.mjs\" \"tools/embedded-mpv/build-linux-runtime.{mjs,test.mjs}\" \"tools/embedded-mpv/download-pinned-source.{mjs,test.mjs}\" \"tools/embedded-mpv/generate-linux-runtime-notices.{cjs,test.mjs}\" \"tools/embedded-mpv/linux-source-archive-contract.cjs\" \"tools/embedded-mpv/runtime-probe-contract.cjs\" \"tools/embedded-mpv/stage-windows-runtime-archive.mjs\" \"tools/embedded-mpv/update-windows-runtime-pin.mjs\" \"tools/embedded-mpv/windows-runtime-pin.{mjs,test.mjs}\""
}
},
"tags": ["scope:tools", "domain:packaging", "type:tool"]