Step System
Pipeline Step System
Pahami internal contracts yang harus dipertahankan contributor saat menambah atau mengubah pipeline behavior.
app/core/pipeline/Category
Quick Command
resolve → create registered steps → execute(context)Ringkasan
Pipeline package Custy memisahkan workflow definition dari execution. Profiles memberi nama intended steps, registry memetakan names ke classes, builder membuat instances, dan pipeline memanggil setiap instance dengan satu shared context.
Core Responsibilities
Pipeline Building Blocks
BaseStep
execute(context) interface untuk setiap step.StepRegistry
Step Registration
CommandResolver
PipelineBuilder
GitContext
Source Map
app/core/pipeline/profiles.py— profile definitions dan global phase order.app/core/pipeline/command_resolver.py— expansion, cycle detection, deduplication, dan ordering.app/core/pipeline/registry.py— name-to-class storage dan instance creation.app/core/pipeline/step_registry.py— one-time built-in registration.app/core/pipeline/builder.py— progress dan simple pipeline construction.app/core/pipeline/pipeline.py— sequential execution dan failure reporting.app/core/pipeline/context.py— shared runtime contract.app/core/pipeline/steps/— concrete step adapters.app/core/workflow/workflow_engine.py— active workflow operations yang dipanggil sebagian besar steps.
Contributor Checklist
Before You Begin
- Implement one focused stepRequired
Subclass BaseStep dan sediakan documented execute(context) method dengan satu clear responsibility.
- Register a unique nameRequired
Tambahkan class ke register_all_steps(); duplicate names menghasilkan ValueError.
- Assign phase orderRequired
Tambahkan name ke STEP_ORDER agar merged profiles tidak menempatkannya dalam unsafe phase.
- Add it to intentional profilesRequired
Update hanya profiles yang benar-benar membutuhkan behavior baru; jangan sembunyikan profile logic dalam resolver.
- Test resolution and executionRequired
Cover profile membership, ordering, deduplication, failure behavior, dan expected engine call.
- Update user and developer docsRequired
Dokumentasikan changed requirements, side effects, output, recovery, dan extension behavior.
Registry Contracts
- Panggil
register_all_steps()satu kali sebelum membangun pipeline. Mendaftarkan name sama kembali menghasilkanValueError. - Membangun unregistered name gagal dengan
KeyErrorsebelum execution. - Step constructor arguments dapat diberikan melalui
argsobject dalam resolved step definition. - Registration hanya membuat class dapat dibangun; ini tidak mengekspos public
custy runprofile name baru.
Context dan State Discipline
Simpan configuration dan services dalam workflow engine. Gunakan GitContext untuk
shared runtime state yang harus melewati step boundary, seperti current tag, workflow
case, atau staging list. Step harus mendelegasikan domain behavior ke engine atau
focused service, bukan menduplikasi Git atau release logic.
Setiap step yang dapat berpartisipasi dalam merged profiles harus memiliki
explicit STEP_ORDER entry. Tanpa entry, step menerima fallback priority 999
dan berpindah setelah seluruh known steps. Tinjau complete contract dalam
Step Priority and Ordering.