-
Notifications
You must be signed in to change notification settings - Fork 42
213 lines (212 loc) · 12 KB
/
Copy pathdesktop.generated.yml
File metadata and controls
213 lines (212 loc) · 12 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
# Do not modify!
# This file was generated by https://github.com/JLarky/gha-ts
name: "Release: Step 3 - Desktop"
"on":
workflow_call:
inputs:
release_version:
required: true
type: string
description: Resolved release version
release_tag:
required: true
type: string
description: Resolved release tag
release_commit:
required: true
type: string
description: Commit being released
secrets:
APPLE_ID:
required: true
description: Apple developer account email used for notarization
APPLE_TEAM_ID:
required: true
description: Apple Team ID used for signing and notarization
APPLE_APP_SECRET:
required: true
description: Apple app-specific password used for notarization
CSC_LINK:
required: true
description: Developer ID Application certificate payload or link for electron-builder
CSC_KEY_PASSWORD:
required: true
description: Password for the certificate provided via CSC_LINK
CLOUDFLARE_ACCOUNT_ID:
required: true
description: Cloudflare account id
R2_ACCESS_KEY_ID:
required: true
description: Cloudflare R2 access key id
R2_SECRET_ACCESS_KEY:
required: true
description: Cloudflare R2 secret access key
R2_BUCKET:
required: true
description: Cloudflare R2 bucket name
concurrency:
group: "desktop-release-${{ github.run_id }}"
cancel-in-progress: false
permissions:
contents: write
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- runner: macos-latest
args: "--x64"
name: macOS (x64)
artifact_name: polywise-macos-x64
asset_glob: "packages/desktop/release/darwin/x64/*.dmg\npackages/desktop/release/darwin/x64/*.zip\npackages/desktop/release/darwin/x64/*.blockmap\npackages/desktop/release/darwin/x64/latest*.yml"
upload_dir: packages/desktop/.release-upload/darwin/x64
destination_dir: release/darwin/x64
install_command: "printf '\\ntrustLockfile: true\\nsupportedArchitectures:\\n os:\\n - darwin\\n cpu:\\n - x64\\n - arm64\\n' >> pnpm-workspace.yaml\npnpm install --frozen-lockfile --filter \"./packages/desktop...\" --filter \"./packages/polywise...\" --filter \"./packages/app...\" --filter \"./packages/stk...\" --filter \"./packages/erpc...\""
build_command: "pnpm --filter \"./packages/stk\" run build\npnpm --filter \"./packages/erpc\" run build\npnpm --filter \"./packages/app\" run build:electron\npnpm --filter \"./packages/polywise\" run build:electron\npnpm --dir packages/desktop run clean\npnpm --dir packages/desktop run main:prod\npnpm --dir packages/desktop run transform\npnpm --dir packages/desktop exec cross-env BUILD_ARCH=x64 node ./scripts/rebuild.mjs\nretryCommand() {\n\tmax_attempts=\"$1\"\n\tsleep_seconds=\"$2\"\n\tshift 2\n\tattempt=1\n\twhile true; do\n\t\t\"$@\" && return 0\n\t\tif [ \"$attempt\" -ge \"$max_attempts\" ]; then\n\t\t\treturn 1\n\t\tfi\n\t\tattempt=$((attempt + 1))\n\t\tsleep \"$sleep_seconds\"\n\tdone\n}\nretryCommand 3 12 pnpm --dir packages/desktop exec cross-env BUILD_ARCH=x64 electron-builder -m --x64 --publish never"
- runner: macos-latest
args: "--arm64"
name: macOS (arm64)
artifact_name: polywise-macos-arm64
asset_glob: "packages/desktop/release/darwin/arm64/*.dmg\npackages/desktop/release/darwin/arm64/*.zip\npackages/desktop/release/darwin/arm64/*.blockmap\npackages/desktop/release/darwin/arm64/latest*.yml"
upload_dir: packages/desktop/.release-upload/darwin/arm64
destination_dir: release/darwin/arm64
install_command: "printf '\\ntrustLockfile: true\\n' >> pnpm-workspace.yaml\npnpm install --frozen-lockfile --filter \"./packages/desktop...\" --filter \"./packages/polywise...\" --filter \"./packages/app...\" --filter \"./packages/stk...\" --filter \"./packages/erpc...\""
build_command: "pnpm --filter \"./packages/stk\" run build\npnpm --filter \"./packages/erpc\" run build\npnpm --filter \"./packages/app\" run build:electron\npnpm --filter \"./packages/polywise\" run build:electron\npnpm --dir packages/desktop run clean\npnpm --dir packages/desktop run main:prod\npnpm --dir packages/desktop run transform\npnpm --dir packages/desktop exec cross-env BUILD_ARCH=arm64 node ./scripts/rebuild.mjs\nretryCommand() {\n\tmax_attempts=\"$1\"\n\tsleep_seconds=\"$2\"\n\tshift 2\n\tattempt=1\n\twhile true; do\n\t\t\"$@\" && return 0\n\t\tif [ \"$attempt\" -ge \"$max_attempts\" ]; then\n\t\t\treturn 1\n\t\tfi\n\t\tattempt=$((attempt + 1))\n\t\tsleep \"$sleep_seconds\"\n\tdone\n}\nretryCommand 3 12 pnpm --dir packages/desktop exec cross-env BUILD_ARCH=arm64 electron-builder -m --arm64 --publish never"
- runner: windows-latest
name: Windows (x64)
artifact_name: polywise-windows-x64
asset_glob: "packages/desktop/release/win32/x64/*.exe\npackages/desktop/release/win32/x64/*.blockmap\npackages/desktop/release/win32/x64/latest*.yml"
upload_dir: packages/desktop/.release-upload/win32/x64
destination_dir: release/win32/x64
install_command: "printf '\\ntrustLockfile: true\\n' >> pnpm-workspace.yaml\npnpm install --frozen-lockfile --ignore-scripts --filter \"./packages/desktop...\" --filter \"./packages/polywise...\" --filter \"./packages/app...\" --filter \"./packages/stk...\" --filter \"./packages/erpc...\""
build_command: "pnpm --filter \"./packages/stk\" run build\npnpm --filter \"./packages/erpc\" run build\npnpm --filter \"./packages/app\" run build:electron\npnpm --filter \"./packages/polywise\" run build:electron\npnpm --dir packages/desktop run clean\npnpm --dir packages/desktop run main:prod\npnpm --dir packages/desktop run transform\npnpm --dir packages/desktop exec cross-env BUILD_ARCH=x64 node ./scripts/rebuild.mjs\npnpm --dir packages/desktop exec electron-builder -w --publish never"
name: "${{ matrix.name }}"
runs-on: "${{ matrix.runner }}"
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
ref: build
- uses: actions/setup-node@v6
with:
node-version: lts/*
- name: Pin build branch to release commit
shell: bash
run: "git checkout --detach \"${{ inputs.release_commit }}\""
- name: Check platform asset on Cloudflare R2
id: asset_status
env:
RELEASE_BASE_URL: https://files.polywise.io/release
ASSET_GLOB: "${{ matrix.asset_glob }}"
run: node ./scripts/check_platform_asset_on_r2.mjs
- if: "steps.asset_status.outputs.already_published != 'true'"
name: Setup pnpm
uses: pnpm/action-setup@v6
with:
version: 11.5.1
run_install: false
- if: "steps.asset_status.outputs.already_published != 'true'"
uses: actions/setup-node@v6
with:
node-version: lts/*
cache: pnpm
cache-dependency-path: pnpm-lock.yaml
- if: "steps.asset_status.outputs.already_published != 'true'"
name: Setup Bun
uses: oven-sh/setup-bun@v2
- name: Cache Electron binaries (Windows)
if: "matrix.runner == 'windows-latest' && steps.asset_status.outputs.already_published != 'true'"
uses: actions/cache@v5
with:
path: "${{ env.LOCALAPPDATA }}\\electron\\Cache\n${{ env.LOCALAPPDATA }}\\electron-builder\\Cache"
key: "${{ runner.os }}-electron-cache-${{ hashFiles('pnpm-lock.yaml', 'packages/desktop/package.json') }}"
- name: Cache node-gyp (Windows)
if: "matrix.runner == 'windows-latest' && steps.asset_status.outputs.already_published != 'true'"
uses: actions/cache@v5
with:
path: "${{ env.LOCALAPPDATA }}\\node-gyp\\Cache"
key: "${{ runner.os }}-node-gyp-${{ hashFiles('pnpm-lock.yaml', 'packages/polywise/package.json', 'packages/desktop/package.json') }}"
- name: Install dependencies
if: "matrix.runner != 'windows-latest' && steps.asset_status.outputs.already_published != 'true'"
shell: bash
run: "${{ matrix.install_command }}"
- name: Install dependencies (Windows)
if: "matrix.runner == 'windows-latest' && steps.asset_status.outputs.already_published != 'true'"
shell: bash
run: "${{ matrix.install_command }}"
- name: Prepare native runtime dependencies (Windows)
if: "matrix.runner == 'windows-latest' && steps.asset_status.outputs.already_published != 'true'"
shell: bash
run: "pnpm rebuild bun\npnpm rebuild lmdb\npnpm rebuild electron node-llama-cpp sqlite-vec @node-rs/jieba @node-rs/xxhash\npnpm --dir packages/desktop run rebuild"
- name: Validate mac signing secrets
if: "matrix.runner == 'macos-latest' && steps.asset_status.outputs.already_published != 'true'"
shell: bash
env:
APPLE_ID: "${{ secrets.APPLE_ID }}"
APPLE_TEAM_ID: "${{ secrets.APPLE_TEAM_ID }}"
APPLE_APP_SECRET: "${{ secrets.APPLE_APP_SECRET }}"
CSC_LINK: "${{ secrets.CSC_LINK }}"
CSC_KEY_PASSWORD: "${{ secrets.CSC_KEY_PASSWORD }}"
run: "[ -n \"$APPLE_ID\" ]\n[ -n \"$APPLE_TEAM_ID\" ]\n[ -n \"$APPLE_APP_SECRET\" ]\n[ -n \"$CSC_LINK\" ]\n[ -n \"$CSC_KEY_PASSWORD\" ]"
- if: "steps.asset_status.outputs.already_published != 'true'"
name: Build desktop assets
shell: bash
env:
CI: "true"
GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
APP_VERSION: "${{ inputs.release_version }}"
APPLE_ID: "${{ secrets.APPLE_ID }}"
APPLE_TEAM_ID: "${{ secrets.APPLE_TEAM_ID }}"
APPLE_APP_SPECIFIC_PASSWORD: "${{ secrets.APPLE_APP_SECRET }}"
CSC_LINK: "${{ secrets.CSC_LINK }}"
CSC_KEY_PASSWORD: "${{ secrets.CSC_KEY_PASSWORD }}"
run: "${{ matrix.build_command }}"
- if: "steps.asset_status.outputs.already_published != 'true'"
name: Collect release assets for Cloudflare R2
env:
ASSET_GLOB: "${{ matrix.asset_glob }}"
UPLOAD_DIR: "${{ matrix.upload_dir }}"
run: node ./scripts/collect_release_assets.mjs
- if: "steps.asset_status.outputs.already_published != 'true'"
name: Upload assets to Cloudflare R2
uses: ryand56/r2-upload-action@v1.4
with:
r2-account-id: "${{ secrets.CLOUDFLARE_ACCOUNT_ID }}"
r2-access-key-id: "${{ secrets.R2_ACCESS_KEY_ID }}"
r2-secret-access-key: "${{ secrets.R2_SECRET_ACCESS_KEY }}"
r2-bucket: "${{ secrets.R2_BUCKET }}"
source-dir: "${{ matrix.upload_dir }}"
destination-dir: "${{ matrix.destination_dir }}"
- if: "steps.asset_status.outputs.already_published != 'true'"
name: Upload release assets
uses: actions/upload-artifact@v7
with:
name: "${{ matrix.artifact_name }}"
if-no-files-found: error
path: "${{ matrix.asset_glob }}"
release:
needs:
- build
runs-on: ubuntu-latest
steps:
- name: Check release artifacts
id: artifact_status
shell: bash
run: "if [ \"${{ needs.build.result }}\" = \"skipped\" ]; then\n\techo \"has_new_artifacts=false\" >> \"$GITHUB_OUTPUT\"\n\texit 0\nfi\necho \"has_new_artifacts=true\" >> \"$GITHUB_OUTPUT\""
- if: "steps.artifact_status.outputs.has_new_artifacts == 'true'"
name: Download release assets
uses: actions/download-artifact@v5
with:
path: release-assets
merge-multiple: true
- if: "steps.artifact_status.outputs.has_new_artifacts == 'true'"
name: Upload release assets and publish release
uses: softprops/action-gh-release@v3
with:
draft: false
tag_name: "${{ inputs.release_tag }}"
name: "${{ inputs.release_tag }}"
target_commitish: "${{ inputs.release_commit }}"
fail_on_unmatched_files: true
files: release-assets/**/*