diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 18261aef8..d71348cfc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -580,28 +580,8 @@ jobs: yarn ci:windows --arch ${{ matrix.platform }} } working-directory: packages/example-windows - continue-on-error: true - # GitHub Actions currently does not support outputs from jobs with matrices - # The workaround is to upload artifacts to communicate between jobs - - name: Set build result - id: build_result - if: ${{ steps.affected.outputs.windows != '' }} - run: | - path=${{ format('windows-build.{0}.{1}.result', matrix.platform, matrix.configuration) }} - echo "${{ steps.build.outcome }}" >> $path - echo "path=$path" >> "$GITHUB_OUTPUT" - shell: bash - - name: Upload build result - if: ${{ steps.affected.outputs.windows != '' }} - uses: actions/upload-artifact@v7 - with: - name: ${{ steps.build_result.outputs.path }} - path: ${{ steps.build_result.outputs.path }} - retention-days: 1 - archive: false - overwrite: true - name: Upload build logs - if: ${{ steps.affected.outputs.windows != '' && steps.build.outcome != 'success' }} + if: failure() uses: actions/upload-artifact@v7 with: name: windows-msbuild.binlog @@ -609,7 +589,7 @@ jobs: retention-days: 14 overwrite: true - name: Test - if: ${{ steps.affected.outputs.windows != '' && matrix.platform == 'x64' && steps.build.outcome == 'success' }} + if: ${{ steps.affected.outputs.windows != '' && matrix.platform == 'x64' }} run: | ../../../app/scripts/build/MSBuild.ps1 -Configuration ${{ matrix.configuration }} -Platform ${{ matrix.platform }} -Target Build ReactAppTests.vcxproj ../../../app/scripts/build/VSTest.ps1 ${{ matrix.platform }}\${{ matrix.configuration }}\ReactAppTests.dll @@ -634,7 +614,7 @@ jobs: - name: Initialize test app uses: ./.github/actions/init-test-app with: - arguments: -p windows --version 0.82.1 + arguments: -p windows --version 0.83.0 - name: Bundle JavaScript run: | yarn build:windows @@ -652,28 +632,8 @@ jobs: run: | yarn windows --logging --no-packager --no-launch --no-deploy working-directory: template-example - continue-on-error: true - # GitHub Actions currently does not support outputs from jobs with matrices - # The workaround is to upload artifacts to communicate between jobs - - name: Set build result - id: build_result - if: ${{ steps.affected.outputs.windows != '' }} - run: | - path=${{ format('windows-template-build.{0}.result', matrix.template) }} - echo "${{ steps.build.outcome }}" >> $path - echo "path=$path" >> "$GITHUB_OUTPUT" - shell: bash - - name: Upload build result - if: ${{ steps.affected.outputs.windows != '' }} - uses: actions/upload-artifact@v7 - with: - name: ${{ steps.build_result.outputs.path }} - path: ${{ steps.build_result.outputs.path }} - retention-days: 1 - archive: false - overwrite: true - name: Upload build logs - if: ${{ steps.affected.outputs.windows != '' && steps.build.outcome != 'success' }} + if: failure() uses: actions/upload-artifact@v7 with: name: windows-template-msbuild.binlog @@ -681,28 +641,6 @@ jobs: retention-days: 14 overwrite: true timeout-minutes: 60 - windows-result: - name: "Windows [result]" - permissions: {} - runs-on: ubuntu-24.04 - if: ${{ github.event_name != 'schedule' }} - needs: - - windows - - windows-template - steps: - - name: Download build results - uses: actions/download-artifact@v8 - with: - path: results - pattern: "windows-*.result" - merge-multiple: true - - name: Warn if Windows builds failed - run: | - for file in results/*; do - if grep -q fail "$file"; then - echo "::warning::$(basename $file .result): $(cat $file) (this is non-blocking but should be investigated)" - fi - done release: permissions: contents: write # create releases (Nx Release) @@ -715,7 +653,8 @@ jobs: - android-template - macos - macos-template - - windows-result + - windows + - windows-template runs-on: ubuntu-24.04 if: ${{ github.event_name != 'schedule' }} steps: diff --git a/packages/app/test/pack.test.mts b/packages/app/test/pack.test.mts index 77ff7b5d9..ef965a60b 100644 --- a/packages/app/test/pack.test.mts +++ b/packages/app/test/pack.test.mts @@ -284,35 +284,35 @@ describe("npm pack", () => { "windows/Win32/AutolinkedNativeModules.g.h", "windows/Win32/DevMenu.cpp", "windows/Win32/DevMenu.h", - "windows/Win32/Images/SplashScreen.scale-100.png", - "windows/Win32/Images/SplashScreen.scale-200.png", - "windows/Win32/Images/SplashScreen.scale-400.png", - "windows/Win32/Images/Square150x150Logo.scale-100.png", - "windows/Win32/Images/Square150x150Logo.scale-200.png", - "windows/Win32/Images/Square150x150Logo.scale-400.png", - "windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png", - "windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png", - "windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png", - "windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-16.png", - "windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-256.png", - "windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-48.png", - "windows/Win32/Images/Square44x44Logo.scale-100.png", - "windows/Win32/Images/Square44x44Logo.scale-200.png", - "windows/Win32/Images/Square44x44Logo.scale-400.png", - "windows/Win32/Images/Square44x44Logo.targetsize-16.png", - "windows/Win32/Images/Square44x44Logo.targetsize-256.png", - "windows/Win32/Images/Square44x44Logo.targetsize-48.png", - "windows/Win32/Images/StoreLogo.scale-100.png", - "windows/Win32/Images/StoreLogo.scale-200.png", - "windows/Win32/Images/StoreLogo.scale-400.png", - "windows/Win32/Images/Wide310x150Logo.scale-200.png", "windows/Win32/Main.cpp", "windows/Win32/Main.h", "windows/Win32/Main.ico", "windows/Win32/Main.rc", "windows/Win32/Main.small.ico", - "windows/Win32/Package.appxmanifest", - "windows/Win32/ReactApp.Package.wapproj", + "windows/Win32/ReactApp.Package/Images/SplashScreen.scale-100.png", + "windows/Win32/ReactApp.Package/Images/SplashScreen.scale-200.png", + "windows/Win32/ReactApp.Package/Images/SplashScreen.scale-400.png", + "windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-100.png", + "windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-200.png", + "windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-400.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-16.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-256.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-48.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-100.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-200.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-400.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-16.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-256.png", + "windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-48.png", + "windows/Win32/ReactApp.Package/Images/StoreLogo.scale-100.png", + "windows/Win32/ReactApp.Package/Images/StoreLogo.scale-200.png", + "windows/Win32/ReactApp.Package/Images/StoreLogo.scale-400.png", + "windows/Win32/ReactApp.Package/Images/Wide310x150Logo.scale-200.png", + "windows/Win32/ReactApp.Package/Package.appxmanifest", + "windows/Win32/ReactApp.Package/ReactApp.Package.wapproj", "windows/Win32/ReactApp.vcxproj", "windows/Win32/ReactApp.vcxproj.filters", "windows/Win32/pch.cpp", diff --git a/packages/app/test/windows/copyAndReplace.test.mts b/packages/app/test/windows/copyAndReplace.test.mts index 8b712a3f9..3b5aa1eb6 100644 --- a/packages/app/test/windows/copyAndReplace.test.mts +++ b/packages/app/test/windows/copyAndReplace.test.mts @@ -6,7 +6,7 @@ import { fs, setMockFiles } from "../fs.mock.mts"; describe("copyAndReplace()", () => { const copyAndReplace: typeof copyAndReplaceActual = (src, dst, r) => - copyAndReplaceActual(src, dst, r, fs.promises); + copyAndReplaceActual(src, dst, r, fs); const readTextFile: typeof readTextFileActual = (p) => readTextFileActual(p, fs); diff --git a/packages/app/windows/Win32/Images/SplashScreen.scale-100.png b/packages/app/windows/Win32/ReactApp.Package/Images/SplashScreen.scale-100.png similarity index 100% rename from packages/app/windows/Win32/Images/SplashScreen.scale-100.png rename to packages/app/windows/Win32/ReactApp.Package/Images/SplashScreen.scale-100.png diff --git a/packages/app/windows/Win32/Images/SplashScreen.scale-200.png b/packages/app/windows/Win32/ReactApp.Package/Images/SplashScreen.scale-200.png similarity index 100% rename from packages/app/windows/Win32/Images/SplashScreen.scale-200.png rename to packages/app/windows/Win32/ReactApp.Package/Images/SplashScreen.scale-200.png diff --git a/packages/app/windows/Win32/Images/SplashScreen.scale-400.png b/packages/app/windows/Win32/ReactApp.Package/Images/SplashScreen.scale-400.png similarity index 100% rename from packages/app/windows/Win32/Images/SplashScreen.scale-400.png rename to packages/app/windows/Win32/ReactApp.Package/Images/SplashScreen.scale-400.png diff --git a/packages/app/windows/Win32/Images/Square150x150Logo.scale-100.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-100.png similarity index 100% rename from packages/app/windows/Win32/Images/Square150x150Logo.scale-100.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-100.png diff --git a/packages/app/windows/Win32/Images/Square150x150Logo.scale-200.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-200.png similarity index 100% rename from packages/app/windows/Win32/Images/Square150x150Logo.scale-200.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-200.png diff --git a/packages/app/windows/Win32/Images/Square150x150Logo.scale-400.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-400.png similarity index 100% rename from packages/app/windows/Win32/Images/Square150x150Logo.scale-400.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square150x150Logo.scale-400.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-16.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-256.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-lightunplated_targetsize-48.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-16.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-16.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-16.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-16.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-256.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-256.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-256.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-256.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-48.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-48.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.altform-unplated_targetsize-48.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.altform-unplated_targetsize-48.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.scale-100.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-100.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.scale-100.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-100.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.scale-200.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-200.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.scale-200.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-200.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.scale-400.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-400.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.scale-400.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.scale-400.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.targetsize-16.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-16.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.targetsize-16.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-16.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.targetsize-256.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-256.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.targetsize-256.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-256.png diff --git a/packages/app/windows/Win32/Images/Square44x44Logo.targetsize-48.png b/packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-48.png similarity index 100% rename from packages/app/windows/Win32/Images/Square44x44Logo.targetsize-48.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Square44x44Logo.targetsize-48.png diff --git a/packages/app/windows/Win32/Images/StoreLogo.scale-100.png b/packages/app/windows/Win32/ReactApp.Package/Images/StoreLogo.scale-100.png similarity index 100% rename from packages/app/windows/Win32/Images/StoreLogo.scale-100.png rename to packages/app/windows/Win32/ReactApp.Package/Images/StoreLogo.scale-100.png diff --git a/packages/app/windows/Win32/Images/StoreLogo.scale-200.png b/packages/app/windows/Win32/ReactApp.Package/Images/StoreLogo.scale-200.png similarity index 100% rename from packages/app/windows/Win32/Images/StoreLogo.scale-200.png rename to packages/app/windows/Win32/ReactApp.Package/Images/StoreLogo.scale-200.png diff --git a/packages/app/windows/Win32/Images/StoreLogo.scale-400.png b/packages/app/windows/Win32/ReactApp.Package/Images/StoreLogo.scale-400.png similarity index 100% rename from packages/app/windows/Win32/Images/StoreLogo.scale-400.png rename to packages/app/windows/Win32/ReactApp.Package/Images/StoreLogo.scale-400.png diff --git a/packages/app/windows/Win32/Images/Wide310x150Logo.scale-200.png b/packages/app/windows/Win32/ReactApp.Package/Images/Wide310x150Logo.scale-200.png similarity index 100% rename from packages/app/windows/Win32/Images/Wide310x150Logo.scale-200.png rename to packages/app/windows/Win32/ReactApp.Package/Images/Wide310x150Logo.scale-200.png diff --git a/packages/app/windows/Win32/Package.appxmanifest b/packages/app/windows/Win32/ReactApp.Package/Package.appxmanifest similarity index 100% rename from packages/app/windows/Win32/Package.appxmanifest rename to packages/app/windows/Win32/ReactApp.Package/Package.appxmanifest diff --git a/packages/app/windows/Win32/ReactApp.Package.wapproj b/packages/app/windows/Win32/ReactApp.Package/ReactApp.Package.wapproj similarity index 98% rename from packages/app/windows/Win32/ReactApp.Package.wapproj rename to packages/app/windows/Win32/ReactApp.Package/ReactApp.Package.wapproj index 2f8bc6255..db28d6c56 100644 --- a/packages/app/windows/Win32/ReactApp.Package.wapproj +++ b/packages/app/windows/Win32/ReactApp.Package/ReactApp.Package.wapproj @@ -5,7 +5,7 @@ {b44cead7-fbff-4a17-95eb-ff5434bbd79d} $(WindowsTargetPlatformVersion) en-US - ReactApp.vcxproj + ..\ReactApp.vcxproj NativeOnly NativeOnly @@ -87,7 +87,7 @@ - + True diff --git a/packages/app/windows/app.mjs b/packages/app/windows/app.mjs index b4d66ba0b..490037b49 100755 --- a/packages/app/windows/app.mjs +++ b/packages/app/windows/app.mjs @@ -126,15 +126,19 @@ export async function copyAndReplace( srcPath, destPath, replacements, - fs = nodefs.promises + fs = nodefs ) { + mkdir_p(path.dirname(destPath), fs); + if (!replacements) { - return cp_r(srcPath, destPath, nodefs); + return cp_r(srcPath, destPath, fs); } + const fsp = fs.promises; + // Treat as text file - const data = await fs.readFile(srcPath, { encoding: "utf-8" }); - return writeTextFile(destPath, replaceContent(data, replacements), fs); + const data = await fsp.readFile(srcPath, { encoding: "utf-8" }); + return writeTextFile(destPath, replaceContent(data, replacements), fsp); } /** @@ -185,8 +189,7 @@ export async function generateSolution(destPath, options, fs = nodefs) { mkdir_p(destPath, fs); /** @type {typeof copyAndReplace} */ - const copyAndReplaceAsync = (src, dst, r) => - copyAndReplace(src, dst, r, fs.promises); + const copyAndReplaceAsync = (src, dst, r) => copyAndReplace(src, dst, r, fs); const copyTasks = projectFiles.map(([file, replacements]) => copyAndReplaceAsync( @@ -208,6 +211,7 @@ export async function generateSolution(destPath, options, fs = nodefs) { const slnPath = path.join(destPath, `${info.bundle.appName}.sln`); const vcxprojPath = path.join(projectFilesDestPath, projectFileName); const vcxprojLocalPath = path.relative(destPath, vcxprojPath); + const wapprojPath = "ReactApp.Package\\ReactApp.Package.wapproj"; copyTasks.push( writeTextFile( slnPath, @@ -230,11 +234,8 @@ export async function generateSolution(destPath, options, fs = nodefs) { `"${path.relative(destPath, rnWindowsPath)}\\` ) .replace( - "ReactApp.Package\\ReactApp.Package.wapproj", // Win32 - vcxprojLocalPath.replace( - "ReactApp.vcxproj", - "ReactApp.Package.wapproj" - ) + wapprojPath, // Win32 + vcxprojLocalPath.replace("ReactApp.vcxproj", wapprojPath) ) .replace("ReactApp\\ReactApp.vcxproj", vcxprojLocalPath) // Win32 .replace("ReactTestApp\\ReactTestApp.vcxproj", vcxprojLocalPath) // UWP diff --git a/packages/app/windows/win32.mjs b/packages/app/windows/win32.mjs index b97ac352e..ec682faa0 100644 --- a/packages/app/windows/win32.mjs +++ b/packages/app/windows/win32.mjs @@ -13,13 +13,13 @@ export function configureForWin32({ projectFileName: "ReactApp.vcxproj", projectFiles: [ ["AutolinkedNativeModules.g.cpp"], - ["Images"], ["Main.ico"], ["Main.rc"], ["Main.small.ico"], - ["Package.appxmanifest"], + ["ReactApp.Package/Images"], + ["ReactApp.Package/Package.appxmanifest"], [ - "ReactApp.Package.wapproj", + "ReactApp.Package/ReactApp.Package.wapproj", { "": bundle.contentItems, },