lablup / lablup/mlxcel

chore(scripts): mark the shebang-carrying Python scripts executable

Open Beginner friendly
#1,663 0 comments 0 reactions 0 assignees View on GitHub
priority:low status:ready type:chore
Dominant language
Rust
Stars
467
Forks
54
Avg merge
4h 25m
Merged PRs (30d)
310

Description

## Summary

Eight Python scripts under `scripts/` carry a `#!/usr/bin/env python3` shebang but are not executable in the index, so the direct invocation some of them document for themselves fails with "permission denied".

## Background

The `scripts/ci/*.py` files (and `scripts/bench_mlxlm.py`) are already mode `100755`, so the executable convention is established. The affected files sit at `100644` despite their shebang. `scripts/bench_embeddings.py:9` documents its own invocation as `scripts/bench_embeddings.py --bin target/release/mlxcel-server ...`, which cannot run today.

## Proposed Solution

Set the executable bit in the index with `git update-index --chmod=+x` (or `chmod +x` then commit) on the shebang-carrying files. Verify with `git ls-files -s scripts/**/*.py`.

## Implementation Notes

- Non-executable despite a shebang: `scripts/bench_embeddings.py`, `scripts/benchmark_gemma3n_python.py`, `scripts/benchmark_llama3_python.py`, `scripts/benchmark_python.py`, `scripts/bridge_overhead_microbench_py.py`, `scripts/gather_qmm_shape_microbench.py`, `scripts/layer_shaped_microbench_py.py`, `scripts/requantize_mlp.py` (confirmed `100644` for the sampled files).
- Separately, `scripts/insert_apache_header.py`, `scripts/tools/internlm_rope_oracle.py`, and `scripts/tools/quantize_mtp_drafter.py` have neither a shebang nor `+x`. Decide whether to normalize them or leave them as `python3 ` only.

## Acceptance Criteria

- [ ] Every `scripts/**/*.py` with a shebang is executable in the index
- [ ] The three shebang-less files are either normalized or explicitly left alone with a note in the PR

---

## Original Suggestion

### Title: chore(scripts): make the shebang'd Python scripts executable

Ten Python scripts under `scripts/` carry a `#!/usr/bin/env python3` shebang but are not executable, so the invocation some of them document for themselves fails with "permission denied". Every `scripts/ci/*.py` (and `scripts/bench_mlxlm.py`) is `+x`, so the convention is established.

## Evidence

Non-executable despite a shebang: `scripts/bench_embeddings.py`, `scripts/benchmark_gemma3n_python.py`, `scripts/benchmark_llama3_python.py`, `scripts/benchmark_python.py`, `scripts/bridge_overhead_microbench_py.py`, `scripts/gather_qmm_shape_microbench.py`, `scripts/layer_shaped_microbench_py.py`, `scripts/requantize_mlp.py`.

`scripts/bench_embeddings.py:9` documents its own invocation as `scripts/bench_embeddings.py --bin target/release/mlxcel-server ...`, which fails today.

Separately, `scripts/insert_apache_header.py`, `scripts/tools/internlm_rope_oracle.py`, and `scripts/tools/quantize_mtp_drafter.py` have neither a shebang nor `+x` — decide whether to bring them in line or leave them as `python3 `-only.

## Suggested fix

`git update-index --chmod=+x` on the shebang'd files (or `chmod +x` + commit). Purely mechanical; verify with `git ls-files -s scripts/*.py`.

## Acceptance criteria

- [ ] Every `scripts/**/*.py` with a shebang is executable in the index
- [ ] The three shebang-less files are either normalized or explicitly left alone with a note in the PR

Contributor guide

Open the contributing guide

Research direction

Review the eight listed shebang-carrying files under scripts/ and compare their modes with scripts/ci/*.py and scripts/bench_mlxlm.py. Apply the executable bit in the index, then run git ls-files -s scripts/**/*.py to verify every shebang-bearing script is 100755. Check the three shebang-less files and record whether they remain non-executable or are normalized.

Written by the indexing model from the issue text.

Assessment

Tech stack
git, python
Domain
tooling
Issue type
Bug
Difficulty
1/5
Estimated time
Under an hour
Activity status
Active
Clarity
Mostly clear
Newbie friendliness
84/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.