@interopio/iocd-cli 0.0.39 → 0.0.41
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 +782 -779
- package/dist/services/installer/electronForge.js +7 -5
- package/dist/services/installer/electronForge.js.map +1 -1
- package/dist/services/installer/installer.service.js +7 -0
- package/dist/services/installer/installer.service.js.map +1 -1
- package/dist/services/installer/macOS.helper.js +0 -1
- package/dist/services/installer/macOS.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/.github/actions/setup-smctl/action.yml +121 -121
- package/dist/templates/ioconnect-desktop/.github/workflows/build.yml +395 -395
- package/dist/templates/ioconnect-desktop/.gitignore.template +15 -15
- package/dist/templates/ioconnect-desktop/README.md +782 -779
- package/dist/templates/ioconnect-desktop/assets/install.gif +0 -0
- package/dist/templates/ioconnect-desktop/config/forge.config.js +38 -59
- package/dist/templates/ioconnect-desktop/config/iocd.cli.config.json +16 -16
- 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 +33 -33
- 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 +7289 -7289
- 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 +19 -19
- package/scripts/delete-dist.js +12 -12
- package/scripts/generate-schema.js +50 -50
- package/scripts/handle-gitignore-templates.js +157 -157
|
@@ -1,396 +1,396 @@
|
|
|
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
|
-
windows_sign:
|
|
18
|
-
description: 'Windows Code Signing Method'
|
|
19
|
-
required: true
|
|
20
|
-
type: choice
|
|
21
|
-
default: 'off'
|
|
22
|
-
options:
|
|
23
|
-
- 'off'
|
|
24
|
-
- 'signtool'
|
|
25
|
-
release_notes:
|
|
26
|
-
description: 'Release Notes'
|
|
27
|
-
required: true
|
|
28
|
-
type: string
|
|
29
|
-
default: 'New release'
|
|
30
|
-
prerelease:
|
|
31
|
-
description: 'Mark as prerelease'
|
|
32
|
-
required: true
|
|
33
|
-
type: boolean
|
|
34
|
-
default: true
|
|
35
|
-
|
|
36
|
-
env:
|
|
37
|
-
NODE_VERSION: '24'
|
|
38
|
-
|
|
39
|
-
jobs:
|
|
40
|
-
get-version:
|
|
41
|
-
runs-on: ubuntu-latest
|
|
42
|
-
outputs:
|
|
43
|
-
version: ${{ steps.get_version.outputs.version }}
|
|
44
|
-
steps:
|
|
45
|
-
- name: Checkout code
|
|
46
|
-
uses: actions/checkout@v4
|
|
47
|
-
|
|
48
|
-
- name: Get version from package.json
|
|
49
|
-
id: get_version
|
|
50
|
-
run: |
|
|
51
|
-
VERSION=$(node -p "require('./package.json').version")
|
|
52
|
-
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
53
|
-
echo "Version: $VERSION"
|
|
54
|
-
|
|
55
|
-
build-windows:
|
|
56
|
-
if: ${{ inputs.build_windows }}
|
|
57
|
-
runs-on: windows-latest
|
|
58
|
-
timeout-minutes: 30
|
|
59
|
-
needs: get-version
|
|
60
|
-
env:
|
|
61
|
-
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
62
|
-
WIN_CODE_SIGN_TYPE: ${{ inputs.windows_sign }}
|
|
63
|
-
WIN_PFX_PATH: ${{ secrets.WIN_PFX_PATH }}
|
|
64
|
-
WIN_PFX_PASS: ${{ secrets.WIN_PFX_PASS }}
|
|
65
|
-
SM_API_KEY: ${{ secrets.SM_API_KEY }}
|
|
66
|
-
SM_CLIENT_CERT_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PASSWORD }}
|
|
67
|
-
SM_HOST: ${{ secrets.SM_HOST }}
|
|
68
|
-
steps:
|
|
69
|
-
- name: Checkout code
|
|
70
|
-
uses: actions/checkout@v4
|
|
71
|
-
|
|
72
|
-
- name: Setup Node.js
|
|
73
|
-
uses: actions/setup-node@v4
|
|
74
|
-
with:
|
|
75
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
76
|
-
cache: 'npm'
|
|
77
|
-
|
|
78
|
-
- name: Install dependencies
|
|
79
|
-
run: npm install
|
|
80
|
-
|
|
81
|
-
- name: Install latest @interopio/iocd-cli
|
|
82
|
-
run: npm install @interopio/iocd-cli@latest
|
|
83
|
-
|
|
84
|
-
- name: Setup project
|
|
85
|
-
env:
|
|
86
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
87
|
-
run: npm run setup
|
|
88
|
-
|
|
89
|
-
# This step setup digicert
|
|
90
|
-
- name: Setup SMCTL Code Signing
|
|
91
|
-
if: ${{ env.SM_API_KEY != '' }}
|
|
92
|
-
id: setup-smctl
|
|
93
|
-
uses: ./.github/actions/setup-smctl
|
|
94
|
-
with:
|
|
95
|
-
api-key: ${{ secrets.SM_API_KEY }}
|
|
96
|
-
client-cert-b64: ${{ secrets.SM_CLIENT_CERT_FILE }}
|
|
97
|
-
client-cert-password: ${{ secrets.SM_CLIENT_CERT_PASSWORD }}
|
|
98
|
-
keypair-name: ${{ secrets.SM_KEYPAIR_NAME }}
|
|
99
|
-
host: ${{ secrets.SM_HOST }}
|
|
100
|
-
|
|
101
|
-
- name: Set certificate file path
|
|
102
|
-
if: ${{ env.SM_API_KEY != '' }}
|
|
103
|
-
shell: cmd
|
|
104
|
-
run: echo SM_CLIENT_CERT_FILE=${{ steps.setup-smctl.outputs.cert-file-path }} >> %GITHUB_ENV%
|
|
105
|
-
|
|
106
|
-
- name: SMCTL Health Check
|
|
107
|
-
if: ${{ env.SM_API_KEY != '' }}
|
|
108
|
-
shell: cmd
|
|
109
|
-
run: smctl healthcheck
|
|
110
|
-
|
|
111
|
-
- name: Build application
|
|
112
|
-
env:
|
|
113
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
114
|
-
WIN_CERT_SHA1: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }}
|
|
115
|
-
shell: pwsh
|
|
116
|
-
run: |
|
|
117
|
-
# Add SMCTL to PATH
|
|
118
|
-
$env:PATH = "C:\Program Files\DigiCert\DigiCert Keylocker Tools;$env:PATH"
|
|
119
|
-
|
|
120
|
-
# Find and add signtool to PATH dynamically
|
|
121
|
-
$sdkPath = "C:\Program Files (x86)\Windows Kits\10\bin"
|
|
122
|
-
if (Test-Path $sdkPath) {
|
|
123
|
-
$signtoolPath = Get-ChildItem -Path $sdkPath -Filter "signtool.exe" -Recurse -ErrorAction SilentlyContinue |
|
|
124
|
-
Where-Object { $_.FullName -match "\\x64\\signtool.exe$" } |
|
|
125
|
-
Select-Object -First 1 -ExpandProperty Directory
|
|
126
|
-
if ($signtoolPath) {
|
|
127
|
-
Write-Host "Found signtool at: $signtoolPath"
|
|
128
|
-
$env:PATH = "$signtoolPath;$env:PATH"
|
|
129
|
-
} else {
|
|
130
|
-
Write-Host "Warning: signtool.exe not found in Windows SDK"
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
npm run build-skip-install
|
|
135
|
-
|
|
136
|
-
- name: Upload Windows artifacts
|
|
137
|
-
uses: actions/upload-artifact@v4
|
|
138
|
-
with:
|
|
139
|
-
name: windows-artifacts
|
|
140
|
-
path: dist/make/**/*
|
|
141
|
-
if-no-files-found: error
|
|
142
|
-
|
|
143
|
-
- name: Gather logs
|
|
144
|
-
if: always()
|
|
145
|
-
shell: bash
|
|
146
|
-
run: |
|
|
147
|
-
# Get the actual temp directory that Node.js uses
|
|
148
|
-
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
149
|
-
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
150
|
-
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
151
|
-
|
|
152
|
-
# Create logs collection directory
|
|
153
|
-
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
154
|
-
|
|
155
|
-
# Copy from Node.js temp directory (where actual logs are)
|
|
156
|
-
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
157
|
-
echo "Found Node.js temp log directory, contents:"
|
|
158
|
-
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
159
|
-
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
160
|
-
else
|
|
161
|
-
echo "Node.js temp log directory not found"
|
|
162
|
-
fi
|
|
163
|
-
|
|
164
|
-
# Also check GitHub Actions temp directory
|
|
165
|
-
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
166
|
-
echo "Found GitHub Actions temp log directory"
|
|
167
|
-
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
168
|
-
else
|
|
169
|
-
echo "GitHub Actions temp log directory not found"
|
|
170
|
-
fi
|
|
171
|
-
|
|
172
|
-
- name: Upload Windows build logs
|
|
173
|
-
if: always()
|
|
174
|
-
uses: actions/upload-artifact@v4
|
|
175
|
-
with:
|
|
176
|
-
name: windows-build-logs
|
|
177
|
-
path: |
|
|
178
|
-
./all-logs/**/*
|
|
179
|
-
if-no-files-found: warn
|
|
180
|
-
|
|
181
|
-
build-mac:
|
|
182
|
-
if: ${{ inputs.build_mac }}
|
|
183
|
-
runs-on: macos-latest
|
|
184
|
-
timeout-minutes: 30
|
|
185
|
-
needs: get-version
|
|
186
|
-
env:
|
|
187
|
-
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
188
|
-
|
|
189
|
-
steps:
|
|
190
|
-
- name: Checkout code
|
|
191
|
-
uses: actions/checkout@v4
|
|
192
|
-
|
|
193
|
-
- name: Setup Node.js
|
|
194
|
-
uses: actions/setup-node@v4
|
|
195
|
-
with:
|
|
196
|
-
node-version: ${{ env.NODE_VERSION }}
|
|
197
|
-
cache: 'npm'
|
|
198
|
-
|
|
199
|
-
- name: Install dependencies
|
|
200
|
-
run: npm install
|
|
201
|
-
|
|
202
|
-
- name: Install latest @interopio/iocd-cli
|
|
203
|
-
run: npm install @interopio/iocd-cli@latest
|
|
204
|
-
|
|
205
|
-
- name: Setup project
|
|
206
|
-
env:
|
|
207
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
208
|
-
run: npm run setup
|
|
209
|
-
|
|
210
|
-
- name: Setup code-signing (MacOS only)
|
|
211
|
-
uses: apple-actions/import-codesign-certs@v3
|
|
212
|
-
with:
|
|
213
|
-
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
|
|
214
|
-
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
215
|
-
|
|
216
|
-
- name: Build application
|
|
217
|
-
env:
|
|
218
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
219
|
-
APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
220
|
-
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
|
221
|
-
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
222
|
-
run: npm run build-skip-install
|
|
223
|
-
|
|
224
|
-
- name: Upload macOS artifacts
|
|
225
|
-
uses: actions/upload-artifact@v4
|
|
226
|
-
with:
|
|
227
|
-
name: mac-artifacts
|
|
228
|
-
path: dist/make/**/*
|
|
229
|
-
if-no-files-found: error
|
|
230
|
-
|
|
231
|
-
- name: Collect and upload macOS build logs
|
|
232
|
-
if: always()
|
|
233
|
-
shell: bash
|
|
234
|
-
run: |
|
|
235
|
-
# Get the actual temp directory that Node.js uses
|
|
236
|
-
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
237
|
-
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
238
|
-
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
239
|
-
|
|
240
|
-
# Create logs collection directory
|
|
241
|
-
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
242
|
-
|
|
243
|
-
# Copy from Node.js temp directory (where actual logs are)
|
|
244
|
-
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
245
|
-
echo "Found Node.js temp log directory, contents:"
|
|
246
|
-
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
247
|
-
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
248
|
-
else
|
|
249
|
-
echo "Node.js temp log directory not found"
|
|
250
|
-
fi
|
|
251
|
-
|
|
252
|
-
# Also check GitHub Actions temp directory
|
|
253
|
-
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
254
|
-
echo "Found GitHub Actions temp log directory"
|
|
255
|
-
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
256
|
-
else
|
|
257
|
-
echo "GitHub Actions temp log directory not found"
|
|
258
|
-
fi
|
|
259
|
-
|
|
260
|
-
- name: Upload macOS build logs
|
|
261
|
-
if: always()
|
|
262
|
-
uses: actions/upload-artifact@v4
|
|
263
|
-
with:
|
|
264
|
-
name: mac-build-logs
|
|
265
|
-
path: |
|
|
266
|
-
./all-logs/**/*
|
|
267
|
-
if-no-files-found: warn
|
|
268
|
-
|
|
269
|
-
create-release:
|
|
270
|
-
runs-on: ubuntu-latest
|
|
271
|
-
needs: [get-version, build-windows, build-mac]
|
|
272
|
-
if: always() && ((!inputs.build_windows || needs.build-windows.result == 'success') && (!inputs.build_mac || needs.build-mac.result == 'success') && (inputs.build_windows || inputs.build_mac))
|
|
273
|
-
|
|
274
|
-
steps:
|
|
275
|
-
- name: Checkout code
|
|
276
|
-
uses: actions/checkout@v4
|
|
277
|
-
|
|
278
|
-
- name: Download Windows artifacts
|
|
279
|
-
if: ${{ inputs.build_windows && needs.build-windows.result == 'success' }}
|
|
280
|
-
uses: actions/download-artifact@v4
|
|
281
|
-
with:
|
|
282
|
-
name: windows-artifacts
|
|
283
|
-
path: ./artifacts/windows/
|
|
284
|
-
|
|
285
|
-
- name: Download macOS artifacts
|
|
286
|
-
if: ${{ inputs.build_mac && needs.build-mac.result == 'success' }}
|
|
287
|
-
uses: actions/download-artifact@v4
|
|
288
|
-
with:
|
|
289
|
-
name: mac-artifacts
|
|
290
|
-
path: ./artifacts/mac/
|
|
291
|
-
|
|
292
|
-
- name: List all artifacts
|
|
293
|
-
run: |
|
|
294
|
-
echo "All downloaded artifacts:"
|
|
295
|
-
find ./artifacts -type f -name "*.dmg" -o -name "*.zip" -o -name "*.exe" 2>/dev/null || echo "No artifacts found"
|
|
296
|
-
|
|
297
|
-
- name: Delete existing release if exists
|
|
298
|
-
env:
|
|
299
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
300
|
-
run: |
|
|
301
|
-
VERSION="${{ needs.get-version.outputs.version }}"
|
|
302
|
-
echo "Checking for existing release v$VERSION..."
|
|
303
|
-
|
|
304
|
-
# Try to delete existing release first
|
|
305
|
-
if gh release view "v$VERSION" >/dev/null 2>&1; then
|
|
306
|
-
echo "Found existing release v$VERSION, deleting..."
|
|
307
|
-
gh release delete "v$VERSION" --yes
|
|
308
|
-
echo "Release v$VERSION deleted"
|
|
309
|
-
else
|
|
310
|
-
echo "No existing release v$VERSION found"
|
|
311
|
-
fi
|
|
312
|
-
|
|
313
|
-
# Try to delete existing tag
|
|
314
|
-
if git ls-remote --tags origin | grep -q "refs/tags/v$VERSION$"; then
|
|
315
|
-
echo "Found existing tag v$VERSION, deleting..."
|
|
316
|
-
git push --delete origin "v$VERSION"
|
|
317
|
-
echo "Tag v$VERSION deleted"
|
|
318
|
-
else
|
|
319
|
-
echo "No existing tag v$VERSION found"
|
|
320
|
-
fi
|
|
321
|
-
continue-on-error: true
|
|
322
|
-
|
|
323
|
-
- name: Create Release
|
|
324
|
-
uses: softprops/action-gh-release@v2
|
|
325
|
-
with:
|
|
326
|
-
tag_name: v${{ needs.get-version.outputs.version }}
|
|
327
|
-
name: Release v${{ needs.get-version.outputs.version }}
|
|
328
|
-
body: ${{ inputs.release_notes }}
|
|
329
|
-
draft: false
|
|
330
|
-
prerelease: ${{ inputs.prerelease }}
|
|
331
|
-
files: |
|
|
332
|
-
./artifacts/**/*.dmg
|
|
333
|
-
./artifacts/**/*.zip
|
|
334
|
-
./artifacts/**/*.exe
|
|
335
|
-
env:
|
|
336
|
-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
337
|
-
|
|
338
|
-
summary:
|
|
339
|
-
runs-on: ubuntu-latest
|
|
340
|
-
needs: [get-version, build-windows, build-mac, create-release]
|
|
341
|
-
if: always()
|
|
342
|
-
|
|
343
|
-
steps:
|
|
344
|
-
- name: Generate Summary
|
|
345
|
-
run: |
|
|
346
|
-
echo "# Workflow Summary" >> $GITHUB_STEP_SUMMARY
|
|
347
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
348
|
-
echo "## Build Results" >> $GITHUB_STEP_SUMMARY
|
|
349
|
-
echo "- **Version**: v${{ needs.get-version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
|
350
|
-
echo "- **Windows Signing**: ${{ inputs.windows_sign }}" >> $GITHUB_STEP_SUMMARY
|
|
351
|
-
|
|
352
|
-
# Windows Build Status
|
|
353
|
-
if [[ "${{ inputs.build_windows }}" == "true" ]]; then
|
|
354
|
-
if [[ "${{ needs.build-windows.result }}" == "success" ]]; then
|
|
355
|
-
echo "- **Windows Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
356
|
-
elif [[ "${{ needs.build-windows.result }}" == "failure" ]]; then
|
|
357
|
-
echo "- **Windows Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
358
|
-
else
|
|
359
|
-
echo "- **Windows Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
360
|
-
fi
|
|
361
|
-
else
|
|
362
|
-
echo "- **Windows Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
363
|
-
fi
|
|
364
|
-
|
|
365
|
-
# macOS Build Status
|
|
366
|
-
if [[ "${{ inputs.build_mac }}" == "true" ]]; then
|
|
367
|
-
if [[ "${{ needs.build-mac.result }}" == "success" ]]; then
|
|
368
|
-
echo "- **macOS Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
369
|
-
elif [[ "${{ needs.build-mac.result }}" == "failure" ]]; then
|
|
370
|
-
echo "- **macOS Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
371
|
-
else
|
|
372
|
-
echo "- **macOS Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
373
|
-
fi
|
|
374
|
-
else
|
|
375
|
-
echo "- **macOS Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
376
|
-
fi
|
|
377
|
-
|
|
378
|
-
# Release Status
|
|
379
|
-
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
380
|
-
echo "- **Release Created**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
381
|
-
elif [[ "${{ needs.create-release.result }}" == "failure" ]]; then
|
|
382
|
-
echo "- **Release Created**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
383
|
-
else
|
|
384
|
-
echo "- **Release Created**: ⏭️ Skipped (builds failed/cancelled)" >> $GITHUB_STEP_SUMMARY
|
|
385
|
-
fi
|
|
386
|
-
|
|
387
|
-
echo "- **Prerelease**: ${{ inputs.prerelease && '✅ Yes' || '❌ No' }}" >> $GITHUB_STEP_SUMMARY
|
|
388
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
389
|
-
echo "## Release Notes" >> $GITHUB_STEP_SUMMARY
|
|
390
|
-
echo "${{ inputs.release_notes }}" >> $GITHUB_STEP_SUMMARY
|
|
391
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
392
|
-
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
393
|
-
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
|
|
394
|
-
else
|
|
395
|
-
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
|
+
windows_sign:
|
|
18
|
+
description: 'Windows Code Signing Method'
|
|
19
|
+
required: true
|
|
20
|
+
type: choice
|
|
21
|
+
default: 'off'
|
|
22
|
+
options:
|
|
23
|
+
- 'off'
|
|
24
|
+
- 'signtool'
|
|
25
|
+
release_notes:
|
|
26
|
+
description: 'Release Notes'
|
|
27
|
+
required: true
|
|
28
|
+
type: string
|
|
29
|
+
default: 'New release'
|
|
30
|
+
prerelease:
|
|
31
|
+
description: 'Mark as prerelease'
|
|
32
|
+
required: true
|
|
33
|
+
type: boolean
|
|
34
|
+
default: true
|
|
35
|
+
|
|
36
|
+
env:
|
|
37
|
+
NODE_VERSION: '24'
|
|
38
|
+
|
|
39
|
+
jobs:
|
|
40
|
+
get-version:
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
outputs:
|
|
43
|
+
version: ${{ steps.get_version.outputs.version }}
|
|
44
|
+
steps:
|
|
45
|
+
- name: Checkout code
|
|
46
|
+
uses: actions/checkout@v4
|
|
47
|
+
|
|
48
|
+
- name: Get version from package.json
|
|
49
|
+
id: get_version
|
|
50
|
+
run: |
|
|
51
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
52
|
+
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
53
|
+
echo "Version: $VERSION"
|
|
54
|
+
|
|
55
|
+
build-windows:
|
|
56
|
+
if: ${{ inputs.build_windows }}
|
|
57
|
+
runs-on: windows-latest
|
|
58
|
+
timeout-minutes: 30
|
|
59
|
+
needs: get-version
|
|
60
|
+
env:
|
|
61
|
+
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
62
|
+
WIN_CODE_SIGN_TYPE: ${{ inputs.windows_sign }}
|
|
63
|
+
WIN_PFX_PATH: ${{ secrets.WIN_PFX_PATH }}
|
|
64
|
+
WIN_PFX_PASS: ${{ secrets.WIN_PFX_PASS }}
|
|
65
|
+
SM_API_KEY: ${{ secrets.SM_API_KEY }}
|
|
66
|
+
SM_CLIENT_CERT_PASSWORD: ${{ secrets.SM_CLIENT_CERT_PASSWORD }}
|
|
67
|
+
SM_HOST: ${{ secrets.SM_HOST }}
|
|
68
|
+
steps:
|
|
69
|
+
- name: Checkout code
|
|
70
|
+
uses: actions/checkout@v4
|
|
71
|
+
|
|
72
|
+
- name: Setup Node.js
|
|
73
|
+
uses: actions/setup-node@v4
|
|
74
|
+
with:
|
|
75
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
76
|
+
cache: 'npm'
|
|
77
|
+
|
|
78
|
+
- name: Install dependencies
|
|
79
|
+
run: npm install
|
|
80
|
+
|
|
81
|
+
- name: Install latest @interopio/iocd-cli
|
|
82
|
+
run: npm install @interopio/iocd-cli@latest
|
|
83
|
+
|
|
84
|
+
- name: Setup project
|
|
85
|
+
env:
|
|
86
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
87
|
+
run: npm run setup
|
|
88
|
+
|
|
89
|
+
# This step setup digicert
|
|
90
|
+
- name: Setup SMCTL Code Signing
|
|
91
|
+
if: ${{ env.SM_API_KEY != '' }}
|
|
92
|
+
id: setup-smctl
|
|
93
|
+
uses: ./.github/actions/setup-smctl
|
|
94
|
+
with:
|
|
95
|
+
api-key: ${{ secrets.SM_API_KEY }}
|
|
96
|
+
client-cert-b64: ${{ secrets.SM_CLIENT_CERT_FILE }}
|
|
97
|
+
client-cert-password: ${{ secrets.SM_CLIENT_CERT_PASSWORD }}
|
|
98
|
+
keypair-name: ${{ secrets.SM_KEYPAIR_NAME }}
|
|
99
|
+
host: ${{ secrets.SM_HOST }}
|
|
100
|
+
|
|
101
|
+
- name: Set certificate file path
|
|
102
|
+
if: ${{ env.SM_API_KEY != '' }}
|
|
103
|
+
shell: cmd
|
|
104
|
+
run: echo SM_CLIENT_CERT_FILE=${{ steps.setup-smctl.outputs.cert-file-path }} >> %GITHUB_ENV%
|
|
105
|
+
|
|
106
|
+
- name: SMCTL Health Check
|
|
107
|
+
if: ${{ env.SM_API_KEY != '' }}
|
|
108
|
+
shell: cmd
|
|
109
|
+
run: smctl healthcheck
|
|
110
|
+
|
|
111
|
+
- name: Build application
|
|
112
|
+
env:
|
|
113
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
114
|
+
WIN_CERT_SHA1: ${{ secrets.SM_CODE_SIGNING_CERT_SHA1_HASH }}
|
|
115
|
+
shell: pwsh
|
|
116
|
+
run: |
|
|
117
|
+
# Add SMCTL to PATH
|
|
118
|
+
$env:PATH = "C:\Program Files\DigiCert\DigiCert Keylocker Tools;$env:PATH"
|
|
119
|
+
|
|
120
|
+
# Find and add signtool to PATH dynamically
|
|
121
|
+
$sdkPath = "C:\Program Files (x86)\Windows Kits\10\bin"
|
|
122
|
+
if (Test-Path $sdkPath) {
|
|
123
|
+
$signtoolPath = Get-ChildItem -Path $sdkPath -Filter "signtool.exe" -Recurse -ErrorAction SilentlyContinue |
|
|
124
|
+
Where-Object { $_.FullName -match "\\x64\\signtool.exe$" } |
|
|
125
|
+
Select-Object -First 1 -ExpandProperty Directory
|
|
126
|
+
if ($signtoolPath) {
|
|
127
|
+
Write-Host "Found signtool at: $signtoolPath"
|
|
128
|
+
$env:PATH = "$signtoolPath;$env:PATH"
|
|
129
|
+
} else {
|
|
130
|
+
Write-Host "Warning: signtool.exe not found in Windows SDK"
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
npm run build-skip-install
|
|
135
|
+
|
|
136
|
+
- name: Upload Windows artifacts
|
|
137
|
+
uses: actions/upload-artifact@v4
|
|
138
|
+
with:
|
|
139
|
+
name: windows-artifacts
|
|
140
|
+
path: dist/make/**/*
|
|
141
|
+
if-no-files-found: error
|
|
142
|
+
|
|
143
|
+
- name: Gather logs
|
|
144
|
+
if: always()
|
|
145
|
+
shell: bash
|
|
146
|
+
run: |
|
|
147
|
+
# Get the actual temp directory that Node.js uses
|
|
148
|
+
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
149
|
+
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
150
|
+
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
151
|
+
|
|
152
|
+
# Create logs collection directory
|
|
153
|
+
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
154
|
+
|
|
155
|
+
# Copy from Node.js temp directory (where actual logs are)
|
|
156
|
+
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
157
|
+
echo "Found Node.js temp log directory, contents:"
|
|
158
|
+
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
159
|
+
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
160
|
+
else
|
|
161
|
+
echo "Node.js temp log directory not found"
|
|
162
|
+
fi
|
|
163
|
+
|
|
164
|
+
# Also check GitHub Actions temp directory
|
|
165
|
+
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
166
|
+
echo "Found GitHub Actions temp log directory"
|
|
167
|
+
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
168
|
+
else
|
|
169
|
+
echo "GitHub Actions temp log directory not found"
|
|
170
|
+
fi
|
|
171
|
+
|
|
172
|
+
- name: Upload Windows build logs
|
|
173
|
+
if: always()
|
|
174
|
+
uses: actions/upload-artifact@v4
|
|
175
|
+
with:
|
|
176
|
+
name: windows-build-logs
|
|
177
|
+
path: |
|
|
178
|
+
./all-logs/**/*
|
|
179
|
+
if-no-files-found: warn
|
|
180
|
+
|
|
181
|
+
build-mac:
|
|
182
|
+
if: ${{ inputs.build_mac }}
|
|
183
|
+
runs-on: macos-latest
|
|
184
|
+
timeout-minutes: 30
|
|
185
|
+
needs: get-version
|
|
186
|
+
env:
|
|
187
|
+
IOCD_LICENSE_KEY: ${{ secrets.IOCD_LICENSE_KEY }}
|
|
188
|
+
|
|
189
|
+
steps:
|
|
190
|
+
- name: Checkout code
|
|
191
|
+
uses: actions/checkout@v4
|
|
192
|
+
|
|
193
|
+
- name: Setup Node.js
|
|
194
|
+
uses: actions/setup-node@v4
|
|
195
|
+
with:
|
|
196
|
+
node-version: ${{ env.NODE_VERSION }}
|
|
197
|
+
cache: 'npm'
|
|
198
|
+
|
|
199
|
+
- name: Install dependencies
|
|
200
|
+
run: npm install
|
|
201
|
+
|
|
202
|
+
- name: Install latest @interopio/iocd-cli
|
|
203
|
+
run: npm install @interopio/iocd-cli@latest
|
|
204
|
+
|
|
205
|
+
- name: Setup project
|
|
206
|
+
env:
|
|
207
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
208
|
+
run: npm run setup
|
|
209
|
+
|
|
210
|
+
- name: Setup code-signing (MacOS only)
|
|
211
|
+
uses: apple-actions/import-codesign-certs@v3
|
|
212
|
+
with:
|
|
213
|
+
p12-file-base64: ${{ secrets.APPLE_CERTIFICATE }}
|
|
214
|
+
p12-password: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
|
|
215
|
+
|
|
216
|
+
- name: Build application
|
|
217
|
+
env:
|
|
218
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
219
|
+
APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
220
|
+
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
|
|
221
|
+
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
222
|
+
run: npm run build-skip-install
|
|
223
|
+
|
|
224
|
+
- name: Upload macOS artifacts
|
|
225
|
+
uses: actions/upload-artifact@v4
|
|
226
|
+
with:
|
|
227
|
+
name: mac-artifacts
|
|
228
|
+
path: dist/make/**/*
|
|
229
|
+
if-no-files-found: error
|
|
230
|
+
|
|
231
|
+
- name: Collect and upload macOS build logs
|
|
232
|
+
if: always()
|
|
233
|
+
shell: bash
|
|
234
|
+
run: |
|
|
235
|
+
# Get the actual temp directory that Node.js uses
|
|
236
|
+
NODEJS_TMPDIR=$(node -e "console.log(require('os').tmpdir())")
|
|
237
|
+
echo "Node.js tmpdir: $NODEJS_TMPDIR"
|
|
238
|
+
echo "Looking for logs in: $NODEJS_TMPDIR/@interopio-iocd-cli/"
|
|
239
|
+
|
|
240
|
+
# Create logs collection directory
|
|
241
|
+
mkdir -p ./all-logs/nodejs-temp ./all-logs/runner-temp
|
|
242
|
+
|
|
243
|
+
# Copy from Node.js temp directory (where actual logs are)
|
|
244
|
+
if [ -d "$NODEJS_TMPDIR/@interopio-iocd-cli" ]; then
|
|
245
|
+
echo "Found Node.js temp log directory, contents:"
|
|
246
|
+
ls -la "$NODEJS_TMPDIR/@interopio-iocd-cli/" || true
|
|
247
|
+
cp -r "$NODEJS_TMPDIR/@interopio-iocd-cli" ./all-logs/nodejs-temp/ 2>/dev/null || echo "No files to copy from Node.js temp"
|
|
248
|
+
else
|
|
249
|
+
echo "Node.js temp log directory not found"
|
|
250
|
+
fi
|
|
251
|
+
|
|
252
|
+
# Also check GitHub Actions temp directory
|
|
253
|
+
if [ -d "${{ runner.temp }}/@interopio-iocd-cli" ]; then
|
|
254
|
+
echo "Found GitHub Actions temp log directory"
|
|
255
|
+
cp -r "${{ runner.temp }}/@interopio-iocd-cli" ./all-logs/runner-temp/ 2>/dev/null || echo "No files to copy from runner temp"
|
|
256
|
+
else
|
|
257
|
+
echo "GitHub Actions temp log directory not found"
|
|
258
|
+
fi
|
|
259
|
+
|
|
260
|
+
- name: Upload macOS build logs
|
|
261
|
+
if: always()
|
|
262
|
+
uses: actions/upload-artifact@v4
|
|
263
|
+
with:
|
|
264
|
+
name: mac-build-logs
|
|
265
|
+
path: |
|
|
266
|
+
./all-logs/**/*
|
|
267
|
+
if-no-files-found: warn
|
|
268
|
+
|
|
269
|
+
create-release:
|
|
270
|
+
runs-on: ubuntu-latest
|
|
271
|
+
needs: [get-version, build-windows, build-mac]
|
|
272
|
+
if: always() && ((!inputs.build_windows || needs.build-windows.result == 'success') && (!inputs.build_mac || needs.build-mac.result == 'success') && (inputs.build_windows || inputs.build_mac))
|
|
273
|
+
|
|
274
|
+
steps:
|
|
275
|
+
- name: Checkout code
|
|
276
|
+
uses: actions/checkout@v4
|
|
277
|
+
|
|
278
|
+
- name: Download Windows artifacts
|
|
279
|
+
if: ${{ inputs.build_windows && needs.build-windows.result == 'success' }}
|
|
280
|
+
uses: actions/download-artifact@v4
|
|
281
|
+
with:
|
|
282
|
+
name: windows-artifacts
|
|
283
|
+
path: ./artifacts/windows/
|
|
284
|
+
|
|
285
|
+
- name: Download macOS artifacts
|
|
286
|
+
if: ${{ inputs.build_mac && needs.build-mac.result == 'success' }}
|
|
287
|
+
uses: actions/download-artifact@v4
|
|
288
|
+
with:
|
|
289
|
+
name: mac-artifacts
|
|
290
|
+
path: ./artifacts/mac/
|
|
291
|
+
|
|
292
|
+
- name: List all artifacts
|
|
293
|
+
run: |
|
|
294
|
+
echo "All downloaded artifacts:"
|
|
295
|
+
find ./artifacts -type f -name "*.dmg" -o -name "*.zip" -o -name "*.exe" 2>/dev/null || echo "No artifacts found"
|
|
296
|
+
|
|
297
|
+
- name: Delete existing release if exists
|
|
298
|
+
env:
|
|
299
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
300
|
+
run: |
|
|
301
|
+
VERSION="${{ needs.get-version.outputs.version }}"
|
|
302
|
+
echo "Checking for existing release v$VERSION..."
|
|
303
|
+
|
|
304
|
+
# Try to delete existing release first
|
|
305
|
+
if gh release view "v$VERSION" >/dev/null 2>&1; then
|
|
306
|
+
echo "Found existing release v$VERSION, deleting..."
|
|
307
|
+
gh release delete "v$VERSION" --yes
|
|
308
|
+
echo "Release v$VERSION deleted"
|
|
309
|
+
else
|
|
310
|
+
echo "No existing release v$VERSION found"
|
|
311
|
+
fi
|
|
312
|
+
|
|
313
|
+
# Try to delete existing tag
|
|
314
|
+
if git ls-remote --tags origin | grep -q "refs/tags/v$VERSION$"; then
|
|
315
|
+
echo "Found existing tag v$VERSION, deleting..."
|
|
316
|
+
git push --delete origin "v$VERSION"
|
|
317
|
+
echo "Tag v$VERSION deleted"
|
|
318
|
+
else
|
|
319
|
+
echo "No existing tag v$VERSION found"
|
|
320
|
+
fi
|
|
321
|
+
continue-on-error: true
|
|
322
|
+
|
|
323
|
+
- name: Create Release
|
|
324
|
+
uses: softprops/action-gh-release@v2
|
|
325
|
+
with:
|
|
326
|
+
tag_name: v${{ needs.get-version.outputs.version }}
|
|
327
|
+
name: Release v${{ needs.get-version.outputs.version }}
|
|
328
|
+
body: ${{ inputs.release_notes }}
|
|
329
|
+
draft: false
|
|
330
|
+
prerelease: ${{ inputs.prerelease }}
|
|
331
|
+
files: |
|
|
332
|
+
./artifacts/**/*.dmg
|
|
333
|
+
./artifacts/**/*.zip
|
|
334
|
+
./artifacts/**/*.exe
|
|
335
|
+
env:
|
|
336
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
337
|
+
|
|
338
|
+
summary:
|
|
339
|
+
runs-on: ubuntu-latest
|
|
340
|
+
needs: [get-version, build-windows, build-mac, create-release]
|
|
341
|
+
if: always()
|
|
342
|
+
|
|
343
|
+
steps:
|
|
344
|
+
- name: Generate Summary
|
|
345
|
+
run: |
|
|
346
|
+
echo "# Workflow Summary" >> $GITHUB_STEP_SUMMARY
|
|
347
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
348
|
+
echo "## Build Results" >> $GITHUB_STEP_SUMMARY
|
|
349
|
+
echo "- **Version**: v${{ needs.get-version.outputs.version }}" >> $GITHUB_STEP_SUMMARY
|
|
350
|
+
echo "- **Windows Signing**: ${{ inputs.windows_sign }}" >> $GITHUB_STEP_SUMMARY
|
|
351
|
+
|
|
352
|
+
# Windows Build Status
|
|
353
|
+
if [[ "${{ inputs.build_windows }}" == "true" ]]; then
|
|
354
|
+
if [[ "${{ needs.build-windows.result }}" == "success" ]]; then
|
|
355
|
+
echo "- **Windows Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
356
|
+
elif [[ "${{ needs.build-windows.result }}" == "failure" ]]; then
|
|
357
|
+
echo "- **Windows Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
358
|
+
else
|
|
359
|
+
echo "- **Windows Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
360
|
+
fi
|
|
361
|
+
else
|
|
362
|
+
echo "- **Windows Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
363
|
+
fi
|
|
364
|
+
|
|
365
|
+
# macOS Build Status
|
|
366
|
+
if [[ "${{ inputs.build_mac }}" == "true" ]]; then
|
|
367
|
+
if [[ "${{ needs.build-mac.result }}" == "success" ]]; then
|
|
368
|
+
echo "- **macOS Build**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
369
|
+
elif [[ "${{ needs.build-mac.result }}" == "failure" ]]; then
|
|
370
|
+
echo "- **macOS Build**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
371
|
+
else
|
|
372
|
+
echo "- **macOS Build**: ⏸️ Cancelled/Skipped" >> $GITHUB_STEP_SUMMARY
|
|
373
|
+
fi
|
|
374
|
+
else
|
|
375
|
+
echo "- **macOS Build**: ⏭️ Not Requested" >> $GITHUB_STEP_SUMMARY
|
|
376
|
+
fi
|
|
377
|
+
|
|
378
|
+
# Release Status
|
|
379
|
+
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
380
|
+
echo "- **Release Created**: ✅ Success" >> $GITHUB_STEP_SUMMARY
|
|
381
|
+
elif [[ "${{ needs.create-release.result }}" == "failure" ]]; then
|
|
382
|
+
echo "- **Release Created**: ❌ Failed" >> $GITHUB_STEP_SUMMARY
|
|
383
|
+
else
|
|
384
|
+
echo "- **Release Created**: ⏭️ Skipped (builds failed/cancelled)" >> $GITHUB_STEP_SUMMARY
|
|
385
|
+
fi
|
|
386
|
+
|
|
387
|
+
echo "- **Prerelease**: ${{ inputs.prerelease && '✅ Yes' || '❌ No' }}" >> $GITHUB_STEP_SUMMARY
|
|
388
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
389
|
+
echo "## Release Notes" >> $GITHUB_STEP_SUMMARY
|
|
390
|
+
echo "${{ inputs.release_notes }}" >> $GITHUB_STEP_SUMMARY
|
|
391
|
+
echo "" >> $GITHUB_STEP_SUMMARY
|
|
392
|
+
if [[ "${{ needs.create-release.result }}" == "success" ]]; then
|
|
393
|
+
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
|
|
394
|
+
else
|
|
395
|
+
echo "⚠️ **Release creation failed or was skipped**" >> $GITHUB_STEP_SUMMARY
|
|
396
396
|
fi
|