GitHub Actions рд╣рдБрдбрд▓рд░рдордзреАрд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдореБрд│реЗ Nixpkgs рдордзреАрд▓ рдкреЕрдХреЗрдЬреЗрд╕ рдзреЛрдХреНрдпрд╛рдд рдпреЗрдК рд╢рдХрд▓реЗ.

NixOS рд╡рд┐рддрд░рдг рдЖрдгрд┐ Nix рдкреЕрдХреЗрдЬ рдореЕрдиреЗрдЬрд░ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдордордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ Nixpkgs рдкреЕрдХреЗрдЬ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдордзреНрдпреЗ рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕рдмрдорд┐рдЯ рдХрд░рддрд╛рдирд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рддрдкрдгреЗ рд╡рд╛рдкрд░рд▓реНрдпрд╛ рдЬрд╛рдгрд╛рд▒реНрдпрд╛ GitHub рдЕреЕрдХреНрд╢рди рд╣рдБрдбрд▓рд░реНрд╕рдордзреАрд▓ рднреЗрджреНрдпрддрд╛ рдЙрдШрдб рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдпрд╛ рднреЗрджреНрдпрддреЗрдореБрд│реЗ рдЕрдирдзрд┐рдХреГрдд рд╡рд╛рдкрд░рдХрд░реНрддреНрдпрд╛рд▓рд╛ Nixpkgs рдордзреНрдпреЗ рд╣реЛрд╕реНрдЯ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдкреЕрдХреЗрдЬреЗрд╕рдЪреНрдпрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдбрдордзреНрдпреЗ рд░реАрдб рдЖрдгрд┐ рд░рд╛рдЗрдЯ рдЕреЕрдХреНрд╕реЗрд╕ рджреЗрдгрд╛рд░реЗ рдЯреЛрдХрди рдХрд╛рдврддрд╛ рдЖрд▓реЗ. рдпрд╛ рдЯреЛрдХрдирдореБрд│реЗ рдкреБрдирд░рд╛рд╡рд▓реЛрдХрди рдЖрдгрд┐ рдордВрдЬреБрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдирд╛ рдмрд╛рдпрдкрд╛рд╕ рдХрд░реВрди рдкреНрд░реЛрдЬреЗрдХреНрдЯрдЪреНрдпрд╛ Git рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрджреНрд╡рд╛рд░реЗ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рдереЗрдЯ рдмрджрд▓ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рдорд┐рд│рд╛рд▓реА.

Nixpkgs рд╢реА рддрдбрдЬреЛрдб рдХрд░рдгреНрдпрд╛рдЪреА рдЖрдгрд┐ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкреЕрдХреЗрдЬрдордзреНрдпреЗ рдХрд╕реНрдЯрдо рдХреЛрдб рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрд╢реЛрдзрдХрд╛рдВрдиреА рдЧреЗрд▓реНрдпрд╛ рдСрдХреНрдЯреЛрдмрд░рдордзреНрдпреЗ NixCon рдкрд░рд┐рд╖рджреЗрдд рджрд╛рдЦрд╡реВрди рджрд┐рд▓реА рд╣реЛрддреА рдЖрдгрд┐ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдкрд╛рдпрд╛рднреВрдд рд╕реБрд╡рд┐рдзрд╛рдВрдордзреНрдпреЗ рд▓рдЧреЗрдЪрдЪ рдкреЕрдЪ рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА рд╣реЛрддреА. рддрдерд╛рдкрд┐, рд╣рд▓реНрд▓реНрдпрд╛рдЪреА рдорд╛рд╣рд┐рддреА рдлрдХреНрдд рдПрдХ рд╡рд░реНрд╖рд╛рдирдВрддрд░ рдЙрдШрдб рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реА. рд╣реА рд╕рдорд╕реНрдпрд╛ Nixpkgs GitHub рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдордзреАрд▓ GitHub Actions рд╣рдБрдбрд▓рд░реНрд╕рдЪреНрдпрд╛ рд╡рд╛рдкрд░рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛрддреА, рдЬреЗ "pull_request_target" рдЗрд╡реНрд╣реЗрдВрдЯрд╢реА рдмрд╛рдВрдзреАрд▓ рдЖрд╣реЗрдд рдЖрдгрд┐ рдирд╡реАрди рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрд╡рд░ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рддрдкрд╛рд╕рдгреА рдХрд░рддрд╛рдд.

"pull_request" рдЗрд╡реНрд╣реЗрдВрдЯрдЪреНрдпрд╛ рд╡рд┐рдкрд░реАрдд, "pull_request_target" рдордзреАрд▓ рд╣рдБрдбрд▓рд░реНрд╕рдирд╛ рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рд╡рд╛рдЪрди/рд▓реЗрдЦрди рдкреНрд░рд╡реЗрд╢ рджрд┐рд▓рд╛ рдЬрд╛рддреЛ, рдЬреНрдпрд╛рд╕рд╛рдареА рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдордзреНрдпреЗ рдкрд╛рд╕ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд│рдЬреА рдШреЗрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ. "pull_request_target" рд▓рд╛ рдмрд╛рдВрдзрд▓реЗрд▓реНрдпрд╛ рд╣рдБрдбрд▓рд░реНрд╕рдкреИрдХреА рдПрдХрд╛рдиреЗ рдХреЛрдбрдУрдирд░реНрд╕-рд╡реНрд╣реЕрд▓рд┐рдбреЗрдЯрд░ рдпреБрдЯрд┐рд▓рд┐рдЯреА рдмрд┐рд▓реНрдб рдЖрдгрд┐ рдХреЙрд▓ рдХрд░реВрди рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдордзреНрдпреЗ рдкреНрд░рджрд╛рди рдХреЗрд▓реЗрд▓реА "OWNERS" рдлрд╛рдЗрд▓ рд╕рддреНрдпрд╛рдкрд┐рдд рдХреЗрд▓реА: steps: тАФ рд╡рд╛рдкрд░рддреЗ: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf рд╕рд╣: 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 рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╡рд┐рдХреГрдд рд╕реНрдЯреНрд░рд┐рдВрдЧрдЪреА рд╕рд╛рдордЧреНрд░реА рдорд╛рдирдХ, рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХрд░рд┐рддреНрдпрд╛ рдкреНрд░рд╡реЗрд╢рдпреЛрдЧреНрдп рд▓реЙрдЧрдордзреНрдпреЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░реЗрд▓. рдпрд╛ рд╣рд▓реНрд▓реНрдпрд╛рдд рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдордзреНрдпреЗ OWNERS рдирд╛рд╡рд╛рдЪреА рдПрдХ рдкреНрд░рддреАрдХрд╛рддреНрдордХ рд▓рд┐рдВрдХ рдареЗрд╡рдгреЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рд╣реЛрддреЗ, рдЬреА ".credentials" рдлрд╛рдЗрд▓рдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ, рдЬреА рдмрд┐рд▓реНрдб рд╡рд╛рддрд╛рд╡рд░рдгрд╛рдд рдХреНрд░реЗрдбреЗрдиреНрд╢рд┐рдпрд▓реНрд╕ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рддреЗ. рдкрд░рд┐рдгрд╛рдореА, рдпрд╛ рдлрд╛рдЗрд▓рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реНрдпрд╛рдиреЗ рдПрдХ рддреНрд░реБрдЯреА рдЖрд▓реА рдЖрдгрд┐ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реА рдЕреЕрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдЕрд╕рд▓реЗрд▓реА рдкрд╣рд┐рд▓реА рдУрд│ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд▓реЙрдЧрдордзреНрдпреЗ рдЖрдЙрдЯрдкреБрдЯ рдЭрд╛рд▓реА.

 GitHub Actions рд╣рдБрдбрд▓рд░рдордзреАрд▓ рдЕрд╕реБрд░рдХреНрд╖рд┐рддрддреЗрдореБрд│реЗ Nixpkgs рдордзреАрд▓ рдкреЕрдХреЗрдЬреЗрд╕ рдзреЛрдХреНрдпрд╛рдд рдпреЗрдК рд╢рдХрд▓реЗ.

рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдПрдбрд┐рдЯрд░рдХреЙрдиреНрдлрд┐рдЧ рдирд┐рдпрдо рддрдкрд╛рд╕рдгрд╛рд▒реНрдпрд╛ рд╣рдБрдбрд▓рд░рдордзреНрдпреЗ рдЖрдгрдЦреА рдПрдХ рднреЗрджреНрдпрддрд╛ рдЖрдврд│рд▓реА. рдкрд╛рдпрд▒реНрдпрд╛: тАФ рдирд╛рд╡: PR рдордзреВрди рдмрджрд▓рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рдЪреА рдпрд╛рджреА рдорд┐рд│рд╡рд╛ рд░рди: gh api [тАж] | jq [ тАж ] > ┬л$HOME/changed_files┬╗ тАФ рд╡рд╛рдкрд░рддреЗ: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 рд╕рд╣: ref: refs/pull/$/merge тАФ рдирд╛рд╡: рдПрдбрд┐рдЯрд░рдХреЙрдиреНрдлрд┐рдЧ рд░рди рддрдкрд╛рд╕рдд рдЖрд╣реЗ: cat ┬л$HOME/changed_files┬╗ | xargs -r рдПрдбрд┐рдЯрд░рдХреЙрдиреНрдлрд┐рдЧ-рдЪреЗрдХрд░

рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рд╕рдорд╕реНрдпрд╛ рдореНрд╣рдгрдЬреЗ рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдлрд╛рдЗрд▓рд╕реЛрдмрдд editorconfig-checker рдЪрд╛рд▓рд╡рдгреНрдпрд╛рд╕рд╛рдареА "xargs" рдпреБрдЯрд┐рд▓рд┐рдЯреА рд╡рд╛рдкрд░рдгреЗ. рдлрд╛рдЗрд▓рдирд╛рд╡рд╛рдВрдЪреА рдкрдбрддрд╛рд│рдгреА рдХреЗрд▓реЗрд▓реА рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рд╣рд▓реНрд▓реЗрдЦреЛрд░ рдкреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯрдордзреНрдпреЗ рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рдЕрд╕рд▓реЗрд▓реА рдлрд╛рдЗрд▓ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддреЛ, рдЬреА editorconfig-checker рдЪрд╛рд▓рд╡рддрд╛рдирд╛ рдХрдорд╛рдВрдб-рд▓рд╛рдЗрди рд╡рд┐рддрд░реНрдХ рдореНрд╣рдгреВрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реА рдЬрд╛рдИрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, "--help" рдлрд╛рдЗрд▓ рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛, editorconfig-checker рдЙрдкрд▓рдмреНрдз рдкрд░реНрдпрд╛рдпрд╛рдВрдмрджреНрджрд▓ рдПрдХ рд╕рдВрдХреЗрдд рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрд▓.

рд╕реНрддреНрд░реЛрдд: opennet.ru

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛