1
+ # Action name
2
+ name : Deploy
3
+
4
+ # 触发条件,这里是新的 tag 被 push 时触发
5
+ on :
6
+ push :
7
+ tags :
8
+ # 正则匹配 tag 格式,如 v0.1.0
9
+ - " v[0-9]+.[0-9]+.[0-9]+"
10
+ workflow_dispatch :
11
+
12
+ permissions :
13
+ contents : write
14
+
15
+ # 实际工作
16
+ jobs :
17
+ build-and-upload :
18
+ name : Build and Upload
19
+ runs-on : ${{ matrix.os }}
20
+
21
+ strategy :
22
+ fail-fast : false
23
+ # 配置编译目标平台,这里是在 Ubuntu, MacOS, Windows 上分别编译
24
+ matrix :
25
+ include :
26
+ - build : linux
27
+ os : ubuntu-latest
28
+ target : x86_64-unknown-linux-gnu
29
+ features : " linux-shared-hidraw"
30
+
31
+ - build : macos
32
+ os : macos-latest
33
+ target : x86_64-apple-darwin
34
+ features : " "
35
+
36
+ - build : windows
37
+ os : windows-latest
38
+ target : x86_64-pc-windows-msvc
39
+ features : " "
40
+ # 执行流程
41
+ steps :
42
+ # 克隆仓库代码
43
+ - name : Clone repository
44
+ uses : actions/checkout@v3
45
+
46
+ # 获取发布版本号
47
+ - name : Get the release version from the tag
48
+ shell : bash
49
+ run : echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV
50
+
51
+ # 安装 rust
52
+ - name : Install rust
53
+ uses : dtolnay/rust-toolchain@stable
54
+ # 将上面配置的 target 传入
55
+ with :
56
+ targets : ${{ matrix.target }}
57
+
58
+ # 安装依赖库
59
+ - name : Install dependencies
60
+ shell : bash
61
+ run : |
62
+ if [ "${{ matrix.build }}" = "linux" ]; then
63
+ set -eux
64
+ sudo apt-get update -y
65
+ sudo apt-get install -y libudev-dev
66
+ # sudo apt-get install -y libusb-1.0.0-dev
67
+ sudo apt-get install -y tree
68
+ elif [ "${{ matrix.build }}" = "macos" ]; then
69
+ brew install tree
70
+ fi
71
+
72
+ # 构建二进制文件
73
+ - name : Build binary files
74
+ uses : actions-rs/cargo@v1
75
+ with :
76
+ # use-cross: true
77
+ command : build
78
+ args : --verbose --release --target ${{ matrix.target }}
79
+
80
+ # 打包上传二进制文件
81
+ - name : Archive files
82
+ shell : bash
83
+ run : |
84
+ bin_name="hid"
85
+ bin_dir="addons/hid/bin"
86
+
87
+ mkdir -p "$bin_dir"
88
+ if [ "${{ matrix.build }}" = "linux" ]; then
89
+ bin_file="lib$bin_name.${{ matrix.build }}.so"
90
+ mv target/${{ matrix.target }}/release/lib$bin_name.so $bin_dir/$bin_file
91
+ elif [ "${{ matrix.build }}" = "macos" ]; then
92
+ bin_file="lib$bin_name.${{ matrix.build }}.dylib"
93
+ mv target/${{ matrix.target }}/release/lib$bin_name.dylib $bin_dir/$bin_file
94
+ else
95
+ bin_file="$bin_name.${{ matrix.build }}.dll"
96
+ mv target/${{ matrix.target }}/release/$bin_name.dll $bin_dir/$bin_file
97
+ fi
98
+
99
+ cat>$bin_dir/../$bin_name.gdextension<<EOF
100
+ [configuration]
101
+ entry_symbol = "hid_lib_init"
102
+ compatibility_minimum = 4.0
103
+ [libraries]
104
+ ${{ matrix.build }}.x86_64 = "bin/$bin_file"
105
+ EOF
106
+
107
+ archive_name="$bin_name-${{ env.VERSION }}-${{ matrix.build }}"
108
+ if [ "${{ matrix.build }}" = "windows" ]; then
109
+ 7z a "$archive_name.zip" "addons"
110
+ echo "ASSET=$archive_name.zip" >> $GITHUB_ENV
111
+ else
112
+ tree addons
113
+ tar -czvf "$archive_name.tar.gz" "addons"
114
+ echo "ASSET=$archive_name.tar.gz" >> $GITHUB_ENV
115
+ fi
116
+
117
+ - name : Release files
118
+ uses : softprops/action-gh-release@v1
119
+ with :
120
+ files : |
121
+ ${{ env.ASSET }}
0 commit comments