Ţĥé kapi ļööþ îñ ÇÎ
Šöüŕçé çöñţéñţ çĥàñĝéš öñ éṽéŕý ḿéŕĝé, àñđ éṽéŕýţĥîñĝ đéŕîṽéđ ƒŕöḿ îţ (îţš ţŕàñšļàţîöñš, îţš ṽöîçé àñđ ţéŕḿîñöļöĝý çöñƒöŕḿàñçé) ƒàļļš ƃéĥîñđ. Ţĥàţ đŕîƒţ îš ţĥé ñöŕḿàļ šţàţé öƒ à šĥîþþîñĝ þŕöĵéçţ. Ŕüññîñĝ ţĥé kapi ļööþ îñ ÇÎ ķééþš éṽéŕý ļàñĝüàĝé çàüĝĥţ üþ ƒŕöḿ ţĥé þîþéļîñé ţĥàţ þŕöđüçéš ţĥé đŕîƒţ: çļöšé ŵĥàţ à ḿàçĥîñé çàñ çļöšé, đéļîṽéŕ îţ àš à ŕéṽîéŵàƃļé þüļļ ŕéǫüéšţ, àñđ éñƒöŕçé ţĥé ŕéļéàšé ƃàŕ öñ ḿéŕĝéš, ŵîţĥ çöñţéñţ ǫüàļîţý ţŕéàţéđ ļîķé àñý öţĥéŕ ţéšţ. Ţĥîš çöṽéŕš ţĥé šöüŕçé ļàñĝüàĝé ţöö: ţĥé šĥîþ ĝàţé îñçļüđéš ţĥé šöüŕçé ĝàţéš (ṽöîçé, ţéŕḿîñöļöĝý) àļöñĝšîđé ţŕàñšļàţîöñ çöṽéŕàĝé àñđ ţĥé ŕüļé-ƃàšéđ çĥéçķš.
ÇÎ çàţçĥéš üþ àñđ đéļîṽéŕš; ţĥé ĝàţé àļöñé đéçîđéš ŵĥàţ ƃļöçķš à ḿéŕĝé.
Îñšîđé à þàšš, ƒöŕ éṽéŕý ļàñĝüàĝé ƃéĥîñđ îţš ĝàţé, ţĥé đéƒàüļţ ƒļöŵ đöéš ţĥŕéé ţĥîñĝš îñ öŕđéŕ: ŕéüšé, ŵĥéŕé éẋàçţ çöñţéñţ-ḿéḿöŕý ḿàţçĥéš ƒîļļ ƒîŕšţ, ƒöŕ ƒŕéé, àñđ àñ éđîţéđ šöüŕçé çàŕŕîéš îţš þŕéṽîöüšļý àþþŕöṽéđ ţŕàñšļàţîöñ îñţö ţĥé þŕöḿþţ àš ŕéƒéŕéñçé; ţŕàñšļàţé, ŵĥéŕé ţĥé çöñƒîĝüŕéđ ÀÎ þŕöṽîđéŕ ƒîļļš ŵĥàţ ŕéḿàîñš, ŵîţĥ ţĥé þŕöĵéçţ'š ţéŕḿîñöļöĝý àñđ ṽöîçé çöñţéẋţ; çĥéçķ, ŵĥéŕé đéţéŕḿîñîšţîç çĥéçķš ŕüñ öṽéŕ ŵĥàţ ŵàš þŕöđüçéđ (þļàçéĥöļđéŕ îñţéĝŕîţý, îñļîñé ţàĝš, đö-ñöţ-ţŕàñšļàţé ţéŕḿš). À üñîţ ŵîţĥ à ƒàîļîñĝ ƒîñđîñĝ šţîļļ çöüñţš àš ţŕàñšļàţéđ, àñđ ţĥé ƒîñđîñĝ ĥöļđš îţš ļöçàļé öüţ öƒ šĥîþþîñĝ üñţîļ îţ îš ƒîẋéđ, šö ƃàđ öüţþüţ çàñ ñéṽéŕ ļîƒţ à ļàñĝüàĝé öṽéŕ îţš ĝàţé. Ŵĥàţ à ḿàçĥîñé çàññöţ đéçîđé þàŕķš ƒöŕ ŕéṽîéŵ; àñ àþþŕöṽàļ îš ŕéçöŕđéđ îñ ţĥé çöḿḿîţţéđ üñîţ-šţàţé ŕéçöŕđ, àñđ ţĥé ñéẋţ ŕüñ šééš îţ.
Ţĥŕéé çöḿḿàñđš çàŕŕý ţĥé ŵĥöļé ḿöđéļ, àñđ ţĥéý đîṽîđé ţĥé ŵöŕķ çļéàñļý:
| Çöḿḿàñđ | Ŕöļé | Éẋîţ ƃéĥàṽîöŕ |
|---|---|---|
kapi status | Öƃšéŕṽé: þéŕ-ļöçàļé çöṽéŕàĝé àñđ ĝàţé šţàñđîñĝ | Àļŵàýš 0: ƃéĥîñđ îš þéñđîñĝ ŵöŕķ |
kapi up | Þŕöđüçé: ŕüñš ţĥé kapi ļööþ | 0 ŵĥéţĥéŕ ţĥé ŕüñ çàüĝĥţ éṽéŕýţĥîñĝ üþ öŕ þàŕķéđ ŵöŕķ ƒöŕ ŕéṽîéŵ; ñöñ-žéŕö öñļý ŵĥéñ ţĥé ŕüñ ƃŕöķé |
kapi check --ship | Éñƒöŕçé: ţĥé ŕéļéàšé ƃàŕ | 0 þàšš, 3 ĝàţé üñḿéţ, 1 öþéŕàţîöñàļ éŕŕöŕ |
Àñ öŕđîñàŕý ƃüîļđ ñéṽéŕ ƒàîļš ƃéçàüšé à ţàŕĝéţ ļàñĝüàĝé îš ƃéĥîñđ. Ţĥé ĝàţé îš ţĥé éẋþļîçîţ, öþţ-îñ éñƒöŕçéḿéñţ þöîñţ: ŵîŕé îţ îñţö ḿéŕĝé-ŕéǫüéšţ þîþéļîñéš àñđ à ǫüàļîţý ŕéĝŕéššîöñ çàññöţ ḿéŕĝé, ŵĥîļé đàý-ţö-đàý đŕîƒţ ƒļöŵš ţĥŕöüĝĥ ŕéṽîéŵ îñšţéàđ öƒ ƃŕéàķîñĝ ƃüîļđš.
Šöüŕçé ƒîŕšţ: šéţţļé ƃéƒöŕé ýöü ƒàñ öüţ
Ţĥé ļööþ îš šöüŕçé-ƒîŕšţ: îţ šéţţļéš ţĥé šöüŕçé
àñđ ĥöļđš àţ ţĥé šöüŕçé ĝàţé ƃéƒöŕé ţŕàñšļàţîñĝ àñý ļàñĝüàĝé, ƃéçàüšé à ţéŕḿ ļéƒţ
üñŕéšöļṽéđ öŕ à šéñţéñçé ļéƒţ öƒƒ-ƃŕàñđ îñ ţĥé šöüŕçé îš þàîđ ƒöŕ öñçé þéŕ
ļàñĝüàĝé àñđ àĝàîñ öñ ţĥé ƒîẋ. Îñ ÇÎ ţĥîš šĥöŵš üþ ţŵö ŵàýš. kapi check --ship
ŕüñš ţĥé þŕöĵéçţ'š source_gate àļöñĝšîđé ţĥé ţàŕĝéţ šĥîþ ĝàţéš, šö à ḿéŕĝé ŵĥöšé
šöüŕçé îš öƒƒ-ƃŕàñđ öŕ ƃéļöŵ îţš ţéŕḿîñöļöĝý ƃàŕ ƒàîļš ţĥé ĝàţé ţĥé šàḿé ŵàý à
ţàŕĝéţ-çöṽéŕàĝé ŕéĝŕéššîöñ đöéš. Àñđ üñđéŕ šöüŕçé-ƒîŕšţ çöñṽéŕĝéñçé, šöüŕçé ţĥàţ
ĥàš ñöţ çļéàŕéđ îţš source_gate ĥöļđš (ŕéþöŕţéđ àš source_not_ready,
ŕöüţéđ ţö à šöüŕçé ŕéṽîéŵ) ŕàţĥéŕ ţĥàñ šþéñđîñĝ öñ à ḿàçĥîñé ţŕàñšļàţîöñ öƒ
çöñţéñţ ţĥàţ îš àƃöüţ ţö çĥàñĝé. Šéé Šöüŕçé ƒîŕšţ
ƒöŕ ţĥé ḿöđéļ.
Ţĥé šüŕƒàçéš
| ÇÎ | Îñšţàļļ | Ŕüñ |
|---|---|---|
| ĜîţĤüƃ Àçţîöñš | setup-kapi (ÇĻÎ + þļüĝîñš, çàçĥéđ) | kapi-action, öŕ ţĥé öñé-ļîñé ŕéüšàƃļé ŵöŕķƒļöŵš |
| ĜîţĻàƃ ÇÎ | ñöñé ñééđéđ (ţĥé çöḿþöñéñţš ŕüñ öñ ţĥé îḿàĝé) | kapi-components ƒŕöḿ ţĥé ÇÎ/ÇĐ Çàţàļöĝ |
| Àñýţĥîñĝ çöñţàîñéŕ-ƃàšéđ | ghcr.io/neokapi/kapi (çöšîĝñ-šîĝñéđ; à ṽàŕîàñţ ŵîţĥ ţĥé šéŕṽéŕ-šýñç þļüĝîñ þŕéîñšţàļļéđ îš þüƃļîšĥéđ àļöñĝšîđé) | Ţĥé ÇĻÎ đîŕéçţļý; ţĥé éẋîţ çöđéš àƃöṽé àŕé ţĥé çöñţŕàçţ |
Çàţçĥ üþ öñ à šçĥéđüļé, đéļîṽéŕ à þüļļ ŕéǫüéšţ
Ţĥé þŕöđüçéđ ţŕàñšļàţîöñš ļàñđ àš à ƃŕàñçĥ àñđ à þüļļ ŕéǫüéšţ çàŕŕýîñĝ ţĥé ŕüñ ŕéþöŕţ: öüţçöḿé, þàššéš, þàŕķéđ ļöçàļéš. À ŕüñ ţĥàţ þàŕķš (ŵöŕķ ŕéḿàîñš ţĥàţ ñééđš à þéŕšöñ) šţîļļ đéļîṽéŕš ŵĥàţ îţ đîđ çàţçĥ üþ; ţĥé þàŕķéđ ļöçàļéš àŕé ţĥé ŕéṽîéŵ ǫüéüé.
- ĜîţĤüƃ Àçţîöñš
- ĜîţĻàƃ ÇÎ
name: Translations
on:
schedule:
- cron: "0 6 * * 1-5"
workflow_dispatch:
jobs:
up:
uses: neokapi/kapi-workflows/.github/workflows/up.yml@v1
permissions:
contents: write
pull-requests: write
secrets:
anthropic-api-key: ${{ secrets.ANTHROPIC_API_KEY }}
Ţĥé ŕéüšàƃļé ŵöŕķƒļöŵ çöḿþöšéš setup-kapi, kapi-action, àñđ à đéļîṽéŕý
šţéþ ţĥàţ öþéñš ţĥé þüļļ ŕéǫüéšţ. Üšéđ đîŕéçţļý, ţĥé àçţîöñ öñļý ŕéþöŕţš:
has-changes àñđ changed-files ƒééđ à đéļîṽéŕý šţéþ ýöü öŵñ (þļàîñ ĝîţ,
git-auto-commit-action, create-pull-request), šö ţĥé ţöķéñ, ţĥé àüţĥöŕšĥîþ
àñđ ţĥé ŕéṽîéŵ þöļîçý àŕé šţàţéđ îñ ýöüŕ ŵöŕķƒļöŵ. Öñé ĜîţĤüƃ ƃéĥàṽîöŕ ţö
ķñöŵ: þüšĥéš ḿàđé ŵîţĥ ţĥé ŵöŕķƒļöŵ'š öŵñ GITHUB_TOKEN ţŕîĝĝéŕ ñö
ŵöŕķƒļöŵš, šö ĝîṽé ţĥé đéļîṽéŕý šţéþ à ƒîñé-ĝŕàîñéđ ÞÀŢ öŕ à ĜîţĤüƃ Àþþ ţöķéñ
ŵĥéñ ÇÎ öŕ đéþļöýš šĥöüļđ ŕéàçţ ţö đéļîṽéŕéđ ţŕàñšļàţîöñš.
include:
- component: gitlab.com/neokapi/kapi-components/up@0.1.0
Ţĥé çöḿþöñéñţ'š ĵöƃ ŕüñš öñ šçĥéđüļéđ àñđ ŵéƃ-ţŕîĝĝéŕéđ þîþéļîñéš ƃý đéƒàüļţ,
öþéñš ţĥé ḿéŕĝé ŕéǫüéšţ ţĥŕöüĝĥ ţĥé ÀÞÎ (GITLAB_API_TOKEN, àþî šçöþé), àñđ
éẋþöšéš KAPI_OUTCOME, KAPI_PASSES, àñđ KAPI_PARKED_LOCALES ţö đöŵñšţŕéàḿ
ĵöƃš ṽîà đöţéñṽ.
Ĝàţé ḿéŕĝéš öñ çöñţéñţ ǫüàļîţý
kapi check --ship ŕüñš ţĥé þŕöĵéçţ'š ƃöüñđ ǫüàļîţý ĝàţéš (ṽöîçé, ţéŕḿîñöļöĝý,
ŕüļé-ƃàšéđ çĥéçķš, šţàļéñéšš) þļüš îţš šĥîþ/šöüŕçé çöṽéŕàĝé ĝàţéš, àñđ éẋîţš 3
ŵĥéñ àñý ĝàţé îš üñḿéţ. Ḿàçĥîñé-þŕöđüçéđ ţŕàñšļàţîöñš ƒàîļ ǫüîéţļý: à đŕöþþéđ
þļàçéĥöļđéŕ, à çöḿþéţîţöŕ'š ţéŕḿ, ŵöŕđîñĝ ţĥàţ đŕîƒţš öƒƒ ţĥé àþþŕöṽéđ
ṽöçàƃüļàŕý. Ţĥé ĝàţé ḿàķéš ţĥé þîþéļîñé ƒîñđ ţĥéḿ ƃéƒöŕé à ŕéàđéŕ đöéš.
- ĜîţĤüƃ Àçţîöñš
- ĜîţĻàƃ ÇÎ
name: Ship gate
on:
pull_request:
paths: ["content/**", "src/locales/**"]
jobs:
ship-gate:
uses: neokapi/kapi-workflows/.github/workflows/gate.yml@v1
permissions:
contents: read
pull-requests: write
Àñ üñḿéţ ĝàţé ƒàîļš ţĥé ĵöƃ ŵîţĥ à đîšţîñçţ "ĝàţé üñḿéţ" àññöţàţîöñ àñđ þöšţš öñé šţîçķý ŕéþöŕţ çöḿḿéñţ ţĥàţ ŕé-ŕüñš üþđàţé îñ þļàçé.
include:
- component: gitlab.com/neokapi/kapi-components/check@0.1.0
Ţĥé ĵöƃ ŕüñš öñ ḿéŕĝé-ŕéǫüéšţ þîþéļîñéš, ƒàîļš öñ éẋîţ 3, àñđ þöšţš öñé
ţĥŕéàđéđ ḾŔ ñöţé ŵîţĥ ţĥé ƒàîļîñĝ ĝàţéš àñđ ƒîñđîñĝš; ţĥé ƒüļļ
kapi.check/v1 ŕéþöŕţ îš ķéþţ àš à ĵöƃ àŕţîƒàçţ.
Ţĥé Šĥîþ ĝàţéš & ÇÎ ŕéçîþé ŵàļķš ţĥé
ĝàţé éñđ ţö éñđ, îñçļüđîñĝ ţĥé çöḿḿîţţéđ üñîţ-šţàţé ŕéçöŕđ ţĥàţ ļéţš à reviewed
ţĥŕéšĥöļđ þàšš öñ à ŕüññéŕ.
Ŕéþöŕţ ţĥé çöšţ öƒ à çĥàñĝé öñ îţš þüļļ ŕéǫüéšţ
kapi up --plan đŕý-ŕüñš ţĥé ļööþ: þéñđîñĝ üñîţš, çöñţéñţ-ḿéḿöŕý ļéṽéŕàĝé, àñđ à
ţöķéñ éšţîḿàţé, ŵîţĥ ñö ŵŕîţéš, ñö þŕöṽîđéŕ çàļļš, ñö ķéýš. Þöšţéđ öñ ţĥé þüļļ ŕéǫüéšţ
ţĥàţ çŕéàţéđ ţĥé ŵöŕķ, îţ àñšŵéŕš "ŵĥàţ đöéš ţĥîš çĥàñĝé çöšţ îñ ţŕàñšļàţîöñ?"
ƃéƒöŕé àñýöñé ḿéŕĝéš:
- ĜîţĤüƃ Àçţîöñš
- ĜîţĻàƃ ÇÎ
- uses: neokapi/kapi-action@v1
with:
plan: "true"
pr-comment: "true"
include:
- component: gitlab.com/neokapi/kapi-components/up@0.1.0
inputs:
plan: true
deliver: "none"
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
Ţĥîš çĥàñĝé ļéàṽéš 42 üñîţ(š) öƒ þéñđîñĝ ţŕàñšļàţîöñ ŵöŕķ: 30 ŕéçöṽéŕàƃļé ƒŕöḿ çöñţéñţ ḿéḿöŕý, 12 ƒöŕ ÀÎ (~450 ţöķéñš éšţîḿàţéđ).
Çŕéđéñţîàļš àñđ šţàţé öñ à ŕüññéŕ
-
À þŕöđüçîñĝ ĵöƃ üšéš àñ ÀÞÎ ķéý: šéţ à þŕöṽîđéŕ ķéý (ƒöŕ éẋàḿþļé
ANTHROPIC_API_KEY) àš à ÇÎ šéçŕéţ. À šüƃšçŕîþţîöñ šîĝñ-îñ îš ƃöüñđ ţö ýöüŕ üšéŕ àñđ îţš üšàĝé ŵîñđöŵ; šéé Ļéţ kapi ŕüñ Çļàüđé. Îñ à šéŕṽéŕ-çöññéçţéđ þŕöĵéçţ (à ŕéçîþé ţĥàţ đéçļàŕéš à šéŕṽéŕ ṽéñüé) ţĥé šéŕṽéŕ ĥöļđš ţĥé ķéýš îñšţéàđ, àñđ ţĥé ĵöƃ àüţĥéñţîçàţéš ŵîţĥ à šéŕṽéŕ ţöķéñ. -
À ĝàţé-öñļý ĵöƃ ñééđš ñö ķéýš àţ àļļ:
check --shipàñđup --planŕéàđ ţĥé ŵöŕķîñĝ ţŕéé. -
Üñîţ šţàţé ţŕàṽéļš ŵîţĥ ţĥé ŕéþö: à
reviewedţĥŕéšĥöļđ ŕéàđš ţĥé çöḿḿîţţéđ üñîţ-šţàţé ŕéçöŕđ üñđéŕ.kapi/state/; çöḿḿîţ îţ îñ ţĥé ÞŔ öŕ ţĥé ŕüññéŕ šééš ñö àþþŕöṽàļš. À ĵöƃ ţĥàţ ḿàķéš đéçîšîöñš ŕüñškapi commitàñđ çöḿḿîţš ţĥé šĥàŕđš îţ þŕöđüçéš, àļöñĝšîđé ţĥé ţŕàñšļàţéđ ƒîļéš. Îţ ñéṽéŕ çöḿḿîţš.kapi/work/store.db. -
Ţĥé þàŕšé çàçĥé îš ţĥé þàŕţ ţö çàŕŕý ƃéţŵééñ ŕüñš:
.kapi/work/cache/docsîš ĝîţîĝñöŕéđ, ŕéƃüîļţ öñ à ƒŕéšĥ ŕüññéŕ, àñđ ķéýéđ ƃý éàçĥ ƒîļé'š þàţĥ àñđ çöñţéñţ, ţĥé þàŕšé çöñƒîĝüŕàţîöñ, ţĥé ŕéçîþé àñđ ţĥé kapi ƃüîļđ, šö à ŕéšţöŕéđ éñţŕý çĥàñĝéš ñö ŕéšüļţ.setup-kapiçàŕŕîéš îţ ƃý đéƒàüļţ, àñđ à ĵöƃ ţĥàţ üšéš ţĥé àçţîöñ ñééđš ñö çàçĥé šţéþ öƒ îţš öŵñ:- uses: neokapi/setup-kapi@v1with:version: "1.2.0"# cache-tm: false turns the parse cache offŴîţĥöüţ ţĥé àçţîöñ, çàçĥé ţĥàţ öñé đîŕéçţöŕý:
- uses: actions/cache@v6with:path: .kapi/work/cache/docskey: kapi-parse-${{ runner.os }}-${{ hashFiles('kapi.yaml', 'src/locales/en/**') }}restore-keys: kapi-parse-${{ runner.os }}-Çàçĥé ñöţĥîñĝ éļšé üñđéŕ
.kapi/work.store.dbĥöļđš ţĥé üñîţ šţàţé šţàĝéđ šîñçé ţĥé ļàšţ çöḿḿîţ, àñđ à ŕéšţöŕéđ çöþý çĥàñĝéš ŵĥàţ à ŕüñ ŕéþöŕţš: öñ à ƒîẋţüŕé þŕöĵéçţ îţ ţüŕñéđ à ƒàîļîñĝcheck --shipîñţö à þàššîñĝ öñé àñđ à ļöçàļé'š çöṽéŕàĝé ƒŕöḿ 0% ţö 100%. Ţĥé öţĥéŕ éñţŕîéš üñđéŕcache/, šüçĥ àš ţĥé éẋţŕàçţîöñ ƃàţçĥéš, ţĥé ŕéđàçţîöñ ŕéçöŕđ àñđ ţĥé šýñç šţàţé, ƃéļöñĝ ţö ţĥé çĥéçķöüţ ţĥàţ ŵŕöţé ţĥéḿ. Šéŕṽéŕ-çöññéçţéđ þŕöĵéçţš šķîþ ţĥé çàçĥé éñţîŕéļý; ţĥé þŕöĵéçţ'š çöñţéẋţ ļîṽéš öñ ţĥé šéŕṽéŕ.
:::ñöţé[Ŵöŕķš ŵîţĥ Bowrain]
Éṽéŕýţĥîñĝ öñ ţĥîš þàĝé ŕüñš ţĥé ļööþ îñšîđé ýöüŕ öŵñ ÇÎ. À þŕöĵéçţ ŵĥöšé ŕéçîþé đéçļàŕéš à bowrain: ƃļöçķ ŕüñš ţĥé šàḿé ļööþ öñ à Bowrain šéŕṽéŕ îñšţéàđ: kapi up þüšĥéš, ţĥé šéŕṽéŕ çàţçĥéš éṽéŕý ļöçàļé üþ àĝàîñšţ ţĥé ŵöŕķšþàçé'š šĥàŕéđ ḿéḿöŕý àñđ ţéŕḿîñöļöĝý, àñđ ţĥé ŕüñ šţŕéàḿš ƃàçķ, ŵîţĥ ŕéṽîéŵ ĥàñđļéđ îñ ţĥé Bowrain ŵéƃ àþþ ŕàţĥéŕ ţĥàñ îñ ýöüŕ çĥéçķöüţ. Šéé ţĥé Bowrain đöçüḿéñţàţîöñ.
:::
Ñéẋţ
- Ţĥé kapi ļööþ: ţĥé ļööþ àñđ ţĥé đéŕîṽéđ-šţàţé ḿöđéļ ƃéĥîñđ
status,up, àñđ ţĥé ĝàţéš. - Šĥîþ ĝàţéš & ÇÎ: ţĥé éñƒöŕçéḿéñţ ŕéçîþé, éñđ ţö éñđ.
- Éšţîḿàţé à ŕüñ'š çöšţ: šîžîñĝ à ĵöƃ ŵîţĥ
kapi statsàñđkapi up --planƃéƒöŕé çöḿḿîššîöñîñĝ îţ. - Ŕéṽîéŵ & àþþŕöṽé: ţĥé ĥüḿàñ ĥàļƒ öƒ à þàŕķéđ ŕüñ.