Skip to content

Commit 93808dc

Browse files
committed
migrate to unified ci?
1 parent 934edaa commit 93808dc

File tree

3 files changed

+260
-100
lines changed

3 files changed

+260
-100
lines changed

.github/workflows/build-test.yml

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
name: "Build Test"
2+
3+
on:
4+
workflow_dispatch:
5+
push:
6+
branches:
7+
- main
8+
- develop
9+
pull_request:
10+
branches:
11+
- main
12+
13+
jobs:
14+
build-test:
15+
permissions:
16+
contents: read
17+
strategy:
18+
fail-fast: false
19+
matrix:
20+
include:
21+
- platform: "macos-latest" # for Arm based macs (M1 and above).
22+
args: "--target aarch64-apple-darwin"
23+
target: "aarch64-apple-darwin"
24+
- platform: "macos-latest" # for Intel based macs.
25+
args: "--target x86_64-apple-darwin"
26+
target: "x86_64-apple-darwin"
27+
- platform: "ubuntu-24.04"
28+
args: ""
29+
target: "x86_64-unknown-linux-gnu"
30+
- platform: "windows-latest"
31+
args: ""
32+
target: "x86_64-pc-windows-msvc"
33+
34+
uses: ./.github/workflows/build.yml
35+
with:
36+
platform: ${{ matrix.platform }}
37+
target: ${{ matrix.target }}
38+
build-args: ${{ matrix.args }}
39+
sign-binaries: false
40+
asset-prefix: "handy-test"
41+
upload-artifacts: true
42+
secrets: inherit

.github/workflows/build.yml

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
name: "Build"
2+
3+
on:
4+
workflow_call:
5+
inputs:
6+
platform:
7+
required: true
8+
type: string
9+
target:
10+
required: true
11+
type: string
12+
build-args:
13+
required: false
14+
type: string
15+
default: ""
16+
release-id:
17+
required: false
18+
type: string
19+
asset-prefix:
20+
required: false
21+
type: string
22+
default: "handy"
23+
upload-artifacts:
24+
required: false
25+
type: boolean
26+
default: false
27+
sign-binaries:
28+
required: false
29+
type: boolean
30+
default: false
31+
repository:
32+
required: false
33+
type: string
34+
ref:
35+
required: false
36+
type: string
37+
default: ${{ github.ref }}
38+
39+
jobs:
40+
build:
41+
permissions:
42+
contents: write
43+
runs-on: ${{ inputs.platform }}
44+
steps:
45+
- name: Checkout repository
46+
uses: actions/checkout@v4
47+
with:
48+
repository: ${{ inputs.repository }}
49+
ref: ${{ inputs.ref }}
50+
fetch-depth: 0
51+
52+
- name: Determine Version
53+
id: determine-version
54+
shell: bash
55+
run: |
56+
APP_VERSION=""
57+
REF="${{ inputs.ref }}"
58+
59+
if [[ "$REF" == refs/tags/v* ]]; then
60+
APP_VERSION="${REF#refs/tags/v}"
61+
echo "Release version determined from tag: $APP_VERSION"
62+
else
63+
DESCRIBE=$(git describe --tags --abbrev=0 2>/dev/null || echo "v0.0.0")
64+
APP_VERSION="${DESCRIBE#v}"
65+
echo "CI version determined from latest tag or fallback: $APP_VERSION"
66+
fi
67+
68+
echo "version=${APP_VERSION}" >> "$GITHUB_OUTPUT"
69+
70+
- uses: oven-sh/setup-bun@v2
71+
72+
- name: install Rust stable
73+
uses: dtolnay/rust-toolchain@stable
74+
with:
75+
# Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
76+
targets: ${{ contains(inputs.platform, 'macos') && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
77+
78+
- name: Rust cache
79+
uses: swatinem/rust-cache@v2
80+
with:
81+
workspaces: "./src-tauri -> target"
82+
key: ${{ inputs.platform }}-${{ inputs.target }}
83+
84+
- name: install dependencies (ubuntu only)
85+
if: contains(inputs.platform, 'ubuntu')
86+
run: |
87+
sudo apt-get update
88+
sudo apt-get install -y libappindicator3-dev librsvg2-dev patchelf libasound2-dev libopenblas-dev libx11-dev libxtst-dev libxrandr-dev \
89+
libwebkit2gtk-4.1-0=2.44.0-2 \
90+
libwebkit2gtk-4.1-dev=2.44.0-2 \
91+
libjavascriptcoregtk-4.1-0=2.44.0-2 \
92+
libjavascriptcoregtk-4.1-dev=2.44.0-2 \
93+
gir1.2-javascriptcoregtk-4.1=2.44.0-2 \
94+
gir1.2-webkit2-4.1=2.44.0-2
95+
96+
- name: Install Vulkan SDK (Windows)
97+
if: contains(inputs.platform, 'windows')
98+
uses: humbletim/[email protected]
99+
with:
100+
version: 1.4.309.0
101+
cache: true
102+
103+
- name: Install trusted-signing-cli
104+
if: contains(inputs.platform, 'windows') && inputs.sign-binaries
105+
run: cargo install trusted-signing-cli
106+
107+
- name: Prepare Vulkan SDK for Ubuntu
108+
if: contains(inputs.platform, 'ubuntu')
109+
run: |
110+
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
111+
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-noble.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-noble.list
112+
sudo apt update
113+
sudo apt install vulkan-sdk -y
114+
sudo apt-get install -y mesa-vulkan-drivers
115+
116+
- name: install frontend dependencies
117+
run: bun install
118+
119+
- name: rustup install target
120+
if: ${{ inputs.target != '' && !contains(inputs.target, 'unknown-linux-gnu') && !contains(inputs.target, 'pc-windows-msvc') }}
121+
run: rustup target add ${{ inputs.target }}
122+
123+
- name: import Apple Developer Certificate
124+
if: contains(inputs.platform, 'macos') && inputs.sign-binaries
125+
env:
126+
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
127+
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
128+
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
129+
run: |
130+
echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
131+
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
132+
security default-keychain -s build.keychain
133+
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
134+
security set-keychain-settings -t 3600 -u build.keychain
135+
security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
136+
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
137+
security find-identity -v -p codesigning build.keychain
138+
139+
- name: verify certificate
140+
if: contains(inputs.platform, 'macos') && inputs.sign-binaries
141+
run: |
142+
CERT_INFO=$(security find-identity -v -p codesigning build.keychain | grep "Developer ID Application")
143+
CERT_ID=$(echo "$CERT_INFO" | awk -F'"' '{print $2}')
144+
echo "CERT_ID=$CERT_ID" >> $GITHUB_ENV
145+
echo "Certificate imported."
146+
147+
- name: Set application version
148+
shell: bash
149+
run: |
150+
echo "Setting version to: ${{ steps.determine-version.outputs.version }}"
151+
# Update version in tauri.conf.json
152+
sed -i.bak 's/"version": "[^"]*"/"version": "${{ steps.determine-version.outputs.version }}"/' src-tauri/tauri.conf.json
153+
154+
- name: Build with Tauri
155+
uses: tauri-apps/tauri-action@v0
156+
env:
157+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
158+
APPLE_ID: ${{ inputs.sign-binaries && secrets.APPLE_ID || '' }}
159+
APPLE_ID_PASSWORD: ${{ inputs.sign-binaries && secrets.APPLE_ID_PASSWORD || '' }}
160+
APPLE_PASSWORD: ${{ inputs.sign-binaries && secrets.APPLE_PASSWORD || '' }}
161+
APPLE_TEAM_ID: ${{ inputs.sign-binaries && secrets.APPLE_TEAM_ID || '' }}
162+
APPLE_CERTIFICATE: ${{ inputs.sign-binaries && secrets.APPLE_CERTIFICATE || '' }}
163+
APPLE_CERTIFICATE_PASSWORD: ${{ inputs.sign-binaries && secrets.APPLE_CERTIFICATE_PASSWORD || '' }}
164+
APPLE_SIGNING_IDENTITY: ${{ inputs.sign-binaries && env.CERT_ID || '' }}
165+
AZURE_CLIENT_ID: ${{ inputs.sign-binaries && secrets.AZURE_CLIENT_ID || '' }}
166+
AZURE_CLIENT_SECRET: ${{ inputs.sign-binaries && secrets.AZURE_CLIENT_SECRET || '' }}
167+
AZURE_TENANT_ID: ${{ inputs.sign-binaries && secrets.AZURE_TENANT_ID || '' }}
168+
TAURI_SIGNING_PRIVATE_KEY: ${{ inputs.sign-binaries && secrets.TAURI_SIGNING_PRIVATE_KEY || '' }}
169+
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ inputs.sign-binaries && secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD || '' }}
170+
with:
171+
tagName: ${{ inputs.release-id && format('v{0}', steps.determine-version.outputs.version) || '' }}
172+
releaseName: ${{ inputs.release-id && format('v{0}', steps.determine-version.outputs.version) || '' }}
173+
releaseId: ${{ inputs.release-id }}
174+
args: ${{ inputs.build-args }}
175+
176+
- name: Upload artifacts (macOS)
177+
if: inputs.upload-artifacts && contains(inputs.platform, 'macos')
178+
uses: actions/upload-artifact@v4
179+
with:
180+
name: ${{ inputs.asset-prefix }}-${{ inputs.target }}
181+
path: |
182+
src-tauri/target/${{ inputs.target }}/release/bundle/dmg/*.dmg
183+
src-tauri/target/${{ inputs.target }}/release/bundle/macos/*.app
184+
retention-days: 30
185+
186+
- name: Upload artifacts (Linux)
187+
if: inputs.upload-artifacts && contains(inputs.platform, 'ubuntu')
188+
uses: actions/upload-artifact@v4
189+
with:
190+
name: ${{ inputs.asset-prefix }}-${{ inputs.target }}
191+
path: |
192+
src-tauri/target/release/bundle/deb/*.deb
193+
src-tauri/target/release/bundle/appimage/*.AppImage
194+
retention-days: 30
195+
196+
- name: Upload artifacts (Windows)
197+
if: inputs.upload-artifacts && contains(inputs.platform, 'windows')
198+
uses: actions/upload-artifact@v4
199+
with:
200+
name: ${{ inputs.asset-prefix }}-${{ inputs.target }}
201+
path: |
202+
src-tauri/target/release/bundle/msi/*.msi
203+
src-tauri/target/release/bundle/nsis/*.exe
204+
retention-days: 30

.github/workflows/release.yml

Lines changed: 14 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -16,109 +16,23 @@ jobs:
1616
include:
1717
- platform: "macos-latest" # for Arm based macs (M1 and above).
1818
args: "--target aarch64-apple-darwin"
19+
target: "aarch64-apple-darwin"
1920
- platform: "macos-latest" # for Intel based macs.
2021
args: "--target x86_64-apple-darwin"
22+
target: "x86_64-apple-darwin"
2123
- platform: "ubuntu-24.04"
2224
args: ""
25+
target: "x86_64-unknown-linux-gnu"
2326
- platform: "windows-latest"
2427
args: ""
25-
26-
runs-on: ${{ matrix.platform }}
27-
steps:
28-
- uses: actions/checkout@v4
29-
30-
- uses: oven-sh/setup-bun@v2
31-
32-
- name: install Rust stable
33-
uses: dtolnay/rust-toolchain@stable
34-
with:
35-
# Those targets are only used on macos runners so it's in an `if` to slightly speed up windows and linux builds.
36-
targets: ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || '' }}
37-
38-
- name: Rust cache
39-
uses: swatinem/rust-cache@v2
40-
with:
41-
workspaces: "./src-tauri -> target"
42-
43-
- name: install dependencies (ubuntu only)
44-
if: matrix.platform == 'ubuntu-24.04' # This must match the platform value defined above.
45-
run: |
46-
sudo apt-get update
47-
sudo apt-get install -y libappindicator3-dev librsvg2-dev patchelf libasound2-dev libopenblas-dev libx11-dev libxtst-dev libxrandr-dev \
48-
libwebkit2gtk-4.1-0=2.44.0-2 \
49-
libwebkit2gtk-4.1-dev=2.44.0-2 \
50-
libjavascriptcoregtk-4.1-0=2.44.0-2 \
51-
libjavascriptcoregtk-4.1-dev=2.44.0-2 \
52-
gir1.2-javascriptcoregtk-4.1=2.44.0-2 \
53-
gir1.2-webkit2-4.1=2.44.0-2
54-
55-
- name: Install Vulkan SDK
56-
if: matrix.platform == 'windows-latest' # This must match the platform value defined above.
57-
uses: humbletim/[email protected]
58-
with:
59-
version: 1.4.309.0
60-
cache: true
61-
62-
- name: Install trusted-signing-cli
63-
if: matrix.platform == 'windows-latest' # This must match the platform value defined above.
64-
run: cargo install trusted-signing-cli
65-
66-
- name: Prepare Vulkan SDK for Ubuntu
67-
run: |
68-
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
69-
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-noble.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-noble.list
70-
sudo apt update
71-
sudo apt install vulkan-sdk -y
72-
sudo apt-get install -y mesa-vulkan-drivers
73-
if: matrix.platform == 'ubuntu-24.04'
74-
75-
- name: install frontend dependencies
76-
run: bun install # change this to npm, pnpm or bun depending on which one you use.
77-
78-
- name: import Apple Developer Certificate
79-
if: matrix.platform == 'macos-latest'
80-
# Prevents keychain from locking automatically for 3600 seconds.
81-
env:
82-
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
83-
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
84-
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
85-
run: |
86-
echo $APPLE_CERTIFICATE | base64 --decode > certificate.p12
87-
security create-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
88-
security default-keychain -s build.keychain
89-
security unlock-keychain -p "$KEYCHAIN_PASSWORD" build.keychain
90-
security set-keychain-settings -t 3600 -u build.keychain
91-
security import certificate.p12 -k build.keychain -P "$APPLE_CERTIFICATE_PASSWORD" -T /usr/bin/codesign
92-
security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" build.keychain
93-
security find-identity -v -p codesigning build.keychain
94-
95-
- name: verify certificate
96-
if: matrix.platform == 'macos-latest'
97-
run: |
98-
CERT_INFO=$(security find-identity -v -p codesigning build.keychain | grep "Developer ID Application")
99-
CERT_ID=$(echo "$CERT_INFO" | awk -F'"' '{print $2}')
100-
echo "CERT_ID=$CERT_ID" >> $GITHUB_ENV
101-
echo "Certificate imported."
102-
103-
# If tagName and releaseId are omitted tauri-action will only build the app and won't try to upload any assets.
104-
- name: Build
105-
uses: tauri-apps/tauri-action@v0
106-
env:
107-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
108-
APPLE_ID: ${{ secrets.APPLE_ID }}
109-
APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
110-
APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }}
111-
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
112-
APPLE_CERTIFICATE: ${{ secrets.APPLE_CERTIFICATE }}
113-
APPLE_CERTIFICATE_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }}
114-
APPLE_SIGNING_IDENTITY: ${{ env.CERT_ID }}
115-
AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}
116-
AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}
117-
AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}
118-
TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }}
119-
TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }}
120-
with:
121-
tagName: v__VERSION__
122-
releaseName: "v__VERSION__"
123-
args: ${{ matrix.args }}
124-
releaseDraft: true
28+
target: "x86_64-pc-windows-msvc"
29+
30+
uses: ./.github/workflows/build.yml
31+
with:
32+
platform: ${{ matrix.platform }}
33+
target: ${{ matrix.target }}
34+
build-args: ${{ matrix.args }}
35+
sign-binaries: true
36+
asset-prefix: "handy"
37+
upload-artifacts: false
38+
secrets: inherit

0 commit comments

Comments
 (0)