Skip to content

Commit 95ecb83

Browse files
author
C. M. Barth
authored
Add windows support to github actions (new branch) (#144)
* attempt changes * fix workflows * address review comments * avoid specifying number of processors * reduce powershell usage in favor of gulp tasks
1 parent a358e9f commit 95ecb83

File tree

9 files changed

+233
-27
lines changed

9 files changed

+233
-27
lines changed

.github/workflows/pr.yml

+23
Original file line numberDiff line numberDiff line change
@@ -40,3 +40,26 @@ jobs:
4040
- name: Gulp (iOS)
4141
run: npx gulp buildIOS
4242
working-directory: ./Package
43+
44+
build-windows:
45+
runs-on: windows-latest
46+
steps:
47+
- name: Checkout Repo
48+
uses: actions/[email protected]
49+
with:
50+
submodules: 'true'
51+
- name: Setup MSBuild
52+
uses: microsoft/[email protected]
53+
- name: Setup NuGet
54+
uses: nuget/setup-nuget@v1
55+
with:
56+
nuget-version: '5.x'
57+
- name: NPM Install (Playground)
58+
run: npm install
59+
working-directory: ./Apps/Playground
60+
- name: NPM Install (Binary Package)
61+
run: npm install
62+
working-directory: ./Package
63+
- name: Gulp (Windows)
64+
run: npx gulp buildUWPPR
65+
working-directory: ./Package

.github/workflows/publish.yml

+50-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ on:
44
types: [published]
55

66
jobs:
7-
build:
7+
build-android-ios:
88
runs-on: macos-latest
99
steps:
1010
- name: Checkout Repo
@@ -22,6 +22,54 @@ jobs:
2222
- name: Gulp
2323
run: npx gulp
2424
working-directory: ./Package
25+
- name: Upload Assembled Folder
26+
uses: actions/upload-artifact@v2
27+
with:
28+
name: 'Assembled'
29+
path: Package/Assembled
30+
build-windows:
31+
runs-on: windows-latest
32+
steps:
33+
- name: Checkout Repo
34+
uses: actions/[email protected]
35+
with:
36+
submodules: 'true'
37+
- name: Setup MSBuild
38+
uses: microsoft/[email protected]
39+
- name: Setup NuGet
40+
uses: nuget/setup-nuget@v1
41+
with:
42+
nuget-version: '5.x'
43+
- name: NPM Install (Playground)
44+
run: npm install
45+
working-directory: ./Apps/Playground
46+
- name: NPM Install (Binary Package)
47+
run: npm install
48+
working-directory: ./Package
49+
- name: Gulp (Windows)
50+
run: npx gulp buildUWPPublish
51+
working-directory: ./Package
52+
- name: Upload Assembled Folder
53+
uses: actions/upload-artifact@v2
54+
with:
55+
name: 'Assembled'
56+
path: Package/Assembled
57+
package:
58+
needs: [build-android-ios, build-windows]
59+
runs-on: macos-latest
60+
steps:
61+
- name: Checkout Repo
62+
uses: actions/[email protected]
63+
- name: NPM Install (Binary Package)
64+
run: npm install
65+
working-directory: ./Package
66+
- name: Download Assembled Folder
67+
uses: actions/download-artifact@v2
68+
with:
69+
name: 'Assembled'
70+
path: Package/Assembled
71+
- name: Display structure of downloaded Assembled folder
72+
run: ls -R
2573
- name: Setup Node.js
2674
uses: actions/[email protected]
2775
with:
@@ -34,4 +82,4 @@ jobs:
3482
npm publish --access public
3583
working-directory: ./Package/Assembled
3684
env:
37-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
85+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Import-Module $PSScriptRoot\Utils.psm1
2+
3+
Compile-Solution -Platform "x64" -Configuration "Debug" -Solution "$PSScriptRoot\..\..\submodules\BabylonNative\Build_uwp_x64\ReactNativeBabylon.sln"
4+
nuget restore "$PSScriptRoot\..\..\..\..\..\Apps\Playground\windows\Playground.sln"
5+
Compile-Solution -Platform "x64" -Configuration "Debug" -Solution "$PSScriptRoot\..\..\..\..\..\Apps\Playground\windows\Playground.sln"

Modules/@babylonjs/react-native/windows/scripts/Setup.ps1

-6
This file was deleted.

Modules/@babylonjs/react-native/windows/scripts/Utils.psm1

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
# MSBuild lookup adapted from https://blog.lextudio.com/locate-msbuild-via-powershell-on-different-operating-systems-140757bb8e18
22
function Get-MSBuildPath {
33
$msbuild = ""
4+
$MSBuildExistsInPath = $null -ne (Get-Command "msbuild" -ErrorAction SilentlyContinue)
5+
if ($MSBuildExistsInPath) {
6+
$msbuild = "msbuild.exe"
7+
return $msbuild
8+
}
9+
410
if (-not(Get-PackageProvider NuGet -ErrorAction silentlyContinue)) {
511
Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Confirm:$False -Force
612
}
@@ -63,7 +69,7 @@ function Compile-Solution {
6369
)
6470

6571
$MSBuild = Get-MSBuildPath
66-
& "$MSBuild" /p:Configuration="$Configuration" /p:Platform="$Platform" $Solution
72+
& "$MSBuild" /p:Configuration="$Configuration" /p:Platform="$Platform" /m $Solution
6773
if ($? -Eq $False) {
6874
Write-Error "$Platform $Configuration Build failed."
6975
exit 1

Package/gulpfile.js

+35-3
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,17 @@ const buildAndroid = async () => {
4242
};
4343

4444
const makeUWPProject = async () => {
45-
exec('.\\..\\Modules\\@babylonjs\\react-native\\windows\\scripts\\Setup.bat');
45+
// windows build agents don't support the path lengths required for initializing arcore dependencies,
46+
// so we manually initialize the submodules we need here.
47+
exec('git -c submodule."Dependencies/xr/Dependencies/arcore-android-sdk".update=none submodule update --init --recursive "./../Modules/@babylonjs/react-native/submodules/BabylonNative');
48+
shelljs.mkdir('-p', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_x64');
49+
exec('cmake -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 -D NAPI_JAVASCRIPT_ENGINE=JSI ./../../../windows', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_x64');
50+
shelljs.mkdir('-p', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_x86');
51+
exec('cmake -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 -D NAPI_JAVASCRIPT_ENGINE=JSI -A Win32 ./../../../windows', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_x86');
52+
shelljs.mkdir('-p', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_arm');
53+
exec('cmake -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 -D NAPI_JAVASCRIPT_ENGINE=JSI -A arm ./../../../windows', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_arm');
54+
shelljs.mkdir('-p', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_arm64');
55+
exec('cmake -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 -D NAPI_JAVASCRIPT_ENGINE=JSI -A arm64 ./../../../windows', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_arm64');
4656
}
4757

4858
const buildUWPProject = async () => {
@@ -51,6 +61,20 @@ const buildUWPProject = async () => {
5161

5262
const buildUWP = gulp.series(makeUWPProject, buildUWPProject);
5363

64+
const makeUWPProjectPR = async () => {
65+
// windows build agents don't support the path lengths required for initializing arcore dependencies,
66+
// so we manually initialize the submodules we need here.
67+
exec('git -c submodule."Dependencies/xr/Dependencies/arcore-android-sdk".update=none submodule update --init --recursive "./../Modules/@babylonjs/react-native/submodules/BabylonNative');
68+
shelljs.mkdir('-p', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_x64');
69+
exec('cmake -D CMAKE_SYSTEM_NAME=WindowsStore -D CMAKE_SYSTEM_VERSION=10.0 -D NAPI_JAVASCRIPT_ENGINE=JSI ./../../../windows', './../Modules/@babylonjs/react-native/submodules/BabylonNative/Build_uwp_x64');
70+
}
71+
72+
const buildUWPProjectPR = async () => {
73+
exec('.\\..\\Modules\\@babylonjs\\react-native\\windows\\scripts\\PRBuild.bat');
74+
}
75+
76+
const buildUWPPR = gulp.series(makeUWPProjectPR, buildUWPProjectPR);
77+
5478
const copyCommonFiles = () => {
5579
return gulp.src('../Apps/Playground/node_modules/@babylonjs/react-native/package.json')
5680
.pipe(gulp.src('../Apps/Playground/node_modules/@babylonjs/react-native/README.md'))
@@ -283,10 +307,18 @@ exports.build = build;
283307
exports.rebuild = rebuild;
284308
exports.pack = pack;
285309

286-
const packUWP = gulp.series(clean, buildUWP, copyCommonFiles, copySharedFiles, copyUWPFiles, createPackage);
287-
const packUWPNoBuild = gulp.series(clean, copyCommonFiles, copySharedFiles, copyUWPFiles, createPackage);
310+
const copyPackageFilesUWP = gulp.series(copyCommonFiles, copySharedFiles, copyUWPFiles);
311+
const buildUWPPublish = gulp.series(buildUWP, copyPackageFilesUWP);
312+
const packUWP = gulp.series(clean, buildUWP, copyPackageFilesUWP, createPackage);
313+
const packUWPNoBuild = gulp.series(clean, copyPackageFilesUWP, createPackage);
288314

315+
exports.makeUWPProject = makeUWPProject;
316+
exports.buildUWPProject = buildUWPProject;
317+
exports.makeUWPProjectPR = makeUWPProjectPR;
318+
exports.buildUWPProjectPR = buildUWPProjectPR;
289319
exports.buildUWP = buildUWP;
320+
exports.buildUWPPR = buildUWPPR;
321+
exports.buildUWPPublish = buildUWPPublish;
290322
exports.copyUWPFiles = copyUWPFiles;
291323
exports.packUWP = packUWP;
292324
exports.packUWPNoBuild = packUWPNoBuild;

Package/package-lock.json

+110-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)