From f4df47c89f41a09c153286416c0923f880a87bf7 Mon Sep 17 00:00:00 2001 From: Sucukdeluxe <259325684+Sucukdeluxe@users.noreply.github.com> Date: Wed, 12 Aug 2026 22:00:39 +0200 Subject: [PATCH] ci: provision Electron before focused smoke tests Retry Electron binary provisioning before Windows smoke tests and retain bounded retries for package and installer builds. Bump release contracts to 1.0.14. --- .gitea/workflows/windows-ci.yml | 8 ++++++++ .github/workflows/windows-ci.yml | 8 ++++++++ CHANGELOG.md | 4 ++++ README.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- scripts/dev.mjs | 2 +- scripts/smoke-test-ci-contract.js | 2 ++ scripts/smoke-test-public-release-config.js | 8 ++++---- src/index.html | 2 +- 10 files changed, 32 insertions(+), 10 deletions(-) diff --git a/.gitea/workflows/windows-ci.yml b/.gitea/workflows/windows-ci.yml index ada7f5c..69d7a11 100644 --- a/.gitea/workflows/windows-ci.yml +++ b/.gitea/workflows/windows-ci.yml @@ -22,6 +22,14 @@ jobs: - name: Clean install run: npm ci timeout-minutes: 10 + - name: Provision Electron binary + run: | + npx install-electron --no + if ($LASTEXITCODE -ne 0) { + npx install-electron --no + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + } + timeout-minutes: 10 - name: Lint run: npm run lint timeout-minutes: 10 diff --git a/.github/workflows/windows-ci.yml b/.github/workflows/windows-ci.yml index ada7f5c..69d7a11 100644 --- a/.github/workflows/windows-ci.yml +++ b/.github/workflows/windows-ci.yml @@ -22,6 +22,14 @@ jobs: - name: Clean install run: npm ci timeout-minutes: 10 + - name: Provision Electron binary + run: | + npx install-electron --no + if ($LASTEXITCODE -ne 0) { + npx install-electron --no + if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } + } + timeout-minutes: 10 - name: Lint run: npm run lint timeout-minutes: 10 diff --git a/CHANGELOG.md b/CHANGELOG.md index 39ae616..7d58595 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.0.14 - 2026-08-12 + +- Provision the Electron binary with a bounded retry before Windows CI smoke tests. + ## 1.0.13 - 2026-08-12 - Apply the Windows CI retry to both directory and installer packaging. diff --git a/README.md b/README.md index 9d9aa41..f50a5cb 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ The application works in public mode without a Twitch login. Connecting a Twitch ## Installation 1. Open the [latest GitHub release](https://github.com/Sucukdeluxe/Twitch-VOD-Manager/releases/latest). -2. Download `Twitch-VOD-Manager-Setup-1.0.13.exe`. +2. Download `Twitch-VOD-Manager-Setup-1.0.14.exe`. 3. Run the installer and choose the installation directory. 4. Start Twitch VOD Manager and add a streamer. diff --git a/package-lock.json b/package-lock.json index 28496b5..6df6621 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "twitch-vod-manager", - "version": "1.0.13", + "version": "1.0.14", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "twitch-vod-manager", - "version": "1.0.13", + "version": "1.0.14", "license": "MIT", "dependencies": { "axios": "^1.16.1", diff --git a/package.json b/package.json index 2df0051..5844640 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "twitch-vod-manager", - "version": "1.0.13", + "version": "1.0.14", "description": "Twitch VOD Manager - Download Twitch VODs easily", "main": "dist/main.js", "author": "Sucukdeluxe", diff --git a/scripts/dev.mjs b/scripts/dev.mjs index 7ec9d87..8cb6cb6 100644 --- a/scripts/dev.mjs +++ b/scripts/dev.mjs @@ -93,7 +93,7 @@ if (process.platform === 'win32') { sourcePath: electronSourceExecutable, destinationPath: resolve(rootDirectory, 'node_modules', 'electron', 'dist', 'Twitch VOD Manager.exe'), iconPath: resolve(rootDirectory, 'build', 'icon.ico'), - version: '1.0.13', + version: '1.0.14', }); } diff --git a/scripts/smoke-test-ci-contract.js b/scripts/smoke-test-ci-contract.js index 5e3819a..31d40f4 100644 --- a/scripts/smoke-test-ci-contract.js +++ b/scripts/smoke-test-ci-contract.js @@ -33,6 +33,7 @@ for (const relativePath of ['.github/workflows/windows-ci.yml', '.gitea/workflow const source = fs.readFileSync(absolutePath, 'utf8'); const requiredCommands = [ 'npm ci', + 'npx install-electron --no', 'npm run lint', 'npm run test:lint-config', 'npm run security:check', @@ -55,6 +56,7 @@ for (const relativePath of ['.github/workflows/windows-ci.yml', '.gitea/workflow for (const command of ['npm run pack', 'npm run dist:ci']) { check(source.match(new RegExp(command.replace(/[:]/g, '\\:'), 'g'))?.length >= 2, `${relativePath} does not retry transient ${command} failures`); } + check(source.match(/npx install-electron --no/g)?.length >= 2, `${relativePath} does not retry Electron binary provisioning`); const runSteps = source.split(/\r?\n/).filter((line) => /^\s+run:\s+/.test(line)); const timeoutSteps = source.split(/\r?\n/).filter((line) => /^\s+timeout-minutes:\s*10\s*$/.test(line)); check(timeoutSteps.length >= runSteps.length, `${relativePath} does not cap every command at ten minutes`); diff --git a/scripts/smoke-test-public-release-config.js b/scripts/smoke-test-public-release-config.js index e0c22c7..d0ebf3c 100644 --- a/scripts/smoke-test-public-release-config.js +++ b/scripts/smoke-test-public-release-config.js @@ -15,9 +15,9 @@ function check(condition, message) { if (!condition) failures.push(message); } -check(packageJson.version === '1.0.13', `package version is ${packageJson.version}`); -check(packageLock.version === '1.0.13', `lockfile version is ${packageLock.version}`); -check(packageLock.packages?.['']?.version === '1.0.13', `lockfile root package version is ${packageLock.packages?.['']?.version}`); +check(packageJson.version === '1.0.14', `package version is ${packageJson.version}`); +check(packageLock.version === '1.0.14', `lockfile version is ${packageLock.version}`); +check(packageLock.packages?.['']?.version === '1.0.14', `lockfile root package version is ${packageLock.packages?.['']?.version}`); check(packageJson.build?.appId === 'io.github.sucukdeluxe.twitch-vod-manager', `appId is ${packageJson.build?.appId}`); check(packageJson.build?.publish?.provider === 'generic', `publish provider is ${packageJson.build?.publish?.provider}`); check(packageJson.build?.publish?.url === 'https://github.com/Sucukdeluxe/Twitch-VOD-Manager/releases/latest/download/', `publish URL is ${packageJson.build?.publish?.url}`); @@ -65,7 +65,7 @@ check(mainSource.includes('GITHUB_RELEASES_DOWNLOAD_BASE_URL'), 'GitHub releases check(mainSource.includes('https://api.github.com/repos/Sucukdeluxe/Twitch-VOD-Manager/releases/latest'), 'GitHub latest release API URL is missing'); check(mainSource.includes('https://github.com/Sucukdeluxe/Twitch-VOD-Manager/releases/download'), 'GitHub release download URL is missing'); check(!/storyboards\/\d{8,12}(?:-|\/)/.test(mainSource), 'numeric Twitch VOD example remains in the public source'); -check(indexSource.includes('Version: v1.0.13'), 'initial version label is not 1.0.13'); +check(indexSource.includes('Version: v1.0.14'), 'initial version label is not 1.0.14'); check(!indexSource.includes('Version: v4.1.13'), 'legacy version label is still present'); check(fs.existsSync(manifestPath), 'public release manifest is missing'); diff --git a/src/index.html b/src/index.html index a218182..d385d8c 100644 --- a/src/index.html +++ b/src/index.html @@ -940,7 +940,7 @@