Π Π°ΡΠΊΡΡΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΡ Π² ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°Ρ GitHub Actions, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌΡΡ ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ pull-Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ² Nixpkgs, ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΠΉ Π² Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²Π΅ NixOS ΠΈ Π² ΡΠΊΠΎΡΠΈΡΡΠ΅ΠΌΠ΅, ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠΉ Ρ ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΌ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠΎΠΌ Nix. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ»Π° ΠΏΠΎΡΡΠΎΡΠΎΠ½Π½Π΅ΠΌΡ ΠΈΠ·Π²Π»Π΅ΡΡ ΡΠΎΠΊΠ΅Π½, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΠΉ Π΄ΠΎΡΡΡΠΏ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΊΠΎΠ΄Ρ Π²ΡΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ², ΡΠ°Π·ΠΌΠ΅ΡΡΠ½Π½ΡΡ Π² Nixpkgs. ΠΠ°Π½Π½ΡΠΉ ΡΠΎΠΊΠ΅Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ» Π½Π°ΠΏΡΡΠΌΡΡ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π² Π»ΡΠ±ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ ΡΠ΅ΡΠ΅Π· Git-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ ΠΏΡΠΎΠ΅ΠΊΡΠ°, Π² ΠΎΠ±Ρ ΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΡΠ΅ΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.
ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠ΅ΡΠ°ΡΠΈΠΈ Nixpkgs ΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΊΠΎΠ΄Π° Π² Π»ΡΠ±ΠΎΠΉ ΠΏΠ°ΠΊΠ΅Ρ Π±ΡΠ»Π° ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½Π° ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌΠΈ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ Π² ΠΎΠΊΡΡΠ±ΡΠ΅ ΠΏΡΠΎΡΠ»ΠΎΠ³ΠΎ Π³ΠΎΠ΄Π° Π½Π° ΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ NixCon ΠΈ ΡΡΠ°Π·Ρ Π±ΡΠ»Π° ΡΡΡΡΠ°Π½Π΅Π½Π° Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΠΎ ΠΏΡΠΎΠ²Π΅Π΄ΡΠ½Π½ΠΎΠΉ Π°ΡΠ°ΠΊΠ΅ ΡΠ°ΡΠΊΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΏΡΡΡΡ Π³ΠΎΠ΄. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° ΡΠ²ΡΠ·Π°Π½Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π² GitHub-ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΈ Nixpkgs ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² GitHub Actions, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊ ΡΠΎΠ±ΡΡΠΈΡ Β«pull_request_targetΒ» ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΏΡΠΈ ΠΏΠΎΡΡΡΠΏΠ»Π΅Π½ΠΈΠΈ Π½ΠΎΠ²ΡΡ pull-Π·Π°ΠΏΡΠΎΡΠΎΠ².
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠΎΠ±ΡΡΠΈΡ Β«pull_requestΒ» Π² Β«pull_request_targetΒ» ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠ»Π΅ΡΡΡ Π΄ΠΎΡΡΡΠΏ Π½Π° Π·Π°ΠΏΠΈΡΡ ΠΈ ΡΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΌΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠΎΠ±ΠΎΠ³ΠΎ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠΌΠΈ Π² pull-Π·Π°ΠΏΡΠΎΡΠ΅. Π ΠΎΠ΄Π½ΠΎΠΌ ΠΈΠ· ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΡ ΠΊ Β«pull_request_targetΒ» ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠ»Π°ΡΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΠΏΡΠΈΠ²Π΅Π΄ΡΠ½Π½ΠΎΠ³ΠΎ Π² pull-Π·Π°ΠΏΡΠΎΡΠ΅ ΡΠ°ΠΉΠ»Π° Β«OWNERSΒ», Π΄Π»Ρ ΡΠ΅Π³ΠΎ ΡΠΎΠ±ΠΈΡΠ°Π»Π°ΡΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π»Π°ΡΡ ΡΡΠΈΡΠΈΡΠ° 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Β», Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π² ΡΠ±ΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°ΡΡΡΡ ΡΡΡΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΠΎΡΠΈΠ±ΠΊΠ΅ ΠΈ Π²ΡΠ²ΠΎΠ΄Ρ Π² ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠΉ Π»ΠΎΠ³ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠ΅ΠΉ ΡΠΎΠΊΠ΅Π½ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ.

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