
рд╕рдВрд╕реНрдХрд░рдг 7.04 рд╕реЗ рд╢реБрд░реВ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ рд╕реА рдФрд░ рд╕реА ++ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдирдП рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдХрдорд┐рдЯрд░реНрд╕ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЖрд▓реЗрдЦ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ рдХрд┐ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ, рдмрдбреА рдФрд░ рдРрдкрд╡рд┐рдЕрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рд▓реЛрдХрдкреНрд░рд┐рдп CI (рдХрдВрдЯреАрдиреНрдпреВрдЕрд╕ рдЗрдВрдЯреАрдЧреНрд░реЗрд╢рди) рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ GitHub рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рдВрд╢реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ред
рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рдЬрд╛рдБрдЪ рдореЛрдб
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕реА, рд╕реА ++, рд╕реА # рдФрд░ рдЬрд╛рд╡рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдХреЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ рд╡рд┐рдВрдбреЛрдЬ, рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдкрд░ 64-рдмрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рд▓рд┐рдирдХреНрд╕ рдФрд░ рдореИрдХрдУрдПрд╕ рдХреЗ рд▓рд┐рдП рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╕рдВрд╕реНрдХрд░рдг 7.04 рдореЗрдВ, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдЬрд╛рдВрдЪ рдХрд╛ рддрд░реАрдХрд╛ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдпрд╣ рдЙрди рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдирдХреА рдирд┐рд░реНрдорд╛рдг рдкреНрд░рдгрд╛рд▓реА
compile_commands.json рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЖрдкрдХрд╛ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо compile_commands.json рдлрд╝рд╛рдЗрд▓ рдХреА рдкреАрдврд╝реА рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк
Bear рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рд╛рде рд╣реА, рдХрдВрдкрд╛рдЗрд▓рд░ рд╕реНрдЯрд╛рд░реНрдЯ (рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ-рдПрдирд╛рд▓рд╛рдЗрдЬрд░ рдЯреНрд░реЗрд╕) рдХреЗ рд╕реНрдЯреНрд░реЗрд╕ рдЯреНрд░реЗрд╕ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рд▓рд┐рд╕реНрдЯ рдЪреЗрдХ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдПрдХ рдкреВрд░реА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреЛ рд▓реЗ рдЬрд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддрд╛рдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕рднреА рдкрд░реАрдХреНрд╖рдг рдХреА рдЧрдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкреВрд░реА рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░реЗред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЦрд╛рдореА рд╣реИ - рдЖрдкрдХреЛ рдпрд╛ рддреЛ рдкреНрд░рддреНрдпреЗрдХ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдкреВрд░рд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рдЬреЛ рдЕрдкрдиреЗ рдЖрдк рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдзрддрд╛рдУрдВ рдХреА рдЬрд▓реНрджреА рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИред рдпрд╛, рдпрджрд┐ рдЯреНрд░реЗрд╕ рд░рд┐рдЬрд▓реНрдЯ рд╕реНрд╡рдпрдВ рд╣реА рдХреИрд╢ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдмрд╛рдж рдХрд╛ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд╢реБрд░реВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЯреНрд░реЗрд╕ рдХреЗ рдмрд╛рдж рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рд╕рдВрд░рдЪрдирд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдПрдХ рдирдпрд╛ #include рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХрдорд┐рдЯ рдпрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░реЗрд╕ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рдЪреЗрдХ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк рдПрдХ рдХрдореЗрдЯреА рдХреА рдЬрд╛рдБрдЪ рдХрд░рддреЗ рд╕рдордп рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдЕрд╕реЗрдВрдмрд▓реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ
рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдПрдХ рдкрд╛рда рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬреА рдЬрд╛рддреА рд╣реИ рдФрд░
-S рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
pvs-studio-analyzer analyze ... -f build/compile_commands.json -S check-list.txt
рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдпрд╛ рдирд┐рд░рдкреЗрдХреНрд╖ рдкрде рдЗрдВрдЧрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ рдПрдХ рдирдИ рд▓рд╛рдЗрди рдкрд░ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдпрд╣ рди рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рда рднреА рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╣ рджреЗрдЦреЗрдЧрд╛ рдХрд┐ рдпрд╣ рдХреЛрдИ рдлрд╝рд╛рдЗрд▓ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд▓рд╛рдЗрди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджреЗрдЧрд╛ред рдпрд╣ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдлрд╛рдЗрд▓реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдХреНрд╕рд░ рд╕реАрдЖрдИ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдЙрддреНрдкрдиреНрди рд╣реЛрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпреЗ рдПрдХ рдХрдорд┐рдЯ рдпрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕реЗ рдлрд╛рдЗрд▓реЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдЕрдм рдЗрд╕ рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдореБрдЦреНрдп рд╡рд┐рдХрд╛рд╕ рд╢рд╛рдЦрд╛ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдирдП рдХреЛрдб рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП,
рдкрд╛рдЗрдВрдб-рдХрдиреНрд╡рд░реНрдЯрд░ рдлреНрд▓реИрдЧрд╢рд┐рдк рдХреЛ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
plog-converter ... --indicate-warnings ... -o /path/to/report.tasks ...
рдЗрд╕ рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде, рдХрдирд╡рд░реНрдЯрд░ рдЧреИрд░-рд╢реВрдиреНрдп рдХреЛрдб рд▓реМрдЯрд╛рдПрдЧрд╛ рдпрджрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рдореЗрдВ рдЪреЗрддрд╛рд╡рдиреА рд╣реИред рд░рд┐рдЯрд░реНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдкреВрд░реНрд╡-рдкреНрд░рддрд┐рдмрджреНрдз рд╣реБрдХ, рдХрдорд┐рдЯ рдпрд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рдмреНрд▓реЙрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдХреНрд░реАрди рдкрд░ рдЙрддреНрдкрдиреНрди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд░рд┐рдкреЛрд░реНрдЯ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдореЗрд▓ рджреНрд╡рд╛рд░рд╛ рд╕рд╛рдЭрд╛ рдпрд╛ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред
рдиреЛрдЯред рдкрд╣рд▓реА рдмрд╛рд░ рдЬрдм рдЖрдк рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХреА рдПрдХ рдлрд╝рд╛рдЗрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ C рдФрд░ C ++ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдирд┐рд░реНрднрд░рддрд╛ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреИрд╢ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рджреНрд╡рд╛рд░рд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рд╕рддреНрдпрд╛рдкрди рдореЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЬрд╛рдБрдЪ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рди рдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреАредрдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд╕рд╛рдорд╛рдиреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд
рдкреВрд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рднрд╛рдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдирдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рджреЛ рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рддрд┐рдмрджреНрдз рдкреЗрдбрд╝ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
рдЖрдЗрдП рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐
рдП 1 рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ рдЬрд┐рд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред рдереЛрдбрд╝рд╛ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдкреНрд░рддрд┐рдмрджреНрдз
A1 рд╕реЗ рдПрдХ рд╢рд╛рдЦрд╛ рдмрдирд╛рдИ рдФрд░ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓ рджреАрдВред
рдмреЗрд╢рдХ, рдЖрдкрдиреЗ рджреЗрдЦрд╛ рдХрд┐
A1 рдХреЗ рдмрд╛рдж рджреЛ рдФрд░ рдХрдорд┐рдЯ рдереЗ, рд▓реЗрдХрд┐рди рдпреЗ рднреА рдЕрдиреНрдп рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рд╡рд┐рд▓рдп рдереЗ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдо
рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдкреНрд░рддрд┐рдмрджреНрдз рдирд╣реАрдВ рдереЗред рдФрд░ рдЕрдм рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИ рдЬрдм
рд╣реЙрдЯрдлрд┐рдХреНрд╕ рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕рд▓рд┐рдП,
рдмреА 3 рдФрд░
рдП 3 рдХреЗ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз
рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ ред
рдмреЗрд╢рдХ, рдХреЛрдИ рднреА рдЙрдирдХреЗ рд╡рд┐рд▓рдп рдХреЗ рдкреВрд░реЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдФрд░ рдЕрдиреБрдЪрд┐рдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдлрд╛рдЗрд▓реЗрдВ рдмрджрд▓ рджреА рдЧрдИ рдереАрдВред рдЗрд╕рд▓рд┐рдП, рдХреЗрд╡рд▓ рдмрджрд▓реЗ рд╣реБрдП рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реИред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ, HEAD рд╢рд╛рдЦрд╛ рдореЗрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╣рдо рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
$ MERGE_BASE рд╣рдо рдмрд╛рдж рдореЗрдВ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВрдЧреЗред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдЖрдИ рд╕реЗрд╡рд╛ рд╡рд┐рд▓рдп рдХреЗ рдЖрдзрд╛рд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рд░ рдмрд╛рд░ рдЖрдкрдХреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рддрд░реАрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдирд╛ рд╣реЛрдЧрд╛ред рдпрд╣ рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрдм рд╕реЗрд╡рд╛ рдореЗрдВ рд╡рд┐рд╕реНрддреГрдд рд╣реЛрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рд╢рд╛рдЦрд╛рдУрдВ, рдпрд╛ рдмрд▓реНрдХрд┐, рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдорд┐рд▓рд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЕрдм рд╣рдореЗрдВ
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ
.pvs-pr.list рдлрд╝рд╛рдЗрд▓ (рд╣рдо рдЗрд╕реЗ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ) рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ -S .pvs-pr.list
рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ (PVS-Studio.log) рдХреЛ рдПрдХ рдРрд╕реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛ:
plog-converter -t errorfile PVS-Studio.log --cerr -w
рдпрд╣ рдХрдорд╛рдВрдб
stderr (рдорд╛рдирдХ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рд╕реНрдЯреНрд░реАрдо) рдореЗрдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧрд╛ред
рдХреЗрд╡рд▓ рдЕрдм рд╣рдореЗрдВ рди рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЛ рднреА рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
-W рдлреНрд▓реИрдЧ (
-рдЗрдВрдбрд┐рдХреЗрдЯ-рдЪреЗрддрд╛рд╡рдирд┐рдпрд╛рдВ ) рдХрдирд╡рд░реНрдЯрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ред рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЪреЗрддрд╛рд╡рдиреА рд╣реИ, рддреЛ
рдкреЛрдЧрд▓-рдХрдирд╡рд░реНрдЯрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдХрд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдб 2 рдореЗрдВ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ, рд╕реАрдЖрдИ рд╕реЗрд╡рд╛ рдХреЛ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рдВрднрд╛рд╡рд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░реЗрдЧрд╛ред
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реА.рдЖрдИ.
рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
.travis.yml рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЖрдкрдХреЛ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд╕рд╛рде рд░рдЦреЗрдВ рдЬреЛ рдХрд┐
.travis.yml рдлрд╝рд╛рдЗрд▓ (
bash script_name.sh function_name ) рд╕реЗ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рдо
рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХреЛрдб рдЬреЛрдбрд╝ рджреЗрдВрдЧреЗ, рддрд╛рдХрд┐ рд╣рдореЗрдВ рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдорд┐рд▓ рд╕рдХреЗред
рдЗрдВрд╕реНрдЯреЙрд▓ рд╕реЗрдХреНрд╢рди рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦреЗрдВ:
install: - bash .travis.sh travis_install
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢ рдерд╛, рддреЛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╣рд╛рдЗрдлрд╝рди рд╣рдЯрд╛рдХрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
.Travis.sh рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВ рдФрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрдирд╛ рдХреЛ
travis_install () рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
travis_install() { wget -q -O - https://files.viva64.com/etc/pubkey.txt \ | sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/viva64.list \ https://files.viva64.com/etc/viva64.list sudo apt-get update -qq sudo apt-get install -qq pvs-studio }
рдЕрдм
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд░рди рдЬреЛрдбрд╝реЗрдВ:
script: - bash .travis.sh travis_script
рдФрд░ рдмреИрд╢ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ:
travis_script() { pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then git diff --name-only origin/HEAD > .pvs-pr.list pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ -S .pvs-pr.list \ --disableLicenseExpirationCheck else pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck fi plog-converter -t errorfile PVS-Studio.log --cerr -w }
рдЗрд╕ рдХреЛрдб рдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реАрдПрдордХреЗ рдкрд░ рдПрдХ рдирд┐рд░реНрдорд╛рдг рдерд╛:
travis_script() { CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}" cmake $CMAKE_ARGS CMakeLists.txt make -j8 }
рдпрд╣ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛ рдЬрд╛рдПрдЧрд╛:
travis_script() { CMAKE_ARGS="-DCMAKE_EXPORT_COMPILE_COMMANDS=On ${CMAKE_ARGS}" cmake $CMAKE_ARGS CMakeLists.txt make -j8 pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY if [ "$TRAVIS_PULL_REQUEST" != "false" ]; then git diff --name-only origin/HEAD > .pvs-pr.list pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ -S .pvs-pr.list \ --disableLicenseExpirationCheck else pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck fi plog-converter -t errorfile PVS-Studio.log --cerr -w }
рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░
$ TRAVIS_PULL_REQUEST рдФрд░
$ TRAVIS_BRANCH рдХреЛ рджреЗрдЦрд╛ рдерд╛ ред рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдиреЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдЙрдирдХреА рдШреЛрд╖рдгрд╛ рдХреА:
- $ TRAVIS_PULL_REQUEST рдПрдХ рдирд┐рдпрдорд┐рдд рд╢рд╛рдЦрд╛ рд╣реЛрдиреЗ рдкрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдВрдЦреНрдпрд╛ рдпрд╛ рдЧрд▓рдд рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ;
- $ TRAVIS_REPO_SLUG рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдирд╛рдо рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреА рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛрдб рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗрд╡рд╛ рдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрддрд╛рдПрдЧрд╛ред
рдЕрдм, рдХреЛрдб рдХреА рдЗрд╕ рд▓рд╛рдЗрди рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ:
git diff --name-only origin/HEAD > .pvs-pr.list
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рджреМрд░рд╛рди рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╢рд╛рдЦрд╛рдУрдВ рдХрд╛ рд╡рд┐рд▓рдп рдХрд░рддрд╛ рд╣реИ:
рдЗрд╕рд▓рд┐рдП, рд╣рдо
A4 рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВ, рди рдХрд┐
B3-> A3 рдХрд╛ ред рдЗрд╕ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдХрд╛рд░рдг, рд╣рдореЗрдВ
A3 рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ
рдореВрд▓ рд╕реЗ рд╢рд╛рдЦрд╛ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рд╣реИред
рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рд╡рд░рдг рдмрдирд╛ рд░рд╣рд╛ - рд╕рдВрдХрд▓рд┐рдд рдЕрдиреБрд╡рд╛рдж рдЗрдХрд╛рдЗрдпреЛрдВ (* .c, * .cc, * .cpp, рдЖрджрд┐) рдкрд░ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдХреИрд╢рд┐рдВрдЧред рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рдХреА рдЬрд╛рдБрдЪ рдХреЗ рдореЛрдб рдореЗрдВ рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрди рдирд┐рд░реНрднрд░рддрд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ .PVS-Studio рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реЗрдЬрддрд╛ рд╣реИред рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдЖрдкрдХреЛ рдлрд╝реЛрд▓реНрдбрд░реНрд╕ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо
.PVS-Studio / рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЗ рдбреЗрдЯрд╛ рдХреЛ
рдмрдЪрд╛рдПрдВрдЧреЗ :
cache: directories: - .PVS-Studio/
рдЗрд╕ рдХреЛрдб рдХреЛ
.travis.yml рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж рдПрдХрддреНрд░ рдХрд┐рдП рдЧрдП рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддреА рд╣реИ, рдЬреЛ рдлрд╝рд╛рдЗрд▓ рд╕реВрдЪреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдпрд╛ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж рдХреЗ рд▓реЙрдиреНрдЪ рдХреЛ рдХрд╛рдлреА рддреЗрдЬ рдХрд░реЗрдЧреАред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣рд░ рдмрд╛рд░ рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдЧрд╛ред
рдмрдбреА
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреА рддрд░рд╣,
рдмрдбреА рдЧреАрдердм рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдмрдирд╛рдиреЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдмреИрд╢ рд╕рдорд░реНрдерди рдЙрдкрд▓рдмреНрдз рд╣реИ), рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрд╕реЗрдВрдмрд▓реА рд▓рд╛рдЗрди рдореЗрдВ рдПрдХ рдирдИ рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рд╣рдо рдЙрд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, GCC рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрдВрдЯреЗрдирд░ рд╣реИ:
рдЕрдм рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдпреЛрдЧрд┐рддрд╛рдУрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
apt-get update && apt-get -y install wget gnupg jq wget -q -O - https://files.viva64.com/etc/pubkey.txt | apt-key add - wget -O /etc/apt/sources.list.d/viva64.list \ https://files.viva64.com/etc/viva64.list apt-get update && apt-get -y install pvs-studio
рдЕрдм рд░рди рдЯреИрдм (рдкрд╣рд▓реЗ рдЖрдЗрдХрди) рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╕рдВрдкрд╛рджрдХ рдХреЗ рдЙрдкрдпреБрдХреНрдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY if [ "$BUDDY_EXECUTION_PULL_REQUEST_NO" != '' ]; then PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO" MERGE_BASE=`wget -qO - \ https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID} \ | jq -r ".base.ref"` git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck \ -S .pvs-pr.list else pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck fi plog-converter -t errorfile PVS-Studio.log --cerr -w
рдпрджрд┐ рдЖрдк Travs-CI рдкрд░ рдЕрдиреБрднрд╛рдЧ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреЛрдб рдЖрдкрдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИ, рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рдПрдХ рдирдпрд╛ рдЪрд░рдг рд╕рд╛рдордиреЗ рдЖрдпрд╛ рд╣реИ:
рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рд╡рд┐рд▓рдп рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрд╕ рд╢рд╛рдЦрд╛ рдХрд╛ HEAD рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╕рд╢рд░реНрдд
рдмреА 3 рдореЗрдВ рд╣реИрдВ рдФрд░ рд╣рдореЗрдВ
рдП 3 рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
PULL_REQUEST_ID="pulls/$BUDDY_EXECUTION_PULL_REQUEST_NO" MERGE_BASE=`wget -qO - \ https://api.github.com/repos/${BUDDY_REPO_SLUG}/${PULL_REQUEST_ID} \ | jq -r ".base.ref"` git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list
A3 рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
, GitHub API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
https://api.github.com/repos/${USERNAME}/${REPO}/pulls/${PULL_REQUEST_ID}
рд╣рдордиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬреЛ рдмрдбреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:
- $ BUDDY_EXECUTION_PULL_REQEUST_NO - рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╕рдВрдЦреНрдпрд╛;
- $ BUDDY_REPO_SLUG - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рд╕рдВрдпреЛрдЬрди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХрддрдо / рдкрд░реАрдХреНрд╖рдг)ред
рдЕрдм рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬреЗрдВ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ:
рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╣рдореЗрдВ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП
.pv-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдмрдбреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рд▓реЙрдиреНрдЪ рдХреЗ рд▓рд┐рдП рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдЖрдЦрд┐рд░реА рдЪреАрдЬрд╝ рдмрдбреА рдореЗрдВ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рд╡рд╛рдкрд╕ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореЗрдВ рдЬрд╛рдПрдВрдЧреЗред рд╣рдореЗрдВ рдЪрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧрд┐рди рдФрд░ рдХреБрдВрдЬреА рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдирдП рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдпрд╛ рдкреНрд░рддрд┐рдмрджреНрдз рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдПрдХ рдЪреЗрдХ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд░реЗрдЧреАред рдпрджрд┐ рдкреНрд░рддрд┐рдмрджреНрдз рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рддреЛ рдмрдбреА рдЗрд╕реЗ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкреГрд╖реНрда рдкрд░ рдЗрдВрдЧрд┐рдд рдХрд░реЗрдЧрд╛ред
AppVeyor
AppVeyor рд╕реЗрдЯрдЕрдк рдмрдбреА рдХреЗ рд╕рдорд╛рди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдм рдХреБрдЫ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ * .yml рдлрд╝рд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЕрд╡рд▓реЛрдХрди рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧ рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ:
рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреГрд╖реНрда рдХреЛ рдиреАрдЪреЗ рд╕реНрдХреНрд░реЙрд▓ рдХрд░реЗрдВ рдФрд░ рдХреИрд╢ рд╕реЗрд╡рд┐рдВрдЧ рдЪрд╛рд▓реВ рдХрд░реЗрдВ:
рдЕрдм рдкрд░реНрдпрд╛рд╡рд░рдг рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВ, рдЬрд╣рд╛рдВ рд╣рдо рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреЗ рд▓рд┐рдП рдЫрд╡рд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
рдпрджрд┐ рдЖрдк рдкрд┐рдЫрд▓реЗ рдЦрдВрдбреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрди рджреЛ рдЪрд░ -
PVS_KEY рдФрд░
PVS_USERNAME рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдореИрдВ рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЗ рд▓рд╛рдЗрд╕реЗрдВрд╕ рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдмреИрд╢ рд▓рд┐рдкрд┐рдпреЛрдВ рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдорд┐рд▓реЗрдВрдЧреЗред
рдиреАрдЪреЗ рдПрдХ рд╣реА рдкреГрд╖реНрда рдкрд░ рд╣рдо рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдлрд╝реЛрд▓реНрдбрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ:
рдпрджрд┐ рд╣рдо рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рдХреЗ рдмрдЬрд╛рдп рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╣рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, рд╕рд╣реА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рдЕрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рдЬрд╛рдВрдЪ рдХрд╛ рд╕рдордп рд╣реИред рдЯреЗрд╕реНрдЯ рдЯреИрдм рдЦреЛрд▓реЗрдВ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪреБрдиреЗрдВ:
рдЗрд╕ рдлреЙрд░реНрдо рдореЗрдВ рдирд┐рдореНрди рдХреЛрдб рдбрд╛рд▓реЗрдВ:
sudo apt-get update && sudo apt-get -y install jq wget -q -O - https://files.viva64.com/etc/pubkey.txt \ | sudo apt-key add - sudo wget -O /etc/apt/sources.list.d/viva64.list \ https://files.viva64.com/etc/viva64.list sudo apt-get update && sudo apt-get -y install pvs-studio pvs-studio-analyzer credentials $PVS_USERNAME $PVS_KEY PWD=$(pwd -L) if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER" MERGE_BASE=`wget -qO - \ https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} \ | jq -r ".base.ref"` git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck \ --dump-files --dump-log pvs-dump.log \ -S .pvs-pr.list else pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck fi plog-converter -t errorfile PVS-Studio.log --cerr -w
рдХреЛрдб рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:
PWD=$(pwd -L) if [ "$APPVEYOR_PULL_REQUEST_NUMBER" != '' ]; then PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER" MERGE_BASE=`wget -qO - \ https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} \ | jq -r ".base.ref"` git diff --name-only HEAD origin/$MERGE_BASE > .pvs-pr.list pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck \ --dump-files --dump-log pvs-dump.log \ -S .pvs-pr.list else pvs-studio-analyzer analyze -j8 \ -o PVS-Studio.log \ --disableLicenseExpirationCheck fi
рдЗрд╕ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрд░ рдХреЗ рд▓рд┐рдП pwd рдХрдорд╛рдВрдб рдХреЗ рдореВрд▓реНрдп рдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ рдЕрдЬреАрдм рд▓рдЧрддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЕрдм рд╕рдм рдХреБрдЫ рд╕рдордЭрд╛рдКрдВрдЧрд╛ред
AppVeyor рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп, рдореБрдЭреЗ рдмреЗрд╣рдж рдЕрдЬреАрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдПрдХ рддрд░рдл, рд╕рдм рдХреБрдЫ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдирд╣реАрдВ рд╣реБрдЖред рдореИрдВрдиреЗ рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдХрд┐ рд╣рдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА / рд╣реЛрдо / рдЕрдкреАрдпрд░ / рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ / рдЯреЗрд╕реНрдЯрдХреНрд▓реЗрдХ / рдореЗрдВ рд╣реИрдВ, рдФрд░ рдПрдирд╛рд▓рд╛рдЗрдЬрд╝рд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИ рдХрд┐ рд╣рдо / рдСрдкреНрдЯ / рдПрд╡рд┐рдпреЛрд░ / рдмрд┐рд▓реНрдб-рдПрдЬреЗрдВрдЯ / рдореЗрдВ рд╣реИрдВред рддрдм рдореБрдЭреЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ $ рдкреАрдбрдмреНрд▓реНрдпреВрдбреА рдХрд╛ рдЪрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЭреВрда рд╣реИред рдЗрд╕ рдХрд╛рд░рдг рд╕реЗ, рдореИрдВрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рдореВрд▓реНрдп рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ред
рдФрд░ рдлрд┐рд░ рд╕рдм рдХреБрдЫ, рдкрд╣рд▓реЗ рдХреА рддрд░рд╣:
рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
PULL_REQUEST_ID="pulls/$APPVEYOR_PULL_REQUEST_NUMBER" MERGE_BASE=`wget -qO - \ https://api.github.com/repos/${APPVEYOR_REPO_NAME}/${PULL_REQUEST_ID} \ | jq -r ".base.ref"`
рдЗрд╕рдореЗрдВ, рд╣рдо рдЙрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдХреЗ рдКрдкрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
- $ APPVEYOR_PULL_REQUEST_NUMBER - рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдХреА рд╕рдВрдЦреНрдпрд╛;
- $ APPVEYOR_REPO_NAME - рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рднрдВрдбрд╛рд░ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдмреЗрд╢рдХ, рд╣рдордиреЗ рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рдХреА рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рдХрд╛рдо рдХреА рдПрдХ-рджреВрд╕рд░реЗ рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВред рдХреИрд╢рд┐рдВрдЧ рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде, рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдЕрдкрдиреА "рдмрд╛рдЗрдХ" рдмрдирд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рдм рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдЕрд▓рдЧ рд╣реЛрддрд╛ рд╣реИред
рдЯреНрд░реИрд╡рд┐рд╕-рд╕реАрдЖрдИ рдХреА рддрд░рд╣, рдХрд╣реАрдВ-рдХрд╣реАрдВ рдХреЛрдб рдФрд░ рдХреИрд╢рд┐рдВрдЧ рдХреА рджреЛ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ; рдХрд╣реАрдВ-рдХрд╣реАрдВ, AppVeyor рдХреА рддрд░рд╣, рдЖрдкрдХреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ; рд▓реЗрдХрд┐рди рдХрд╣реАрдВ рди рдХрд╣реАрдВ рдЖрдкрдХреЛ рдЕрджреНрд╡рд┐рддреАрдп рдХреБрдВрдЬреА рдмрдирд╛рдиреЗ рдФрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╕рдордЭрд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк рдХреИрд╢реНрдб рдЯреБрдХрдбрд╝реЗ рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджреЗ рд╕рдХреЗрдВред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдирд┐рд░рдВрддрд░ рдПрдХреАрдХрд░рдг рд╕реЗрд╡рд╛ рдкрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдирд╣реАрдВ рдХреА рдЧрдИ рдереА, рддреЛ рдкрд╣рд▓реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдкрдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдЕрдЧрд░ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ
рд╕рдорд░реНрдерди рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВред рд╣рдо рд╢реАрдШреНрд░ рдФрд░ рдорджрдж рдХрд░реЗрдВрдЧреЗред

рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдЕрдВрдЧреНрд░реЗрдЬреА рдмреЛрд▓рдиреЗ рд╡рд╛рд▓реЗ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЕрдиреБрд╡рд╛рдж рдХреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ: рдореИрдХреНрд╕рд┐рдо рдЬрд╝рд┐рд╡рдЧрд┐рдВрдЯрд╕реЗрд╡ред
рдкреАрд╡реАрдПрд╕-рд╕реНрдЯреВрдбрд┐рдпреЛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ, рдмрдбреА рдФрд░ рдПрдкрд╡реЗрдпрд░ рдореЗрдВ рдХрдорд┐рдЯ рдФрд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг ред