Skip to content

Commit 4356a94

Browse files
author
linyuan.yang
committed
release
1 parent dfe9c21 commit 4356a94

2 files changed

Lines changed: 90 additions & 272 deletions

File tree

.github/workflows/release-app.yml

Lines changed: 66 additions & 262 deletions
Original file line numberDiff line numberDiff line change
@@ -13,276 +13,80 @@ concurrency:
1313
cancel-in-progress: false
1414

1515
jobs:
16-
release-desktop:
17-
strategy:
18-
fail-fast: false
19-
matrix:
20-
include:
21-
- platform: macos-latest
22-
args: '--target aarch64-apple-darwin'
23-
rust-target: aarch64-apple-darwin
24-
- platform: macos-latest
25-
args: '--target x86_64-apple-darwin'
26-
rust-target: x86_64-apple-darwin
27-
- platform: ubuntu-22.04
28-
args: ''
29-
rust-target: ''
30-
- platform: windows-latest
31-
args: ''
32-
rust-target: ''
33-
34-
runs-on: ${{ matrix.platform }}
16+
check:
17+
runs-on: ubuntu-latest
18+
outputs:
19+
tag: ${{ steps.release.outputs.tag }}
20+
version: ${{ steps.release.outputs.version }}
21+
notes: ${{ steps.release.outputs.notes }}
3522
steps:
36-
- uses: actions/checkout@v4
37-
38-
- uses: pnpm/action-setup@v4
39-
with:
40-
version: 10.33.0
41-
42-
- uses: actions/setup-node@v4
43-
with:
44-
node-version: 20
45-
cache: pnpm
46-
47-
- name: Install Rust
48-
uses: dtolnay/rust-toolchain@stable
49-
with:
50-
targets: ${{ matrix.rust-target }}
51-
52-
- name: Cache cargo registry
53-
uses: actions/cache@v4
54-
with:
55-
path: |
56-
~/.cargo/registry
57-
~/.cargo/git
58-
packages/app/src-tauri/target
59-
key: ${{ matrix.platform }}-cargo-app-${{ hashFiles('packages/app/src-tauri/Cargo.lock') }}
60-
restore-keys: |
61-
${{ matrix.platform }}-cargo-app-
62-
63-
- name: Install Linux deps
64-
if: matrix.platform == 'ubuntu-22.04'
65-
run: |
66-
sudo apt-get update
67-
sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
68-
69-
- run: pnpm install --frozen-lockfile
70-
71-
- name: Resolve release body
72-
id: notes
73-
shell: bash
74-
run: |
75-
if [[ "$GITHUB_REF_TYPE" == "tag" && "$GITHUB_REF_NAME" == v* ]]; then
76-
VERSION="${GITHUB_REF_NAME#v}"
77-
else
78-
VERSION="$(node -p "require('./package.json').version")"
79-
fi
80-
{
81-
echo "body<<RELEASE_NOTES_EOF"
82-
echo "Release $VERSION"
83-
echo "RELEASE_NOTES_EOF"
84-
} >> "$GITHUB_OUTPUT"
23+
- uses: actions/checkout@v5
8524

86-
- uses: tauri-apps/tauri-action@v0
25+
- id: release
26+
uses: while-coder/workflows/.github/actions/resolve-release-info@main
8727
with:
88-
projectPath: packages/app
89-
tagName: v__VERSION__
90-
releaseName: 'nes-emulator v__VERSION__'
91-
releaseBody: ${{ steps.notes.outputs.body }}
92-
releaseDraft: true
93-
prerelease: false
94-
args: ${{ matrix.args }}
95-
env:
96-
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
28+
tag-prefix: v
29+
package-json: package.json
30+
changelog: CHANGELOG.md
9731

98-
release-android:
32+
prepare-release:
33+
needs: check
9934
runs-on: ubuntu-latest
10035
steps:
101-
- uses: actions/checkout@v4
102-
103-
- uses: pnpm/action-setup@v4
104-
with:
105-
version: 10.33.0
106-
107-
- uses: actions/setup-node@v4
36+
- name: Delete existing GitHub Release
37+
uses: while-coder/workflows/.github/actions/recreate-github-release@main
10838
with:
109-
node-version: 20
110-
cache: pnpm
111-
112-
- uses: actions/setup-java@v4
113-
with:
114-
distribution: temurin
115-
java-version: 17
116-
117-
- uses: android-actions/setup-android@v3
118-
with:
119-
packages: 'platform-tools platforms;android-36 build-tools;36.0.0 ndk;27.0.12077973'
120-
121-
- name: Install Rust with Android targets
122-
uses: dtolnay/rust-toolchain@stable
123-
with:
124-
targets: aarch64-linux-android,armv7-linux-androideabi,i686-linux-android,x86_64-linux-android
125-
126-
- name: Cache cargo registry
127-
uses: actions/cache@v4
128-
with:
129-
path: |
130-
~/.cargo/registry
131-
~/.cargo/git
132-
packages/app/src-tauri/target
133-
key: android-cargo-app-${{ hashFiles('packages/app/src-tauri/Cargo.lock') }}
134-
restore-keys: |
135-
android-cargo-app-
136-
137-
- run: pnpm install --frozen-lockfile
39+
github-token: ${{ secrets.GITHUB_TOKEN }}
40+
tag: ${{ needs.check.outputs.tag }}
41+
create: 'false'
13842

139-
- name: Decode Android keystore
140-
env:
141-
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
142-
run: |
143-
if [ -z "$ANDROID_KEYSTORE_BASE64" ]; then
144-
echo "::error::ANDROID_KEYSTORE_BASE64 secret is required"
145-
exit 1
146-
fi
147-
echo "$ANDROID_KEYSTORE_BASE64" | base64 --decode > "$RUNNER_TEMP/release.jks"
148-
echo "ANDROID_KEYSTORE_PATH=$RUNNER_TEMP/release.jks" >> "$GITHUB_ENV"
149-
150-
- name: Build Android APK and AAB
151-
working-directory: packages/app
152-
env:
153-
NDK_HOME: ${{ env.ANDROID_NDK_ROOT }}
154-
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
155-
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
156-
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
157-
run: |
158-
if [ -z "$ANDROID_KEY_ALIAS" ] || [ -z "$ANDROID_KEY_PASSWORD" ] || [ -z "$ANDROID_KEYSTORE_PASSWORD" ]; then
159-
echo "::error::ANDROID_KEY_ALIAS, ANDROID_KEY_PASSWORD, and ANDROID_KEYSTORE_PASSWORD secrets are required"
160-
exit 1
161-
fi
162-
pnpm run android:build -- --apk --aab
163-
164-
- name: Package Android artifacts
165-
id: package
166-
shell: bash
167-
run: |
168-
if [[ "$GITHUB_REF_TYPE" == "tag" && "$GITHUB_REF_NAME" == v* ]]; then
169-
VERSION="${GITHUB_REF_NAME#v}"
170-
else
171-
VERSION="$(node -p "require('./package.json').version")"
172-
fi
173-
mkdir -p artifacts
174-
cp packages/app/src-tauri/gen/android/app/build/outputs/apk/universal/release/*.apk \
175-
"artifacts/nes-emulator_${VERSION}_universal.apk"
176-
cp packages/app/src-tauri/gen/android/app/build/outputs/bundle/universalRelease/*.aab \
177-
"artifacts/nes-emulator_${VERSION}_universal.aab"
178-
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
179-
180-
- name: Upload Android artifacts to release
181-
if: startsWith(github.ref, 'refs/tags/v')
182-
uses: softprops/action-gh-release@v2
183-
with:
184-
tag_name: ${{ github.ref_name }}
185-
name: nes-emulator v${{ steps.package.outputs.version }}
186-
draft: true
187-
files: artifacts/*
43+
release-desktop:
44+
needs: [check, prepare-release]
45+
uses: while-coder/workflows/.github/workflows/tauri-desktop-release.yml@main
46+
with:
47+
project-path: packages/app
48+
cargo-lock-path: packages/app/src-tauri/Cargo.lock
49+
cargo-target-path: packages/app/src-tauri/target
50+
cache-key-prefix: cargo-app
51+
tag-name: ${{ needs.check.outputs.tag }}
52+
release-name: nes-emulator v${{ needs.check.outputs.version }}
53+
release-body: ${{ needs.check.outputs.notes }}
54+
release-draft: true
55+
matrix-json: >-
56+
[{"platform":"macos-latest","args":"--target aarch64-apple-darwin","rust-target":"aarch64-apple-darwin"},{"platform":"macos-latest","args":"--target x86_64-apple-darwin","rust-target":"x86_64-apple-darwin"},{"platform":"ubuntu-22.04","args":"","rust-target":""},{"platform":"windows-latest","args":"","rust-target":""}]
57+
node-version: '20'
58+
secrets: inherit
18859

189-
- name: Upload Android artifacts
190-
if: github.event_name == 'workflow_dispatch'
191-
uses: actions/upload-artifact@v4
192-
with:
193-
name: nes-emulator-android
194-
path: artifacts/*
60+
release-android:
61+
needs: [check, release-desktop]
62+
if: ${{ !cancelled() && needs.release-desktop.result == 'success' }}
63+
uses: while-coder/workflows/.github/workflows/tauri-android-release.yml@main
64+
with:
65+
project-path: packages/app
66+
cargo-lock-path: packages/app/src-tauri/Cargo.lock
67+
cargo-target-path: packages/app/src-tauri/target
68+
cache-key-prefix: android-cargo-app
69+
tag-name: ${{ needs.check.outputs.tag }}
70+
version: ${{ needs.check.outputs.version }}
71+
asset-prefix: nes-emulator
72+
build-command: pnpm run android:build -- --apk --aab
73+
node-version: '20'
74+
android-ndk-version: 27.0.12077973
75+
secrets: inherit
19576

19677
release-ios:
197-
runs-on: macos-latest
198-
steps:
199-
- uses: actions/checkout@v4
200-
201-
- uses: pnpm/action-setup@v4
202-
with:
203-
version: 10.33.0
204-
205-
- uses: actions/setup-node@v4
206-
with:
207-
node-version: 20
208-
cache: pnpm
209-
210-
- name: Install Rust with iOS targets
211-
uses: dtolnay/rust-toolchain@stable
212-
with:
213-
targets: aarch64-apple-ios,aarch64-apple-ios-sim,x86_64-apple-ios
214-
215-
- name: Cache cargo registry
216-
uses: actions/cache@v4
217-
with:
218-
path: |
219-
~/.cargo/registry
220-
~/.cargo/git
221-
packages/app/src-tauri/target
222-
key: ios-cargo-app-${{ hashFiles('packages/app/src-tauri/Cargo.lock') }}
223-
restore-keys: |
224-
ios-cargo-app-
225-
226-
- run: pnpm install --frozen-lockfile
227-
228-
- name: Initialize iOS project
229-
shell: bash
230-
run: |
231-
if [ ! -d packages/app/src-tauri/gen/apple ]; then
232-
pnpm --filter @nes-emulator/app run tauri -- ios init --ci
233-
fi
234-
235-
- name: Build iOS app
236-
working-directory: packages/app
237-
run: pnpm run ios:build -- --ci --export-method release-testing
238-
239-
- name: Package iOS artifacts
240-
id: package
241-
shell: bash
242-
run: |
243-
if [[ "$GITHUB_REF_TYPE" == "tag" && "$GITHUB_REF_NAME" == v* ]]; then
244-
VERSION="${GITHUB_REF_NAME#v}"
245-
else
246-
VERSION="$(node -p "require('./package.json').version")"
247-
fi
248-
mkdir -p artifacts
249-
250-
while IFS= read -r file; do
251-
cp "$file" "artifacts/nes-emulator_${VERSION}_$(basename "$file")"
252-
done < <(find packages/app/src-tauri/gen/apple -type f -name "*.ipa" 2>/dev/null)
253-
254-
mapfile -t archives < <(find packages/app/src-tauri/gen/apple -type d -name "*.xcarchive" 2>/dev/null)
255-
if [ "${#archives[@]}" -gt 0 ]; then
256-
for archive in "${archives[@]}"; do
257-
ditto -c -k --sequesterRsrc --keepParent "$archive" \
258-
"artifacts/nes-emulator_${VERSION}_$(basename "$archive").zip"
259-
done
260-
else
261-
while IFS= read -r app; do
262-
ditto -c -k --sequesterRsrc --keepParent "$app" \
263-
"artifacts/nes-emulator_${VERSION}_$(basename "$app").zip"
264-
done < <(find packages/app/src-tauri/gen/apple -type d -name "*.app" 2>/dev/null)
265-
fi
266-
267-
if ! compgen -G "artifacts/*" > /dev/null; then
268-
echo "::error::No iOS artifacts were found"
269-
find packages/app/src-tauri/gen/apple -maxdepth 5 \( -type f -o -type d \)
270-
exit 1
271-
fi
272-
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
273-
274-
- name: Upload iOS artifacts to release
275-
if: startsWith(github.ref, 'refs/tags/v')
276-
uses: softprops/action-gh-release@v2
277-
with:
278-
tag_name: ${{ github.ref_name }}
279-
name: nes-emulator v${{ steps.package.outputs.version }}
280-
draft: true
281-
files: artifacts/*
282-
283-
- name: Upload iOS artifacts
284-
if: github.event_name == 'workflow_dispatch'
285-
uses: actions/upload-artifact@v4
286-
with:
287-
name: nes-emulator-ios
288-
path: artifacts/*
78+
needs: [check, release-desktop]
79+
if: ${{ !cancelled() && needs.release-desktop.result == 'success' }}
80+
uses: while-coder/workflows/.github/workflows/tauri-ios-unsigned.yml@main
81+
with:
82+
project-path: packages/app
83+
cargo-lock-path: packages/app/src-tauri/Cargo.lock
84+
cargo-target-path: packages/app/src-tauri/target
85+
cache-key-prefix: ios-cargo-app
86+
tag-name: ${{ needs.check.outputs.tag }}
87+
version: ${{ needs.check.outputs.version }}
88+
asset-prefix: nes-emulator
89+
init-command: if [ ! -d src-tauri/gen/apple ]; then pnpm tauri ios init --ci; fi
90+
build-command: pnpm run ios:build -- --target aarch64 --no-sign --ci
91+
node-version: '20'
92+
secrets: inherit

0 commit comments

Comments
 (0)