Skip to content

Commit 01c1ec3

Browse files
committed
fix: resolve Windows build issues with macOS permissions
- Remove unused nativephp-extension.js file - Remove node-mac-permissions from optionalDependencies - Add postinstall script for platform-specific dependency handling - Add GitHub Actions workflow for Windows builds - Update to use forked nativephp-electron with cross-platform support This ensures Windows builds don't include macOS-specific native modules
1 parent 3575fcc commit 01c1ec3

File tree

5 files changed

+351
-402
lines changed

5 files changed

+351
-402
lines changed

.github/workflows/build-windows.yml

Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
name: Build Windows App
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- 'feature/**'
8+
paths-ignore:
9+
- '.github/**'
10+
- '!.github/workflows/build-windows.yml'
11+
pull_request:
12+
branches:
13+
- main
14+
workflow_dispatch:
15+
16+
permissions:
17+
contents: write
18+
19+
jobs:
20+
build:
21+
name: Build Windows App
22+
runs-on: windows-latest
23+
strategy:
24+
matrix:
25+
arch: [x64]
26+
27+
steps:
28+
- name: Checkout code
29+
uses: actions/checkout@v4
30+
31+
- name: Setup PHP
32+
uses: shivammathur/setup-php@v2
33+
with:
34+
php-version: '8.3'
35+
extensions: mbstring, xml, ctype, iconv, intl, pdo_sqlite, dom, filter, gd, json, mbstring, pdo
36+
tools: composer:v2
37+
coverage: none
38+
39+
- name: Setup Node.js
40+
uses: actions/setup-node@v4
41+
with:
42+
node-version: '22'
43+
44+
- name: Get version
45+
id: version
46+
shell: bash
47+
run: |
48+
VERSION=$(grep "'version' =>" config/nativephp.php | sed -E "s/.*'([0-9]+\.[0-9]+\.[0-9]+)'.*/\1/")
49+
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
50+
echo "Building version: $VERSION"
51+
52+
- name: Cache Composer dependencies
53+
uses: actions/cache@v4
54+
with:
55+
path: vendor
56+
key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }}
57+
restore-keys: |
58+
${{ runner.os }}-composer-
59+
60+
- name: Install Composer dependencies
61+
run: composer install --no-interaction --no-dev --prefer-dist --optimize-autoloader
62+
63+
- name: Clean npm cache and node_modules
64+
shell: cmd
65+
run: |
66+
if exist node_modules rmdir /s /q node_modules
67+
if exist package-lock.json del package-lock.json
68+
npm cache clean --force
69+
70+
- name: Install NPM dependencies (Windows-specific)
71+
shell: cmd
72+
run: |
73+
echo Installing npm dependencies for Windows...
74+
npm install --omit=dev --no-optional
75+
echo Dependencies installed successfully
76+
77+
- name: Copy .env file
78+
run: cp .env.example .env
79+
80+
- name: Generate application key
81+
run: php artisan key:generate
82+
83+
- name: Build frontend assets
84+
run: npm run build
85+
86+
- name: Generate Ziggy routes
87+
run: php artisan ziggy:generate
88+
89+
- name: Install Electron dependencies
90+
working-directory: vendor/nativephp/electron/resources/js
91+
shell: cmd
92+
run: |
93+
if exist node_modules rmdir /s /q node_modules
94+
npm install --no-optional
95+
96+
- name: Rebuild Electron native modules
97+
working-directory: vendor/nativephp/electron/resources/js
98+
run: npx electron-rebuild
99+
100+
- name: Build NativePHP application
101+
env:
102+
NATIVEPHP_APP_VERSION: ${{ steps.version.outputs.VERSION }}
103+
run: |
104+
php artisan native:build win ${{ matrix.arch }}
105+
106+
- name: Upload artifacts
107+
uses: actions/upload-artifact@v4
108+
with:
109+
name: Clueless-${{ steps.version.outputs.VERSION }}-win-${{ matrix.arch }}
110+
path: dist/*.exe
111+
retention-days: 5
112+
113+
release:
114+
name: Create Windows Release
115+
needs: build
116+
runs-on: ubuntu-latest
117+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
118+
119+
steps:
120+
- name: Checkout code
121+
uses: actions/checkout@v4
122+
123+
- name: Get version
124+
id: version
125+
run: |
126+
VERSION=$(grep "'version' =>" config/nativephp.php | sed -E "s/.*'([0-9]+\.[0-9]+\.[0-9]+)'.*/\1/")
127+
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
128+
129+
- name: Download x64 artifact
130+
uses: actions/download-artifact@v4
131+
with:
132+
name: Clueless-${{ steps.version.outputs.VERSION }}-win-x64
133+
path: ./artifacts/win-x64
134+
135+
- name: Upload Windows Release Assets
136+
env:
137+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
138+
run: |
139+
# Find the existing release for v${{ steps.version.outputs.VERSION }}
140+
RELEASE_ID=$(gh api repos/${{ github.repository }}/releases/tags/v${{ steps.version.outputs.VERSION }} --jq '.id' || echo "")
141+
142+
if [ -z "$RELEASE_ID" ]; then
143+
echo "No release found for v${{ steps.version.outputs.VERSION }}. Windows build will be added when release is created."
144+
exit 0
145+
fi
146+
147+
# Upload the Windows executables
148+
gh release upload v${{ steps.version.outputs.VERSION }} \
149+
./artifacts/win-x64/Clueless-${{ steps.version.outputs.VERSION }}-win-x64.exe \
150+
--clobber

0 commit comments

Comments
 (0)