tabs bug fixed. #57
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main ] | |
| release: | |
| types: [ published ] | |
| env: | |
| CARGO_TERM_COLOR: always | |
| jobs: | |
| test: | |
| name: Test Suite | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/cache | |
| ~/.cargo/registry | |
| target | |
| key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Run tests | |
| run: cargo test --verbose | |
| - name: Run clippy | |
| run: cargo clippy -- -W clippy::all | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| build: | |
| name: Build (${{ matrix.target }}) | |
| needs: test | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-gnu | |
| artifact_name: boxmux | |
| asset_name: boxmux-linux-x86_64 | |
| - os: ubuntu-latest | |
| target: x86_64-unknown-linux-musl | |
| artifact_name: boxmux | |
| asset_name: boxmux-linux-musl-x86_64 | |
| - os: windows-latest | |
| target: x86_64-pc-windows-msvc | |
| artifact_name: boxmux.exe | |
| asset_name: boxmux-windows-x86_64.exe | |
| - os: macos-latest | |
| target: x86_64-apple-darwin | |
| artifact_name: boxmux | |
| asset_name: boxmux-macos-x86_64 | |
| - os: macos-latest | |
| target: aarch64-apple-darwin | |
| artifact_name: boxmux | |
| asset_name: boxmux-macos-arm64 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{ matrix.target }} | |
| - name: Install Apple Silicon dependencies | |
| if: matrix.target == 'aarch64-apple-darwin' | |
| run: | | |
| # Update Xcode command line tools and set proper SDK | |
| sudo xcode-select --install || true | |
| export SDKROOT=$(xcrun --sdk macosx --show-sdk-path) | |
| export MACOSX_DEPLOYMENT_TARGET=$(xcrun --sdk macosx --show-sdk-version) | |
| - name: Install musl-tools (Linux musl) | |
| if: matrix.target == 'x86_64-unknown-linux-musl' | |
| run: sudo apt-get update && sudo apt-get install -y musl-tools | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/cache | |
| ~/.cargo/registry | |
| target | |
| key: ${{ matrix.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Build release | |
| run: cargo build --release --target ${{ matrix.target }} | |
| - name: Strip binary (Unix) | |
| if: matrix.os != 'windows-latest' | |
| run: strip target/${{ matrix.target }}/release/${{ matrix.artifact_name }} | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ matrix.asset_name }} | |
| path: target/${{ matrix.target }}/release/${{ matrix.artifact_name }} | |
| packages: | |
| name: Build Packages | |
| needs: test | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'release' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Install packaging tools | |
| run: | | |
| cargo install cargo-deb cargo-rpm | |
| sudo apt-get update && sudo apt-get install -y rpm | |
| - name: Cache dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: | | |
| ~/.cargo/cache | |
| ~/.cargo/registry | |
| target | |
| key: packages-cargo-${{ hashFiles('**/Cargo.lock') }} | |
| - name: Build .deb package | |
| run: cargo deb | |
| - name: Build .rpm package | |
| run: cargo rpm build | |
| - name: Upload .deb package | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: boxmux-deb | |
| path: target/debian/*.deb | |
| - name: Upload .rpm package | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: boxmux-rpm | |
| path: target/rpm/RPMS/*/*.rpm | |
| release: | |
| name: Create Release | |
| needs: [build, packages] | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'release' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Download all artifacts | |
| uses: actions/download-artifact@v4 | |
| with: | |
| merge-multiple: true | |
| - name: Display structure of downloaded files | |
| run: ls -la | |
| - name: Prepare release assets | |
| run: | | |
| mkdir release-assets | |
| # Linux GNU | |
| cp boxmux-linux-x86_64 release-assets/boxmux-linux-x86_64 || echo "boxmux-linux-x86_64 not found" | |
| chmod +x release-assets/boxmux-linux-x86_64 2>/dev/null || true | |
| # Linux musl | |
| cp boxmux-linux-musl-x86_64 release-assets/boxmux-linux-musl-x86_64 || echo "boxmux-linux-musl-x86_64 not found" | |
| chmod +x release-assets/boxmux-linux-musl-x86_64 2>/dev/null || true | |
| # macOS Intel | |
| cp boxmux-macos-x86_64 release-assets/boxmux-macos-x86_64 || echo "boxmux-macos-x86_64 not found" | |
| chmod +x release-assets/boxmux-macos-x86_64 2>/dev/null || true | |
| # macOS Apple Silicon | |
| cp boxmux-macos-arm64 release-assets/boxmux-macos-arm64 || echo "boxmux-macos-arm64 not found" | |
| chmod +x release-assets/boxmux-macos-arm64 2>/dev/null || true | |
| # Windows | |
| cp boxmux-windows-x86_64.exe release-assets/boxmux-windows-x86_64.exe || echo "boxmux-windows-x86_64.exe not found" | |
| - name: Create checksums | |
| run: | | |
| cd release-assets | |
| sha256sum * > checksums.txt | |
| cat checksums.txt | |
| - name: Copy package files | |
| run: | | |
| # Copy .deb and .rpm packages (v4 artifacts are extracted directly) | |
| cp *.deb release-assets/ 2>/dev/null || echo "No .deb files found" | |
| cp *.rpm release-assets/ 2>/dev/null || echo "No .rpm files found" | |
| # Update checksums to include packages | |
| cd release-assets | |
| sha256sum * > checksums.txt | |
| cat checksums.txt | |
| - name: Upload release assets | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| files: | | |
| release-assets/boxmux-linux-x86_64 | |
| release-assets/boxmux-linux-musl-x86_64 | |
| release-assets/boxmux-macos-x86_64 | |
| release-assets/boxmux-macos-arm64 | |
| release-assets/boxmux-windows-x86_64.exe | |
| release-assets/*.deb | |
| release-assets/*.rpm | |
| release-assets/checksums.txt | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| publish-crate: | |
| name: Publish to crates.io | |
| needs: test | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'release' | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Publish to crates.io | |
| run: cargo publish --token ${{ secrets.CARGO_REGISTRY_TOKEN }} |