name: Build CLI on Release on: push: tags: - 'ai-translator-v*' # release: # types: # - created workflow_dispatch: permissions: contents: write env: CARGO_TERM_COLOR: always RELEASE_DIR: dist jobs: build-linux: runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v6 with: submodules: true - name: Update Rust run: | rustup update rustc --version - uses: jetsung/setup-zig@v1 with: version: "0.15.2" - name: Check zig version run: | zig version - name: Install target for Linux run: | for arch in x86_64 aarch64 loongarch64; do rustup target add $arch-unknown-linux-musl done - name: Install dependencies run: | sudo apt update sudo apt install -y musl-tools musl-dev - name: Install cargo-zigbuild run: cargo install cargo-zigbuild - name: Update submodules run: git submodule update --init --recursive - name: Build cli for Linux run: | cargo zigbuild -p ai-translator --release --target x86_64-unknown-linux-musl cargo zigbuild -p ai-translator --release --target aarch64-unknown-linux-musl cargo zigbuild -p ai-translator --release --target loongarch64-unknown-linux-musl - name: Create release tarballs run: | mkdir ${{ env.RELEASE_DIR }} for arch in x86_64 aarch64 loongarch64; do 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 done - name: Upload release assets if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.event.release.tag_name }} files: ${{ env.RELEASE_DIR }}/*.tar.xz env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload artifacts if: ${{ !startsWith(github.ref, 'refs/tags/') }} uses: actions/upload-artifact@v4 with: name: ai-translator-Linux path: ${{ env.RELEASE_DIR }}/* build-macos: runs-on: macos-15 steps: - uses: actions/checkout@v6 with: submodules: true - name: Update Rust run: | rustup update rustc --version - name: Install target for MacOS run: | for arch in x86_64 aarch64; do rustup target add $arch-apple-darwin done - name: Update submodules run: git submodule update --init --recursive - name: Build server and cli for MacOS run: | cargo build -p ai-translator --release --target x86_64-apple-darwin cargo build -p ai-translator --release --target aarch64-apple-darwin - name: Create release tarballs run: | mkdir ${{ env.RELEASE_DIR }} for arch in x86_64 aarch64; do tar -cJf "${{ env.RELEASE_DIR }}/ai-translator-${{ github.event.release.tag_name }}-$arch-apple-darwin.tar.xz" -C target/$arch-apple-darwin/release aitr done - name: Upload release assets if: ${{ startsWith(github.ref, 'refs/tags/') }} uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.event.release.tag_name }} files: ${{ env.RELEASE_DIR }}/*.tar.xz env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload artifacts if: ${{ !startsWith(github.ref, 'refs/tags/') }} uses: actions/upload-artifact@v4 with: name: ai-translator-macOS path: ${{ env.RELEASE_DIR }}/* build-windows: runs-on: windows-2025 steps: - uses: actions/checkout@v6 with: submodules: true - name: Update Rust run: | rustup update rustc --version - name: Install zip utility run: choco install zip -y shell: powershell - name: Install target for Windows shell: bash run: | for arch in x86_64 aarch64; do rustup target add $arch-pc-windows-msvc done - name: Update submodules run: git submodule update --init --recursive - name: Build server and cli for Windows run: | cargo build -p ai-translator --release --target x86_64-pc-windows-msvc cargo build -p ai-translator --release --target aarch64-pc-windows-msvc - name: Create release zip files shell: bash run: | mkdir "${{ env.RELEASE_DIR }}" for arch in x86_64 aarch64; do 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 done - name: Upload release assets if: ${{ startsWith(github.ref, 'refs/tags/') }} uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.event.release.tag_name }} files: ${{ env.RELEASE_DIR }}/*.zip env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload artifacts if: ${{ !startsWith(github.ref, 'refs/tags/') }} uses: actions/upload-artifact@v4 with: name: ai-translator-Windows path: ${{ env.RELEASE_DIR }}/*