GitLab рдЖрд╡рдбрддреЗ рдЖрдгрд┐ рдмрдЧреНрд╕рдЪрд╛ рддрд┐рд░рд╕реНрдХрд╛рд░ рдХрд░рддрд╛рдд? рддреБрдордЪреНрдпрд╛ рд╕реЛрд░реНрд╕ рдХреЛрдбрдЪреА рдЧреБрдгрд╡рддреНрддрд╛ рд╕реБрдзрд╛рд░реВ рдЗрдЪреНрдЫрд┐рддрд╛? рдордЧ рддреБрдореНрд╣реА рдпреЛрдЧреНрдп рдард┐рдХрд╛рдгреА рдЖрд▓рд╛ рдЖрд╣рд╛рдд. рдЖрдЬ рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рдорд░реНрдЬ рд╡рд┐рдирдВрддреНрдпрд╛ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА PVS-Studio C# рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╕реЗ рдХреЙрдиреНрдлрд┐рдЧрд░ рдХрд░рд╛рдпрдЪреЗ рддреЗ рд╕рд╛рдВрдЧреВ. рдпреБрдирд┐рдХреЙрд░реНрди рдореВрдб рдЖрдгрд┐ рдкреНрд░рддреНрдпреЗрдХрд╛рд╕рд╛рдареА рдЖрдирдВрджреА рд╡рд╛рдЪрди рдХрд░рд╛.
рддрд╕реЗ, рдЖрдореНрд╣реА PVS-Studio 7.08 рд░рд┐рд▓реАрдЭ рдХреЗрд▓реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рдмрд░реНтАНрдпрд╛рдЪ рдЧреЛрд╖реНрдЯреА рдХреЗрд▓реНрдпрд╛
- Linux рдЖрдгрд┐ macOS рд╕рд╛рдареА C# рд╡рд┐рд╢реНрд▓реЗрд╖рдХ;
- рд░рд╛рдпрдбрд░рд╕рд╛рдареА рдкреНрд▓рдЧрдЗрди;
- рдирд╡реАрди рдлрд╛рдЗрд▓ рд╕реВрдЪреА рддрдкрд╛рд╕рдгреА рдореЛрдб.
рдлрд╛рдЗрд▓ рд╕реВрдЪреА рддрдкрд╛рд╕рдгреА рдореЛрдб
рдкреВрд░реНрд╡реА, рдХрд╛рд╣реА рдлрд╛рдЗрд▓реНрд╕ рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рдХрдбреЗ рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрд╕рд╣ .xml рдкрд╛рд╕ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддреЗ. рдкрд░рдВрддреБ рд╣реЗ рдлрд╛рд░ рд╕реЛрдпреАрдЪреЗ рдирд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдореНрд╣реА .txt рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдЬреЛрдбрд▓реА рдЖрд╣реЗ, рдЬреНрдпрд╛рдореБрд│реЗ рдЬреАрд╡рди рдЦреВрдк рд╕реЛрдкреЗ рд╣реЛрддреЗ.
рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╛рдпрд▓реА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрдг рдзреНрд╡рдЬ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ --sourceFiles (-f) рдЖрдгрд┐ рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрд╕рд╣ .txt рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рд╛. рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд┐рдЯ рдЪреЗрдХрд┐рдВрдЧ рдХрд┐рдВрд╡рд╛ рдкреБрд▓ рд╡рд┐рдирдВрддреНрдпрд╛ рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рд╣реЗ рдореЛрдб рд╡рд╛рдкрд░реВрди рджреЗрдЦреАрд▓ рдХрд░реВ рд╢рдХрддрд╛. рдлрд░рдХ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рдлрд╛рдЗрд▓реНрд╕рдЪреА рд╕реВрдЪреА рдорд┐рд│рд╡рдгреНрдпрд╛рдд рдЕрд╕реЗрд▓ рдЖрдгрд┐ рддреБрдореНрд╣реА рдХреЛрдгрддреА рдкреНрд░рдгрд╛рд▓реА рд╡рд╛рдкрд░рдд рдЖрд╣рд╛рдд рдпрд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдЕрд╕реЗрд▓.
рд╡рд┐рд▓реАрдиреАрдХрд░рдг рд╡рд┐рдирдВрддреА рддрдкрд╛рд╕рдгреНрдпрд╛рдЪреЗ рддрддреНрддреНрд╡
рддрдкрд╛рд╕рдгреАрдЪреЗ рдореБрдЦреНрдп рд╕рд╛рд░ рд╣реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдгреЗ рдЖрд╣реЗ рдХреА рд╡рд┐рд▓реАрдиреАрдХрд░рдгрд╛рджрд░рдореНрдпрд╛рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рдиреЗ рд╢реЛрдзрд▓реЗрд▓реНрдпрд╛ рд╕рдорд╕реНрдпрд╛рдВрдордзреНрдпреЗ рдпреЗрдд рдирд╛рд╣реАрдд. рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ рд╡реЗрд│реА рд╕рдВрдкреВрд░реНрдг рдкреНрд░рдХрд▓реНрдкрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдирд╛рд╣реА. рд╢рд┐рд╡рд╛рдп, рд╢рд╛рдЦрд╛рдВрдЪреЗ рд╡рд┐рд▓реАрдиреАрдХрд░рдг рдХрд░рддрд╛рдирд╛, рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдмрджрд▓рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдпрд▓реАрдВрдЪреА рдпрд╛рджреА рдЕрд╕рддреЗ. рдореНрд╣рдгреВрди, рдореА рд╡рд┐рд▓реАрди рд╡рд┐рдирдВрддреА рдЪреЗрдХ рдЬреЛрдбрдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрддреЛ.
рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рд╡рд┐рд▓реАрдиреАрдХрд░рдг рд╡рд┐рдирдВрддреА рдХрд╢реА рджрд┐рд╕рддреЗ:
рдореНрд╣рдгрдЬреЗрдЪ рд╢рд╛рдЦреЗрдд рдЬреНрдпрд╛ рддреНрд░реБрдЯреА рд╣реЛрддреНрдпрд╛ рдмрджрд▓, рдореБрдЦреНрдп рд╢рд╛рдЦреЗрдд рдЬрд╛рдИрд▓. рдЖрдореНрд╣рд╛рд▓рд╛ рд╣реЗ рдирдХреЛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреЛрдбрддреЛ рдЖрдгрд┐ рдЖрддрд╛ рдЖрдХреГрддреА рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
рдЖрдореНрд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЛ рдмрджрд▓ реи рдЖрдгрд┐, рдХрд╛рд╣реА рддреНрд░реБрдЯреА рдирд╕рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣реА рд╡рд┐рд▓реАрдиреАрдХрд░рдг рд╡рд┐рдирдВрддреА рд╕реНрд╡реАрдХрд╛рд░рддреЛ, рдЕрдиреНрдпрдерд╛ рдЖрдореНрд╣реА рддреА рдирд╛рдХрд╛рд░рддреЛ.
рддрд╕реЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрдорд┐рдЯрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рдд рдЖрдгрд┐ C/C++ рд╕рд╛рдареА рд╡рд┐рдирдВрддреНрдпрд╛ рдкреБрд▓ рдХрд░рдгреНрдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣реА рддреНрдпрд╛рдмрджреНрджрд▓ рд╡рд╛рдЪреВ рд╢рдХрддрд╛.
рдЧрд┐рдЯреЕрдм
рддреБрдореНрд╣реА рд╡рд┐рд▓реАрдиреАрдХрд░рдгрд╛рдЪреНрдпрд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪрд╛ рдкреНрд░рдХрд▓реНрдк рдиреЛрдВрджрдгреА рдХрд░рдгреЗ рдЖрдгрд┐ рдЕрдкрд▓реЛрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдирд╕рд▓реНрдпрд╛рд╕, рдореА рд╕реБрдЪрд╡рд┐рддреЛ
рд╢реЗрд░рд╛. рдЦрд╛рд▓реА рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реЗ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рдЪреА рдкрджреНрдзрдд рд╕рдВрднрд╛рд╡реНрдпрд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ. рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдБрдЪ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд╛рдпрд▒реНрдпрд╛ рджрд░реНрд╢рд╡рд┐рдгреЗ рд╣реЗ рдзреНрдпреЗрдп рдЖрд╣реЗ. рдХрджрд╛рдЪрд┐рдд рддреБрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдкрд░реНрдпрд╛рд╡рд░рдгрд╛рдЪреА рддрдпрд╛рд░реА (рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдЬреЛрдбрдгреЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ) рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪреЗ рдЯрдкреНрдкреЗ рд╡реЗрдЧрд│реЗ рдХрд░рдгреЗ рдЕрдзрд┐рдХ рдЗрд╖реНрдЯрддрдо рдЕрд╕реЗрд▓: рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдгрд╛рд╕рд╣ рдбреЙрдХрд░ рдкреНрд░рддрд┐рдорд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪрд╛ рд╡рд╛рдкрд░ рдХрд░рдгреЗ рдХрд┐рдВрд╡рд╛ рдЗрддрд░ рдХрд╛рд╣реА рдкрджреНрдзрддреА.
рдЖрддрд╛ рдХрд╛рдп рд╣реЛрдИрд▓ рд╣реЗ рдЪрд╛рдВрдЧрд▓реНрдпрд╛ рдкреНрд░рдХрд╛рд░реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рдореА рдЦрд╛рд▓реАрд▓ рдЖрдХреГрддреАрдХрдбреЗ рдкрд╛рд╣рдгреНрдпрд╛рдЪрд╛ рд╕рд▓реНрд▓рд╛ рджреЗрддреЛ:
рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рд▓рд╛ рдСрдкрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА .NET Core SDK 3 рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рддреБрдореНрд╣рд╛рд▓рд╛ Microsoft рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреВрди рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рд╕реНрдерд╛рдкрд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреАрд▓. рд╡рд┐рд╡рд┐рдз рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрд╛рдВрд╕рд╛рдареА рдорд╛рдпрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдЬреЛрдбрдгреЗ
рдкреЕрдХреЗрдЬ рдореЕрдиреЗрдЬрд░рджреНрд╡рд╛рд░реЗ PVS-Studio рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ PVS-Studio рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рджреЗрдЦреАрд▓ рдЬреЛрдбрдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╡рд┐рд╡рд┐рдз рд╡рд┐рддрд░рдгрд╛рд╕рд╛рдареА рднрд╛рдВрдбрд╛рд░ рдЬреЛрдбрдгреНрдпрд╛рдЪреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ
рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рд▓рд╛ рдСрдкрд░реЗрдЯ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкрд░рд╡рд╛рдирд╛ рдХреА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпреЗрдереЗ рддреБрдореНрд╣реА рдЪрд╛рдЪрдгреА рдкрд░рд╡рд╛рдирд╛ рдорд┐рд│рд╡реВ рд╢рдХрддрд╛
рд╢реЗрд░рд╛. рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рд╡рд░реНрдгрди рдХреЗрд▓реЗрд▓реНрдпрд╛ рдСрдкрд░реЗрд╢рди рдореЛрдбрд╕рд╛рдареА (рд╡рд┐рд▓реАрдиреАрдХрд░рдг рд╡рд┐рдирдВрддреАрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг) рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рдкрд░рд╡рд╛рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореНрд╣рдгреВрди, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдСрдкрд░реЗрд╢рдирдЪрд╛ рд╣рд╛ рдореЛрдб рд╡рд╛рдкрд░рд╛рдпрдЪрд╛ рдЕрд╕реЗрд▓, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЭ рдкрд░рд╡рд╛рдиреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ рд╣реЗ "рд╕рдВрджреЗрд╢" рдлреАрд▓реНрдбрдордзреНрдпреЗ рд╕реВрдЪрд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рд╡рд┐рд╕рд░реВ рдирдХрд╛.
рд╡рд┐рд▓реАрдиреАрдХрд░рдгрд╛рдЪреА рд╡рд┐рдирдВрддреА рдЖрдврд│рд▓реНрдпрд╛рд╕, рдЖрдореНрд╣рд╛рд▓рд╛ рдлрдХреНрдд рдмрджрд▓рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓, рдЕрдиреНрдпрдерд╛ рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдлрд╛рдЗрд▓реНрд╕рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВ. рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдирдВрддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдлреЙрд░рдореЕрдЯрдордзреНрдпреЗ рд▓реЙрдЧ рд░реБрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓.
рдЖрддрд╛, рддреБрдордЪреНрдпрд╛ рдбреЛрд│реНрдпрд╛рдВрд╕рдореЛрд░ рдХрд╛рдорд╛рдЪрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрд╕рд▓реНрдпрд╛рдиреЗ рддреБрдореНрд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕ рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрддрд╛. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдлрд╛рдЗрд▓ рдмрджрд▓рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ .gitlab-ci.yml рдХрд┐рдВрд╡рд╛, рддреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдирд╕рд▓реНрдпрд╛рд╕, рддреЗ рддрдпрд╛рд░ рдХрд░рд╛. рддреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреНрдпрд╛ рдкреНрд░рдХрд▓реНрдкрд╛рдЪреНрдпрд╛ рдирд╛рд╡рд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓ -> CI/CD рд╕реЗрдЯ рдХрд░рд╛.
рдЖрддрд╛ рдЖрдореНрд╣реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рд╕ рддрдпрд╛рд░ рдЖрд╣реЛрдд. рдЪрд▓рд╛ рдкреНрд░рдердо рдХреЛрдб рд▓рд┐рд╣реВ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрд▓ рдЖрдгрд┐ рдкрд░рд╡рд╛рдирд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реЗрд▓:
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- 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-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
рдЗрддрд░ рд╕рд░реНрд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕рдЪреНрдпрд╛ рдЖрдзреА рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рдЖрдгрд┐ рд╕рдХреНрд░рд┐рдп рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд▓реЗрдмрд▓ рд╡рд╛рдкрд░рддреЛ рдЖрдзреА_рд╕реНрдХреНрд░рд┐рдкреНрдЯ. рдореА рдпрд╛ рддреБрдХрдбреНрдпрд╛рдЪреЗ рдереЛрдбреЗ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рджреЗрддреЛ.
рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рддрдпрд╛рд░реА рдХрд░рдд рдЖрд╣реЗ:
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
рдкреАрд╡реНрд╣реАрдПрд╕-рд╕реНрдЯреБрдбрд┐рдУ рд░реЗрдкреЙрдЬрд┐рдЯрд░реАрдЬ рдЖрдгрд┐ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдЬреЛрдбрдгреЗ:
- 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-dotnet
рдкрд░рд╡рд╛рдирд╛ рд╕рдХреНрд░рд┐рдп рдХрд░рдгреЗ:
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
$PVS_NAME - рд╡рд╛рдкрд░рдХрд░реНрддрд╛рдирд╛рд╡.
$PVS_KEY - рдЙрддреНрдкрд╛рджрди рдХреА.
рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддреА рдкреНрд░рдХрд▓реНрдк рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдЬреЗрдереЗ $CI_PROJECT_DIR - рдкреНрд░рдХрд▓реНрдк рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдЪрд╛ рдкреВрд░реНрдг рдорд╛рд░реНрдЧ:
- dotnet restore "$CI_PROJECT_DIR"/Path/To/Solution.sln
рдпреЛрдЧреНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА, рдкреНрд░рдХрд▓реНрдк рдпрд╢рд╕реНрд╡реАрд░рд┐рддреНрдпрд╛ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рддреНрдпрд╛рдЪреА рдЕрд╡рд▓рдВрдмрд┐рддреНрд╡ рдкреБрдирд░реНрд╕рдВрдЪрдпрд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЖрд╡рд╢реНрдпрдХ NuGet рдкреЕрдХреЗрдЬреЗрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ).
рддреБрдореНрд╣реА рдХреНрд▓рд┐рдХ рдХрд░реВрди рдкрд░рд╡рд╛рдирд╛ рдорд╛рд╣рд┐рддреА рдЕрд╕рд▓реЗрд▓реЗ рдкрд░реНрдпрд╛рд╡рд░рдг рдЪрд▓ рд╕реЗрдЯ рдХрд░реВ рд╢рдХрддрд╛ рд╕реЗрдЯрд┐рдВрдЧ, рдЖрдгрд┐ рдирдВрддрд░ - рдЪрд╛рд▓реВ CI/CD.
рдЙрдШрдбрд▓реЗрд▓реНрдпрд╛ рд╡рд┐рдВрдбреЛрдордзреНрдпреЗ, рдЖрдпрдЯрдо рд╢реЛрдзрд╛ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕, рдЙрдЬрд╡реАрдХрдбреАрд▓ рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛ рд╡рд┐рд╕реНрддреГрдд рдХрд░рд╛ рдЖрдгрд┐ рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕ рдЬреЛрдбрд╛. рдкрд░рд┐рдгрд╛рдо рдЕрд╕реЗ рджрд┐рд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ:
рдЖрддрд╛ рддреБрдореНрд╣реА рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдХрдбреЗ рдЬрд╛рдК рд╢рдХрддрд╛. рдкреНрд░рдердо, рд╕рдВрдкреВрд░реНрдг рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рд╕рд╛рдареА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЬреЛрдбреВрдпрд╛. рдзреНрд╡рдЬрд╛рд▓рд╛ -t рдЖрдореНрд╣реА рдзреНрд╡рдЬрд╛рдЪреНрдпрд╛ рдирд┐рд░рд╛рдХрд░рдгрд╛рдЪрд╛ рдорд╛рд░реНрдЧ рдкрд╛рд╕ рдХрд░рддреЛ -o рдлрд╛рдЗрд▓рдЪрд╛ рдорд╛рд░реНрдЧ рд▓рд┐рд╣рд╛ рдЬреНрдпрд╛рдордзреНрдпреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдо рд▓рд┐рд╣рд┐рд▓реЗ рдЬрд╛рддреАрд▓. рдЖрдореНрд╣рд╛рд▓рд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдбрдордзреНрдпреЗ рджреЗрдЦреАрд▓ рд░рд╕ рдЖрд╣реЗ. рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЬреЗрд╡реНрд╣рд╛ рд░рд┐рдЯрд░реНрди рдХреЛрдбрдордзреНрдпреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рдЗрд╢рд╛рд░реЗ рдЬрд╛рд░реА рдХрд░рдгреНрдпрд╛рдд рдЖрд▓реНрдпрд╛рдЪреА рдорд╛рд╣рд┐рддреА рдЕрд╕рддреЗ рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдСрдкрд░реЗрд╢рди рдерд╛рдВрдмрд╡рд┐рдгреНрдпрд╛рдд рд╕реНрд╡рд╛рд░рд╕реНрдп рдЖрд╣реЗ. рд╣рд╛ рддреБрдХрдбрд╛ рдпрд╛рд╕рд╛рд░рдЦрд╛ рджрд┐рд╕рддреЛ:
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
рд░рд┐рдЯрд░реНрди рдХреЛрдб рдмрд┐рдЯ рдорд╛рд╕реНрдХрдЪреНрдпрд╛ рддрддреНрддреНрд╡рд╛рд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдЬрд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪреНрдпрд╛ рдкрд░рд┐рдгрд╛рдореА рдЪреЗрддрд╛рд╡рдгреА рдЬрд╛рд░реА рдХреЗрд▓реА рдЧреЗрд▓реА, рддрд░ рд░рд┐рдЯрд░реНрди рдХреЛрдб 8 рдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪрд╛ рдЕрд╕реЗрд▓. рдЬрд░ рдкрд░рд╡рд╛рдирд╛ рдПрдХрд╛ рдорд╣рд┐рдиреНрдпрд╛рдЪреНрдпрд╛ рдЖрдд рдХрд╛рд▓рдмрд╛рд╣реНрдп рдЭрд╛рд▓рд╛, рддрд░ рд░рд┐рдЯрд░реНрди рдХреЛрдб 4 рдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪрд╛ рдЕрд╕реЗрд▓. рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛рд╕, рдЖрдгрд┐ рдкрд░рд╡рд╛рдирд╛ рдПрдХрд╛ рдорд╣рд┐рдиреНрдпрд╛рдЪреНрдпрд╛ рдЖрдд рдХрд╛рд▓рдмрд╛рд╣реНрдп рд╣реЛрдИрд▓, рдХреЛрдб рдкрд░рддрд╛рд╡рд╛, рджреЛрдиреНрд╣реА рдореВрд▓реНрдпреЗ рд▓рд┐рд╣рд┐рд▓реА рдЬрд╛рддреАрд▓: рд╕рдВрдЦреНрдпрд╛ рдПрдХрддреНрд░ рдЬреЛрдбрд╛ рдЖрдгрд┐ рдЕрдВрддрд┐рдо рд░рд┐рдЯрд░реНрди рдХреЛрдб рдорд┐рд│рд╡рд╛ - 8+4=12. рдЕрд╢рд╛ рдкреНрд░рдХрд╛рд░реЗ, рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдЯреНрд╕ рддрдкрд╛рд╕реВрди, рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рджрд░рдореНрдпрд╛рди рд╡рд┐рд╡рд┐рдз рд░рд╛рдЬреНрдпрд╛рдВрдЪреА рдорд╛рд╣рд┐рддреА рдорд┐рд│рд╡рддрд╛ рдпреЗрддреЗ. рджрд╕реНрддрдРрд╡рдЬрд╛рдЪреНрдпрд╛ "pvs-studio-dotnet (Linux / macOS) рд░рд┐рдЯрд░реНрди рдХреЛрдб" рд╡рд┐рднрд╛рдЧрд╛рдд рд░рд┐рдЯрд░реНрди рдХреЛрдбрдЪреЗ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд░реНрдгрди рдХреЗрд▓реЗ рдЖрд╣реЗ.
рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд, рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рд░реНрд╡ рд░рд┐рдЯрд░реНрди рдХреЛрдбрдордзреНрдпреЗ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЖрд╣реЗ рдЬреЗрдереЗ 8 рджрд┐рд╕рддреЛ.
- exit_code=$((($exit_code & 8)/8))
рд░рд┐рдЯрд░реНрди рдХреЛрдбрдордзреНрдпреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреНрд░рдорд╛рдВрдХрд╛рдЪрд╛ рдереЛрдбрд╛рд╕рд╛ рднрд╛рдЧ рдЕрд╕реЗрд▓ рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ 1 рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓, рдЕрдиреНрдпрдерд╛ рдЖрдореНрд╣рд╛рд▓рд╛ 0 рдкреНрд░рд╛рдкреНрдд рд╣реЛрдИрд▓.
рд╡рд┐рд▓реАрдиреАрдХрд░рдг рд╡рд┐рдирдВрддреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЬреЛрдбрдгреНрдпрд╛рдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ. рдЖрдкрдг рд╣реЗ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА, рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╕рд╛рдареА рдПрдХ рдЬрд╛рдЧрд╛ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. рдЬреЗрд╡реНрд╣рд╛ рд╡рд┐рд▓реАрдиреАрдХрд░рдг рд╡рд┐рдирдВрддреА рдпреЗрддреЗ рддреЗрд╡реНрд╣рд╛рдЪ рдЖрдореНрд╣рд╛рд▓рд╛ рддреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рдЕрд╕реЗ рджрд┐рд╕рддреЗ:
merge:
script:
only:
- merge_requests
рдЪрд▓рд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╡рд░рдЪ рдкреБрдвреЗ рдЬрд╛рдКрдпрд╛. рдорд▓рд╛ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрдЪрд╛ рд╕рд╛рдордирд╛ рдХрд░рд╛рд╡рд╛ рд▓рд╛рдЧрд▓рд╛ рдХреА рдЖрднрд╛рд╕реА рдорд╢реАрдирд▓рд╛ рдХрд╛рд╣реАрд╣реА рдорд╛рд╣рд┐рддреА рдирд╛рд╣реА рдореВрд│/рдорд╛рд╕реНрдЯрд░. рдЪрд▓рд╛ рддрд░ рдордЧ рддрд┐рд▓рд╛ рдереЛрдбреА рдорджрдд рдХрд░реВрдпрд╛:
- git fetch origin
рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рд╢рд╛рдЦрд╛рдВрдордзреАрд▓ рдлрд░рдХ рдорд┐рд│рддреЛ рдЖрдгрд┐ рдирд┐рдХрд╛рд▓ рдЬрддрди рдХрд░рддреЛ txt рдлрд╛рдЗрд▓:
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
рдХреБрдареЗ $CI_COMMIT_SHA - рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдХрдорд┐рдЯрдЪрд╛ рд╣реЕрд╢.
рдкреБрдвреЗ, рдЖрдореНрд╣реА рдзреНрд╡рдЬ рд╡рд╛рдкрд░реВрди рдлрд╛рдЗрд▓реНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдгреНрдпрд╛рд╕ рд╕реБрд░рд╡рд╛рдд рдХрд░рддреЛ -f. рдЖрдореНрд╣реА рдкреВрд░реНрд╡реА рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗрд▓реА .txt рдлрд╛рдИрд▓ рддреНрдпрд╛рдд рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рддреЛ. рдмрд░рдВ, рд╕рдВрдкреВрд░реНрдг рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪреНрдпрд╛ рд╕рд╛рджреГрд╢реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рд░рд┐рдЯрд░реНрди рдХреЛрдб рдкрд╛рд╣рддреЛ:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
рд╡рд┐рд▓реАрдиреАрдХрд░рдг рд╡рд┐рдирдВрддреА рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рд╕рдВрдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛рд╕рд╛рд░рдЦреЗ рджрд┐рд╕реЗрд▓:
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
рд╕рд░реНрд╡ рд╕реНрдХреНрд░рд┐рдкреНрдЯреНрд╕рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рд▓реЙрдЧ рд░реВрдкрд╛рдВрддрд░рдг рдЬреЛрдбрдгреЗ рдмрд╛рдХреА рдЖрд╣реЗ. рдЖрдореНрд╣реА рд▓реЗрдмрд▓ рд╡рд╛рдкрд░рддреЛ after_script рдЖрдгрд┐ рдЙрдкрдпреБрдХреНрддрддрд╛ plog-рдХрдиреНрд╡реНрд╣рд░реНрдЯрд░:
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
рдЙрдкрдпреБрдХреНрддрддрд╛
рддрд╕реЗ, рдЬрд░ рддреБрдореНрд╣рд╛рд▓рд╛ IDE рд╡рд░реВрди рд╕реНрдерд╛рдирд┐рдХ рдкрд╛рддрд│реАрд╡рд░ .json рдЕрд╣рд╡рд╛рд▓рд╛рдВрд╕рд╣ рд╕реЛрдпреАрд╕реНрдХрд░рдкрдгреЗ рдХрд╛рдо рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓, рддрд░ рдореА рдЖрдордЪреНрдпрд╛
рд╕реЛрдпреАрд╕рд╛рдареА, рддреЗ рдпреЗрдереЗ рдЖрд╣реЗ .gitlab-ci.yml рдкреВрд░реНрдг:
image: debian
before_script:
- apt-get update && apt-get -y install wget gnupg
- apt-get -y install git
- wget https://packages.microsoft.com/config/debian/10/
packages-microsoft-prod.deb -O packages-microsoft-prod.deb
- dpkg -i packages-microsoft-prod.deb
- apt-get update
- apt-get install apt-transport-https
- apt-get update
- 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-dotnet
- pvs-studio-analyzer credentials $PVS_NAME $PVS_KEY
- dotnet restore "$CI_PROJECT_DIR"/Test/Test.sln
merge:
script:
- git fetch origin
- git diff --name-only origin/master $CI_COMMIT_SHA > pvs-fl.txt
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -f
pvs-fl.txt -o PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
only:
- merge_requests
job:
script:
- exit_code=0
- pvs-studio-dotnet -t "$CI_PROJECT_DIR"/Test/Test.sln -o
PVS-Studio.json || exit_code=$?
- exit_code=$((($exit_code & 8)/8))
- if [[ $exit_code == 1 ]]; then exit 1; else exit 0; fi
after_script:
- plog-converter -t html -o eLog ./PVS-Studio.json
рдПрдХрджрд╛ рдЖрдкрдг рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╕рд░реНрд╡рдХрд╛рд╣реА рдЬреЛрдбрд▓реНрдпрд╛рдирдВрддрд░, рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рд╛ рдмрджрд▓ рд╡рдЪрдирдмрджреНрдз рдХрд░рд╛. рд╕рд░реНрд╡рдХрд╛рд╣реА рдпреЛрдЧреНрдп рдЖрд╣реЗ рд╣реЗ рдкрд╛рд╣рдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд░ рдЬрд╛ рд╕реАрдЖрдп / рд╕реАрдбреА -> рдкрд╛рдЗрдкрд▓рд╛рдЗрди -> рдХрд╛рд░реНрдпрд░рдд. рд╡реНрд╣рд░реНрдЪреНрдпреБрдЕрд▓ рдорд╢реАрди рд╡рд┐рдВрдбреЛ рдЙрдШрдбреЗрд▓, рдЬреНрдпрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА рдЦрд╛рд▓реАрд▓ рдЧреЛрд╖реНрдЯреА рдЕрд╕рд╛рд╡реНрдпрд╛рдд:
рдкрд╛рд╣рд┐рд▓реЗ рдиреЛрдХрд░реА рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реА - рдпрд╢, рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЖрд╣реЗ. рдЖрддрд╛ рддреБрдореНрд╣реА рдХрд╛рдп рдХреЗрд▓реЗ рдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдШреЗрдК рд╢рдХрддрд╛.
рдХрд╛рдорд╛рдЪреА рдЙрджрд╛рд╣рд░рдгреЗ
рдХрд╛рдорд╛рдЪреНрдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рд╕рд╛рдареА, рдПрдХ рд╕рд╛рдзрд╛ рдкреНрд░рдХрд▓реНрдк рддрдпрд╛рд░ рдХрд░реВрдпрд╛ (рдордзреНрдпреЗ рдорд╛рд╕реНрдЯрд░) рдЬреНрдпрд╛рдордзреНрдпреЗ рдЕрдиреЗрдХ рдлрд╛рдИрд▓реНрд╕ рдЕрд╕рддреАрд▓. рддреНрдпрд╛рдирдВрддрд░, рджреБрд╕рд░реНтАНрдпрд╛ рд╢рд╛рдЦреЗрдд рдЖрдореНрд╣реА рдлрдХреНрдд рдПрдХ рдлрд╛рдИрд▓ рдмрджрд▓реВ рдЖрдгрд┐ рд╡рд┐рд▓реАрди рдХрд░рдгреНрдпрд╛рдЪреА рд╡рд┐рдирдВрддреА рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ.
рдЪрд▓рд╛ рджреЛрди рдкреНрд░рдХрд░рдгрд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдпрд╛: рдЬреЗрд╡реНрд╣рд╛ рд╕реБрдзрд╛рд░рд┐рдд рдлрд╛рдЗрд▓рдордзреНрдпреЗ рддреНрд░реБрдЯреА рдЕрд╕рддреЗ рдЖрдгрд┐ рдХреЗрд╡реНрд╣рд╛ рдирд╕рддреЗ. рдкреНрд░рдердо, рддреНрд░реБрдЯреАрд╕рд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг.
рд╕рдордЬрд╛ рдорд╛рд╕реНрдЯрд░ рдмреНрд░рдБрдЪрдордзреНрдпреЗ рдПрдХ рдлрд╛рдИрд▓ рдЖрд╣реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо.рд╕реА.рдПрд╕, рдЬреНрдпрд╛рдордзреНрдпреЗ рддреНрд░реБрдЯреА рдирд╛рд╣реАрдд, рдкрд░рдВрддреБ рджреБрд╕рд░реНтАНрдпрд╛ рд╢рд╛рдЦреЗрдд рд╡рд┐рдХрд╕рдХрд╛рдиреЗ рдЪреБрдХреАрдЪрд╛ рдХреЛрдб рдЬреЛрдбрд▓рд╛ рдЖрд╣реЗ рдЖрдгрд┐ рд╡рд┐рд▓реАрди рдХрд░рдгреНрдпрд╛рдЪреА рд╡рд┐рдирдВрддреА рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЖрд╣реЗ. рддреНрдпрд╛рдиреЗ рдХреЛрдгрддреНрдпрд╛ рдкреНрд░рдХрд╛рд░рдЪреА рдЪреВрдХ рдХреЗрд▓реА рд╣реЗ рдЗрддрдХреЗ рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдирд╛рд╣реА, рдореБрдЦреНрдп рдЧреЛрд╖реНрдЯ рдореНрд╣рдгрдЬреЗ рддреА рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдСрдкрд░реЗрдЯрд░ рд╡рд┐рд╕рд░рд▓рд╛ рдлреЗрдХрдгреЗ (рд╣реЛрдп,
void MyAwesomeMethod(String name)
{
if (name == null)
new ArgumentNullException(....);
// do something
....
}
рддреНрд░реБрдЯреАрд╕рд╣ рдЙрджрд╛рд╣рд░рдгрд╛рдЪреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗрд▓реНрдпрд╛рдЪреЗ рдкрд░рд┐рдгрд╛рдо рдкрд╛рд╣реВ. рддрд╕реЗрдЪ рдлрдХреНрдд рдПрдХ рдлрд╛рдИрд▓ рдкрд╛рд░реНрд╕ рдХреЗрд▓реА рдЖрд╣реЗ рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдореА рдзреНрд╡рдЬ рдЬреЛрдбрд▓рд╛ -r pvs-studio-dotnet рд▓рд╛рдБрдЪ рд▓рд╛рдЗрдирд╡рд░:
рдЖрдореНрд╣реА рдкрд╛рд╣рддреЛ рдХреА рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд╛рд▓рд╛ рдПрдХ рддреНрд░реБрдЯреА рдЖрдврд│рд▓реА рдЖрдгрд┐ рддреНрдпрд╛рдиреЗ рд╢рд╛рдЦрд╛ рд╡рд┐рд▓реАрди рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджрд┐рд▓реА рдирд╛рд╣реА.
рддреНрд░реБрдЯреАрд╢рд┐рд╡рд╛рдп рдЙрджрд╛рд╣рд░рдг рддрдкрд╛рд╕реВрдпрд╛. рдХреЛрдб рджреБрд░реБрд╕реНрдд рдХрд░рдгреЗ:
void MyAwesomeMethod(String name)
{
if (name == null)
throw new ArgumentNullException(....);
// do something
....
}
рд╡рд┐рд▓реАрди рд╡рд┐рдирдВрддреА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░рд┐рдгрд╛рдо:
рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддреЛ, рдХреЛрдгрддреНрдпрд╛рд╣реА рддреНрд░реБрдЯреА рдЖрдврд│рд▓реНрдпрд╛ рдирд╛рд╣реАрдд рдЖрдгрд┐ рдХрд╛рд░реНрдп рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реА, рдЬреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рддрдкрд╛рд╕рд╛рдпрдЪреЗ рд╣реЛрддреЗ.
рдирд┐рд╖реНрдХрд░реНрд╖
рд╢рд╛рдЦрд╛ рд╡рд┐рд▓реАрди рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА рдЦрд░рд╛рдм рдХреЛрдб рдХрд╛рдвреВрди рдЯрд╛рдХрдгреЗ рдЦреВрдк рд╕реЛрдпреАрдЪреЗ рдЖрдгрд┐ рдЖрдирдВрджрджрд╛рдпреА рдЖрд╣реЗ. рддреНрдпрд╛рдореБрд│реЗ рддреБрдореНрд╣реА CI/CD рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рддрдкрд╛рд╕рдгреНрдпрд╛рд╕рд╛рдареА рд╕реНрдЯреЕрдЯрд┐рдХ рдЕреЕрдирд╛рд▓рд╛рдпрдЭрд░ рдПрдореНрдмреЗрдб рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рд╛. рд╢рд┐рд╡рд╛рдп, рд╣реЗ рдЕрдЧрджреА рд╕реЛрдкреНрдпрд╛ рдкрджреНрдзрддреАрдиреЗ рдХреЗрд▓реЗ рдЬрд╛рддреЗ.
рдЖрдкрд▓реНрдпрд╛ рд▓рдХреНрд╖ рджрд┐рд▓реНрдпрд╛рдмрджреНрджрд▓ рдзрдиреНрдпрд╡рд╛рдж.
рдЖрдкрдг рд╣рд╛ рд▓реЗрдЦ рдЗрдВрдЧреНрд░рдЬреА рднрд╛рд╖рд┐рдХ рдкреНрд░реЗрдХреНрд╖рдХрд╛рдВрд╕рд╣ рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░реВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреГрдкрдпрд╛ рднрд╛рд╖рд╛рдВрддрд░ рджреБрд╡рд╛ рд╡рд╛рдкрд░рд╛: рдирд┐рдХреЛрд▓реЗ рдорд┐рд░реЛрдиреЛрд╡.
рд╕реНрддреНрд░реЛрдд: www.habr.com