Lewati ke konten utama

Step System

Pipeline Step System

Internal API

Pahami internal contracts yang harus dipertahankan contributor saat menambah atau mengubah pipeline behavior.

Commandapp/core/pipeline/

Category

Developer Guide

Quick Command

resolve → create registered steps → execute(context)

BaseStepStepRegistryPipelineBuilderGitContext

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

Menentukan required execute(context) interface untuk setiap step.

StepRegistry

Memetakan unique string name ke step class dan membuat instances saat diperlukan.

Step Registration

Mendaftarkan built-in validation, preparation, generation, backup, cleanup, execution, dan finalization steps.

CommandResolver

Memperluas profiles dan menormalisasi multi-profile composition sebelum building.

PipelineBuilder

Mengubah resolved step dictionaries menjadi concrete objects melalui registry.

GitContext

Membawa workflow engine, shared services, dan mutable runtime values antar-steps.

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 menghasilkan ValueError.
  • Membangun unregistered name gagal dengan KeyError sebelum execution.
  • Step constructor arguments dapat diberikan melalui args object dalam resolved step definition.
  • Registration hanya membuat class dapat dibangun; ini tidak mengekspos public custy run profile 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.


Lanjutkan