Àüţöḿàţîöñ
Bowrain þŕöṽîđéš ţŵö çöḿþļéḿéñţàŕý ļàýéŕš öƒ àüţöḿàţîöñ: šéŕṽéŕ-šîđé ŕüļéš, çöñƒîĝüŕéđ îñ ţĥé ŵéƃ àþþ, ţĥàţ ŕéšþöñđ ţö éṽéñţš àçŕöšš ţĥé ŵĥöļé ŵöŕķšþàçé, àñđ ļöçàļ ŕüļéš đéçļàŕéđ öñ à þŕöĵéçţ ŕéçîþé ƒöŕ kapi-đŕîṽéñ (ÇĻÎ/ÇÎ) ŵöŕķƒļöŵš.
Šéŕṽéŕ-šîđé àüţöḿàţîöñ
Šéŕṽéŕ-šîđé àüţöḿàţîöñš àŕé éṽéñţ-đŕîṽéñ ŕüļéš çöñƒîĝüŕéđ îñ ţĥé Bowrain ŵéƃ àþþ üñđéŕ Þŕöĵéçţ > Àüţöḿàţîöñš. Ţĥéý ŕéšþöñđ ţö éṽéñţš öñ ţĥé šéŕṽéŕ àñđ ţŕîĝĝéŕ àçţîöñš šüçĥ àš ŕüññîñĝ ƒļöŵš öŕ šéñđîñĝ ñöţîƒîçàţîöñš. Ƃéçàüšé ţĥéý ŕéàçţ ţö éṽéñţš öñ ţĥé šéŕṽéŕ, ţĥéý àþþļý ţö çöñţéñţ ƒŕöḿ àñý çöññéçţöŕ, ñöţ ĵüšţ à ļöçàļ çĥéçķöüţ.
Ţĥé Àüţöḿàţîöñš šüŕƒàçé ĥàš ţĥŕéé ţàƃš: Ŕüñš (ŕüñ ĥîšţöŕý), Ŕüļéš
(ţŕîĝĝéŕ + çöñđîţîöñš + àçţîöñš), àñđ Ƒļöŵš (ţĥé ƒļöŵ çàñṽàš; šéé
Šéŕṽéŕ-šîđé ƒļöŵš). Ţĥé Ƒļöŵš ţàƃ àñđ ţĥé Ŕüļéš ţàƃ àŕé öñé
éđîţöŕ, šö à run_flow àçţîöñ àñđ ţĥé ƒļöŵ îţ ŕüñš àŕé àüţĥöŕéđ îñ öñé þļàçé.
Ţŕîĝĝéŕš
À ŕüļé ƒîŕéš öñ öñé öƒ ţĥéšé éṽéñţš:
| Ţŕîĝĝéŕ | Ƒîŕéš ŵĥéñ |
|---|---|
connector.push.completed | Çöñţéñţ îš þüšĥéđ, ƒŕöḿ à çĥéçķöüţ öŕ à ŕéþöšîţöŕý |
project.updated | Þŕöĵéçţ šéţţîñĝš çĥàñĝé |
quality.gate.fail | À ļàñĝüàĝé šţöþš ḿééţîñĝ à šĥîþ ĝàţé |
push.automations.completed | Éṽéŕý àüţöḿàţîöñ ƒöŕ à þüšĥ ĥàš çöḿþļéţéđ |
source.review.completed | À šöüŕçé ŕéṽîéŵ ţàšķ îš çöḿþļéţéđ |
À çöññéçţöŕ ƒéţçĥ éḿîţš ñö éṽéñţ, šö à ŕüļé çàññöţ ŕéàçţ ţö çöñţéñţ àŕŕîṽîñĝ ƒŕöḿ à çöñţéñţ þļàţƒöŕḿ; çàţçĥ ţĥàţ çöñţéñţ üþ ƃý šţàŕţîñĝ à ŕüñ. Ñö éṽéñţ ƒîŕéš ŵĥéñ à ƒļöŵ ƒîñîšĥéš, šö à ŕüļé çàññöţ çĥàîñ öñ à ƒļöŵ'š çöḿþļéţîöñ.
Çŕéàţîñĝ ŕüļéš
- Ñàṽîĝàţé ţö Þŕöĵéçţ > Àüţöḿàţîöñš > Ŕüļéš
- Çļîçķ Ñéŵ Ŕüļé
- Šéļéçţ à ţŕîĝĝéŕ éṽéñţ
- Àđđ öþţîöñàļ çöñđîţîöñš (ƒîļţéŕ ƃý þŕöĵéçţ, ļöçàļé, öŕ éṽéñţ đàţà)
- Àđđ öñé öŕ ḿöŕé àçţîöñš. À
run_flowàçţîöñ þîçķš à ƒļöŵ ƒŕöḿ ţĥé þŕöĵéçţ'š ƒļöŵ ŕéĝîšţŕý (ţĥé ƃüîļţ-îñ çàţàļöĝ þļüš àñý þŕöĵéçţ ƒļöŵš àüţĥöŕéđ öñ ţĥé Ƒļöŵš ţàƃ); ţĥé šàḿé ƒļöŵ àþþļîéš ţö çöñţéñţ ƒŕöḿ àñý çöññéçţöŕ - Šàṽé àñđ éñàƃļé ţĥé ŕüļé
Ŕüļéš àñđ ţĥé ƒļöŵ đéƒîñîţîöñš ţĥéý ŕéƒéŕéñçé àŕé þéŕšîšţéđ ţĥŕöüĝĥ ţĥé
þŕöĵéçţ-šçöþéđ ŔÉŠŢ ÀÞÎ: /api/v1/:ws/:id/automations ƒöŕ ŕüļéš àñđ
/api/v1/:ws/:id/flows ƒöŕ ƒļöŵ đéƒîñîţîöñš. Ŕüļéš çàñ ƃé ŕéöŕđéŕéđ, đîšàƃļéđ,
àñđ đüþļîçàţéđ ƒŕöḿ ţĥé éđîţöŕ. À ŕüļé îš çĥéçķéđ ŵĥéñ îţ îš šàṽéđ: éṽéŕý
àçţîöñ ḿüšţ ƃé öñé ţĥé šéŕṽéŕ ŕüñš, àñđ à run_flow àçţîöñ ḿüšţ ñàḿé à ƒļöŵ
ţĥé þŕöĵéçţ çàñ šéé, šö à ŕüļé ţĥàţ šàṽéš îš à ŕüļé ţĥàţ ƒîŕéš.
Àçţîöñš
| Àçţîöñ | Ŵĥàţ îţ đöéš |
|---|---|
run_flow | Ŕüñš à ƒļöŵ öṽéŕ ţĥé þŕöĵéçţ'š šţöŕéđ çöñţéñţ àñđ ŵŕîţéš ţĥé ŕéšüļţš ƃàçķ |
auto_translate | Šţàŕţš ţŕàñšļàţîöñ ĵöƃš ƒöŕ ţĥé þüšĥéđ îţéḿš îñ éṽéŕý ţàŕĝéţ ļàñĝüàĝé |
create_review_tasks | Öþéñš à ŕéṽîéŵ ţàšķ þéŕ ţàŕĝéţ ļàñĝüàĝé ƒöŕ ţĥé þŕöĵéçţ'š ŕéṽîéŵéŕš |
create_source_review | Öþéñš à šöüŕçé ŕéṽîéŵ ţàšķ |
notify | Šéñđš àñ îñ-àþþ ñöţîƒîçàţîöñ |
À run_flow àçţîöñ ţàķéš ţĥéšé þàŕàḿéţéŕš:
| Þàŕàḿéţéŕ | Ḿéàñîñĝ |
|---|---|
flow | Ţĥé ƒļöŵ ţö ŕüñ: à ƃüîļţ-îñ ƒļöŵ öŕ öñé àüţĥöŕéđ öñ ţĥé þŕöĵéçţ'š Ƒļöŵš ţàƃ. Ŕéǫüîŕéđ. |
stream | Ţĥé šţŕéàḿ ţö ŕéàđ àñđ ŵŕîţé. Đéƒàüļţš ţö ţĥé šţŕéàḿ ţĥé éṽéñţ ñàḿéš, öŕ main. |
items | Çöḿḿà-šéþàŕàţéđ îţéḿ ñàḿéš. Đéƒàüļţš ţö ţĥé îţéḿš ţĥé éṽéñţ ñàḿéš (à þüšĥ'š ƒîļéš), öŕ éṽéŕý îţéḿ. |
target_locales | Çöḿḿà-šéþàŕàţéđ ţàŕĝéţ ļöçàļéš, öñé þàšš éàçĥ. Đéƒàüļţš ţö ţĥé þŕöĵéçţ'š ţàŕĝéţ ļàñĝüàĝéš. |
Ţĥé ƒļöŵ ŕüñš îñ ţĥé ƃàçķĝŕöüñđ öṽéŕ öñé îţéḿ àţ à ţîḿé, àñđ ţĥé ŕüñ'š šţéþ ŕéçöŕđš ŵĥàţ îţ ŵŕöţé. À ƒļöŵ ţĥé þŕöĵéçţ çàññöţ šéé, à ƒļöŵ ŵĥöšé ţööļ ţĥîš šéŕṽéŕ ļàçķš, öŕ à ţööļ ţĥàţ ƒàîļš þàŕţ ŵàý ḿàŕķš ţĥé šţéþ ƒàîļéđ ŵîţĥ ţĥé ŕéàšöñ, îñ ţĥé ŕüñ ĥîšţöŕý àñđ îñ ţĥé éẋéçüţîöñ ĥîšţöŕý.
Ŕüñ ĥîšţöŕý
Éṽéŕý šéŕṽéŕ-šîđé àüţöḿàţîöñ ŕüñ îš ŕéçöŕđéđ üñđéŕ Þŕöĵéçţ > Àüţöḿàţîöñš > Ŕüñš, ŵîţĥ îţš ţŕîĝĝéŕ, îţš šţéþš, ţĥé öüţçöḿé öƒ éàçĥ šţéþ, àñđ þéŕ-šţéþ ļöĝš. À ŕüñ îñ þŕöĝŕéšš üþđàţéš îñ þļàçé àš éàçĥ šţéþ šţàŕţš àñđ ƒîñîšĥéš. Ţĥîš îš ţĥé ŕéçöŕđ ţö çöñšüļţ ŵĥéñ à ŕüļé đîđ ñöţ đö ŵĥàţ ýöü éẋþéçţéđ.
Ļöçàļ àüţöḿàţîöñ (ÇĻÎ)
Ļöçàļ àüţöḿàţîöñš ŕüñ îñ kapi (ŵîţĥ ţĥé bowrain þļüĝîñ) àñđ àŕé đéçļàŕéđ àţ ţĥé
ţöþ ļéṽéļ öƒ ýöüŕ þŕöĵéçţ'š kapi.yaml ŕéçîþé. Ţĥéý ĥööķ îñţö ÇĻÎ çöḿḿàñđš àñđ
éẋéçüţé àçţîöñš ƃéƒöŕé öŕ àƒţéŕ þüšĥ, þüļļ, àñđ ƒļöŵ ŕüñš: ţĥé đéṽéļöþéŕ
ŵöŕķƒļöŵ àñđ ÇÎ ļàýéŕ ţĥàţ çöḿþļéḿéñţš ţĥé šéŕṽéŕ ŕüļéš àƃöṽé.
Çöñƒîĝüŕàţîöñ
Àđđ àñ automations: šéçţîöñ ţö ýöüŕ kapi.yaml ŕéçîþé:
automations:
- name: checks-before-push
trigger: pre-push
actions:
- type: run_flow
config:
flow: qa
- name: sync-on-push
trigger: post-push
actions:
- type: wait_translate
config:
timeout: 5m
- type: pull
Ţŕîĝĝéŕ ţýþéš
| Ţŕîĝĝéŕ | Ƒîŕéš ŵĥéñ |
|---|---|
pre-push | Ƃéƒöŕé kapi push šéñđš çöñţéñţ ţö ţĥé šéŕṽéŕ |
post-push | Àƒţéŕ kapi push çöḿþļéţéš šüççéššƒüļļý |
pre-pull | Ƃéƒöŕé kapi pull ƒéţçĥéš çöñţéñţ ƒŕöḿ ţĥé šéŕṽéŕ |
post-pull | Àƒţéŕ kapi pull ŵŕîţéš ƒîļéš ļöçàļļý |
pre-flow | Ƃéƒöŕé kapi run éẋéçüţéš à ƒļöŵ |
post-flow | Àƒţéŕ kapi run çöḿþļéţéš |
Àçţîöñ ţýþéš
| Àçţîöñ | Đéšçŕîþţîöñ |
|---|---|
run_flow | Ŕüñ à ƒļöŵ ƃý ñàḿé öṽéŕ ţĥé þŕöĵéçţ'š çöļļéçţîöñš, àš kapi run <flow> đöéš ŵîţĥ ñö --input |
wait_translate | Ŵàîţ ƒöŕ ţĥé šéŕṽéŕ-šîđé ŕüñ ţö çöḿþļéţé (ŵîţĥ çöñƒîĝüŕàƃļé ţîḿéöüţ) |
pull | Þüļļ ŕéšüļţš ƒŕöḿ ţĥé šéŕṽéŕ |
push | Þüšĥ ļöçàļ çöñţéñţ ţö ţĥé šéŕṽéŕ |
À ļöçàļ run_flow àçţîöñ ţàķéš ţĥéšé þàŕàḿéţéŕš:
| Þàŕàḿéţéŕ | Ḿéàñîñĝ |
|---|---|
flow | Ţĥé ƒļöŵ ţö ŕüñ: öñé đéçļàŕéđ üñđéŕ flows: öñ ţĥé ŕéçîþé, öŕ à ƃüîļţ-îñ ƒļöŵ šüçĥ àš qa. Ŕéǫüîŕéđ. |
fail_on_error | true àƃöŕţš ţĥé çöḿḿàñđ ŵĥéñ ţĥé ƒļöŵ'š çĥéçķ šţéþš ŕéþöŕţ ƒîñđîñĝš, öŕ ŵĥéñ îţš çĥéçķš đîđ ñöţ ŕüñ: ţĥé ƒļöŵ ĥöļđš ñö çĥéçķ šţéþ, öŕ îţš çĥéçķ šţéþš ŕéàđ ñö çöñţéñţ. Đéƒàüļţ false: ŕéþöŕţ àñđ çöñţîñüé. |
Ţĥé ƒļöŵ ŕüñš ţĥé ŵàý kapi run <flow> ŕüñš îţ îñšîđé ţĥé þŕöĵéçţ: öṽéŕ éṽéŕý
ƒîļé ţĥé ŕéçîþé'š çöļļéçţîöñš ḿàţçĥ, öñé þàšš þéŕ ţàŕĝéţ ļàñĝüàĝé ţĥé ƒļöŵ
àþþļîéš ţö, ŵîţĥ ţĥé ŕéçîþé'š ṽöîçé þŕöƒîļé àñđ ţéŕḿš ƃöüñđ, àñđ ŵîţĥ ţĥé
ŕéšüļţš çöḿḿîţţéđ ţö ţĥé þŕöĵéçţ šţöŕé ŕàţĥéŕ ţĥàñ ŵŕîţţéñ ţö ţàŕĝéţ ƒîļéš.
Îţš öüţþüţ, îñçļüđîñĝ ţĥé ƒîñđîñĝš ţàƃļé îţš çĥéçķ šţéþš þŕöđüçé, þŕîñţš îñ
ţĥé öüţþüţ öƒ ţĥé çöḿḿàñđ ţĥàţ ţŕîĝĝéŕéđ îţ (öñ šţđéŕŕ üñđéŕ --json, šö ţĥé
çöḿḿàñđ'š đöçüḿéñţ šţàýš îñţàçţ). À ƒļöŵ ţĥàţ çàññöţ ŕüñ, ƃéçàüšé ţĥé ñàḿé îš
üñķñöŵñ öŕ à ţööļ ƒàîļš, àƃöŕţš ţĥé çöḿḿàñđ ŵĥàţéṽéŕ fail_on_error šàýš.
Éẋàḿþļé: à çĥéçķ ĝàţé ƃéƒöŕé þüšĥ
Þŕéṽéñţ þüšĥîñĝ çöñţéñţ ţĥàţ ƒàîļš ţĥé çĥéçķš:
automations:
- name: checks-gate
trigger: pre-push
actions:
- type: run_flow
config:
flow: qa
fail_on_error: true
΃ qa ŕéþöŕţš ƒîñđîñĝš àñđ fail_on_error îš true, ţĥé þüšĥ îš àƃöŕţéđ
ƃéƒöŕé àñýţĥîñĝ îš šéñţ, ŵîţĥ ţĥé ƒîñđîñĝš šüḿḿàŕý àñđ ţĥé éẋîţ çöđé
kapi check üšéš ƒöŕ à ƒàîļéđ ĝàţé. Ŵîţĥöüţ fail_on_error ţĥé ƒîñđîñĝš àŕé
ŕéþöŕţéđ àñđ ţĥé þüšĥ ĝöéš àĥéàđ.
À ƒļöŵ çàñ ŕéàçĥ ñö ṽéŕđîçţ îñ ţŵö ŵàýš, àñđ ƃöţĥ çöüñţ àš çĥéçķš ţĥàţ đîđ ñöţ
ŕüñ. À çĥéçķ šţéþ öṽéŕ ñö çöñţéñţ ƃļöçķ, ƒöŕ éẋàḿþļé ŵĥéñ éṽéŕý ḿàţçĥéđ ƒîļé îš
éḿþţý, ŕéþöŕţš ţĥé çàüšé nothing_to_check. À ƒļöŵ ţĥàţ ĥöļđš ñö çĥéçķ šţéþ,
šüçĥ àš pseudo-translate, çĥéçķš ñöñé öƒ ţĥé çöñţéñţ îţ ŕüñš öṽéŕ àñđ ŕéþöŕţš
ţĥé çàüšé content_not_checked. Ŵîţĥ fail_on_error ţĥé þüšĥ îš àƃöŕţéđ ŵîţĥ
ţĥé çàüšé àñđ ţĥé éẋîţ çöđé kapi check üšéš ŵĥéñ à çĥéçķ đîđ ñöţ ŕüñ. Ŵîţĥöüţ
îţ, ţĥé çöḿḿàñđ þŕîñţš ţĥé çàüšé àñđ ţĥé þüšĥ ĝöéš àĥéàđ.
Çàţçĥîñĝ üþ öñ éṽéŕý þüšĥ
Çàţçĥîñĝ ţĥé þŕöĵéçţ üþ öñ þüšĥ îš ţĥé þŕöĵéçţ'š bowrain.converge þöļîçý
ŕàţĥéŕ ţĥàñ àñ àüţöḿàţîöñ. Ŵîţĥ ţĥé đéƒàüļţ on-push, ţĥé šéŕṽéŕ ŕüñš à ƒüļļ
þàšš (ŕéüšé, đŕàƒţîñĝ, çĥéçķš, ţéŕḿš, ĝàţéš, þàŕķîñĝ) àƒţéŕ éṽéŕý þüšĥ, ŕéçöŕđéđ
àš à ŕüñ àñýöñé çàñ ŵàţçĥ:
# kapi.yaml
bowrain:
url: https://bowrain.example.com/my-team/abc123
converge: on-push # on-push (default) | manual
kapi push ƒŕöḿ ÇÎ ĵüšţ þüšĥéš; ţĥé šéŕṽéŕ çàţçĥéš ţĥé þŕöĵéçţ üþ öñ îţš öŵñ
çļöçķ; kapi up îš þüšĥ, ţĥéñ ŵàţçĥ ţĥé ŕüñ, ţĥéñ þüļļ. Šéé
Ķééþîñĝ çöñţéñţ çàüĝĥţ üþ ƒöŕ ţĥé ḿöđéļ.
Éṽéŕý ŕüñ, šţàŕţéđ ƃý à þüšĥ, ƃý kapi up, öŕ ḿàñüàļļý, àþþéàŕš îñ ţĥé
þŕöĵéçţ'š Ŕüñš ṽîéŵ îñ ţĥé ŵéƃ àñđ đéšķţöþ àþþ, ŵîţĥ îţš šţàţé (Ŕüññîñĝ,
Üþ ţö đàţé, Þàŕķéđ), îţš ţŕîĝĝéŕ, ţĥé þàšš çöüñţ, àñđ à þéŕ-ļöçàļé šüḿḿàŕý
šüçĥ àš "3 šĥîþþàƃļé · 1 þàŕķéđ". À Ŕüñ ñöŵ ƃüţţöñ šţàŕţš à ŕüñ ƒŕöḿ ţĥé
àþþ, àñđ àñ îñ-ƒļîĝĥţ ŕüñ çàñ ƃé çàñçéļéđ. Þàŕķéđ üñîţš ļàñđ îñ ţĥé
ŕéṽîéŵ šéššîöñ.
Ǫüàļîţý ĝàţé éṽéñţš
Bowrain đéŕîṽéš éàçĥ ţàŕĝéţ ļàñĝüàĝé'š šĥîþ šţàţé ƒŕöḿ ƒîṽé ĝàţéš: çöṽéŕàĝé
(translated), ţĥé çĥéçķš (checks), ţéŕḿîñöļöĝý ŵĥéŕé ţéŕḿš ĝöṽéŕñ ţĥé
ļàñĝüàĝé (terms), đéçîšîöñš öñ šöüŕçé ţĥàţ ĥàš çĥàñĝéđ (stale), àñđ ŵöŕđîñĝ
à ŕéṽîéŵéŕ ŕéĵéçţéđ (rejected). Ŵĥéñ à ļàñĝüàĝé šţöþš ḿééţîñĝ à ĝàţé, Bowrain
þüƃļîšĥéš quality.gate.fail ƒöŕ ţĥàţ ĝàţé àñđ ļàñĝüàĝé. Ŵĥéñ îţ ḿééţš ţĥé ĝàţé
àĝàîñ, Bowrain þüƃļîšĥéš quality.gate.pass. Àñ üñçĥàñĝéđ ŕéšüļţ þüƃļîšĥéš
ñöţĥîñĝ, àñđ à ļàñĝüàĝé ŵĥöšé ƒîŕšţ ŕéšüļţ ḿééţš éṽéŕý ĝàţé þüƃļîšĥéš ñö þàšš.
À ƒàîļ ƒöŕ à ĝàţé ţĥàţ îš üñḿéţ ƃéçàüšé à çĥéçķ ĥàš ñö ŕéšüļţ šàýš šö.
Bowrain đéŕîṽéš šĥîþ šţàţéš ŵĥéñ à çöñṽéŕĝéñçé ŕüñ ƒîñîšĥéš àñđ ŵĥéñ šöḿéöñé ŕéàđš ţĥé þŕöĵéçţ đàšĥƃöàŕđ öŕ ţĥé šĥîþ ƒééđ, šö àñ éṽéñţ ƒöļļöŵš ţĥé çĥàñĝé îţ ŕéþöŕţš ƃý àţ ḿöšţ öñé öƒ ţĥéšé.
Ţĥé éṽéñţš ŕéþöŕţ šţàţé àñđ ƃļöçķ ñöţĥîñĝ. À ŕüļé öñ quality.gate.fail çàñ ŕüñ
à ƒļöŵ, àñđ à ƒàîļéđ ĝàţé ñöţîƒîéš ţĥé þŕöĵéçţ'š ḿéḿƃéŕš. Ţö šţöþ çöñţéñţ ţĥàţ
đöéš ñöţ ḿééţ à ƃàŕ, ĝàţé ŵĥéŕé îţ îš þŕöđüçéđ: kapi check --ship éẋîţš
ñöñ-žéŕö ŵĥéñ à šĥîþ ĝàţé îš üñḿéţ, àñđ à ļöçàļ run_flow àçţîöñ ŵîţĥ
fail_on_error: true àƃöŕţš ţĥé çöḿḿàñđ öñ ţĥé ƒļöŵ'š ƒîñđîñĝš.
Ļööþ þŕéṽéñţîöñ
Àüţöḿàţîöñ çĥàîñš àŕé ţŕàçķéđ ţĥŕöüĝĥ à çàüšàţîöñ çĥàîñ. ΃ à çĥàîñ öƒ ŕüļéš éẋçééđš ƒîṽé ļéṽéļš đééþ, îţ šţöþš àüţöḿàţîçàļļý àñđ à ŵàŕñîñĝ îš ļöĝĝéđ. Ţĥîš þŕéṽéñţš çîŕçüļàŕ ŕüļéš ƒŕöḿ ŕüññîñĝ îñđéƒîñîţéļý.