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,
},