-
Notifications
You must be signed in to change notification settings - Fork 24
151 lines (135 loc) · 4.76 KB
/
Copy pathbuild.yml
File metadata and controls
151 lines (135 loc) · 4.76 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
name: Build
on:
push:
branches: [ "main" ]
tags:
- 'v*' # 匹配所有以v开头的tag,如v1.0.0
pull_request:
branches: [ "main" ]
workflow_dispatch:
inputs:
create_release:
description: 'Create GitHub Release'
required: true
default: 'false'
type: choice
options:
- 'true'
- 'false'
tag_name:
description: 'Release tag name (e.g.: v1.0.0)'
required: false
type: string
jobs:
build:
runs-on: windows-latest
permissions:
contents: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Node.js
uses: actions/setup-node@v4
with:
node-version: '20.19.0'
- name: Install pnpm
uses: pnpm/action-setup@v2
with:
version: 8
run_install: false
- name: Get pnpm store directory
id: pnpm-store
shell: bash
run: |
echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_OUTPUT
- name: Setup pnpm cache
uses: actions/cache@v4
with:
path: ${{ steps.pnpm-store.outputs.STORE_PATH }}
key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
restore-keys: |
${{ runner.os }}-pnpm-store-
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: x86_64-pc-windows-msvc
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: "./src-tauri -> target"
- name: Install dependencies
run: pnpm install
- name: Get version
id: get_version
shell: bash
run: |
VERSION=$(node -p "require('./package.json').version")
echo "VERSION=$VERSION" >> $GITHUB_OUTPUT
echo "Version is $VERSION"
# Check if should create release
- name: Check if should create release
id: should_release
shell: bash
run: |
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
echo "CREATE_RELEASE=true" >> $GITHUB_OUTPUT
echo "TAG_NAME=${GITHUB_REF_NAME}" >> $GITHUB_OUTPUT
echo "Triggered by tag: ${GITHUB_REF_NAME}"
elif [[ "${{ github.event.inputs.create_release }}" == "true" ]]; then
echo "CREATE_RELEASE=true" >> $GITHUB_OUTPUT
TAG_NAME="${{ github.event.inputs.tag_name }}"
if [[ -z "$TAG_NAME" ]]; then
TAG_NAME="v${{ steps.get_version.outputs.VERSION }}"
fi
echo "TAG_NAME=$TAG_NAME" >> $GITHUB_OUTPUT
echo "Manual release requested with tag: $TAG_NAME"
else
echo "CREATE_RELEASE=false" >> $GITHUB_OUTPUT
echo "Regular build, no release will be created"
fi
- name: Build project
env:
GITHUB_ACTIONS: true
run: pnpm tauri build
# Regular build: Upload to Artifacts
- name: Upload Executable (Artifact)
if: steps.should_release.outputs.CREATE_RELEASE == 'false'
uses: actions/upload-artifact@v4
with:
name: ReinaManager-${{ steps.get_version.outputs.VERSION }}-win_x64-exe
path: src-tauri/target/release/ReinaManager.exe
if-no-files-found: warn
- name: Upload MSI Installer (Artifact)
if: steps.should_release.outputs.CREATE_RELEASE == 'false'
uses: actions/upload-artifact@v4
with:
name: ReinaManager-${{ steps.get_version.outputs.VERSION }}-win_x64-msi
path: src-tauri/target/release/bundle/msi/*.msi
if-no-files-found: warn
- name: Upload NSIS Installer (Artifact)
if: steps.should_release.outputs.CREATE_RELEASE == 'false'
uses: actions/upload-artifact@v4
with:
name: ReinaManager-${{ steps.get_version.outputs.VERSION }}-win_x64-setup
path: src-tauri/target/release/bundle/nsis/*.exe
if-no-files-found: warn
# Release build: Create GitHub Release
- name: Create Release
if: steps.should_release.outputs.CREATE_RELEASE == 'true'
id: create_release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ steps.should_release.outputs.TAG_NAME }}
name: ${{ steps.should_release.outputs.TAG_NAME }}
body: |
Windows x64 installers for ReinaManager.
- Version: ${{ steps.get_version.outputs.VERSION }}
- Includes: NSIS .exe and MSI installers
- Architecture: win_x64
draft: false
prerelease: false
generate_release_notes: true
files: |
LICENSE
src-tauri/target/release/bundle/nsis/*.exe
src-tauri/target/release/bundle/msi/*.msi