aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
diff options
context:
space:
mode:
authorxxanqw <[email protected]>2025-07-01 20:08:36 +0300
committerxxanqw <[email protected]>2025-07-01 20:08:36 +0300
commit4bebd643a4d7c5aa95b3adfa7e39aaa98108f9c8 (patch)
tree83a1a7735088884bd9aa72af0a0364a354753eef /.github/workflows/build.yml
downloadmikusays-c-4bebd643a4d7c5aa95b3adfa7e39aaa98108f9c8.tar.gz
mikusays-c-4bebd643a4d7c5aa95b3adfa7e39aaa98108f9c8.zip
Initial commit
Diffstat (limited to '.github/workflows/build.yml')
-rw-r--r--.github/workflows/build.yml182
1 files changed, 182 insertions, 0 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..788f7e8
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,182 @@
+name: Build and Release
+
+on:
+ push:
+ branches: [ main, master ]
+ tags: [ 'v*' ]
+ pull_request:
+ branches: [ main, master ]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ build:
+ name: Build ${{ matrix.target }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ # Windows
+ - target: x86_64-pc-windows-msvc
+ os: windows-latest
+ ext: .exe
+ name: mikusays-windows-x64.exe
+ - target: i686-pc-windows-msvc
+ os: windows-latest
+ ext: .exe
+ name: mikusays-windows-x86.exe
+ - target: aarch64-pc-windows-msvc
+ os: windows-latest
+ ext: .exe
+ name: mikusays-windows-arm64.exe
+
+ # Linux
+ - target: x86_64-unknown-linux-gnu
+ os: ubuntu-latest
+ ext: ""
+ name: mikusays-linux-x64
+ - target: i686-unknown-linux-gnu
+ os: ubuntu-latest
+ ext: ""
+ name: mikusays-linux-x86
+ - target: aarch64-unknown-linux-gnu
+ os: ubuntu-latest
+ ext: ""
+ name: mikusays-linux-arm64
+ - target: armv7-unknown-linux-gnueabihf
+ os: ubuntu-latest
+ ext: ""
+ name: mikusays-linux-armv7
+
+ # macOS
+ - target: x86_64-apple-darwin
+ os: macos-latest
+ ext: ""
+ name: mikusays-macos-x64
+ - target: aarch64-apple-darwin
+ os: macos-latest
+ ext: ""
+ name: mikusays-macos-arm64
+
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Install cross-compilation tools (Linux)
+ if: matrix.os == 'ubuntu-latest'
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y gcc-multilib
+ if [[ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]]; then
+ sudo apt-get install -y gcc-aarch64-linux-gnu
+ fi
+ if [[ "${{ matrix.target }}" == "armv7-unknown-linux-gnueabihf" ]]; then
+ sudo apt-get install -y gcc-arm-linux-gnueabihf
+ fi
+ if [[ "${{ matrix.target }}" == "i686-unknown-linux-gnu" ]]; then
+ sudo apt-get install -y gcc-multilib
+ fi
+
+ - name: Cache cargo registry
+ uses: actions/cache@v3
+ with:
+ path: ~/.cargo/registry
+ key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
+
+ - name: Cache cargo index
+ uses: actions/cache@v3
+ with:
+ path: ~/.cargo/git
+ key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
+
+ - name: Cache cargo build
+ uses: actions/cache@v3
+ with:
+ path: target
+ key: ${{ runner.os }}-cargo-build-target-${{ matrix.target }}-${{ hashFiles('**/Cargo.lock') }}
+
+ - name: Configure cross-compilation environment
+ shell: bash
+ run: |
+ case "${{ matrix.target }}" in
+ aarch64-unknown-linux-gnu)
+ echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
+ ;;
+ armv7-unknown-linux-gnueabihf)
+ echo "CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc" >> $GITHUB_ENV
+ ;;
+ esac
+
+ - name: Build
+ run: cargo build --release --target ${{ matrix.target }}
+
+ - name: Strip binary (Unix)
+ if: matrix.os != 'windows-latest'
+ run: |
+ case "${{ matrix.target }}" in
+ aarch64-unknown-linux-gnu)
+ aarch64-linux-gnu-strip target/${{ matrix.target }}/release/mikusays
+ ;;
+ armv7-unknown-linux-gnueabihf)
+ arm-linux-gnueabihf-strip target/${{ matrix.target }}/release/mikusays
+ ;;
+ *)
+ strip target/${{ matrix.target }}/release/mikusays
+ ;;
+ esac
+
+ - name: Prepare artifact
+ shell: bash
+ run: |
+ mkdir -p artifacts
+ if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
+ cp target/${{ matrix.target }}/release/mikusays.exe artifacts/${{ matrix.name }}
+ else
+ cp target/${{ matrix.target }}/release/mikusays artifacts/${{ matrix.name }}
+ fi
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ matrix.name }}
+ path: artifacts/${{ matrix.name }}
+
+ release:
+ name: Create Release
+ runs-on: ubuntu-latest
+ needs: build
+ if: startsWith(github.ref, 'refs/tags/')
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Download all artifacts
+ uses: actions/download-artifact@v3
+ with:
+ path: artifacts
+
+ - name: Prepare release assets
+ run: |
+ mkdir -p release-assets
+ find artifacts -type f -executable -o -name "*.exe" | while read file; do
+ cp "$file" release-assets/
+ done
+ # List files for debugging
+ ls -la release-assets/
+
+ - name: Create Release
+ uses: softprops/action-gh-release@v1
+ with:
+ files: release-assets/*
+ draft: false
+ prerelease: false
+ generate_release_notes: true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}