aboutsummaryrefslogtreecommitdiff
path: root/.github
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
downloadmikusays-c-4bebd643a4d7c5aa95b3adfa7e39aaa98108f9c8.tar.gz
mikusays-c-4bebd643a4d7c5aa95b3adfa7e39aaa98108f9c8.zip
Initial commit
Diffstat (limited to '.github')
-rw-r--r--.github/workflows/build.yml182
-rw-r--r--.github/workflows/ci.yml56
-rw-r--r--.github/workflows/release.yml174
3 files changed, 412 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 }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
new file mode 100644
index 0000000..2267a00
--- /dev/null
+++ b/.github/workflows/ci.yml
@@ -0,0 +1,56 @@
+name: CI
+
+on:
+ push:
+ branches: [ main, master ]
+ pull_request:
+ branches: [ main, master ]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Check formatting
+ run: cargo fmt -- --check
+
+ - name: Run clippy
+ run: cargo clippy -- -D warnings
+
+ - name: Run tests
+ run: cargo test --verbose
+
+ - name: Build
+ run: cargo build --verbose
+
+ build-check:
+ name: Build Check (${{ matrix.os }})
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-latest, macos-latest]
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Build
+ run: cargo build --release
+
+ - name: Test run
+ shell: bash
+ run: |
+ if [[ "${{ matrix.os }}" == "windows-latest" ]]; then
+ ./target/release/mikusays.exe "CI Test on ${{ matrix.os }}"
+ else
+ ./target/release/mikusays "CI Test on ${{ matrix.os }}"
+ fi
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
new file mode 100644
index 0000000..41f95c7
--- /dev/null
+++ b/.github/workflows/release.yml
@@ -0,0 +1,174 @@
+name: Cross-platform Build
+
+on:
+ push:
+ branches: [ main, master ]
+ tags: [ 'v*' ]
+ workflow_dispatch:
+
+jobs:
+ build-windows:
+ name: Build Windows
+ runs-on: windows-latest
+ strategy:
+ matrix:
+ target:
+ - x86_64-pc-windows-msvc
+ - aarch64-pc-windows-msvc
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Build
+ run: cargo build --release --target ${{ matrix.target }}
+
+ - name: Prepare artifact
+ run: |
+ mkdir artifacts
+ $arch = "${{ matrix.target }}".Split('-')[0]
+ copy "target\${{ matrix.target }}\release\mikusays.exe" "artifacts\mikusays-windows-$arch.exe"
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: mikusays-windows-${{ matrix.target }}
+ path: artifacts\*
+
+ build-linux:
+ name: Build Linux
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ include:
+ - target: x86_64-unknown-linux-gnu
+ arch: x64
+ - target: aarch64-unknown-linux-gnu
+ arch: arm64
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Install cross-compilation tools
+ if: matrix.target == 'aarch64-unknown-linux-gnu'
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y gcc-aarch64-linux-gnu
+ echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
+
+ - name: Build
+ run: cargo build --release --target ${{ matrix.target }}
+
+ - name: Strip binary
+ run: |
+ if [[ "${{ matrix.target }}" == "aarch64-unknown-linux-gnu" ]]; then
+ aarch64-linux-gnu-strip target/${{ matrix.target }}/release/mikusays
+ else
+ strip target/${{ matrix.target }}/release/mikusays
+ fi
+
+ - name: Prepare artifact
+ run: |
+ mkdir -p artifacts
+ cp target/${{ matrix.target }}/release/mikusays artifacts/mikusays-linux-${{ matrix.arch }}
+ chmod +x artifacts/mikusays-linux-${{ matrix.arch }}
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: mikusays-linux-${{ matrix.arch }}
+ path: artifacts/*
+
+ build-macos:
+ name: Build macOS
+ runs-on: macos-latest
+ strategy:
+ matrix:
+ include:
+ - target: x86_64-apple-darwin
+ arch: x64
+ - target: aarch64-apple-darwin
+ arch: arm64
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Build
+ run: cargo build --release --target ${{ matrix.target }}
+
+ - name: Strip binary
+ run: strip target/${{ matrix.target }}/release/mikusays
+
+ - name: Prepare artifact
+ run: |
+ mkdir -p artifacts
+ cp target/${{ matrix.target }}/release/mikusays artifacts/mikusays-macos-${{ matrix.arch }}
+ chmod +x artifacts/mikusays-macos-${{ matrix.arch }}
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: mikusays-macos-${{ matrix.arch }}
+ path: artifacts/*
+
+ create-release:
+ name: Create Release
+ runs-on: ubuntu-latest
+ needs: [build-windows, build-linux, build-macos]
+ if: startsWith(github.ref, 'refs/tags/v')
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Download all artifacts
+ uses: actions/download-artifact@v4
+ with:
+ path: artifacts
+ merge-multiple: true
+
+ - name: Display structure of downloaded files
+ run: ls -R artifacts
+
+ - name: Create Release
+ uses: softprops/action-gh-release@v1
+ with:
+ files: artifacts/*
+ draft: false
+ prerelease: false
+ generate_release_notes: true
+ body: |
+ ## Downloads
+
+ ### Windows
+ - **x64**: `mikusays-windows-x86_64.exe`
+ - **ARM64**: `mikusays-windows-aarch64.exe`
+
+ ### Linux
+ - **x64**: `mikusays-linux-x64`
+ - **ARM64**: `mikusays-linux-arm64`
+
+ ### macOS
+ - **Intel (x64)**: `mikusays-macos-x64`
+ - **Apple Silicon (ARM64)**: `mikusays-macos-arm64`
+
+ ## Usage
+ ```bash
+ # Download the appropriate binary for your platform
+ # On Unix-like systems, make it executable:
+ chmod +x mikusays-*
+
+ # Run the program:
+ ./mikusays-* "Hello, World!"
+ ```
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}