Ideowy model działania głównego procesu zasad dyscypliny¶
Każdy zespół developerski deklaruje do jakiej wersji dyscypliny chce być zgodny. CI/CD mierzy czy ta deklaracja pokrywa się z rzeczywistością. Bramki środowiskowe egzekwują wynik — niezgodność blokuje wdrożenie lub wymaga jawnego waivera.
flowchart TD
A(["① Zespół Deweloperski"])
A -->|commit| B["discipline.yaml\nintencja + atestacje"]
B -->|"Merge Request"| C
C(["② CI/CD Pipeline"])
C -->|include| D["discipline.yml\n deklaracja dyscypliny"]
D --> E["Weryfikacja \n każdej normy"]
E --> F["conformance.json\nartefakt - wynik"]
F --> G(["③ Bramka środowiskowa"])
G --> H{"Wszystkie checki\no wymaganym tierze\n= pass?"}
H -->|"TAK"| OK["✅ Deploy\nna środowisko"]
H -->|"NIE — czy jest\nważny waiver?"| W{"waiver ważny\ni nieprzeterminowany?"}
W -->|"TAK"| WARN["⚠️ Deploy\nz jawnym długiem"]
W -->|"NIE"| BLOCK["❌ Blokada\ndeployu"]
style OK fill:#2d6a4f,color:#fff
style WARN fill:#b5651d,color:#fff
style BLOCK fill:#7b2d2d,color:#fff
style A fill:#1a3a5c,color:#fff
style C fill:#1a3a5c,color:#fff
style G fill:#1a3a5c,color:#fff
① Deklaracja intencji¶
-
Zespół commituje
discipline.yamldo repozytorium. Wskazuje wersję dyscypliny, do której chce być zgodny, oraz atestuje ręcznie procesy, których CI nie może automatycznie zweryfikować (np. code review). -
Koordynator akceptuje zmiany za pomocą approve na Merge Request, który aktywuje możliwość dodania zmiany do głównego brancha.
flowchart LR
DEV(["Zespół\ndeveloperski"]) -->|zapoznaje się z normami| PAGES["Portal\nzasady-dyscypliny\nGitLab Pages"]
DEV -->|składa deklarację\n w repozytorium| DY["discipline.yaml"]
style PAGES fill:#2d6a4f,color:#fff,stroke:#2d6a4f
style DEV fill:#2d6a4f,color:#fff,stroke:#2d6a4f
style DY fill:#2d6a4f,color:#fff,stroke:#2d6a4f
linkStyle 0 stroke:#2d6a4f,stroke-width:2px
linkStyle 1 stroke:#2d6a4f,stroke-width:2px
② Wyzwolenie pomiaru¶
-
Każdy push lub otwarcie Merge Requestu uruchamia pipeline. Pomiar dzieje się zawsze — nie można go pominąć ani odroczyć.
-
Pipeline pobiera
conformance.ymlze wskazanej wersji repozytorium dyscypliny. Aplikacja nie definiuje logiki pomiarowej — jest ona centralnie zarządzana przez hub. -
Dla każdej normy z pinowanej wersji dyscypliny pipeline uruchamia
bin/checks.sh. Skrypt sprawdza trzy typy weryfikacji: automatyczną (API GitLab, pliki w repo), atestacyjną (klucz wdiscipline.yaml) i manualną (oznaczoną explicite w normie). -
Wynik każdego checku trafia do
conformance.jsonzapisywanego jako artefakt CI. Plik nie jest commitowany do repozytorium — jest faktem z konkretnego uruchomienia pipeline'u.
flowchart LR
DEV(["Zespół\ndeveloperski"]) -->|inicjuje zmianę| PIPE["Centralny\nCI Pipeline"]
PIPE -->|includes| CI_TPL["ci/conformance.yml"]
CI_TPL -->|reads| DY["discipline.yaml"]
CI_TPL -->|artefakt| CJ["conformance.json"]
style DEV fill:#b5651d,color:#fff,stroke:#b5651d
style PIPE fill:#b5651d,color:#fff,stroke:#b5651d
style CI_TPL fill:#b5651d,color:#fff,stroke:#b5651d
style DY fill:#b5651d,color:#fff,stroke:#b5651d
style CJ fill:#b5651d,color:#fff,stroke:#b5651d
linkStyle 0 stroke:#b5651d,stroke-width:2px
linkStyle 1 stroke:#b5651d,stroke-width:2px
linkStyle 2 stroke:#b5651d,stroke-width:2px
linkStyle 3 stroke:#b5651d,stroke-width:2px
③ Weryfikacja przez bramkę¶
- Przed deployem na dane środowisko bramka odczytuje artefakt i sprawdza, czy wszystkie checki o tierze ≤ środowisko mają status
passlub są przykryte ważnym, nieprzeterminowanym waiverem.
④ Decyzja — Trzy możliwe wyniki¶
- ✅ Deploy — wszystkie wymagane checki przeszły.
- ⚠️ Deploy z jawnym długiem — część checków oblała, ale każda niezgodność ma ważny waiver z
max-env≥ bieżące środowisko, właścicielem i datą wygaśnięcia. - ❌ Blokada — co najmniej jeden wymagany check oblał bez waivera lub z wygasłym waiverem. Zespół musi naprawić niezgodność albo zadeklarować jawny wyjątek.
Warning
Kluczowe rozróżnienie:
discipline.yamljest commitowany (intencja),conformance.jsonjest artefaktem CI (wynik).
Intencja i fakt są rozdzielone — nie można "zacommitować zgodności".