Последняя активность 1 month ago

GitHub Action 构建二进制文件并发布

Версия 8d333b5335ffc8e6977c63e48aa8694224f80ca5

build-rust.yml Исходник
1name: Build CLI on Release
2
3on:
4 push:
5 tags:
6 - 'ai-translator-v*'
7 # release:
8 # types:
9 # - created
10 workflow_dispatch:
11
12permissions:
13 contents: write
14
15env:
16 CARGO_TERM_COLOR: always
17 RELEASE_DIR: dist
18
19jobs:
20 build-linux:
21 runs-on: ubuntu-24.04
22 steps:
23 - uses: actions/checkout@v6
24 with:
25 submodules: true
26 - name: Update Rust
27 run: |
28 rustup update
29 rustc --version
30 - uses: jetsung/setup-zig@v1
31 with:
32 version: "0.15.2"
33 - name: Check zig version
34 run: |
35 zig version
36 - name: Install target for Linux
37 run: |
38 for arch in x86_64 aarch64 loongarch64; do
39 rustup target add $arch-unknown-linux-musl
40 done
41 - name: Install dependencies
42 run: |
43 sudo apt update
44 sudo apt install -y musl-tools musl-dev
45 - name: Install cargo-zigbuild
46 run: cargo install cargo-zigbuild
47 - name: Update submodules
48 run: git submodule update --init --recursive
49 - name: Build cli for Linux
50 run: |
51 cargo zigbuild -p ai-translator --release --target x86_64-unknown-linux-musl
52 cargo zigbuild -p ai-translator --release --target aarch64-unknown-linux-musl
53 cargo zigbuild -p ai-translator --release --target loongarch64-unknown-linux-musl
54 - name: Create release tarballs
55 run: |
56 mkdir ${{ env.RELEASE_DIR }}
57 for arch in x86_64 aarch64 loongarch64; do
58 tar -cJf "${{ env.RELEASE_DIR }}/ai-translator-${{ github.event.release.tag_name }}-$arch-unknown-linux-musl.tar.xz" -C target/$arch-unknown-linux-musl/release aitr
59 done
60 - name: Upload release assets
61 if: startsWith(github.ref, 'refs/tags/')
62 uses: softprops/action-gh-release@v2
63 with:
64 tag_name: ${{ github.event.release.tag_name }}
65 files: ${{ env.RELEASE_DIR }}/*.tar.xz
66 env:
67 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
68 - name: Upload artifacts
69 if: ${{ !startsWith(github.ref, 'refs/tags/') }}
70 uses: actions/upload-artifact@v4
71 with:
72 name: ai-translator-Linux
73 path: ${{ env.RELEASE_DIR }}/*
74
75 build-macos:
76 runs-on: macos-15
77 steps:
78 - uses: actions/checkout@v6
79 with:
80 submodules: true
81 - name: Update Rust
82 run: |
83 rustup update
84 rustc --version
85 - name: Install target for MacOS
86 run: |
87 for arch in x86_64 aarch64; do
88 rustup target add $arch-apple-darwin
89 done
90 - name: Update submodules
91 run: git submodule update --init --recursive
92 - name: Build server and cli for MacOS
93 run: |
94 cargo build -p ai-translator --release --target x86_64-apple-darwin
95 cargo build -p ai-translator --release --target aarch64-apple-darwin
96 - name: Create release tarballs
97 run: |
98 mkdir ${{ env.RELEASE_DIR }}
99 for arch in x86_64 aarch64; do
100 tar -cJf "${{ env.RELEASE_DIR }}/ai-translator-${{ github.event.release.tag_name }}-$arch-apple-darwin.tar.xz" -C target/$arch-apple-darwin/release aitr
101 done
102 - name: Upload release assets
103 if: ${{ startsWith(github.ref, 'refs/tags/') }}
104 uses: softprops/action-gh-release@v2
105 with:
106 tag_name: ${{ github.event.release.tag_name }}
107 files: ${{ env.RELEASE_DIR }}/*.tar.xz
108 env:
109 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
110 - name: Upload artifacts
111 if: ${{ !startsWith(github.ref, 'refs/tags/') }}
112 uses: actions/upload-artifact@v4
113 with:
114 name: ai-translator-macOS
115 path: ${{ env.RELEASE_DIR }}/*
116
117 build-windows:
118 runs-on: windows-2025
119 steps:
120 - uses: actions/checkout@v6
121 with:
122 submodules: true
123 - name: Update Rust
124 run: |
125 rustup update
126 rustc --version
127 - name: Install zip utility
128 run: choco install zip -y
129 shell: powershell
130 - name: Install target for Windows
131 shell: bash
132 run: |
133 for arch in x86_64 aarch64; do
134 rustup target add $arch-pc-windows-msvc
135 done
136 - name: Update submodules
137 run: git submodule update --init --recursive
138 - name: Build server and cli for Windows
139 run: |
140 cargo build -p ai-translator --release --target x86_64-pc-windows-msvc
141 cargo build -p ai-translator --release --target aarch64-pc-windows-msvc
142 - name: Create release zip files
143 shell: bash
144 run: |
145 mkdir "${{ env.RELEASE_DIR }}"
146 for arch in x86_64 aarch64; do
147 zip -j "${{ env.RELEASE_DIR }}/ai-translator-${{ github.event.release.tag_name }}-$arch-pc-windows-msvc.zip" target/$arch-pc-windows-msvc/release/aitr.exe
148 done
149 - name: Upload release assets
150 if: ${{ startsWith(github.ref, 'refs/tags/') }}
151 uses: softprops/action-gh-release@v2
152 with:
153 tag_name: ${{ github.event.release.tag_name }}
154 files: ${{ env.RELEASE_DIR }}/*.zip
155 env:
156 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
157 - name: Upload artifacts
158 if: ${{ !startsWith(github.ref, 'refs/tags/') }}
159 uses: actions/upload-artifact@v4
160 with:
161 name: ai-translator-Windows
162 path: ${{ env.RELEASE_DIR }}/*
163