Skip to content

chore: complete OSS release rollout #1

@inureyes

Description

@inureyes

Tracking issue for completing the OSS release of mlxcel. The repository was flipped to PUBLIC on 2026-05-18 and v0.0.27 is now published as the first public stable release. This issue tracks remaining hardening, community-health, and verification work so the public release can be considered fully ready for external contributors.

v0.0.27 live functional verification (Gemma 4 MTP / Qwen 3.5 DFlash byte-equality, /v1/responses cancel-in-flight, downloader progress bars, APC partial adoption) is tracked in a separate issue (#2) and is intentionally out of scope here.

Done so far

Repository metadata & community basics

  • LICENSE (Apache 2.0) added at repo root
  • Public-facing README.md rewritten
  • CODE_OF_CONDUCT.md (Contributor Covenant) added
  • AGENTS.md contributor guide added
  • Public docs/ set added: architecture.md, adding-models.md, benchmarks.md, code-guidelines.md, distributed.md, environment-variables.md, installation.md, responses-api.md, supported-models.md, turbo-kv-cache.md, README.md
  • .gitleaksignore added with 15 known false-positive findings
  • mlxcel-core/Cargo.toml license aligned to Apache-2.0
  • README.md benchmark snapshot refreshed (de64cb8)

CI / release pipeline hardening (bbc5777)

  • release.yml: default-deny top-level permissions: {} + per-job grants
  • release.yml: github.repository == 'lablup/mlxcel' guard against fork workflow_dispatch
  • release.yml: persist-credentials: false on every actions/checkout@v6 step
  • pipeline-parallel-ci.yml: fork-PR guard on both two-host-logical and three-host-real-model jobs
  • update_homebrew_formula.yml: new workflow (port from lablup/all-smi) that updates Formula/mlxcel.rb on lablup/homebrew-tap after each Release completes — workflow_run + workflow_dispatch, gnu-sed in-place version/url/sha256 replace, single macOS Apple Silicon artifact, 1 MB undersized-download abort, idempotent commit (no empty commit on re-run), uses org-wide HOMEBREW_TAP_TOKEN

GitHub project setup

  • packaging deployment environment created on lablup/mlxcel
  • packaging env deployment branch policy restricted to v* tags + main branch
  • Signing secrets registered on packaging env: DEV_ID_CERT_P12, DEV_ID_CERT_PASSWORD (verified)
  • TEAMS_RELEASE_NOTIFICATION_WORKFLOW_URL added to org-level secret access list for lablup/mlxcel

Homebrew tap

  • lablup/homebrew-tap placeholder commit (5304231) — Formula/mlxcel.rb written with depends_on macos: :sonoma, depends_on arch: :arm64, libexec.install \"mlxcel\", \"mlxcel-server\", \"mlx.metallib\" + bin.write_exec_script twice (mlx device.cpp:106 colocation pattern)

Public flip

  • lablup/mlxcel visibility flipped to PUBLIC
  • v0.0.27 published as stable (isPrerelease: false) — first public release

Remaining work

A. Required before fully trusting the release pipeline

  • packaging environment required reviewersinureyes registered as required reviewer on 2026-05-18 with prevent_self_review: false (verified via gh api repos/lablup/mlxcel/environments/packaging). Current configuration provides an "abort window" before deployment proceeds rather than a true 4-eyes gate — self-trigger + self-approve is possible by design while release tooling is being automated. Follow-up (deferred): hardening to a real 4-eyes gate tracked in chore: harden packaging environment to enforce 4-eyes review on signed releases #6 — triggered once release tooling is fully automated.
  • Self-hosted runner group access — configured on 2026-05-18 via org settings UI: lablup/mlxcel is included in the runner group's Repository access list and "Allow public repositories" is enabled on the group containing self-hosted-macos-26-arm64 and GB10 runners. Static API verification (gh api orgs/lablup/actions/runner-groups) requires admin:org scope and was not re-run; the UI change is trusted.
  • main branch protection — applied via Repository Ruleset main protection (ruleset ID 16521084, enforcement: active, target ~DEFAULT_BRANCH, bypass actors empty). Rules: deletion (deletion blocked) + non_fast_forward (force-push blocked). Required PR review and required status checks were deliberately not included in this initial scope — the ruleset focuses on preventing accidental destructive operations.
  • TEAMS_RELEASE_NOTIFICATION_WORKFLOW_URL static verification — verified via GitHub UI on 2026-05-18 (org settings → Actions secrets → TEAMS_RELEASE_NOTIFICATION_WORKFLOW_URL → Repository access). lablup/mlxcel is present in the "Selected repositories" list.

B. Community health files (50% → 100% community profile health after PR #3)

All B-section items shipped in PR #3 (squash-merged as cb2002b):

  • CONTRIBUTING.md — entry-level contributor guide, points to AGENTS.md for the deep working contract
  • SECURITY.md — 90-day coordinated disclosure, severity-based timelines, mlxcel-specific in/out-of-scope sections
  • .github/ISSUE_TEMPLATE/bug_report.yml — structured form
  • .github/ISSUE_TEMPLATE/feature_request.yml — structured form
  • .github/ISSUE_TEMPLATE/config.yml — disables blank issues; routes security to private advisory, questions to Discussions, upstream MLX bugs to ml-explore/mlx
  • .github/PULL_REQUEST_TEMPLATE.md — summary + test plan + conventional-commit checklist
  • CITATION.cff — Citation File Format v1.2.0, Apache-2.0, v0.0.27

C. Homebrew end-to-end verification

  • Trigger the first auto-bump from a real release (either re-run update_homebrew_formula.yml for v0.0.27 via workflow_dispatch, or wait for the next release) and confirm the placeholder SHA256 in lablup/homebrew-tap/Formula/mlxcel.rb is replaced with the real hash of mlxcel-macos-aarch64.zip.
  • Verify brew tap lablup/tap && brew install mlxcel works end-to-end on a clean macOS Sonoma+ Apple Silicon machine — both mlxcel and mlxcel-server invocable, mlx.metallib colocated, GPU inference works.

D. Security / quality posture for PUBLIC repo

  • Re-run gitleaks detect against the now-public history — gitleaks 8.30.1 on 2026-05-18, 564 commits / 16.43 MB scanned in 3.31s → no leaks found, .gitleaksignore in effect.
  • GitHub-native security scanning (all sub-items resolved):
    • Secret Scanning enabled + Push Protection enabled (verified via gh api repos/lablup/mlxcel --jq .security_and_analysis on 2026-05-18)
    • Dependabot version updates.github/dependabot.yml merged in PR chore: add OSS security automation and community health files #3 (cb2002b): cargo (root, mlxcel-core, mlxcel-surgery) + github-actions, weekly Monday 09:00 KST. First run: next Monday 09:00 KST.
    • Dependabot security updates — enabled on 2026-05-18 (verified via gh api repos/lablup/mlxcel --jq .security_and_analysis.dependabot_security_updates.statusenabled); auto-PRs will fire for new RUSTSEC/CVE advisories independent of the weekly version-updates schedule
    • CodeQL deferred → equivalent coverage via cargo-deny (advisories + licenses + sources) in PR chore: add OSS security automation and community health files #3 — Rust CodeQL is beta-tier with low signal for cargo crates
  • Private vulnerability reporting — enabled on 2026-05-18 (verified via gh api repos/lablup/mlxcel/private-vulnerability-reportingenabled: true); GitHub Security Advisories channel referenced in SECURITY.md (PR chore: add OSS security automation and community health files #3)
  • PR-level cargo-deny gate via .github/workflows/ci.yml — merged in PR chore: add OSS security automation and community health files #3 (cb2002b): runs cargo deny check on every Rust-touching push/PR via the EmbarkStudios/cargo-deny-action@v2 action on ubuntu-latest. Originally not listed in the issue (gap discovered while writing PR chore: add OSS security automation and community health files #3 — mlxcel had no general PR-time audit gate); closes the "external PR can land without security audit" risk surface. Self-verified — PR chore: add OSS security automation and community health files #3's own push triggered the workflow and the cargo-deny job passed before merge.

E. Documentation polish for external readers

  • Add status badges to README.md (license, latest release, CI status) — merged in PR chore: add OSS security automation and community health files #3 (cb2002b). Homebrew badge omitted because lablup/tap is a third-party tap and shields.io's homebrew/v badge only resolves against homebrew-core.
  • Verify all internal links in docs/ resolve in the rendered PUBLIC view — no docs_internal/ references found in docs/, README.md, CONTRIBUTING.md, SECURITY.md, or AGENTS.md (verified via grep -rn docs_internal on 2026-05-18).
  • Add a "How to contribute" pointer from README.md to CONTRIBUTING.md — merged in PR chore: add OSS security automation and community health files #3 (cb2002b): Contributing section now links to CONTRIBUTING.md for the contributor workflow + SECURITY.md for vulnerability reports.

Out of scope (tracked elsewhere)

References

Metadata

Metadata

Assignees

Labels

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions