GitLab рд▓рд╛рдИ рдорд╛рдпрд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ рд░ рдмрдЧрд╣рд░реВрд▓рд╛рдИ рдШреГрдгрд╛ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫ? рдЖрдлреНрдиреЛ рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЧреБрдгрд╕реНрддрд░ рд╕реБрдзрд╛рд░ рдЧрд░реНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫ? рддреНрдпрд╕рдкрдЫрд┐ рддрдкрд╛рдИрдВ рд╕рд╣реА рдард╛рдЙрдБрдорд╛ рдЖрдЙрдиреБрднрдПрдХреЛ рдЫред рдЖрдЬ рд╣рд╛рдореА рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрди PVS-Studio C# рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдХрд╕рд░реА рдХрдиреНрдлрд┐рдЧрд░ рдЧрд░реНрдиреЗ рднрдиреЗрд░ рдмрддрд╛рдЙрдиреЗрдЫреМрдВред рдПрдХ рдпреБрдирд┐рдХрд░реНрди рдореВрдб рд░ рд╕рдмреИрд▓рд╛рдИ рдЦреБрд╢реА рдкрдвреНрдиреБрд╣реЛрд╕реНред
рд╡реИрд╕реЗ, рд╣рд╛рдореАрд▓реЗ PVS-Studio 7.08 рдЬрд╛рд░реА рдЧрд░реНрдпреМрдВ, рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рдзреЗрд░реИ рдЪреАрдЬрд╣рд░реВ рдЧрд░реНрдпреМрдВ
- рд▓рд┐рдирдХреНрд╕ рд░ macOS рдХреЛ рд▓рд╛рдЧрд┐ C# рд╡рд┐рд╢реНрд▓реЗрд╖рдХ;
- рд░рд╛рдЗрдбрд░рдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд▓рдЧрдЗрди;
- рдирдпрд╛рдБ рдлрд╛рдЗрд▓ рд╕реВрдЪреА рдЬрд╛рдБрдЪ рдореЛрдбред
рдлрд╛рдЗрд▓ рд╕реВрдЪреА рдЬрд╛рдБрдЪ рдореЛрдб
рдкрд╣рд┐рд▓реЗ, рдХреЗрд╣рд┐ рдлрд╛рдЗрд▓рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрди, рд╡рд┐рд╢реНрд▓реЗрд╖рдХрдорд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдХреЛ рд╕рд╛рде рдПрдХ .xml рдкрд╛рд╕ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдерд┐рдпреЛред рддрд░ рдпреЛ рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдирднрдПрдХреЛрд▓реЗ, рд╣рд╛рдореАрд▓реЗ .txt рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рдердкреЗрдХрд╛ рдЫреМрдВ, рдЬрд╕рд▓реЗ рдЬреАрд╡рдирд▓рд╛рдИ рдзреЗрд░реИ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫред
рд╡рд┐рд╢реЗрд╖ рдлрд╛рдЗрд▓рд╣рд░реВ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЭрдгреНрдбрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрдкрд░реНрдЫ -- рд╕реНрд░реЛрдд рдлрд╛рдЗрд▓рд╣рд░реВ (-f) рд░ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдХреЛ рд╕рд╛рде .txt рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдпреЛ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
рдпрджрд┐ рддрдкрд╛рдЗрдБ рдХрдорд┐рдЯ рдЬрд╛рдБрдЪ рд╡рд╛ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рдЗрдЪреНрдЫреБрдХ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдпреЛ рдореЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдкрдирд┐ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рднрд┐рдиреНрдирддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдирдорд╛ рд╣реБрдиреЗрдЫ рд░ рддрдкрд╛рдЗрдБ рдХреБрди рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рд░рд╣рдиреБ рднрдПрдХреЛрдорд╛ рдирд┐рд░реНрднрд░ рд╣реБрдиреЗрдЫред
рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдЬрд╛рдБрдЪ рдЧрд░реНрдиреЗ рд╕рд┐рджреНрдзрд╛рдиреНрдд
рдЬрд╛рдБрдЪрдХреЛ рдореБрдЦреНрдп рд╕рд╛рд░ рднрдиреЗрдХреЛ рдпреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрдиреБ рд╣реЛ рдХрд┐ рд╡рд┐рд▓рдп рдЧрд░реНрджрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд▓реЗ рдкрддреНрддрд╛ рд▓рдЧрд╛рдПрдХрд╛ рд╕рдорд╕реНрдпрд╛рд╣рд░реВ рдорд╛ рдкрд░реНрджреИрдирдиреНред рдорд╛рд╕реНрдЯрд░ рд╕рд╛рдЦрд╛ред рд╣рд╛рдореА рд╣рд░реЗрдХ рдкрдЯрдХ рд╕рдореНрдкреВрд░реНрдг рдкрд░рд┐рдпреЛрдЬрдирд╛рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рдЪрд╛рд╣рдБрджреИрдиреМрдВред рдпрд╕рдмрд╛рд╣реЗрдХ, рд╢рд╛рдЦрд╛рд╣рд░реВ рдорд░реНрдЬ рдЧрд░реНрджрд╛, рд╣рд╛рдореАрд╕рдБрдЧ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕реВрдЪреА рдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рдо рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдЬрд╛рдБрдЪ рдердкреНрди рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБред
рдпреЛ рдПрдХ рд╕реНрдерд┐рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд▓рд╛рдЧреВ рдЧрд░реНрдиреБ рдЕрдШрд┐ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
рдЕрд░реНрдерд╛рддреН, рд╢рд╛рдЦрд╛рдорд╛ рднрдПрдХрд╛ рд╕рдмреИ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ, рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛рдорд╛ рд╕рд░реНрдиреЗрдЫред рдХрд┐рдирдХрд┐ рд╣рд╛рдореА рдпреЛ рдЪрд╛рд╣рдБрджреИрдиреМрдВ, рд╣рд╛рдореА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдердкреНрдЫреМрдВ, рд░ рдЕрдм рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:
рд╣рд╛рдореА рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрдЫреМрдВ рдкрд░рд┐рд╡рд░реНрддрди реи рд░, рдпрджрд┐ рдХреБрдиреИ рддреНрд░реБрдЯрд┐рд╣рд░реВ рдЫреИрдирдиреН рднрдиреЗ, рд╣рд╛рдореА рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдЫреМрдВ, рдЕрдиреНрдпрдерд╛ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдЧрд░реНрдЫреМрдВред
рд╡реИрд╕реЗ, рдпрджрд┐ рддрдкрд╛рдЗрдБ C/C++ рдХреЛ рд▓рд╛рдЧрд┐ рдХрдорд┐рдЯрд╣рд░реВ рд░ рдкреБрд▓ рдЕрдиреБрд░реЛрдзрд╣рд░реВ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди рд░реБрдЪрд┐ рд░рд╛рдЦреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ
GitLab
рддрдкрд╛рдИрдВрд▓реЗ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдзрд╣рд░реВрдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рджрд░реНрддрд╛ рд░ рдЕрдкрд▓реЛрдб рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдпреЛ рдХрд╕рд░реА рдЧрд░реНрдиреЗ рдерд╛рд╣рд╛ рдЫреИрди рднрдиреЗ, рдо рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБ
рднрдиреНрдиреБред рддрд▓ рд╡рд░реНрдгрди рдЧрд░рд┐рдПрдХреЛ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯрдЕрдк рдЧрд░реНрдиреЗ рддрд░рд┐рдХрд╛ рд╕рдореНрднрд╛рд╡рд┐рдд рдордзреНрдпреЗ рдПрдХ рд╣реЛред рд▓рдХреНрд╖реНрдп рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдг рд╕реЗрдЯрдЕрдк рдЧрд░реНрди рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реБрд░реВ рдЧрд░реНрди рдЪрд░рдгрд╣рд░реВ рджреЗрдЦрд╛рдЙрдиреБ рд╣реЛред рд╕рд╛рдпрдж рддрдкрд╛рдИрдХреЛ рдорд╛рдорд▓рд╛рдорд╛ рд╡рд╛рддрд╛рд╡рд░рдгреАрдп рддрдпрд╛рд░реАрдХрд╛ рдЪрд░рдгрд╣рд░реВ (рднрдгреНрдбрд╛рд░рд╣рд░реВ рдердкреНрдиреЗ, рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреЗ) рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╣рд░реВ рдЫреБрдЯреНрдпрд╛рдЙрди рдЕрдЭ рдЙрддреНрддрдо рд╣реБрдиреЗрдЫ: рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЖрд╡рд╢реНрдпрдХ рд╡рд╛рддрд╛рд╡рд░рдгрд╕рдБрдЧ рдбрдХрд░ рдЫрд╡рд┐рд╣рд░реВ рддрдпрд╛рд░ рдЧрд░реНрдиреЗ рд░ рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ, рд╡рд╛ рдХреБрдиреИ рдЕрдиреНрдп рд╡рд┐рдзрд┐ред
рдЕрдм рдХреЗ рд╣реБрдиреЗрдЫ рднрдиреЗрд░ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдо рдирд┐рдореНрди рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рд╣реЗрд░реНрди рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫреБ:
рд╡рд┐рд╢реНрд▓реЗрд╖рдХрд▓рд╛рдИ рд╕рдЮреНрдЪрд╛рд▓рди рдЧрд░реНрди .NET Core SDK 3 рдЪрд╛рд╣рд┐рдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБ рдЕрдШрд┐ рддрдкрд╛рдИрдВрд▓реЗ Microsoft рднрдгреНрдбрд╛рд░рд╣рд░реВ рдердкреНрдиреБ рдкрд░реНрдЫ рдЬрд╕рдмрд╛рдЯ рд╡рд┐рд╢реНрд▓реЗрд╖рдХрдХреЛ рд▓рд╛рдЧрд┐ рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рд╣рд░реВ рд╕реНрдерд╛рдкрдирд╛ рд╣реБрдиреЗрдЫрдиреНред рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдгрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ 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
PVS-рд╕реНрдЯреБрдбрд┐рдпреЛ рднрдгреНрдбрд╛рд░ рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдердкреНрджреИ:
- 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-converter:
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
рдПрдХрдЪреЛрдЯрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдлрд╛рдЗрд▓рдорд╛ рд╕рдмреИ рдердкреЗрдкрдЫрд┐, рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдкреНрд░рддрд┐рдмрджреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред рд╕рдмреИ рдХреБрд░рд╛ рд╕рд╣реА рдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рдЬрд╛рдиреБрд╣реЛрд╕реН CI / CD -> рдкрд╛рдЗрдкрд▓рд╛рдЗрдирд╣рд░реВ -> рджреМрдбрдиреЗред рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рди рд╡рд┐рдиреНрдбреЛ рдЦреБрд▓реНрдиреЗрдЫ, рдЬрд╕рдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рдирд┐рдореНрди рд╣реБрдиреБрдкрд░реНрдЫ:
рджреЗрдЦрд┐рдпреЛ рдХрд╛рдо рд╕рдлрд▓ рднрдпреЛ - рд╕рдлрд▓рддрд╛, рд╕рдмреИ рдареАрдХ рдЫред рдЕрдм рддрдкрд╛рдИрд▓реЗ рдХреЗ рдЧрд░реНрдиреБрднрдпреЛ рднрдиреЗрд░ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред
рдХрд╛рдо рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ
рдХрд╛рдордХреЛ рдЙрджрд╛рд╣рд░рдгрдХреЛ рд▓рд╛рдЧрд┐, рдПрдЙрдЯрд╛ рд╕рд╛рдзрд╛рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ (in рдорд╛рд╕реНрдЯрд░) рдЬрд╕рдорд╛ рдзреЗрд░реИ рдлрд╛рдЗрд▓рд╣рд░реВ рд╣реБрдиреЗрдЫрдиреНред рддреНрдпрд╕ рдкрдЫрд┐, рдЕрд░реНрдХреЛ рд╢рд╛рдЦрд╛рдорд╛ рд╣рд╛рдореА рдХреЗрд╡рд▓ рдПрдЙрдЯрд╛ рдлрд╛рдЗрд▓ рдкрд░рд┐рд╡рд░реНрддрди рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреЗрдЫреМрдВред
рджреБрдИрд╡рдЯрд╛ рдХреЗрд╕рд╣рд░реВ рд╡рд┐рдЪрд╛рд░ рдЧрд░реМрдВ: рдЬрдм рдкрд░рд┐рдорд╛рд░реНрдЬрд┐рдд рдлрд╛рдЗрд▓рдорд╛ рддреНрд░реБрдЯрд┐ рд╣реБрдиреНрдЫ рд░ рдХрд╣рд┐рд▓реЗ рд╣реБрдБрджреИрдиред рдкрд╣рд┐рд▓реЛ, рддреНрд░реБрдЯрд┐ рд╕рдВрдЧ рдПрдХ рдЙрджрд╛рд╣рд░рдгред
рдорд╛рдиреМрдВ рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛рдорд╛ рдлрд╛рдЗрд▓ рдЫ Program.cs, рдЬрд╕рд▓реЗ рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджреИрди, рддрд░ рдЕрд░реНрдХреЛ рд╢рд╛рдЦрд╛рдорд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд▓реЗ рддреНрд░реБрдЯрд┐рдкреВрд░реНрдг рдХреЛрдб рдердкреНрдпреЛ рд░ рдорд░реНрдЬ рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫред рдЙрд╕рд▓реЗ рдХрд╕реНрддреЛ рдЧрд▓реНрддреА рдЧрд░реНрдпреЛ рддреНрдпреЛ рдзреЗрд░реИ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫреИрди, рдореБрдЦреНрдп рдХреБрд░рд╛ рдпреЛ рдЕрд╡рд╕реНрдерд┐рдд рдЫред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдЕрдкрд░реЗрдЯрд░ рдмрд┐рд░реНрд╕рдиреБрднрдпреЛ рдлреЗрдВрдХ (рд╣реЛ,
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