merge_protections: - name: PR merge requirements if: - base = main success_conditions: - "title~=(?i)^\\[(feat|feature|bugfix|fix|refactor|perf|ci|doc|docs|misc|chore|kernel|new.?model|skill|skills|infra)\\]" - "#approved-reviews-by>=1" - check-success~=pre-commit - check-success=fastcheck-passed - check-success=full-suite-passed # Mirrors the `paths` filter of .github/workflows/ci-macos-mlx.yml so the # required checks always exist whenever this protection applies. - name: MLX smoke requirements if: - base = main - or: - files~=^\.github/workflows/ci-macos-mlx\.yml$ - files~=^fastvideo/mlx_runtime/ - files~=^fastvideo/tests/mlx/ - files~=^fastvideo/tests/platforms/test_mps_vsa_error\.py$ - files~=^fastvideo/tests/platforms/test_cpu_sdpa\.py$ - files~=^fastvideo/platforms/cpu\.py$ - files~=^fastvideo/platforms/mps\.py$ - files~=^fastvideo/platforms/__init__\.py$ - files~=^fastvideo/__init__\.py$ - files~=^examples/inference/basic/mlx_[^/]*\.py$ - files~=^fastvideo/benchmarks/mlx_[^/]*\.py$ - files~=^pyproject\.toml$ success_conditions: - check-success=mlx-smoke - check-success=mlx-smoke-linux-cpu pull_request_rules: # ============================================================ # Type labels (from PR title prefix) # ============================================================ - name: "label type: feat" conditions: - "title~=(?i)^\\[(feat|feature)\\]" - -closed actions: label: add: ["type: feat"] - name: "label type: bugfix" conditions: - "title~=(?i)^\\[(bug)?fix\\]" - -closed actions: label: add: ["type: bugfix"] - name: "label type: refactor" conditions: - "title~=(?i)^\\[refactor\\]" - -closed actions: label: add: ["type: refactor"] - name: "label type: perf" conditions: - "title~=(?i)^\\[perf\\]" - -closed actions: label: add: ["type: perf"] - name: "label type: ci" conditions: - "title~=(?i)^\\[ci\\]" - -closed actions: label: add: ["type: ci"] - name: "label type: docs" conditions: - "title~=(?i)^\\[(doc|docs)\\]" - -closed actions: label: add: ["type: docs"] - name: "label type: misc" conditions: - "title~=(?i)^\\[(misc|chore)\\]" - -closed actions: label: add: ["type: misc"] - name: "label type: new-model" conditions: - "title~=(?i)^\\[new.?model\\]" - -closed actions: label: add: ["type: new-model"] - name: "label type: infra" conditions: - "title~=(?i)^\\[infra\\]" - -closed actions: label: add: ["type: infra"] - name: "label type: skill" conditions: - "title~=(?i)^\\[skills?\\]" - -closed actions: label: add: ["type: skill"] # ============================================================ # Scope labels (from changed files) # ============================================================ - name: "label scope: training" conditions: - or: - files~=^fastvideo/train/ - files~=^fastvideo/training/ - files~=^fastvideo/distillation/ - files~=^examples/train/ - files~=^examples/training/ - files~=^examples/distill/ - -closed actions: label: add: ["scope: training"] - name: "label scope: inference" conditions: - or: - files~=^fastvideo/pipelines/basic/ - files~=^fastvideo/pipelines/stages/ - files~=^fastvideo/pipelines/samplers/ - files~=^fastvideo/entrypoints/ - files~=^fastvideo/worker/ - files~=^fastvideo/api/sampling_param - files~=^fastvideo/configs/pipelines/ - files~=^examples/inference/ - -closed actions: label: add: ["scope: inference"] - name: "label scope: attention" conditions: - files~=^fastvideo/attention/ - -closed actions: label: add: ["scope: attention"] - name: "label scope: kernel" conditions: - or: - files~=^fastvideo-kernel/ - files~=^csrc/ - -closed actions: label: add: ["scope: kernel"] - name: "label scope: data" conditions: - or: - files~=^fastvideo/dataset/ - files~=^fastvideo/pipelines/preprocess/ - files~=^examples/preprocessing/ - -closed actions: label: add: ["scope: data"] - name: "label scope: infra" conditions: - or: - files~=^\.github/ - files~=^\.buildkite/ - files~=^fastvideo/tests/ - files~=^docker/ - -closed actions: label: add: ["scope: infra"] - name: "label scope: distributed" conditions: - files~=^fastvideo/distributed/ - -closed actions: label: add: ["scope: distributed"] - name: "label scope: docs" conditions: - files~=^docs/ - -closed actions: label: add: ["scope: docs"] - name: "label scope: studio" conditions: - files~=^apps/fastvideo_studio/ - -closed actions: label: add: ["scope: studio"] - name: "label scope: model" conditions: - or: - files~=^fastvideo/models/ - files~=^fastvideo/layers/ - files~=^fastvideo/configs/models/ - -closed actions: label: add: ["scope: model"] # ============================================================ # Merge conflict detection # ============================================================ - name: label conflicting PRs conditions: - conflict - -closed - label!=stale actions: label: add: [needs-rebase] - name: remove conflict label when resolved conditions: - -conflict - -closed - label=needs-rebase actions: label: remove: [needs-rebase] # ============================================================ # Auto-merge # ============================================================ - name: auto-merge when ready and all checks pass conditions: - label=ready - "title~=(?i)^\\[(feat|feature|bugfix|fix|refactor|perf|ci|doc|docs|misc|chore|kernel|new.?model|skill|skills|infra)\\]" - "#approved-reviews-by>=1" - check-success~=pre-commit - check-success=fastcheck-passed - check-success=full-suite-passed - -conflict - -closed - -draft actions: merge: method: squash merge_protections_settings: reporting_method: check-runs