C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦāĻ•ā§‡ āĻ­āĻžāĻ˛ā§‹āĻŦāĻžāĻ¸ā§‡āĻ¨ āĻāĻŦāĻ‚ āĻŦāĻžāĻ— āĻ˜ā§ƒāĻŖāĻž āĻ•āĻ°ā§‡āĻ¨? āĻ†āĻĒāĻ¨āĻžāĻ° āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄā§‡āĻ° āĻ—ā§āĻŖāĻŽāĻžāĻ¨ āĻ‰āĻ¨ā§āĻ¨āĻ¤ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨? āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¸āĻ āĻŋāĻ• āĻœāĻžāĻ¯āĻŧāĻ—āĻžāĻ¯āĻŧ āĻāĻ¸ā§‡āĻ›ā§‡āĻ¨āĨ¤ āĻ†āĻœ āĻ†āĻŽāĻ°āĻž āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻŦāĻ˛āĻŦ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ PVS-Studio C# āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻ•āĻ¨āĻĢāĻŋāĻ—āĻžāĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻ¯āĻŧ āĻāĻ•āĻ¤ā§āĻ°ā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻšā§‡āĻ• āĻ•āĻ°āĻ¤ā§‡āĨ¤ āĻāĻ•āĻŸāĻŋ āĻ‡āĻ‰āĻ¨āĻŋāĻ•āĻ°ā§āĻ¨ āĻŽā§‡āĻœāĻžāĻœ āĻāĻŦāĻ‚ āĻ–ā§āĻļāĻŋ āĻ¸āĻŦāĻžāĻ‡ āĻĒāĻĄāĻŧāĻž.

āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ C, C++, C# āĻāĻŦāĻ‚ Java āĻ āĻ˛ā§‡āĻ–āĻž āĻĒā§āĻ°ā§‹āĻ—ā§āĻ°āĻžāĻŽā§‡āĻ° āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ•ā§‹āĻĄā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻāĻŦāĻ‚ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯ āĻĻā§āĻ°ā§āĻŦāĻ˛āĻ¤āĻž āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ˛āĨ¤ Windows, Linux āĻāĻŦāĻ‚ macOS-āĻ 64-āĻŦāĻŋāĻŸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽā§‡ āĻ•āĻžāĻœ āĻ•āĻ°ā§‡āĨ¤ 32-āĻŦāĻŋāĻŸ, 64-āĻŦāĻŋāĻŸ āĻāĻŦāĻ‚ āĻāĻŽāĻŦā§‡āĻĄā§‡āĻĄ āĻāĻ†āĻ°āĻāĻŽ āĻĒā§āĻ˛ā§āĻ¯āĻžāĻŸāĻĢāĻ°ā§āĻŽā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĄāĻŋāĻœāĻžāĻ‡āĻ¨ āĻ•āĻ°āĻž āĻ•ā§‹āĻĄ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ†āĻŽāĻ°āĻž PVS-Studio 7.08 āĻĒā§āĻ°āĻ•āĻžāĻļ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻŽāĻ°āĻž āĻ…āĻ¨ā§‡āĻ• āĻ•āĻŋāĻ›ā§ āĻ•āĻ°ā§‡āĻ›āĻŋ āĻŽāĻœāĻžāĻĻāĻžāĻ°āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ:

  • āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻāĻŦāĻ‚ āĻŽā§āĻ¯āĻžāĻ•ā§‹āĻ¸ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻŋ# āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ•;
  • āĻ°āĻžāĻ‡āĻĄāĻžāĻ°ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ˛āĻžāĻ—āĻ‡āĻ¨;
  • āĻ¨āĻ¤ā§āĻ¨ āĻĢāĻžāĻ‡āĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻšā§‡āĻ•āĻŋāĻ‚ āĻŽā§‹āĻĄāĨ¤

āĻĢāĻžāĻ‡āĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻšā§‡āĻ• āĻŽā§‹āĻĄ

āĻĒā§‚āĻ°ā§āĻŦā§‡, āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ•ā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¸āĻš āĻāĻ•āĻŸāĻŋ .xml āĻĒāĻžāĻ¸ āĻ•āĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ āĻ›āĻŋāĻ˛āĨ¤ āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻāĻŸāĻŋ āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻ¨āĻ¯āĻŧ, āĻ¤āĻžāĻ‡ āĻ†āĻŽāĻ°āĻž .txt āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻžāĻ° āĻ•ā§āĻˇāĻŽāĻ¤āĻž āĻ¯ā§āĻ•ā§āĻ¤ āĻ•āĻ°ā§‡āĻ›āĻŋ, āĻ¯āĻž āĻœā§€āĻŦāĻ¨āĻ•ā§‡ āĻ–ā§āĻŦ āĻ¸āĻšāĻœ āĻ•āĻ°ā§‡ āĻ¤ā§‹āĻ˛ā§‡āĨ¤

āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻĢāĻžāĻ‡āĻ˛ āĻšā§‡āĻ• āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ…āĻŦāĻļā§āĻ¯āĻ‡ āĻĒāĻ¤āĻžāĻ•āĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ --āĻ¸ā§‹āĻ°ā§āĻ¸ āĻĢāĻžāĻ‡āĻ˛ (-f) āĻāĻŦāĻ‚ āĻĢāĻžāĻ‡āĻ˛ā§‡āĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻ¸āĻš .txt āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°ā§āĻ¨āĨ¤ āĻāĻŸāĻŋ āĻāĻ‡ āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json

āĻ†āĻĒāĻ¨āĻŋ āĻ•āĻŽāĻŋāĻŸ āĻšā§‡āĻ•āĻŋāĻ‚ āĻŦāĻž āĻĒā§āĻ˛ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻšāĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ‡ āĻŽā§‹āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻāĻŸāĻŋ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯āĻŸāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĒāĻžāĻ“āĻ¯āĻŧāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§‹āĻ¨ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽāĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻ›ā§‡āĻ¨ āĻ¤āĻžāĻ° āĻ‰āĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻ­āĻ° āĻ•āĻ°āĻŦā§‡āĨ¤

āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻšā§‡āĻ• āĻ•āĻ°āĻžāĻ° āĻ¨ā§€āĻ¤āĻŋ

āĻšā§‡āĻ•ā§‡āĻ° āĻŽā§‚āĻ˛ āĻ¸āĻžāĻ°āĻŽāĻ°ā§āĻŽ āĻšāĻ˛ āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻž āĻ¯ā§‡ āĻāĻ•āĻ¤ā§āĻ°ā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ¨āĻžāĻ•ā§āĻ¤ āĻ•āĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻ—ā§āĻ˛āĻŋ āĻŽāĻžāĻ˛āĻŋāĻ• āĻļāĻžāĻ–āĻž āĻ†āĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻĒā§āĻ°ā§‹ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻŸāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ‡ āĻ¨āĻžāĨ¤ āĻ…āĻ§āĻŋāĻ•āĻ¨ā§āĻ¤ā§, āĻļāĻžāĻ–āĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ•āĻžāĻ›ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻĨāĻžāĻ•ā§‡āĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ†āĻŽāĻŋ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻšā§‡āĻ• āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻšā§āĻ›āĻŋāĨ¤

āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻāĻŸāĻŋ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻ…āĻ°ā§āĻĨāĻžā§Ž āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻ¯ā§‡ āĻ¸āĻŦ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ›āĻŋāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻ—ā§āĻ˛āĻŋ, āĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻšāĻ˛ā§‡ āĻ¯āĻžāĻŦā§‡āĨ¤ āĻ¯ā§‡āĻšā§‡āĻ¤ā§ āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋ āĻšāĻžāĻ‡ āĻ¨āĻž, āĻ†āĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻŋ, āĻāĻŦāĻ‚ āĻāĻ–āĻ¨ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻāĻ‡āĻ°āĻ•āĻŽ āĻĻā§‡āĻ–āĻžāĻšā§āĻ›ā§‡:

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ›ā§‡ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨2 āĻāĻŦāĻ‚, āĻ¯āĻĻāĻŋ āĻ•ā§‹āĻ¨ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡, āĻ†āĻŽāĻ°āĻž āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ—ā§āĻ°āĻšāĻŖ āĻ•āĻ°āĻŋ, āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻ–ā§āĻ¯āĻžāĻ¨ āĻ•āĻ°āĻŋāĨ¤

āĻ¯āĻžāĻ‡āĻšā§‹āĻ•, āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ C/C++ āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻ•āĻŽāĻŋāĻŸ āĻāĻŦāĻ‚ āĻŸāĻžāĻ¨ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§āĻ—ā§āĻ˛āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻšāĻ¨ āĻ¤āĻŦā§‡ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻĒāĻĄāĻŧāĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻāĻ–āĻžāĻ¨ā§‡.

GitLab

GitLab āĻāĻ•āĻŸāĻŋ āĻ“āĻĒā§‡āĻ¨ āĻ¸ā§‹āĻ°ā§āĻ¸ āĻ“āĻ¯āĻŧā§‡āĻŦ-āĻ­āĻŋāĻ¤ā§āĻ¤āĻŋāĻ• DevOps āĻ˛āĻžāĻ‡āĻĢāĻ¸āĻžāĻ‡āĻ•ā§‡āĻ˛ āĻŸā§āĻ˛ āĻ¯āĻž āĻ—āĻŋāĻŸ-āĻāĻ° āĻ¨āĻŋāĻœāĻ¸ā§āĻŦ āĻ‰āĻ‡āĻ•āĻŋ, āĻ‡āĻ¸ā§āĻ¯ā§ āĻŸā§āĻ°ā§āĻ¯āĻžāĻ•āĻŋāĻ‚ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ, CI/CD āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ āĻāĻŦāĻ‚ āĻ…āĻ¨ā§āĻ¯āĻžāĻ¨ā§āĻ¯ āĻŦā§ˆāĻļāĻŋāĻˇā§āĻŸā§āĻ¯ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ•ā§‹āĻĄ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻŽā§‡āĻ¨ā§āĻŸ āĻ¸āĻŋāĻ¸ā§āĻŸā§‡āĻŽ āĻĒā§āĻ°āĻĻāĻžāĻ¨ āĻ•āĻ°ā§‡āĨ¤

āĻ†āĻĒāĻ¨āĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻļā§āĻ°ā§ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻāĻŦāĻ‚ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ†āĻĒāĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ā§ˇ āĻ†āĻĒāĻ¨āĻŋ āĻāĻŸāĻŋ āĻ•āĻŋāĻ­āĻžāĻŦā§‡ āĻ•āĻ°āĻ¤ā§‡ āĻœāĻžāĻ¨ā§‡āĻ¨ āĻ¨āĻž, āĻ¤āĻžāĻ°āĻĒāĻ° āĻ†āĻŽāĻŋ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĒā§āĻ°āĻŦāĻ¨ā§āĻ§ āĻ†āĻŽāĻžāĻ° āĻ¸āĻšāĻ•āĻ°ā§āĻŽā§€.

āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯. āĻ¨ā§€āĻšā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§‡āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻŸāĻŋ āĻ¸āĻŽā§āĻ­āĻžāĻŦā§āĻ¯āĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻāĻ•āĻŸāĻŋāĨ¤ āĻ˛āĻ•ā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻŦāĻ‚ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻšāĻžāĻ˛ā§ āĻ•āĻ°āĻžāĻ° āĻĒāĻĻāĻ•ā§āĻˇā§‡āĻĒāĻ—ā§āĻ˛āĻŋ āĻĻā§‡āĻ–āĻžāĻ¨ā§‹āĨ¤ āĻ¸āĻŽā§āĻ­āĻŦāĻ¤ āĻ†āĻĒāĻ¨āĻžāĻ° āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ†āĻ˛āĻžāĻĻāĻž āĻ•āĻ°āĻž (āĻ­āĻžāĻ¨ā§āĻĄāĻžāĻ° āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž, āĻāĻ•āĻŸāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž) āĻāĻŦāĻ‚ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻž āĻ†āĻ°āĻ“ āĻ…āĻ¨ā§āĻ•ā§‚āĻ˛ āĻšāĻŦā§‡: āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦā§‡āĻļā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻĄāĻ•āĻžāĻ° āĻšāĻŋāĻ¤ā§āĻ°āĻ—ā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ¸ā§‡āĻ—ā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°āĻž āĻŦāĻž āĻ…āĻ¨ā§āĻ¯ āĻ•ā§‹āĻ¨āĻ“ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤

āĻāĻ–āĻ¨ āĻ•ā§€ āĻ˜āĻŸāĻŦā§‡ āĻ¤āĻž āĻ†āĻ°āĻ“ āĻ­āĻžāĻ˛āĻ­āĻžāĻŦā§‡ āĻŦā§‹āĻāĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻŽāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤ āĻšāĻŋāĻ¤ā§āĻ°āĻŸāĻŋ āĻĻā§‡āĻ–āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻšā§āĻ›āĻŋ:

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ•āĻŸāĻŋāĻ° āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ .NET āĻ•ā§‹āĻ° SDK 3 āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨, āĻ¤āĻžāĻ‡ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ Microsoft āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻ—ā§āĻ˛āĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ āĻ¯ā§‡āĻ–āĻžāĻ¨ āĻĨā§‡āĻ•ā§‡ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ•ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻ­āĻ°āĻ¤āĻžāĻ—ā§āĻ˛āĻŋ āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻž āĻšāĻŦā§‡ā§ˇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻ˛āĻŋāĻ¨āĻžāĻ•ā§āĻ¸ āĻĄāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻŽāĻžāĻ‡āĻ•ā§āĻ°ā§‹āĻ¸āĻĢāĻŸ āĻ°āĻŋāĻĒā§‹āĻœāĻŋāĻŸāĻ°āĻŋ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¸āĻ‚āĻļā§āĻ˛āĻŋāĻˇā§āĻŸ āĻ¨āĻĨāĻŋāĻ¤ā§‡ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤.

āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœ āĻŽā§āĻ¯āĻžāĻ¨ā§‡āĻœāĻžāĻ°ā§‡āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§‡ PVS-Studio āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ PVS-Studio āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āĻ¨ āĻĄāĻŋāĻ¸ā§āĻŸā§āĻ°āĻŋāĻŦāĻŋāĻ‰āĻļāĻ¨ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ¸āĻ‚āĻ—ā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ†āĻ°āĻ“ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻĄāĻ•ā§āĻŽā§‡āĻ¨ā§āĻŸā§‡āĻļāĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻžāĻ¸āĻ™ā§āĻ—āĻŋāĻ• āĻŦāĻŋāĻ­āĻžāĻ—.

āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻ•āĻžāĻœ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ˛āĻžāĻ‡āĻ¸ā§‡āĻ¨ā§āĻ¸ āĻ•ā§€ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨. āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻŸā§āĻ°āĻžāĻ¯āĻŧāĻžāĻ˛ āĻ˛āĻžāĻ‡āĻ¸ā§‡āĻ¨ā§āĻ¸ āĻĒā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻĒā§ƒāĻˇā§āĻ āĻž.

āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯. āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻŽāĻ¨ā§‡ āĻ°āĻžāĻ–āĻŦā§‡āĻ¨ āĻ¯ā§‡ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻŽā§‹āĻĄā§‡āĻ° (āĻāĻ•āĻ¤ā§āĻ°ā§€āĻ•āĻ°āĻŖā§‡āĻ° āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ) āĻāĻ•āĻŸāĻŋ āĻāĻ¨ā§āĻŸāĻžāĻ°āĻĒā§āĻ°āĻžāĻ‡āĻœ āĻ˛āĻžāĻ‡āĻ¸ā§‡āĻ¨ā§āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨āĨ¤ āĻ…āĻ¤āĻāĻŦ, āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ…āĻĒāĻžāĻ°ā§‡āĻļāĻ¨ā§‡āĻ° āĻāĻ‡ āĻŽā§‹āĻĄāĻŸāĻŋ āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ "āĻŦāĻžāĻ°ā§āĻ¤āĻž" āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻ¨āĻŋāĻ°ā§āĻĻā§‡āĻļ āĻ•āĻ°āĻ¤ā§‡ āĻ­ā§āĻ˛āĻŦā§‡āĻ¨ āĻ¨āĻž āĻ¯ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻāĻ•āĻŸāĻŋ āĻāĻ¨ā§āĻŸāĻžāĻ°āĻĒā§āĻ°āĻžāĻ‡āĻœ āĻ˛āĻžāĻ‡āĻ¸ā§‡āĻ¨ā§āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§ˇ

āĻ¯āĻĻāĻŋ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ˜āĻŸā§‡, āĻ¤āĻžāĻšāĻ˛ā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻžāĻ‡āĻ˛āĻ—ā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻ•āĻž āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡, āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻ‡āĻ˛ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ•āĻ°āĻŦā§ˇ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻĒāĻ°, āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§‹āĻœāĻ¨ā§€āĻ¯āĻŧ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§‡ āĻ˛āĻ—āĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻ°ā§‚āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡āĨ¤

āĻāĻ–āĻ¨, āĻ†āĻĒāĻ¨āĻžāĻ° āĻšā§‹āĻ–ā§‡āĻ° āĻ¸āĻžāĻŽāĻ¨ā§‡ āĻ•āĻžāĻœā§‡āĻ° āĻ…ā§āĻ¯āĻžāĻ˛āĻ—āĻ°āĻŋāĻĻāĻŽ āĻĨāĻžāĻ•āĻ˛ā§‡, āĻ†āĻĒāĻ¨āĻŋ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ˛ā§‡āĻ–āĻžāĻ° āĻĻāĻŋāĻ•ā§‡ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ gitlab-ci.yml āĻ…āĻĨāĻŦāĻž, āĻ¯āĻĻāĻŋ āĻāĻŸāĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¨āĻž āĻĨāĻžāĻ•ā§‡ āĻ¤āĻŦā§‡ āĻāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°ā§āĻ¨āĨ¤ āĻāĻŸāĻŋ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ†āĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒā§‡āĻ° āĻ¨āĻžāĻŽā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡ -> āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ āĻ¸ā§‡āĻŸ āĻ†āĻĒ āĻ•āĻ°ā§āĻ¨.

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ˛ā§‡āĻ–āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĨ¤ āĻ†āĻ¸ā§āĻ¨ āĻĒā§āĻ°āĻĨāĻŽā§‡ āĻ•ā§‹āĻĄāĻŸāĻŋ āĻ˛āĻŋāĻ–āĻŋ āĻ¯āĻž āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻ‡āĻ¨āĻ¸ā§āĻŸāĻ˛ āĻ•āĻ°āĻŦā§‡ āĻāĻŦāĻ‚ āĻ˛āĻžāĻ‡āĻ¸ā§‡āĻ¨ā§āĻ¸ā§‡ āĻĒā§āĻ°āĻŦā§‡āĻļ āĻ•āĻ°āĻŦā§‡:

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 āĻĒā§āĻ¯āĻžāĻ•ā§‡āĻœāĻ—ā§āĻ˛āĻŋ āĻĄāĻžāĻ‰āĻ¨āĻ˛ā§‹āĻĄ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻŦā§‡)āĨ¤

āĻ†āĻĒāĻ¨āĻŋ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§‡ āĻ˛āĻžāĻ‡āĻ¸ā§‡āĻ¨ā§āĻ¸ āĻ¤āĻĨā§āĻ¯ āĻ§āĻžāĻ°āĻŖāĻ•āĻžāĻ°ā§€ āĻĒāĻ°āĻŋāĻŦā§‡āĻļ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¸ā§‡āĻŸ āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸, āĻāĻŦāĻ‚ āĻĒāĻ°ā§‡ - āĻ…āĻ¨ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ.

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻ¯ā§‡ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹āĻŸāĻŋ āĻ–ā§‹āĻ˛ā§‡, āĻ¸ā§‡āĻ–āĻžāĻ¨ā§‡ āĻ†āĻ‡āĻŸā§‡āĻŽāĻŸāĻŋ āĻ–ā§āĻāĻœā§āĻ¨ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛, āĻĄāĻžāĻ¨āĻĻāĻŋāĻ•ā§‡āĻ° āĻŦā§‹āĻ¤āĻžāĻŽā§‡ āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§āĻ¨ āĻŦāĻŋāĻ¸ā§āĻ¤ā§ƒāĻ¤ āĻ•āĻ°āĻž āĻāĻŦāĻ‚ āĻ­ā§‡āĻ°āĻŋāĻ¯āĻŧā§‡āĻŦāĻ˛ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§āĻ¨āĨ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻ‡ āĻŽāĻ¤ āĻšāĻ“āĻ¯āĻŧāĻž āĻ‰āĻšāĻŋāĻ¤:

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡ āĻ¯ā§‡āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤ āĻĒā§āĻ°āĻĨāĻŽā§‡, āĻāĻ•āĻŸāĻŋ āĻ¸āĻŽā§āĻĒā§‚āĻ°ā§āĻŖ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻĒāĻ¤āĻžāĻ•āĻžāĻ° āĻ•āĻžāĻ›ā§‡ -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) āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•ā§‹āĻĄ" āĻŦāĻŋāĻ­āĻžāĻ—ā§‡ āĻ†āĻ°āĻ“ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻ­āĻžāĻŦā§‡ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡āĨ¤PVS-Studio āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ•āĻŽāĻžāĻ¨ā§āĻĄ āĻ˛āĻžāĻ‡āĻ¨ āĻĨā§‡āĻ•ā§‡ āĻ­āĻŋāĻœā§āĻ¯ā§āĻ¯āĻŧāĻžāĻ˛ āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ / MSBuild / .NET āĻ•ā§‹āĻ° āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒāĻ—ā§āĻ˛āĻŋ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡".

āĻāĻ‡ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡, āĻ†āĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•ā§‹āĻĄāĻ—ā§āĻ˛āĻŋāĻ¤ā§‡ āĻ†āĻ—ā§āĻ°āĻšā§€ āĻ¯ā§‡āĻ–āĻžāĻ¨ā§‡ 8 āĻĒā§āĻ°āĻĻāĻ°ā§āĻļāĻŋāĻ¤ āĻšāĻ¯āĻŧāĨ¤

  - exit_code=$((($exit_code & 8)/8))

āĻ†āĻŽāĻ°āĻž 1 āĻĒāĻžāĻŦ āĻ¯āĻ–āĻ¨ āĻ°āĻŋāĻŸāĻžāĻ°ā§āĻ¨ āĻ•ā§‹āĻĄā§‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻ†āĻ—ā§āĻ°āĻšā§‡āĻ° āĻ¨āĻŽā§āĻŦāĻ°āĻŸāĻŋāĻ° āĻŦāĻŋāĻŸ āĻĨāĻžāĻ•āĻŦā§‡, āĻ…āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻ†āĻŽāĻ°āĻž 0 āĻĒāĻžāĻŦāĨ¤

āĻāĻŸāĻž āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ. āĻ†āĻŽāĻ°āĻž āĻāĻŸāĻŋ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡, āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻœāĻžāĻ¯āĻŧāĻ—āĻž āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻ•āĻ°āĻž āĻ¯āĻžāĻ•āĨ¤ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ˜āĻŸāĻ˛ā§‡āĻ‡ āĻ†āĻŽāĻžāĻĻā§‡āĻ° āĻāĻŸāĻŋ āĻ•āĻžāĻ°ā§āĻ¯āĻ•āĻ° āĻ•āĻ°āĻž āĻĻāĻ°āĻ•āĻžāĻ°āĨ¤ āĻāĻŸāĻŋ āĻāĻ‡ āĻŽāĻ¤ āĻĻā§‡āĻ–āĻžāĻ¯āĻŧ:

merge:
  script:
  only:
  - merge_requests

āĻ¸ā§āĻ•ā§āĻ°āĻŋāĻĒā§āĻŸ āĻ¨āĻŋāĻœā§‡āĻ‡ āĻāĻ—āĻŋāĻ¯āĻŧā§‡ āĻšāĻ˛ā§āĻ¨. āĻ†āĻŽāĻŋ āĻāĻ‡ āĻ¸āĻ¤ā§āĻ¯ā§‡āĻ° āĻŽā§āĻ–ā§‹āĻŽā§āĻ–āĻŋ āĻšāĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽ āĻ¯ā§‡ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻ•ā§‡ āĻ•āĻŋāĻ›ā§āĻ‡ āĻœāĻžāĻ¨ā§‡ āĻ¨āĻž āĻŽā§‚āĻ˛/āĻ—ā§āĻ°ā§. āĻ¤āĻžāĻ‡ āĻ†āĻ¸ā§āĻ¨ āĻ¤āĻžāĻ•ā§‡ āĻāĻ•āĻŸā§ āĻ¸āĻžāĻšāĻžāĻ¯ā§āĻ¯ āĻ•āĻ°āĻŋ:

  - git fetch origin

āĻāĻ–āĻ¨ āĻ†āĻŽāĻ°āĻž āĻļāĻžāĻ–āĻžāĻ—ā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§‡ āĻĒāĻžāĻ°ā§āĻĨāĻ•ā§āĻ¯ āĻĒāĻžāĻ‡ āĻāĻŦāĻ‚ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻŸāĻŋ āĻ¸āĻ‚āĻ°āĻ•ā§āĻˇāĻŖ āĻ•āĻ°āĻŋ āĻĒāĻžāĻ ā§āĻ¯ āĻĢāĻžāĻ‡āĻ˛:

  - 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 āĻāĻŦāĻ‚ āĻ‡āĻ‰āĻŸāĻŋāĻ˛āĻŋāĻŸāĻŋ āĻĒā§āĻ˛āĻžāĻ—-āĻ•āĻ¨āĻ­āĻžāĻ°ā§āĻŸāĻžāĻ°:

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

āĻāĻ•āĻŦāĻžāĻ° āĻ†āĻĒāĻ¨āĻŋ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ¯ā§‹āĻ— āĻ•āĻ°āĻ˛ā§‡, āĻ•ā§āĻ˛āĻŋāĻ• āĻ•āĻ°ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§‡āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻāĻŋāĻ¨. āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ• āĻ†āĻ›ā§‡ āĻ¤āĻž āĻĻā§‡āĻ–āĻ¤ā§‡, āĻ¯āĻžāĻ¨ āĻ¸āĻŋāĻ†āĻ‡/āĻ¸āĻŋāĻĄāĻŋ -> āĻĒāĻžāĻ‡āĻĒāĻ˛āĻžāĻ‡āĻ¨ -> āĻšāĻ˛āĻŽāĻžāĻ¨. āĻāĻ•āĻŸāĻŋ āĻ­āĻžāĻ°ā§āĻšā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§‡āĻļāĻŋāĻ¨ āĻ‰āĻ‡āĻ¨ā§āĻĄā§‹ āĻ–ā§āĻ˛āĻŦā§‡, āĻ¯āĻžāĻ° āĻļā§‡āĻˇā§‡ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻ–āĻŋāĻ¤āĻ—ā§āĻ˛āĻŋ āĻĨāĻžāĻ•āĻž āĻ‰āĻšāĻŋāĻ¤:

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻĻā§‡āĻ–ā§‡āĻ›āĻŋ āĻšāĻžāĻ•āĻ°āĻŋ āĻ¸āĻĢāĻ˛ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ - āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯, āĻ¸āĻŦāĻ•āĻŋāĻ›ā§ āĻ āĻŋāĻ• āĻ†āĻ›ā§‡āĨ¤ āĻāĻ–āĻ¨ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻž āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¤āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻĒāĻžāĻ°ā§‡āĻ¨āĨ¤

āĻ•āĻžāĻœā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ

āĻ•āĻžāĻœā§‡āĻ° āĻ‰āĻĻāĻžāĻšāĻ°āĻŖā§‡āĻ° āĻœāĻ¨ā§āĻ¯, āĻ†āĻ¸ā§āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻ•āĻ˛ā§āĻĒ āĻ¤ā§ˆāĻ°āĻŋ āĻ•āĻ°āĻŋ (in āĻŽāĻžāĻ˛āĻŋāĻ•) āĻ¯āĻžāĻ¤ā§‡ āĻŦā§‡āĻļ āĻ•āĻ¯āĻŧā§‡āĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻĨāĻžāĻ•āĻŦā§‡āĨ¤ āĻāĻ° āĻĒāĻ°ā§‡, āĻ…āĻ¨ā§āĻ¯ āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻ†āĻŽāĻ°āĻž āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻ•āĻ°āĻŦ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°āĻŦāĨ¤

āĻ†āĻ¸ā§āĻ¨ āĻĻā§āĻŸāĻŋ āĻ•ā§āĻˇā§‡āĻ¤ā§āĻ°ā§‡ āĻŦāĻŋāĻŦā§‡āĻšāĻ¨āĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•: āĻ¯āĻ–āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻžāĻ‡āĻ˛āĻŸāĻŋāĻ¤ā§‡ āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻĨāĻžāĻ•ā§‡ āĻāĻŦāĻ‚ āĻ•āĻ–āĻ¨ āĻāĻŸāĻŋ āĻĨāĻžāĻ•ā§‡ āĻ¨āĻžāĨ¤ āĻĒā§āĻ°āĻĨāĻŽāĻ¤, āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĨ¤

āĻ§āĻ°āĻž āĻ¯āĻžāĻ• āĻŽāĻžāĻ¸ā§āĻŸāĻžāĻ° āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻ†āĻ›ā§‡ Program.cs, āĻ¯āĻžāĻ¤ā§‡ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¨ā§‡āĻ‡, āĻ•āĻŋāĻ¨ā§āĻ¤ā§ āĻ…āĻ¨ā§āĻ¯ āĻļāĻžāĻ–āĻžāĻ¯āĻŧ āĻŦāĻŋāĻ•āĻžāĻļāĻ•āĻžāĻ°ā§€ āĻ­ā§āĻ˛ āĻ•ā§‹āĻĄ āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻāĻ•āĻŸāĻŋ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¯āĻŧāĨ¤ āĻ¤āĻŋāĻ¨āĻŋ āĻ•ā§€ āĻ§āĻ°āĻŖā§‡āĻ° āĻ­ā§āĻ˛ āĻ•āĻ°ā§‡āĻ›ā§‡āĻ¨ āĻ¤āĻž āĻāĻ¤ āĻ—ā§āĻ°ā§āĻ¤ā§āĻŦāĻĒā§‚āĻ°ā§āĻŖ āĻ¨āĻ¯āĻŧ, āĻŽā§‚āĻ˛ āĻœāĻŋāĻ¨āĻŋāĻ¸āĻŸāĻŋ āĻāĻŸāĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨āĨ¤ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§‚āĻĒ, āĻ…āĻĒāĻžāĻ°ā§‡āĻŸāĻ° āĻ­ā§āĻ˛ā§‡ āĻ—ā§‡āĻ›ā§‡ āĻ¨āĻŋāĻ•ā§āĻˇā§‡āĻĒ (āĻšā§āĻ¯āĻžāĻ, āĻ–ā§āĻŦ āĻ–āĻžāĻ°āĻžāĻĒ):

void MyAwesomeMethod(String name)
{
  if (name == null)
    new ArgumentNullException(....);
  // do something
  ....
}

āĻ†āĻ¸ā§āĻ¨ āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ¸āĻš āĻāĻ•āĻŸāĻŋ āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖā§‡āĻ° āĻĢāĻ˛āĻžāĻĢāĻ˛āĻŸāĻŋ āĻĻā§‡āĻ–āĻŋāĨ¤ āĻāĻ›āĻžāĻĄāĻŧāĻžāĻ“ āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻāĻ•āĻŸāĻŋ āĻĢāĻžāĻ‡āĻ˛ āĻĒāĻžāĻ°ā§āĻ¸ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧā§‡āĻ›ā§‡ āĻ¤āĻž āĻ¨āĻŋāĻļā§āĻšāĻŋāĻ¤ āĻ•āĻ°āĻ¤ā§‡, āĻ†āĻŽāĻŋ āĻĒāĻ¤āĻžāĻ•āĻž āĻ¯ā§‹āĻ— āĻ•āĻ°ā§‡āĻ›āĻŋ -r pvs-studio-dotnet āĻ˛āĻžā§āĻš āĻ˛āĻžāĻ‡āĻ¨ā§‡:

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻ‡ āĻ¯ā§‡ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ–ā§āĻāĻœā§‡ āĻĒā§‡āĻ¯āĻŧā§‡āĻ›ā§‡ āĻāĻŦāĻ‚ āĻļāĻžāĻ–āĻžāĻ—ā§āĻ˛āĻŋāĻ•ā§‡ āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻ…āĻ¨ā§āĻŽāĻ¤āĻŋ āĻĻā§‡āĻ¯āĻŧāĻ¨āĻŋāĨ¤

āĻāĻ° āĻāĻ•āĻŸāĻŋ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻ›āĻžāĻĄāĻŧāĻž āĻ‰āĻĻāĻžāĻšāĻ°āĻŖ āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻž āĻ¯āĻžāĻ•. āĻ•ā§‹āĻĄ āĻ¸āĻ‚āĻļā§‹āĻ§āĻ¨ āĻ•āĻ°āĻž āĻšāĻšā§āĻ›ā§‡:

void MyAwesomeMethod(String name)
{
  if (name == null)
    throw new ArgumentNullException(....);
  // do something
  ....
}

āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ āĻĢāĻ˛āĻžāĻĢāĻ˛:

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻ†āĻŽāĻ°āĻž āĻĻā§‡āĻ–āĻ¤ā§‡ āĻĒāĻžāĻšā§āĻ›āĻŋ, āĻ•ā§‹āĻ¨ āĻ¤ā§āĻ°ā§āĻŸāĻŋ āĻĒāĻžāĻ“āĻ¯āĻŧāĻž āĻ¯āĻžāĻ¯āĻŧāĻ¨āĻŋ, āĻāĻŦāĻ‚ āĻŸāĻžāĻ¸ā§āĻ• āĻāĻ•ā§āĻ¸āĻŋāĻ•āĻŋāĻ‰āĻļāĻ¨ āĻ¸āĻĢāĻ˛ āĻšāĻ¯āĻŧā§‡āĻ›ā§‡, āĻ¯āĻž āĻ†āĻŽāĻ°āĻž āĻĒāĻ°ā§€āĻ•ā§āĻˇāĻž āĻ•āĻ°āĻ¤ā§‡ āĻšā§‡āĻ¯āĻŧā§‡āĻ›āĻŋāĻ˛āĻžāĻŽāĨ¤

āĻ‰āĻĒāĻ¸āĻ‚āĻšāĻžāĻ°

āĻļāĻžāĻ–āĻž āĻāĻ•āĻ¤ā§āĻ°āĻŋāĻ¤ āĻ•āĻ°āĻžāĻ° āĻ†āĻ—ā§‡ āĻ–āĻžāĻ°āĻžāĻĒ āĻ•ā§‹āĻĄ āĻ†āĻ—āĻžāĻ›āĻž āĻ–ā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻœāĻ¨āĻ• āĻāĻŦāĻ‚ āĻ†āĻ¨āĻ¨ā§āĻĻāĻĻāĻžāĻ¯āĻŧāĻ•āĨ¤ āĻ¤āĻžāĻ‡ āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ CI/CD āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡āĻ¨, āĻšā§‡āĻ• āĻ•āĻ°āĻžāĻ° āĻœāĻ¨ā§āĻ¯ āĻāĻ•āĻŸāĻŋ āĻ¸ā§āĻŸā§āĻ¯āĻžāĻŸāĻŋāĻ• āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻ• āĻāĻŽā§āĻŦā§‡āĻĄ āĻ•āĻ°āĻžāĻ° āĻšā§‡āĻˇā§āĻŸāĻž āĻ•āĻ°ā§āĻ¨āĨ¤ āĻ¤āĻĻā§āĻĒāĻ°āĻŋ, āĻāĻŸāĻŋ āĻŦā§‡āĻļ āĻ¸āĻšāĻœāĻ­āĻžāĻŦā§‡ āĻ•āĻ°āĻž āĻšāĻ¯āĻŧāĨ¤

āĻ†āĻĒāĻ¨āĻžāĻ° āĻŽāĻ¨ā§‹āĻ¯ā§‹āĻ—ā§‡āĻ° āĻœāĻ¨ā§āĻ¯ āĻ†āĻĒāĻ¨āĻžāĻ•ā§‡ āĻ§āĻ¨ā§āĻ¯āĻŦāĻžāĻĻāĨ¤

C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ
āĻ†āĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻāĻ‡ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻŸāĻŋ āĻ‡āĻ‚āĻ°ā§‡āĻœāĻŋāĻ­āĻžāĻˇā§€ āĻļā§āĻ°ā§‹āĻ¤āĻžāĻĻā§‡āĻ° āĻ¸āĻžāĻĨā§‡ āĻ­āĻžāĻ— āĻ•āĻ°āĻ¤ā§‡ āĻšāĻžāĻ¨ āĻ¤āĻŦā§‡ āĻ…āĻ¨ā§āĻ—ā§āĻ°āĻš āĻ•āĻ°ā§‡ āĻ…āĻ¨ā§āĻŦāĻžāĻĻ āĻ˛āĻŋāĻ™ā§āĻ•āĻŸāĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§āĻ¨: āĻ¨āĻŋāĻ•ā§‹āĻ˛ā§‡ āĻŽāĻŋāĻ°ā§‹āĻ¨āĻ­āĨ¤ C# āĻāĻ° āĻœāĻ¨ā§āĻ¯ āĻĒāĻŋāĻ­āĻŋāĻāĻ¸-āĻ¸ā§āĻŸā§āĻĄāĻŋāĻ“ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻ•āĻ°ā§‡ āĻ—āĻŋāĻŸāĻ˛ā§āĻ¯āĻžāĻŦā§‡ āĻŽāĻžāĻ°ā§āĻœ āĻ…āĻ¨ā§āĻ°ā§‹āĻ§ā§‡āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§‡āĻˇāĻŖ.

āĻ‰āĻ¤ā§āĻ¸: www.habr.com

āĻāĻ•āĻŸāĻŋ āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯ āĻœā§āĻĄāĻŧā§āĻ¨