name: CI on: push: branches: [ main, develop ] pull_request: branches: [ main ] env: CARGO_TERM_COLOR: always jobs: test: name: Test runs-on: ubuntu-latest strategy: matrix: rust: [stable, beta, nightly] steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: toolchain: ${{ matrix.rust }} components: rustfmt, clippy - name: Cache cargo registry uses: actions/cache@v4 with: path: ~/.cargo/registry key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo index uses: actions/cache@v4 with: path: ~/.cargo/git key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }} - name: Cache cargo build uses: actions/cache@v4 with: path: target key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }} - name: Check formatting run: cargo fmt --all -- --check - name: Run clippy run: cargo clippy --all-targets --all-features -- -D warnings - name: Run tests run: cargo test --verbose - name: Run benchmarks run: cargo bench --verbose build: name: Build runs-on: ubuntu-latest needs: test steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable - name: Build run: cargo build --release --verbose - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: alecc-linux-x86_64 path: target/release/alecc cross-compile: name: Cross Compile runs-on: ubuntu-latest needs: test strategy: matrix: target: [i686-unknown-linux-gnu, aarch64-unknown-linux-gnu] steps: - uses: actions/checkout@v4 - name: Install Rust uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Install cross run: cargo install cross - name: Cross compile run: cross build --release --target ${{ matrix.target }} - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: alecc-${{ matrix.target }} path: target/${{ matrix.target }}/release/alecc