Follow-up to #1 (OSS release rollout) and #3 (security automation + community health).
PR #3 added .github/workflows/ci.yml with a cargo deny check gate running on ubuntu-latest (github-hosted). clippy and cargo test were intentionally left out because the mlxcel build pulls in MLX C++ through cxx::bridge and the build script needs a working MLX compile environment — practically that means the existing self-hosted macOS Apple Silicon runner (self-hosted-macos-26-arm64).
Without this gate, external PRs (or our own) can break the clippy lint policy or fail tests and only get caught at release.yml time, which is too late.
Tasks
Out of scope
cargo fmt --check gate — tracked separately (see the fmt-cleanup follow-up issue)
pipeline-parallel-ci.yml distributed runs — those stay label-gated, not PR-default
Refs
Follow-up to #1 (OSS release rollout) and #3 (security automation + community health).
PR #3 added
.github/workflows/ci.ymlwith acargo deny checkgate running onubuntu-latest(github-hosted).clippyandcargo testwere intentionally left out because the mlxcel build pulls in MLX C++ throughcxx::bridgeand the build script needs a working MLX compile environment — practically that means the existing self-hosted macOS Apple Silicon runner (self-hosted-macos-26-arm64).Without this gate, external PRs (or our own) can break the clippy lint policy or fail tests and only get caught at
release.ymltime, which is too late.Tasks
clippy-and-testjob to.github/workflows/ci.ymlthat runs onself-hosted-macos-26-arm64if: needs.changes.outputs.rust == 'true'gate as the existingdenyjobrelease.ymlandpipeline-parallel-ci.yml:if: github.repository == 'lablup/mlxcel' && (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)(block fork-PR access to the self-hosted runner pool)permissions: contents: readat job levelpersist-credentials: falseon everyactions/checkout@v6cargo build --release --features metal,accelerate(verify the MLX FFI build still works)cargo clippy --all-targets --features metal,accelerate -- -D warningscargo test --release --features metal,accelerate(or the same scope asrelease.yml)cudafeature via a Linux self-hosted runner (likely a separate job) or keep that exclusive torelease.yml. Recommendation: skip on PR side, keeprelease.ymlas the cuda gate. Document the decision in the PR body.CONTRIBUTING.mdso the local quality-gate list matches what CI enforcesOut of scope
cargo fmt --checkgate — tracked separately (see the fmt-cleanup follow-up issue)pipeline-parallel-ci.ymldistributed runs — those stay label-gated, not PR-defaultRefs
release.ymlandpipeline-parallel-ci.ymlfor the existing self-hosted runner hardening pattern