@interopio/iocd-cli 0.0.30 → 0.0.31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +72 -72
- package/dist/schemas/iocd.cli.config.schema.json +4 -4
- package/dist/services/components/stores/github.store.js +0 -2
- package/dist/services/components/stores/github.store.js.map +1 -1
- package/dist/services/components/stores/local.store.js +2 -1
- package/dist/services/components/stores/local.store.js.map +1 -1
- package/dist/services/config/config.service.js +6 -1
- package/dist/services/config/config.service.js.map +1 -1
- package/dist/services/installer/windows.helper.js +11 -46
- package/dist/services/installer/windows.helper.js.map +1 -1
- package/dist/services/license.service.js +14 -14
- package/dist/templates/groups/apps/groups/.gitignore.template +23 -23
- package/dist/templates/groups/apps/groups/README.md +15 -15
- package/dist/templates/groups/apps/groups/config/web-group-dev.json +12 -12
- package/dist/templates/groups/apps/groups/index.html +17 -17
- package/dist/templates/groups/apps/groups/iocd.app.json +19 -19
- package/dist/templates/groups/apps/groups/package.json +25 -25
- package/dist/templates/groups/apps/groups/public/manifest.json +24 -24
- package/dist/templates/groups/apps/groups/public/robots.txt +3 -3
- package/dist/templates/groups/apps/groups/src/App.css +38 -38
- package/dist/templates/groups/apps/groups/src/App.tsx +11 -11
- package/dist/templates/groups/apps/groups/src/index.css +13 -13
- package/dist/templates/groups/apps/groups/src/index.tsx +19 -19
- package/dist/templates/groups/apps/groups/vite.config.ts +8 -8
- package/dist/templates/groups/template.json +12 -12
- package/dist/templates/ioconnect-desktop/.env.example +35 -41
- package/dist/templates/ioconnect-desktop/.github/workflows/build.yml +327 -327
- package/dist/templates/ioconnect-desktop/.gitignore.template +14 -14
- package/dist/templates/ioconnect-desktop/README.md +13 -13
- package/dist/templates/ioconnect-desktop/config/forge.config.js +59 -59
- package/dist/templates/ioconnect-desktop/config/iocd.cli.config.json +42 -42
- package/dist/templates/ioconnect-desktop/config/mac-build/entitlements.mac.plist +44 -44
- package/dist/templates/ioconnect-desktop/config/win-build/template.nuspectemplate +32 -32
- package/dist/templates/ioconnect-desktop/modifications/base/iocd/config/system.json.merge +2 -2
- package/dist/templates/ioconnect-desktop/modifications/base/iocd/config/system.json.merge-autoUpdate +9 -9
- package/dist/templates/ioconnect-desktop/package.json +32 -32
- package/dist/templates/ioconnect-desktop/template.json +6 -6
- package/dist/templates/launchpad/apps/launchpad/.eslintrc.json +3 -3
- package/dist/templates/launchpad/apps/launchpad/.gitignore.template +1 -1
- package/dist/templates/launchpad/apps/launchpad/config/iocd.app.def.dev.json +56 -56
- package/dist/templates/launchpad/apps/launchpad/config/iocd.system.build.json +2 -2
- package/dist/templates/launchpad/apps/launchpad/config/iocd.system.dev.json +2 -2
- package/dist/templates/launchpad/apps/launchpad/index.html +16 -16
- package/dist/templates/launchpad/apps/launchpad/iocd.app.json +27 -27
- package/dist/templates/launchpad/apps/launchpad/package-lock.json +2778 -2778
- package/dist/templates/launchpad/apps/launchpad/package.json +21 -21
- package/dist/templates/launchpad/apps/launchpad/src/app/app.tsx +41 -41
- package/dist/templates/launchpad/apps/launchpad/src/app/constants.ts +27 -27
- package/dist/templates/launchpad/apps/launchpad/src/components/logo.tsx +11 -11
- package/dist/templates/launchpad/apps/launchpad/src/components/main-context-menu.tsx +161 -161
- package/dist/templates/launchpad/apps/launchpad/src/components/notifications-button.tsx +44 -44
- package/dist/templates/launchpad/apps/launchpad/src/main.tsx +6 -6
- package/dist/templates/launchpad/apps/launchpad/src/styles.css +16 -16
- package/dist/templates/launchpad/apps/launchpad/tsconfig.json +10 -10
- package/dist/templates/launchpad/apps/launchpad/vite.config.ts +13 -13
- package/dist/templates/launchpad/template.json +12 -12
- package/dist/templates/splash/apps/splash/assets/styles/style.css +39 -39
- package/dist/templates/splash/apps/splash/iocd.app.json +7 -7
- package/dist/templates/splash/apps/splash/script.js +53 -53
- package/dist/templates/splash/apps/splash/splash.html +25 -25
- package/dist/templates/splash/template.json +12 -12
- package/dist/templates/tests/template.json +8 -8
- package/dist/templates/tests/tests/package-lock.json +7283 -7283
- package/dist/templates/tests/tests/package.json +22 -22
- package/dist/templates/tests/tests/tests/sample.spec.ts +30 -30
- package/dist/templates/tests/tests/tsconfig.json +10 -10
- package/dist/templates/tests/tests/wdio.config.ts +32 -32
- package/dist/templates/workspaces/apps/workspaces/README.md +15 -15
- package/dist/templates/workspaces/apps/workspaces/config/workspaces-dev.json +20 -20
- package/dist/templates/workspaces/apps/workspaces/index.html +17 -17
- package/dist/templates/workspaces/apps/workspaces/iocd.app.json +19 -19
- package/dist/templates/workspaces/apps/workspaces/package.json +29 -29
- package/dist/templates/workspaces/apps/workspaces/public/manifest.json +25 -25
- package/dist/templates/workspaces/apps/workspaces/public/robots.txt +3 -3
- package/dist/templates/workspaces/apps/workspaces/src/App.css +38 -38
- package/dist/templates/workspaces/apps/workspaces/src/App.tsx +102 -102
- package/dist/templates/workspaces/apps/workspaces/src/index.css +3 -3
- package/dist/templates/workspaces/apps/workspaces/src/index.tsx +28 -28
- package/dist/templates/workspaces/apps/workspaces/src/logo.svg +7 -7
- package/dist/templates/workspaces/apps/workspaces/src/reportWebVitals.ts +15 -15
- package/dist/templates/workspaces/apps/workspaces/src/setupTests.ts +5 -5
- package/dist/templates/workspaces/apps/workspaces/vite.config.ts +8 -8
- package/dist/templates/workspaces/template.json +12 -12
- package/package.json +83 -83
- package/scripts/copy-assets.js +15 -15
- package/scripts/delete-dist.js +12 -12
- package/scripts/generate-schema.js +50 -50
- package/scripts/handle-gitignore-templates.js +157 -157
- package/dist/templates/tests/tests/interopio-wdio-iocd-service-0.1.0.tgz +0 -0
|
@@ -1,328 +1,328 @@
|
|
|
1
|
-
# Manual Release Build Workflow
|
|
2
|
-
name: Build
|
|
3
|
-
|
|
4
|
-
on:
|
|
5
|
-
workflow_dispatch:
|
|
6
|
-
inputs:
|
|
7
|
-
build_windows:
|
|
8
|
-
description: 'Build for Windows'
|
|
9
|
-
required: true
|
|
10
|
-
type: boolean
|
|
11
|
-
default: true
|
|
12
|
-
build_mac:
|
|
13
|
-
description: 'Build for macOS'
|
|
14
|
-
required: true
|
|
15
|
-
type: boolean
|
|
16
|
-
default: true
|
|
17
|
-
release_notes:
|
|
18
|
-
description: 'Release Notes'
|
|
19
|
-
required: true
|
|
20
|
-
type: string
|
|
21
|
-
default: 'New release'
|
|
22
|
-
prerelease:
|
|
23
|
-
description: 'Mark as prerelease'
|
|
24
|
-
required: true
|
|
25
|
-
type: boolean
|
|
26
|
-
default: true
|
|
27
|
-
|
|
28
|
-
env:
|
|
29
|
-
NODE_VERSION: '24'
|
|
30
|
-
|
|
31
|
-
jobs:
|
|
32
|
-
get-version:
|
|
33
|
-
runs-on: ubuntu-latest
|
|
34
|
-
outputs:
|
|
35
|
-
version: ${{ steps.get_version.outputs.version }}
|
|
36
|
-
steps:
|
|
37
|
-
- name: Checkout code
|
|
38
|
-
uses: actions/checkout@v4
|
|
39
|
-
|
|
40
|
-
- name: Get version from package.json
|
|
41
|
-
id: get_version
|
|
42
|
-
run: |
|
|
43
|
-
VERSION=$(node -p "require('./package.json').version")
|
|
44
|
-
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
45
|
-
echo "Version: $VERSION"
|
|
46
|
-
|
|
47
|
-
build-windows:
|
|
48
|
-
if: ${{ inputs.build_windows }}
|
|
49
|
-
runs-on: windows-latest
|
|
50
|
-
timeout-minutes: 30
|
|
51
|
-
needs: get-version
|
|
52
|
-
env:
|
|
53
|
-
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
54
|
-
|
|
55
|
-
steps:
|
|
56
|
-
- name: Checkout code
|
|
57
|
-
uses: actions/checkout@v4
|
|
58
|
-
|
|
59
|
-
- name: Setup Node.js
|
|
60
|
-
uses: actions/setup-node@v4
|
|
61
|
-
with:
|
|
62
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
63
|
-
cache: 'npm'
|
|
64
|
-
|
|
65
|
-
- name: Install dependencies
|
|
66
|
-
run: npm install
|
|
67
|
-
|
|
68
|
-
- name: Install latest @interopio/iocd-cli
|
|
69
|
-
run: npm install @interopio/iocd-cli@latest
|
|
70
|
-
|
|
71
|
-
- name: Setup project
|
|
72
|
-
env:
|
|
73
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
74
|
-
run: npm run setup
|
|
75
|
-
|
|
76
|
-
- name: Build application
|
|
77
|
-
env:
|
|
78
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
79
|
-
run: npm run build-skip-install
|
|
80
|
-
|
|
81
|
-
- name: Upload Windows artifacts
|
|
82
|
-
uses: actions/upload-artifact@v4
|
|
83
|
-
with:
|
|
84
|
-
name: windows-artifacts
|
|
85
|
-
path: dist/make/**/*
|
|
86
|
-
if-no-files-found: error
|
|
87
|
-
|
|
88
|
-
- name: Collect and upload Windows build logs
|
|
89
|
-
if: always()
|
|
90
|
-
shell: bash
|
|
91
|
-
run: |
|
|
92
|
-
# Get the actual temp directory that Node.js uses
|
|
93
|
-
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
94
|
-
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
95
|
-
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
96
|
-
|
|
97
|
-
# Create logs collection directory
|
|
98
|
-
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
99
|
-
|
|
100
|
-
# Copy from Node.js temp directory (where actual logs are)
|
|
101
|
-
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
102
|
-
echo "Found Node.js temp log directory, contents:"
|
|
103
|
-
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
104
|
-
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
105
|
-
else
|
|
106
|
-
echo "Node.js temp log directory not found"
|
|
107
|
-
fi
|
|
108
|
-
|
|
109
|
-
# Also check GitHub Actions temp directory
|
|
110
|
-
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
111
|
-
echo "Found GitHub Actions temp log directory"
|
|
112
|
-
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
113
|
-
else
|
|
114
|
-
echo "GitHub Actions temp log directory not found"
|
|
115
|
-
fi
|
|
116
|
-
|
|
117
|
-
- name: Upload Windows build logs
|
|
118
|
-
if: always()
|
|
119
|
-
uses: actions/upload-artifact@v4
|
|
120
|
-
with:
|
|
121
|
-
name: windows-build-logs
|
|
122
|
-
path: |
|
|
123
|
-
./all-logs/**/*
|
|
124
|
-
if-no-files-found: warn
|
|
125
|
-
|
|
126
|
-
build-mac:
|
|
127
|
-
if: ${{ inputs.build_mac }}
|
|
128
|
-
runs-on: macos-latest
|
|
129
|
-
timeout-minutes: 30
|
|
130
|
-
needs: get-version
|
|
131
|
-
env:
|
|
132
|
-
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
133
|
-
|
|
134
|
-
steps:
|
|
135
|
-
- name: Checkout code
|
|
136
|
-
uses: actions/checkout@v4
|
|
137
|
-
|
|
138
|
-
- name: Setup Node.js
|
|
139
|
-
uses: actions/setup-node@v4
|
|
140
|
-
with:
|
|
141
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
142
|
-
cache: 'npm'
|
|
143
|
-
|
|
144
|
-
- name: Install dependencies
|
|
145
|
-
run: npm install
|
|
146
|
-
|
|
147
|
-
- name: Install latest @interopio/iocd-cli
|
|
148
|
-
run: npm install @interopio/iocd-cli@latest
|
|
149
|
-
|
|
150
|
-
- name: Setup project
|
|
151
|
-
env:
|
|
152
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
153
|
-
run: npm run setup
|
|
154
|
-
|
|
155
|
-
- name: Setup code-signing (MacOS only)
|
|
156
|
-
uses: apple-actions/import-codesign-certs@v3
|
|
157
|
-
with:
|
|
158
|
-
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
|
|
159
|
-
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
160
|
-
|
|
161
|
-
- name: Build application
|
|
162
|
-
env:
|
|
163
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
164
|
-
# code-signing environment variables
|
|
165
|
-
MAC_CODE_SIGN_TYPE: keychain # keychain will use the certificate installed by apple-actions/import-codesign-certs
|
|
166
|
-
# notarization environment variables
|
|
167
|
-
MAC_NOTARIZATION_TYPE: notarytool
|
|
168
|
-
MAC_NOTARIZATION_APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
169
|
-
MAC_NOTARIZATION_APPLE_ID_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
|
170
|
-
MAC_NOTARIZATION_APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
171
|
-
run: npm run build-skip-install
|
|
172
|
-
|
|
173
|
-
- name: Upload macOS artifacts
|
|
174
|
-
uses: actions/upload-artifact@v4
|
|
175
|
-
with:
|
|
176
|
-
name: mac-artifacts
|
|
177
|
-
path: dist/make/**/*
|
|
178
|
-
if-no-files-found: error
|
|
179
|
-
|
|
180
|
-
- name: Collect and upload macOS build logs
|
|
181
|
-
if: always()
|
|
182
|
-
shell: bash
|
|
183
|
-
run: |
|
|
184
|
-
# Get the actual temp directory that Node.js uses
|
|
185
|
-
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
186
|
-
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
187
|
-
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
188
|
-
|
|
189
|
-
# Create logs collection directory
|
|
190
|
-
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
191
|
-
|
|
192
|
-
# Copy from Node.js temp directory (where actual logs are)
|
|
193
|
-
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
194
|
-
echo "Found Node.js temp log directory, contents:"
|
|
195
|
-
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
196
|
-
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
197
|
-
else
|
|
198
|
-
echo "Node.js temp log directory not found"
|
|
199
|
-
fi
|
|
200
|
-
|
|
201
|
-
# Also check GitHub Actions temp directory
|
|
202
|
-
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
203
|
-
echo "Found GitHub Actions temp log directory"
|
|
204
|
-
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
205
|
-
else
|
|
206
|
-
echo "GitHub Actions temp log directory not found"
|
|
207
|
-
fi
|
|
208
|
-
|
|
209
|
-
- name: Upload macOS build logs
|
|
210
|
-
if: always()
|
|
211
|
-
uses: actions/upload-artifact@v4
|
|
212
|
-
with:
|
|
213
|
-
name: mac-build-logs
|
|
214
|
-
path: |
|
|
215
|
-
./all-logs/**/*
|
|
216
|
-
if-no-files-found: warn
|
|
217
|
-
|
|
218
|
-
create-release:
|
|
219
|
-
runs-on: ubuntu-latest
|
|
220
|
-
needs: [get-version, build-windows, build-mac]
|
|
221
|
-
if: always() && ((!inputs.build_windows || needs.build-windows.result == 'success') && (!inputs.build_mac || needs.build-mac.result == 'success') && (inputs.build_windows || inputs.build_mac))
|
|
222
|
-
|
|
223
|
-
steps:
|
|
224
|
-
- name: Checkout code
|
|
225
|
-
uses: actions/checkout@v4
|
|
226
|
-
|
|
227
|
-
- name: Download Windows artifacts
|
|
228
|
-
if: ${{ inputs.build_windows && needs.build-windows.result == 'success' }}
|
|
229
|
-
uses: actions/download-artifact@v4
|
|
230
|
-
with:
|
|
231
|
-
name: windows-artifacts
|
|
232
|
-
path: ./artifacts/windows/
|
|
233
|
-
|
|
234
|
-
- name: Download macOS artifacts
|
|
235
|
-
if: ${{ inputs.build_mac && needs.build-mac.result == 'success' }}
|
|
236
|
-
uses: actions/download-artifact@v4
|
|
237
|
-
with:
|
|
238
|
-
name: mac-artifacts
|
|
239
|
-
path: ./artifacts/mac/
|
|
240
|
-
|
|
241
|
-
- name: List all artifacts
|
|
242
|
-
run: |
|
|
243
|
-
echo "All downloaded artifacts:"
|
|
244
|
-
find ./artifacts -type f -name "*.dmg" -o -name "*.zip" -o -name "*.exe" 2>/dev/null || echo "No artifacts found"
|
|
245
|
-
|
|
246
|
-
- name: Delete existing release if exists
|
|
247
|
-
env:
|
|
248
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
249
|
-
run: |
|
|
250
|
-
VERSION="${{ needs.get-version.outputs.version }}"
|
|
251
|
-
# Try to delete existing release and tag
|
|
252
|
-
gh release delete "v$VERSION" --yes || echo "Release v$VERSION does not exist"
|
|
253
|
-
git push --delete origin "v$VERSION" || echo "Tag v$VERSION does not exist"
|
|
254
|
-
continue-on-error: true
|
|
255
|
-
|
|
256
|
-
- name: Create Release
|
|
257
|
-
uses: softprops/action-gh-release@v2
|
|
258
|
-
with:
|
|
259
|
-
tag_name: v${{ needs.get-version.outputs.version }}
|
|
260
|
-
name: Release v${{ needs.get-version.outputs.version }}
|
|
261
|
-
body: ${{ inputs.release_notes }}
|
|
262
|
-
draft: false
|
|
263
|
-
prerelease: ${{ inputs.prerelease }}
|
|
264
|
-
files: |
|
|
265
|
-
./artifacts/**/*.dmg
|
|
266
|
-
./artifacts/**/*.zip
|
|
267
|
-
./artifacts/**/*.exe
|
|
268
|
-
env:
|
|
269
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
270
|
-
|
|
271
|
-
summary:
|
|
272
|
-
runs-on: ubuntu-latest
|
|
273
|
-
needs: [get-version, build-windows, build-mac, create-release]
|
|
274
|
-
if: always()
|
|
275
|
-
|
|
276
|
-
steps:
|
|
277
|
-
- name: Generate Summary
|
|
278
|
-
run: |
|
|
279
|
-
echo "# Workflow Summary" >> $GITHUB_STEP_SUMMARY
|
|
280
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
281
|
-
echo "## Build Results" >> $GITHUB_STEP_SUMMARY
|
|
282
|
-
echo "- **Version**: v${{ needs.get-version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
|
283
|
-
|
|
284
|
-
# Windows Build Status
|
|
285
|
-
if [[ "${{ inputs.build_windows }}" == "true" ]]; then
|
|
286
|
-
if [[ "${{ needs.build-windows.result }}" == "success" ]]; then
|
|
287
|
-
echo "- **Windows Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
288
|
-
elif [[ "${{ needs.build-windows.result }}" == "failure" ]]; then
|
|
289
|
-
echo "- **Windows Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
290
|
-
else
|
|
291
|
-
echo "- **Windows Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
292
|
-
fi
|
|
293
|
-
else
|
|
294
|
-
echo "- **Windows Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
295
|
-
fi
|
|
296
|
-
|
|
297
|
-
# macOS Build Status
|
|
298
|
-
if [[ "${{ inputs.build_mac }}" == "true" ]]; then
|
|
299
|
-
if [[ "${{ needs.build-mac.result }}" == "success" ]]; then
|
|
300
|
-
echo "- **macOS Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
301
|
-
elif [[ "${{ needs.build-mac.result }}" == "failure" ]]; then
|
|
302
|
-
echo "- **macOS Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
303
|
-
else
|
|
304
|
-
echo "- **macOS Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
305
|
-
fi
|
|
306
|
-
else
|
|
307
|
-
echo "- **macOS Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
308
|
-
fi
|
|
309
|
-
|
|
310
|
-
# Release Status
|
|
311
|
-
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
312
|
-
echo "- **Release Created**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
313
|
-
elif [[ "${{ needs.create-release.result }}" == "failure" ]]; then
|
|
314
|
-
echo "- **Release Created**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
315
|
-
else
|
|
316
|
-
echo "- **Release Created**: ⏭️ Skipped (builds failed/cancelled)" >> $GITHUB_STEP_SUMMARY
|
|
317
|
-
fi
|
|
318
|
-
|
|
319
|
-
echo "- **Prerelease**: ${{ inputs.prerelease && '✅ Yes' || '❌ No' }}" >> $GITHUB_STEP_SUMMARY
|
|
320
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
321
|
-
echo "## Release Notes" >> $GITHUB_STEP_SUMMARY
|
|
322
|
-
echo "${{ inputs.release_notes }}" >> $GITHUB_STEP_SUMMARY
|
|
323
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
324
|
-
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
325
|
-
echo "🎉 **Release successfully created**: [v${{ needs.get-version.outputs.version }}](https://github.com/${{ github.repository }}/releases/tag/v${{ needs.get-version.outputs.version }})" >> $GITHUB_STEP_SUMMARY
|
|
326
|
-
else
|
|
327
|
-
echo "⚠️ **Release creation failed or was skipped**" >> $GITHUB_STEP_SUMMARY
|
|
1
|
+
# Manual Release Build Workflow
|
|
2
|
+
name: Build
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
workflow_dispatch:
|
|
6
|
+
inputs:
|
|
7
|
+
build_windows:
|
|
8
|
+
description: 'Build for Windows'
|
|
9
|
+
required: true
|
|
10
|
+
type: boolean
|
|
11
|
+
default: true
|
|
12
|
+
build_mac:
|
|
13
|
+
description: 'Build for macOS'
|
|
14
|
+
required: true
|
|
15
|
+
type: boolean
|
|
16
|
+
default: true
|
|
17
|
+
release_notes:
|
|
18
|
+
description: 'Release Notes'
|
|
19
|
+
required: true
|
|
20
|
+
type: string
|
|
21
|
+
default: 'New release'
|
|
22
|
+
prerelease:
|
|
23
|
+
description: 'Mark as prerelease'
|
|
24
|
+
required: true
|
|
25
|
+
type: boolean
|
|
26
|
+
default: true
|
|
27
|
+
|
|
28
|
+
env:
|
|
29
|
+
NODE_VERSION: '24'
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
get-version:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
outputs:
|
|
35
|
+
version: ${{ steps.get_version.outputs.version }}
|
|
36
|
+
steps:
|
|
37
|
+
- name: Checkout code
|
|
38
|
+
uses: actions/checkout@v4
|
|
39
|
+
|
|
40
|
+
- name: Get version from package.json
|
|
41
|
+
id: get_version
|
|
42
|
+
run: |
|
|
43
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
44
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
45
|
+
echo "Version: $VERSION"
|
|
46
|
+
|
|
47
|
+
build-windows:
|
|
48
|
+
if: ${{ inputs.build_windows }}
|
|
49
|
+
runs-on: windows-latest
|
|
50
|
+
timeout-minutes: 30
|
|
51
|
+
needs: get-version
|
|
52
|
+
env:
|
|
53
|
+
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
54
|
+
|
|
55
|
+
steps:
|
|
56
|
+
- name: Checkout code
|
|
57
|
+
uses: actions/checkout@v4
|
|
58
|
+
|
|
59
|
+
- name: Setup Node.js
|
|
60
|
+
uses: actions/setup-node@v4
|
|
61
|
+
with:
|
|
62
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
63
|
+
cache: 'npm'
|
|
64
|
+
|
|
65
|
+
- name: Install dependencies
|
|
66
|
+
run: npm install
|
|
67
|
+
|
|
68
|
+
- name: Install latest @interopio/iocd-cli
|
|
69
|
+
run: npm install @interopio/iocd-cli@latest
|
|
70
|
+
|
|
71
|
+
- name: Setup project
|
|
72
|
+
env:
|
|
73
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
74
|
+
run: npm run setup
|
|
75
|
+
|
|
76
|
+
- name: Build application
|
|
77
|
+
env:
|
|
78
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
79
|
+
run: npm run build-skip-install
|
|
80
|
+
|
|
81
|
+
- name: Upload Windows artifacts
|
|
82
|
+
uses: actions/upload-artifact@v4
|
|
83
|
+
with:
|
|
84
|
+
name: windows-artifacts
|
|
85
|
+
path: dist/make/**/*
|
|
86
|
+
if-no-files-found: error
|
|
87
|
+
|
|
88
|
+
- name: Collect and upload Windows build logs
|
|
89
|
+
if: always()
|
|
90
|
+
shell: bash
|
|
91
|
+
run: |
|
|
92
|
+
# Get the actual temp directory that Node.js uses
|
|
93
|
+
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
94
|
+
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
95
|
+
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
96
|
+
|
|
97
|
+
# Create logs collection directory
|
|
98
|
+
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
99
|
+
|
|
100
|
+
# Copy from Node.js temp directory (where actual logs are)
|
|
101
|
+
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
102
|
+
echo "Found Node.js temp log directory, contents:"
|
|
103
|
+
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
104
|
+
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
105
|
+
else
|
|
106
|
+
echo "Node.js temp log directory not found"
|
|
107
|
+
fi
|
|
108
|
+
|
|
109
|
+
# Also check GitHub Actions temp directory
|
|
110
|
+
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
111
|
+
echo "Found GitHub Actions temp log directory"
|
|
112
|
+
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
113
|
+
else
|
|
114
|
+
echo "GitHub Actions temp log directory not found"
|
|
115
|
+
fi
|
|
116
|
+
|
|
117
|
+
- name: Upload Windows build logs
|
|
118
|
+
if: always()
|
|
119
|
+
uses: actions/upload-artifact@v4
|
|
120
|
+
with:
|
|
121
|
+
name: windows-build-logs
|
|
122
|
+
path: |
|
|
123
|
+
./all-logs/**/*
|
|
124
|
+
if-no-files-found: warn
|
|
125
|
+
|
|
126
|
+
build-mac:
|
|
127
|
+
if: ${{ inputs.build_mac }}
|
|
128
|
+
runs-on: macos-latest
|
|
129
|
+
timeout-minutes: 30
|
|
130
|
+
needs: get-version
|
|
131
|
+
env:
|
|
132
|
+
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
133
|
+
|
|
134
|
+
steps:
|
|
135
|
+
- name: Checkout code
|
|
136
|
+
uses: actions/checkout@v4
|
|
137
|
+
|
|
138
|
+
- name: Setup Node.js
|
|
139
|
+
uses: actions/setup-node@v4
|
|
140
|
+
with:
|
|
141
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
142
|
+
cache: 'npm'
|
|
143
|
+
|
|
144
|
+
- name: Install dependencies
|
|
145
|
+
run: npm install
|
|
146
|
+
|
|
147
|
+
- name: Install latest @interopio/iocd-cli
|
|
148
|
+
run: npm install @interopio/iocd-cli@latest
|
|
149
|
+
|
|
150
|
+
- name: Setup project
|
|
151
|
+
env:
|
|
152
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
153
|
+
run: npm run setup
|
|
154
|
+
|
|
155
|
+
- name: Setup code-signing (MacOS only)
|
|
156
|
+
uses: apple-actions/import-codesign-certs@v3
|
|
157
|
+
with:
|
|
158
|
+
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
|
|
159
|
+
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
160
|
+
|
|
161
|
+
- name: Build application
|
|
162
|
+
env:
|
|
163
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
164
|
+
# code-signing environment variables
|
|
165
|
+
MAC_CODE_SIGN_TYPE: keychain # keychain will use the certificate installed by apple-actions/import-codesign-certs
|
|
166
|
+
# notarization environment variables
|
|
167
|
+
MAC_NOTARIZATION_TYPE: notarytool
|
|
168
|
+
MAC_NOTARIZATION_APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
169
|
+
MAC_NOTARIZATION_APPLE_ID_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
|
170
|
+
MAC_NOTARIZATION_APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
171
|
+
run: npm run build-skip-install
|
|
172
|
+
|
|
173
|
+
- name: Upload macOS artifacts
|
|
174
|
+
uses: actions/upload-artifact@v4
|
|
175
|
+
with:
|
|
176
|
+
name: mac-artifacts
|
|
177
|
+
path: dist/make/**/*
|
|
178
|
+
if-no-files-found: error
|
|
179
|
+
|
|
180
|
+
- name: Collect and upload macOS build logs
|
|
181
|
+
if: always()
|
|
182
|
+
shell: bash
|
|
183
|
+
run: |
|
|
184
|
+
# Get the actual temp directory that Node.js uses
|
|
185
|
+
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
186
|
+
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
187
|
+
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
188
|
+
|
|
189
|
+
# Create logs collection directory
|
|
190
|
+
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
191
|
+
|
|
192
|
+
# Copy from Node.js temp directory (where actual logs are)
|
|
193
|
+
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
194
|
+
echo "Found Node.js temp log directory, contents:"
|
|
195
|
+
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
196
|
+
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
197
|
+
else
|
|
198
|
+
echo "Node.js temp log directory not found"
|
|
199
|
+
fi
|
|
200
|
+
|
|
201
|
+
# Also check GitHub Actions temp directory
|
|
202
|
+
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
203
|
+
echo "Found GitHub Actions temp log directory"
|
|
204
|
+
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
205
|
+
else
|
|
206
|
+
echo "GitHub Actions temp log directory not found"
|
|
207
|
+
fi
|
|
208
|
+
|
|
209
|
+
- name: Upload macOS build logs
|
|
210
|
+
if: always()
|
|
211
|
+
uses: actions/upload-artifact@v4
|
|
212
|
+
with:
|
|
213
|
+
name: mac-build-logs
|
|
214
|
+
path: |
|
|
215
|
+
./all-logs/**/*
|
|
216
|
+
if-no-files-found: warn
|
|
217
|
+
|
|
218
|
+
create-release:
|
|
219
|
+
runs-on: ubuntu-latest
|
|
220
|
+
needs: [get-version, build-windows, build-mac]
|
|
221
|
+
if: always() && ((!inputs.build_windows || needs.build-windows.result == 'success') && (!inputs.build_mac || needs.build-mac.result == 'success') && (inputs.build_windows || inputs.build_mac))
|
|
222
|
+
|
|
223
|
+
steps:
|
|
224
|
+
- name: Checkout code
|
|
225
|
+
uses: actions/checkout@v4
|
|
226
|
+
|
|
227
|
+
- name: Download Windows artifacts
|
|
228
|
+
if: ${{ inputs.build_windows && needs.build-windows.result == 'success' }}
|
|
229
|
+
uses: actions/download-artifact@v4
|
|
230
|
+
with:
|
|
231
|
+
name: windows-artifacts
|
|
232
|
+
path: ./artifacts/windows/
|
|
233
|
+
|
|
234
|
+
- name: Download macOS artifacts
|
|
235
|
+
if: ${{ inputs.build_mac && needs.build-mac.result == 'success' }}
|
|
236
|
+
uses: actions/download-artifact@v4
|
|
237
|
+
with:
|
|
238
|
+
name: mac-artifacts
|
|
239
|
+
path: ./artifacts/mac/
|
|
240
|
+
|
|
241
|
+
- name: List all artifacts
|
|
242
|
+
run: |
|
|
243
|
+
echo "All downloaded artifacts:"
|
|
244
|
+
find ./artifacts -type f -name "*.dmg" -o -name "*.zip" -o -name "*.exe" 2>/dev/null || echo "No artifacts found"
|
|
245
|
+
|
|
246
|
+
- name: Delete existing release if exists
|
|
247
|
+
env:
|
|
248
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
249
|
+
run: |
|
|
250
|
+
VERSION="${{ needs.get-version.outputs.version }}"
|
|
251
|
+
# Try to delete existing release and tag
|
|
252
|
+
gh release delete "v$VERSION" --yes || echo "Release v$VERSION does not exist"
|
|
253
|
+
git push --delete origin "v$VERSION" || echo "Tag v$VERSION does not exist"
|
|
254
|
+
continue-on-error: true
|
|
255
|
+
|
|
256
|
+
- name: Create Release
|
|
257
|
+
uses: softprops/action-gh-release@v2
|
|
258
|
+
with:
|
|
259
|
+
tag_name: v${{ needs.get-version.outputs.version }}
|
|
260
|
+
name: Release v${{ needs.get-version.outputs.version }}
|
|
261
|
+
body: ${{ inputs.release_notes }}
|
|
262
|
+
draft: false
|
|
263
|
+
prerelease: ${{ inputs.prerelease }}
|
|
264
|
+
files: |
|
|
265
|
+
./artifacts/**/*.dmg
|
|
266
|
+
./artifacts/**/*.zip
|
|
267
|
+
./artifacts/**/*.exe
|
|
268
|
+
env:
|
|
269
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
270
|
+
|
|
271
|
+
summary:
|
|
272
|
+
runs-on: ubuntu-latest
|
|
273
|
+
needs: [get-version, build-windows, build-mac, create-release]
|
|
274
|
+
if: always()
|
|
275
|
+
|
|
276
|
+
steps:
|
|
277
|
+
- name: Generate Summary
|
|
278
|
+
run: |
|
|
279
|
+
echo "# Workflow Summary" >> $GITHUB_STEP_SUMMARY
|
|
280
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
281
|
+
echo "## Build Results" >> $GITHUB_STEP_SUMMARY
|
|
282
|
+
echo "- **Version**: v${{ needs.get-version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
|
283
|
+
|
|
284
|
+
# Windows Build Status
|
|
285
|
+
if [[ "${{ inputs.build_windows }}" == "true" ]]; then
|
|
286
|
+
if [[ "${{ needs.build-windows.result }}" == "success" ]]; then
|
|
287
|
+
echo "- **Windows Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
288
|
+
elif [[ "${{ needs.build-windows.result }}" == "failure" ]]; then
|
|
289
|
+
echo "- **Windows Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
290
|
+
else
|
|
291
|
+
echo "- **Windows Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
292
|
+
fi
|
|
293
|
+
else
|
|
294
|
+
echo "- **Windows Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
295
|
+
fi
|
|
296
|
+
|
|
297
|
+
# macOS Build Status
|
|
298
|
+
if [[ "${{ inputs.build_mac }}" == "true" ]]; then
|
|
299
|
+
if [[ "${{ needs.build-mac.result }}" == "success" ]]; then
|
|
300
|
+
echo "- **macOS Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
301
|
+
elif [[ "${{ needs.build-mac.result }}" == "failure" ]]; then
|
|
302
|
+
echo "- **macOS Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
303
|
+
else
|
|
304
|
+
echo "- **macOS Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
305
|
+
fi
|
|
306
|
+
else
|
|
307
|
+
echo "- **macOS Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
308
|
+
fi
|
|
309
|
+
|
|
310
|
+
# Release Status
|
|
311
|
+
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
312
|
+
echo "- **Release Created**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
313
|
+
elif [[ "${{ needs.create-release.result }}" == "failure" ]]; then
|
|
314
|
+
echo "- **Release Created**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
315
|
+
else
|
|
316
|
+
echo "- **Release Created**: ⏭️ Skipped (builds failed/cancelled)" >> $GITHUB_STEP_SUMMARY
|
|
317
|
+
fi
|
|
318
|
+
|
|
319
|
+
echo "- **Prerelease**: ${{ inputs.prerelease && '✅ Yes' || '❌ No' }}" >> $GITHUB_STEP_SUMMARY
|
|
320
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
321
|
+
echo "## Release Notes" >> $GITHUB_STEP_SUMMARY
|
|
322
|
+
echo "${{ inputs.release_notes }}" >> $GITHUB_STEP_SUMMARY
|
|
323
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
324
|
+
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
325
|
+
echo "🎉 **Release successfully created**: [v${{ needs.get-version.outputs.version }}](https://github.com/${{ github.repository }}/releases/tag/v${{ needs.get-version.outputs.version }})" >> $GITHUB_STEP_SUMMARY
|
|
326
|
+
else
|
|
327
|
+
echo "⚠️ **Release creation failed or was skipped**" >> $GITHUB_STEP_SUMMARY
|
|
328
328
|
fi
|