From 4fa67afc3d9900dc4586f9b601c2d1a3d40dffeb Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Thu, 28 May 2026 15:57:01 +0100 Subject: [PATCH] Fix Tauri artifact copy path so installers upload (smoke + release) (#6466) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Regression from #6404 (Restructure/frontend editor). Two CI workflows copy the built installers to the wrong directory, so installer artifacts (MSI / DMG / DEB / RPM / AppImage) silently vanish: - **`tauri-build.yml`** (PR/desktop smoke builds) - uploads zero installer artifacts. - **`multiOSReleases.yml`** (production releases) - the empty artifacts are downloaded by `create-release` and fed to `action-gh-release`, so a release would publish **only the JARs, no desktop installers**. ## Root cause #6404 moved the Tauri project from `frontend/` to `frontend/editor/` and updated every **absolute** path (`projectPath`, `cd`, `Get-ChildItem`) to add the `editor/` segment - but left the **relative** copy targets `../../../dist`. Those resolve against the (now one level deeper) working dir after `cd ./frontend/editor/src-tauri/target`: | | resolves to | |---|---| | before #6404 (`frontend/src-tauri/target`) | repo-root `dist/` ✅ | | after #6404 (`frontend/editor/src-tauri/target`) | `frontend/dist/` ❌ (missing) | The `cp` fails, repo-root `dist/` (from `mkdir -p ./dist`) stays empty, and the upload finds nothing. `find -exec cp` failing is non-fatal, so jobs still report success - that's why it went unnoticed. No release has shipped broken yet: the last release (v2.11.0, 2026-05-19) predates #6404 (2026-05-22). ## Fix Copy to an absolute `$GITHUB_WORKSPACE/dist` in both workflows so the `cd` can't drift the destination again. This matches where the upload / signature-verify steps already read from. ## Evidence (run 26574078559, all 3 OS legs) ``` cp: cannot create regular file '../../../dist/Stirling-PDF-windows-x86_64.msi': No such file or directory ##[warning]No files were found with the provided path: ./dist/*. No artifacts will be uploaded. ``` The Tauri builds themselves succeeded - only the copy/upload was broken. ## Test plan - [ ] `tauri-build` on this PR uploads non-empty `Stirling-PDF-` artifacts on Windows/macOS/Linux. - [ ] Next release (or a `workflow_dispatch` of multiOSReleases) attaches MSI/DMG/DEB/RPM/AppImage to the release. --- .github/scripts/check_language_toml.py | 4 ++-- .github/workflows/multiOSReleases.yml | 16 +++++++++------- .github/workflows/tauri-build.yml | 14 ++++++++------ 3 files changed, 19 insertions(+), 15 deletions(-) diff --git a/.github/scripts/check_language_toml.py b/.github/scripts/check_language_toml.py index 2afa27c22..fe9fede75 100644 --- a/.github/scripts/check_language_toml.py +++ b/.github/scripts/check_language_toml.py @@ -13,7 +13,7 @@ Usage: """ # Sample for Windows: -# python .github/scripts/check_language_toml.py --reference-file frontend/public/locales/en-GB/translation.toml --branch "" --files frontend/public/locales/de-DE/translation.toml frontend/public/locales/fr-FR/translation.toml +# python .github/scripts/check_language_toml.py --reference-file frontend/editor/public/locales/en-GB/translation.toml --branch "" --files frontend/editor/public/locales/de-DE/translation.toml frontend/editor/public/locales/fr-FR/translation.toml import argparse import glob @@ -308,7 +308,7 @@ def check_for_differences(reference_file, file_list, branch, actor): report.append("## ❌ Overall Check Status: **_Failed_**") report.append("") report.append( - f"@{actor} please check your translation if it conforms to the standard. Follow the format of [en-GB/translation.toml](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/frontend/public/locales/en-GB/translation.toml)" + f"@{actor} please check your translation if it conforms to the standard. Follow the format of [en-GB/translation.toml](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/frontend/editor/public/locales/en-GB/translation.toml)" ) else: report.append("## ✅ Overall Check Status: **_Success_**") diff --git a/.github/workflows/multiOSReleases.yml b/.github/workflows/multiOSReleases.yml index fde92def2..91f1cb0b9 100644 --- a/.github/workflows/multiOSReleases.yml +++ b/.github/workflows/multiOSReleases.yml @@ -586,21 +586,23 @@ jobs: if: always() && steps.digicert-setup.conclusion != 'failure' shell: bash run: | - mkdir -p ./dist + # Absolute dist path so the cd below can't break the copy targets. + DIST="$GITHUB_WORKSPACE/dist" + mkdir -p "$DIST" cd ./frontend/editor/src-tauri/target # Find and rename artifacts based on platform if [ "${{ matrix.platform }}" = "windows-latest" ]; then # Only ship the MSI installer on Windows. The loose exe and WiX toolset exes # are not the user-facing installer - the MSI contains the signed inner exe. - find . -name "*.msi" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.msi" \; + find . -name "*.msi" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.msi" \; elif [ "${{ matrix.platform }}" = "macos-15" ]; then - find . -name "*.dmg" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.dmg" \; - find . -name "*.app" -exec cp -r {} "../../../dist/Stirling-PDF-${{ matrix.name }}.app" \; + find . -name "*.dmg" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.dmg" \; + find . -name "*.app" -exec cp -r {} "$DIST/Stirling-PDF-${{ matrix.name }}.app" \; else - find . -name "*.deb" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.deb" \; - find . -name "*.rpm" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.rpm" \; - find . -name "*.AppImage" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.AppImage" \; + find . -name "*.deb" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.deb" \; + find . -name "*.rpm" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.rpm" \; + find . -name "*.AppImage" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.AppImage" \; fi - name: Upload build artifacts diff --git a/.github/workflows/tauri-build.yml b/.github/workflows/tauri-build.yml index dda8d6538..e7fa110fe 100644 --- a/.github/workflows/tauri-build.yml +++ b/.github/workflows/tauri-build.yml @@ -420,20 +420,22 @@ jobs: - name: Rename artifacts shell: bash run: | - mkdir -p ./dist + # Absolute dist path so the cd below can't break the copy targets. + DIST="$GITHUB_WORKSPACE/dist" + mkdir -p "$DIST" cd ./frontend/editor/src-tauri/target # Find and rename artifacts based on platform if [ "${{ matrix.platform }}" = "windows-latest" ]; then # Only ship the MSI installer. The loose exe and WiX toolset exes # are not the user-facing installer - the MSI contains the signed inner exe. - find . -name "*.msi" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.msi" \; + find . -name "*.msi" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.msi" \; elif [ "${{ matrix.platform }}" = "macos-15" ]; then - find . -name "*.dmg" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.dmg" \; + find . -name "*.dmg" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.dmg" \; else - find . -name "*.deb" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.deb" \; - find . -name "*.rpm" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.rpm" \; - find . -name "*.AppImage" -exec cp {} "../../../dist/Stirling-PDF-${{ matrix.name }}.AppImage" \; + find . -name "*.deb" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.deb" \; + find . -name "*.rpm" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.rpm" \; + find . -name "*.AppImage" -exec cp {} "$DIST/Stirling-PDF-${{ matrix.name }}.AppImage" \; fi # Verify the MSI AND the inner exe extracted from it are signed.