Π Π°Π·ΠΊΡΠΈΡΠΈ ΡΠ° Π΄Π°Π½Π½ΠΈ Π·Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° GitHub Actions, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ ΠΏΡΠΈ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° pull-Π·Π°ΡΠ²ΠΊΠΈ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΠΊΠ΅ΡΠΈΡΠ΅ Nixpkgs, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π² Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΡΠ° NixOS ΠΈ Π² Π΅ΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ°, ΡΠ²ΡΡΠ·Π°Π½Π° Ρ ΠΏΠ°ΠΊΠ΅ΡΠ½ΠΈΡ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Nix. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ Π½Π° ΡΡΠ΅ΡΠΈ Π»ΠΈΡΠ° Π΄Π° ΠΈΠ·Π²Π»Π΅ΠΊΠ°Ρ ΡΠΎΠΊΠ΅Π½, ΠΊΠΎΠΉΡΠΎ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π΄ΠΎΡΡΡΠΏ Π·Π° Π·Π°ΠΏΠΈΡ ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ Π½Π° ΠΈΠ·Ρ ΠΎΠ΄Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΠΊΠ΅ΡΠΈ, ΡΠ°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π² Nixpkgs. Π’ΠΎΠ·ΠΈ ΡΠΎΠΊΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΈ Π² ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΠ°ΠΊΠ΅Ρ ΡΡΠ΅Π· Git-Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈΡΠ΅ Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈ ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅.
ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠΈΡΠ°Π½Π΅ Π½Π° Nixpkgs ΠΈ ΠΏΠΎΠ΄ΠΌΡΠ½Π° Π½Π° ΡΠΎΠ±ΡΡΠ²Π΅Π½ ΠΊΠΎΠ΄ Π² ΠΊΠΎΠΉΡΠΎ ΠΈ Π΄Π° Π΅ ΠΏΠ°ΠΊΠ΅Ρ Π±Π΅ΡΠ΅ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ°Π½Π° ΠΎΡ ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΏΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎΡΡΡΠ° ΠΏΡΠ΅Π· ΠΎΠΊΡΠΎΠΌΠ²ΡΠΈ ΠΌΠΈΠ½Π°Π»Π°ΡΠ° Π³ΠΎΠ΄ΠΈΠ½Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΡΡΠ° NixCon ΠΈ Π²Π΅Π΄Π½Π°Π³Π° Π±Π΅ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²Π΅Π½Π° Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ°ΡΠ° Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ°. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈΡΠ΅ Π·Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½Π°ΡΠ° Π°ΡΠ°ΠΊΠ° Π±ΡΡ Π° ΡΠ°Π·ΠΊΡΠΈΡΠΈ Π΅Π΄Π²Π° Π³ΠΎΠ΄ΠΈΠ½Π° ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π±Π΅ΡΠ΅ ΡΠ²ΡΡΠ·Π°Π½ Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ Π½Π° GitHub Actions Π² GitHub-Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ Π½Π° Nixpkgs, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ βpull_request_targetβ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π°Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΏΡΠΈΡΡΠΈΠ³Π°Π½Π΅ Π½Π° Π½ΠΎΠ²ΠΈ pull-Π·Π°ΡΠ²ΠΊΠΈ.
ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ ΡΡΠ±ΠΈΡΠΈΠ΅ΡΠΎ βpull_requestβ, Π² βpull_request_targetβ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π΄ΠΎΡΡΡΠΏ Π·Π° Π·Π°ΠΏΠΈΡ ΠΈ ΡΠ΅ΡΠ΅Π½Π΅ Π΄ΠΎ ΡΡΡΠΎΠΈΡΠ΅Π»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ° Ρ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π°Π²Π°Π½ΠΈ Π² pull-Π·Π°ΡΠ²ΠΊΠ°ΡΠ°. Π Π΅Π΄ΠΈΠ½ ΠΎΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°ΡΠΈΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ βpull_request_targetβ, Π±Π΅ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΡΠ°ΠΉΠ»Π° βOWNERSβ, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² pull-Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, Π·Π° ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΡΡΠ±ΠΈΡΠ°ΡΠ΅ ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°ΡΠ΅ ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° codeowners-validator: steps: β uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf with: ref: refs/pull/$/merge path: pr β run: nix-build base/ci -A codeownersValidator β run: result/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS
ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π±Π΅ΡΠ΅, ΡΠ΅ Π² ΡΠ»ΡΡΠ°ΠΉ Π½Π° Π³ΡΠ΅ΡΠΊΠ° ΠΏΡΠΈ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π° OWNERS, ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° codeowners-validator ΠΈΠ·Π²Π΅ΠΆΠ΄Π°ΡΠ΅ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°Π½ΠΈΡ ΡΠ΅Π΄ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡ Π»ΠΎΠ³, Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΡΠ±Π»ΠΈΡΠ½ΠΎ. ΠΡΠ°ΠΊΠ°ΡΠ° ΡΠ΅ ΡΠ²Π΅ΠΆΠ΄Π°ΡΠ΅ Π΄ΠΎ ΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π² pull-Π·Π°ΡΠ²ΠΊΠ°ΡΠ° Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»Π½Π° Π²ΡΡΠ·ΠΊΠ° Ρ ΠΈΠΌΠ΅ OWNERS, ΠΊΠΎΡΡΠΎ ΡΠΎΡΠΈ ΠΊΡΠΌ ΡΠ°ΠΉΠ»Π° β.credentialsβ, Π² ΠΊΠΎΠΉΡΠΎ Π² ΡΡΡΠΎΠΈΡΠ΅Π»Π½Π°ΡΠ° ΡΡΠ΅Π΄Π° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΎΠ½Π½ΠΈ Π΄Π°Π½Π½ΠΈ. Π‘ΡΠΎΡΠ²Π΅ΡΠ½ΠΎ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠΎΠ·ΠΈ ΡΠ°ΠΉΠ» Π΄ΠΎΠ²Π΅Π΄Π΅ Π΄ΠΎ Π³ΡΠ΅ΡΠΊΠ° ΠΈ ΠΈΠ·Π²Π΅ΠΆΠ΄Π°Π½Π΅ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΠΈΡ Π»ΠΎΠ³ Π½Π° ΠΏΡΡΠ²ΠΈΡ ΡΠ΅Π΄, ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠΎΠΊena Π·Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ΡΠΎ.

ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΎΡΠΊΡΠΈΡΠ° ΠΎΡΠ΅ Π΅Π΄Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΠΊΠΎΠΉΡΠΎ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° editorconfig. ΡΡΡΠΏΠΊΠΈ: β ΠΈΠΌΠ΅: ΠΠ·Π΅ΠΌΠ΅ΡΠ΅ ΡΠΏΠΈΡΡΠΊ Ρ ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ ΠΎΡ PR run: gh api [β¦] | jq [ β¦ ] > Β«$HOME/changed_filesΒ» β uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 Ρ: ref: refs/pull/$/merge β ΠΈΠΌΠ΅: ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π½Π° EditorConfig run: cat Β«$HOME/changed_filesΒ» | xargs -r editorconfig-checker
Π ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡΡ Π±Π΅ΡΠ΅ Π² ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° Β«xargsΒ» Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° editorconfig-checker Ρ Π²ΡΠ΅ΠΊΠΈ ΡΠ°ΠΉΠ» ΠΎΡ pull-Π·Π°ΠΏΡΠΎΡΠ°. Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΠΈΠΌΠ΅Π½Π°ΡΠ° Π½Π° ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Ρ
Π° Π·Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎΡΡ, Π½Π°ΠΏΠ°Π΄Π°ΡΠ΅Π»ΡΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈ Π² pull-Π·Π°ΠΏΡΠΎΡΠ° ΡΠ°ΠΉΠ» ΡΡΡ ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ Π±ΠΈΡ
Π° Π±ΠΈΠ»ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ΅Π½ΠΈ ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° editorconfig-checker ΠΊΠ°ΡΠΎ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΠ°ΠΉΠ» Β«βhelpΒ», ΡΡΠΈΠ»ΠΈΡΠ°ΡΠ° editorconfig-checker Π±ΠΈ ΠΏΠΎΠΊΠ°Π·Π°Π»Π° ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° Π·Π° Π½Π°Π»ΠΈΡΠ½ΠΈΡΠ΅ ΠΎΠΏΡΠΈΠΈ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
