āĻāĻŋāĻāĻ˛ā§āĻ¯āĻžāĻŦāĻā§ āĻāĻžāĻ˛ā§āĻŦāĻžāĻ¸ā§āĻ¨ āĻāĻŦāĻ āĻŦāĻžāĻ āĻā§āĻŖāĻž āĻāĻ°ā§āĻ¨? āĻāĻĒāĻ¨āĻžāĻ° āĻ¸ā§āĻ°ā§āĻ¸ āĻā§āĻĄā§āĻ° āĻā§āĻŖāĻŽāĻžāĻ¨ āĻāĻ¨ā§āĻ¨āĻ¤ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨? āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻĒāĻ¨āĻŋ āĻ¸āĻ āĻŋāĻ āĻāĻžāĻ¯āĻŧāĻāĻžāĻ¯āĻŧ āĻāĻ¸ā§āĻā§āĻ¨āĨ¤ āĻāĻ āĻāĻŽāĻ°āĻž āĻāĻĒāĻ¨āĻžāĻā§ āĻŦāĻ˛āĻŦ āĻāĻŋāĻāĻžāĻŦā§ PVS-Studio C# āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻ¨āĻĢāĻŋāĻāĻžāĻ° āĻāĻ°āĻ¤ā§ āĻšāĻ¯āĻŧ āĻāĻāĻ¤ā§āĻ°ā§āĻāĻ°āĻŖā§āĻ° āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻā§āĻ āĻāĻ°āĻ¤ā§āĨ¤ āĻāĻāĻāĻŋ āĻāĻāĻ¨āĻŋāĻāĻ°ā§āĻ¨ āĻŽā§āĻāĻžāĻ āĻāĻŦāĻ āĻā§āĻļāĻŋ āĻ¸āĻŦāĻžāĻ āĻĒāĻĄāĻŧāĻž.
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻŽāĻ°āĻž PVS-Studio 7.08 āĻĒā§āĻ°āĻāĻžāĻļ āĻāĻ°ā§āĻāĻŋ, āĻ¯ā§āĻāĻžāĻ¨ā§ āĻāĻŽāĻ°āĻž āĻ
āĻ¨ā§āĻ āĻāĻŋāĻā§ āĻāĻ°ā§āĻāĻŋ
- āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻāĻŦāĻ āĻŽā§āĻ¯āĻžāĻā§āĻ¸ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻŋ# āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ;
- āĻ°āĻžāĻāĻĄāĻžāĻ°ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ˛āĻžāĻāĻāĻ¨;
- āĻ¨āĻ¤ā§āĻ¨ āĻĢāĻžāĻāĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻā§āĻāĻŋāĻ āĻŽā§āĻĄāĨ¤
āĻĢāĻžāĻāĻ˛ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻā§āĻ āĻŽā§āĻĄ
āĻĒā§āĻ°ā§āĻŦā§, āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋ āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻāĻžāĻā§ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¸āĻš āĻāĻāĻāĻŋ .xml āĻĒāĻžāĻ¸ āĻāĻ°āĻž āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ āĻāĻŋāĻ˛āĨ¤ āĻāĻŋāĻ¨ā§āĻ¤ā§ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻāĻŋ āĻā§āĻŦ āĻ¸ā§āĻŦāĻŋāĻ§āĻžāĻāĻ¨āĻ āĻ¨āĻ¯āĻŧ, āĻ¤āĻžāĻ āĻāĻŽāĻ°āĻž .txt āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻžāĻ° āĻā§āĻˇāĻŽāĻ¤āĻž āĻ¯ā§āĻā§āĻ¤ āĻāĻ°ā§āĻāĻŋ, āĻ¯āĻž āĻā§āĻŦāĻ¨āĻā§ āĻā§āĻŦ āĻ¸āĻšāĻ āĻāĻ°ā§ āĻ¤ā§āĻ˛ā§āĨ¤
āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻĢāĻžāĻāĻ˛ āĻā§āĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻ āĻŦāĻļā§āĻ¯āĻ āĻĒāĻ¤āĻžāĻāĻž āĻ¨āĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ --āĻ¸ā§āĻ°ā§āĻ¸ āĻĢāĻžāĻāĻ˛ (-f) āĻāĻŦāĻ āĻĢāĻžāĻāĻ˛ā§āĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻ¸āĻš .txt āĻ¸ā§āĻĨāĻžāĻ¨āĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻŋ āĻāĻ āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ:
pvs-studio-dotnet -t path/to/solution.sln -f fileList.txt -o project.json
āĻāĻĒāĻ¨āĻŋ āĻāĻŽāĻŋāĻ āĻā§āĻāĻŋāĻ āĻŦāĻž āĻĒā§āĻ˛ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°āĻ¤ā§ āĻāĻā§āĻ°āĻšā§ āĻšāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻ āĻŽā§āĻĄ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°ā§ āĻāĻāĻŋ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯āĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĒāĻžāĻāĻ¯āĻŧāĻžāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻŋ āĻā§āĻ¨ āĻ¸āĻŋāĻ¸ā§āĻā§āĻŽāĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻā§āĻ¨ āĻ¤āĻžāĻ° āĻāĻĒāĻ° āĻ¨āĻŋāĻ°ā§āĻāĻ° āĻāĻ°āĻŦā§āĨ¤
āĻāĻāĻāĻŋ āĻŽāĻžāĻ°ā§āĻ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻā§āĻ āĻāĻ°āĻžāĻ° āĻ¨ā§āĻ¤āĻŋ
āĻā§āĻā§āĻ° āĻŽā§āĻ˛ āĻ¸āĻžāĻ°āĻŽāĻ°ā§āĻŽ āĻšāĻ˛ āĻ¨āĻŋāĻļā§āĻāĻŋāĻ¤ āĻāĻ°āĻž āĻ¯ā§ āĻāĻāĻ¤ā§āĻ°ā§āĻāĻ°āĻŖā§āĻ° āĻ¸āĻŽāĻ¯āĻŧ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻĻā§āĻŦāĻžāĻ°āĻž āĻ¸āĻ¨āĻžāĻā§āĻ¤ āĻāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¯āĻžāĻā§āĻ˛āĻŋ āĻŽāĻžāĻ˛āĻŋāĻ āĻļāĻžāĻāĻž āĻāĻŽāĻ°āĻž āĻĒā§āĻ°āĻ¤āĻŋāĻŦāĻžāĻ° āĻĒā§āĻ°ā§ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ āĻ¨āĻžāĨ¤ āĻ āĻ§āĻŋāĻāĻ¨ā§āĻ¤ā§, āĻļāĻžāĻāĻžāĻā§āĻ˛āĻŋāĻā§ āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻ¸āĻŽāĻ¯āĻŧ, āĻāĻŽāĻžāĻĻā§āĻ° āĻāĻžāĻā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻāĻāĻāĻŋ āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻĨāĻžāĻā§āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻāĻŽāĻŋ āĻāĻāĻāĻŋ āĻŽāĻžāĻ°ā§āĻ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻā§āĻ āĻ¯ā§āĻ āĻāĻ°āĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻā§āĻāĻŋāĨ¤
āĻ¸ā§āĻā§āĻ¯āĻžāĻāĻŋāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻĒā§āĻ°āĻ¯āĻŧā§āĻ āĻāĻ°āĻžāĻ° āĻāĻā§ āĻāĻāĻŋ āĻāĻāĻāĻŋ āĻŽāĻžāĻ°ā§āĻ āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻŽāĻ¤ āĻĻā§āĻāĻžāĻ¯āĻŧ:
āĻ
āĻ°ā§āĻĨāĻžā§ āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻ¯ā§ āĻ¸āĻŦ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻāĻŋāĻ˛ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨āĻā§āĻ˛āĻŋ, āĻŽāĻžāĻ¸ā§āĻāĻžāĻ° āĻļāĻžāĻāĻžāĻ¯āĻŧ āĻāĻ˛ā§ āĻ¯āĻžāĻŦā§āĨ¤ āĻ¯ā§āĻšā§āĻ¤ā§ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻāĻžāĻ āĻ¨āĻž, āĻāĻŽāĻ°āĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻ¯ā§āĻ āĻāĻ°āĻŋ, āĻāĻŦāĻ āĻāĻāĻ¨ āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋ āĻāĻāĻ°āĻāĻŽ āĻĻā§āĻāĻžāĻā§āĻā§:
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻā§ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨2 āĻāĻŦāĻ, āĻ¯āĻĻāĻŋ āĻā§āĻ¨ āĻ¤ā§āĻ°ā§āĻāĻŋ āĻ¨āĻž āĻĨāĻžāĻā§, āĻāĻŽāĻ°āĻž āĻāĻāĻ¤ā§āĻ°āĻŋāĻ¤ āĻāĻ°āĻžāĻ° āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻā§āĻ°āĻšāĻŖ āĻāĻ°āĻŋ, āĻ
āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻāĻŽāĻ°āĻž āĻāĻāĻŋ āĻĒā§āĻ°āĻ¤ā§āĻ¯āĻžāĻā§āĻ¯āĻžāĻ¨ āĻāĻ°āĻŋāĨ¤
āĻ¯āĻžāĻāĻšā§āĻ, āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ C/C++ āĻāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻŽāĻŋāĻ āĻāĻŦāĻ āĻāĻžāĻ¨ āĻ
āĻ¨ā§āĻ°ā§āĻ§āĻā§āĻ˛āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻāĻā§āĻ°āĻšā§ āĻšāĻ¨ āĻ¤āĻŦā§ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻ¸āĻŽā§āĻĒāĻ°ā§āĻā§ āĻĒāĻĄāĻŧāĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
GitLab
āĻāĻĒāĻ¨āĻŋ āĻŽāĻžāĻ°ā§āĻ āĻ
āĻ¨ā§āĻ°ā§āĻ§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻļā§āĻ°ā§ āĻāĻ°āĻžāĻ° āĻāĻā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻ¨āĻŋāĻŦāĻ¨ā§āĻ§āĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻāĻŦāĻ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻāĻĒāĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ā§ˇ āĻāĻĒāĻ¨āĻŋ āĻāĻāĻŋ āĻāĻŋāĻāĻžāĻŦā§ āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ā§āĻ¨ āĻ¨āĻž, āĻ¤āĻžāĻ°āĻĒāĻ° āĻāĻŽāĻŋ āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ
āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯. āĻ¨ā§āĻā§ āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ā§āĻ° āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĻāĻŋ āĻ¸āĻŽā§āĻāĻžāĻŦā§āĻ¯āĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻāĻāĻāĻŋāĨ¤ āĻ˛āĻā§āĻˇā§āĻ¯ āĻšāĻ˛ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻ¸ā§āĻĨāĻžāĻĒāĻ¨ āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻžāĻ˛ā§ āĻāĻ°āĻžāĻ° āĻĒāĻĻāĻā§āĻˇā§āĻĒāĻā§āĻ˛āĻŋ āĻĻā§āĻāĻžāĻ¨ā§āĨ¤ āĻ¸āĻŽā§āĻāĻŦāĻ¤ āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĻŋāĻ° āĻĒāĻ°ā§āĻ¯āĻžāĻ¯āĻŧāĻā§āĻ˛āĻŋāĻā§ āĻāĻ˛āĻžāĻĻāĻž āĻāĻ°āĻž (āĻāĻžāĻ¨ā§āĻĄāĻžāĻ° āĻ¯ā§āĻ āĻāĻ°āĻž, āĻāĻāĻāĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž) āĻāĻŦāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻž āĻāĻ°āĻ āĻ āĻ¨ā§āĻā§āĻ˛ āĻšāĻŦā§: āĻāĻĻāĻžāĻšāĻ°āĻŖāĻ¸ā§āĻŦāĻ°ā§āĻĒ, āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻĒāĻ°āĻŋāĻŦā§āĻļā§āĻ° āĻ¸āĻžāĻĨā§ āĻĄāĻāĻžāĻ° āĻāĻŋāĻ¤ā§āĻ°āĻā§āĻ˛āĻŋ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻāĻŦāĻ āĻ¸ā§āĻā§āĻ˛āĻŋ āĻŦā§āĻ¯āĻŦāĻšāĻžāĻ° āĻāĻ°āĻž āĻŦāĻž āĻ āĻ¨ā§āĻ¯ āĻā§āĻ¨āĻ āĻĒāĻĻā§āĻ§āĻ¤āĻŋāĨ¤
āĻāĻāĻ¨ āĻā§ āĻāĻāĻŦā§ āĻ¤āĻž āĻāĻ°āĻ āĻāĻžāĻ˛āĻāĻžāĻŦā§ āĻŦā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻŽāĻŋ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤ āĻāĻŋāĻ¤ā§āĻ°āĻāĻŋ āĻĻā§āĻāĻžāĻ° āĻĒāĻ°āĻžāĻŽāĻ°ā§āĻļ āĻĻāĻŋāĻā§āĻāĻŋ:
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻāĻāĻŋāĻ° āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ .NET āĻā§āĻ° SDK 3 āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨, āĻ¤āĻžāĻ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻžāĻ° āĻāĻā§ āĻāĻĒāĻ¨āĻžāĻā§ Microsoft āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛āĻā§āĻ˛āĻŋ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ āĻ¯ā§āĻāĻžāĻ¨ āĻĨā§āĻā§ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻā§āĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻ¨āĻŋāĻ°ā§āĻāĻ°āĻ¤āĻžāĻā§āĻ˛āĻŋ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻž āĻšāĻŦā§ā§ˇ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻ˛āĻŋāĻ¨āĻžāĻā§āĻ¸ āĻĄāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻŦāĻŋāĻāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻŽāĻžāĻāĻā§āĻ°ā§āĻ¸āĻĢāĻ āĻ°āĻŋāĻĒā§āĻāĻŋāĻāĻ°āĻŋ āĻ¯ā§āĻ āĻāĻ°āĻž
āĻĒā§āĻ¯āĻžāĻā§āĻ āĻŽā§āĻ¯āĻžāĻ¨ā§āĻāĻžāĻ°ā§āĻ° āĻŽāĻžāĻ§ā§āĻ¯āĻŽā§ PVS-Studio āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ PVS-Studio āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ¯ā§āĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤ āĻŦāĻŋāĻāĻŋāĻ¨ā§āĻ¨ āĻĄāĻŋāĻ¸ā§āĻā§āĻ°āĻŋāĻŦāĻŋāĻāĻļāĻ¨ā§āĻ° āĻāĻ¨ā§āĻ¯ āĻ¸āĻāĻā§āĻ°āĻšāĻ¸ā§āĻĨāĻ˛ āĻ¯ā§āĻ āĻāĻ°āĻž āĻāĻ°āĻ āĻŦāĻŋāĻ¸ā§āĻ¤āĻžāĻ°āĻŋāĻ¤āĻāĻžāĻŦā§ āĻŦāĻ°ā§āĻŖāĻ¨āĻž āĻāĻ°āĻž āĻšāĻ¯āĻŧā§āĻā§
āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻžāĻ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻā§ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨. āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻā§āĻ°āĻžāĻ¯āĻŧāĻžāĻ˛ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻĒā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨
āĻŽāĻ¨ā§āĻ¤āĻŦā§āĻ¯. āĻ āĻ¨ā§āĻā§āĻ°āĻš āĻāĻ°ā§ āĻŽāĻ¨ā§ āĻ°āĻžāĻāĻŦā§āĻ¨ āĻ¯ā§ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻŦāĻ°ā§āĻŖāĻŋāĻ¤ āĻŽā§āĻĄā§āĻ° (āĻāĻāĻ¤ā§āĻ°ā§āĻāĻ°āĻŖā§āĻ° āĻ āĻ¨ā§āĻ°ā§āĻ§ā§āĻ° āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ) āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻāĻžāĻ°āĻĒā§āĻ°āĻžāĻāĻ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨āĨ¤ āĻ āĻ¤āĻāĻŦ, āĻāĻĒāĻ¨āĻŋ āĻ¯āĻĻāĻŋ āĻ āĻĒāĻžāĻ°ā§āĻļāĻ¨ā§āĻ° āĻāĻ āĻŽā§āĻĄāĻāĻŋ āĻā§āĻˇā§āĻāĻž āĻāĻ°āĻ¤ā§ āĻāĻžāĻ¨ āĻ¤āĻŦā§ "āĻŦāĻžāĻ°ā§āĻ¤āĻž" āĻā§āĻˇā§āĻ¤ā§āĻ°ā§ āĻ¨āĻŋāĻ°ā§āĻĻā§āĻļ āĻāĻ°āĻ¤ā§ āĻā§āĻ˛āĻŦā§āĻ¨ āĻ¨āĻž āĻ¯ā§ āĻāĻĒāĻ¨āĻžāĻ° āĻāĻāĻāĻŋ āĻāĻ¨ā§āĻāĻžāĻ°āĻĒā§āĻ°āĻžāĻāĻ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§ˇ
āĻ¯āĻĻāĻŋ āĻāĻāĻāĻŋ āĻŽāĻžāĻ°ā§āĻ āĻ āĻ¨ā§āĻ°ā§āĻ§ āĻāĻā§, āĻ¤āĻžāĻšāĻ˛ā§ āĻāĻŽāĻžāĻĻā§āĻ° āĻļā§āĻ§ā§āĻŽāĻžāĻ¤ā§āĻ° āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻŋāĻ¤ āĻĢāĻžāĻāĻ˛āĻā§āĻ˛āĻŋāĻ° āĻ¤āĻžāĻ˛āĻŋāĻāĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§, āĻ āĻ¨ā§āĻ¯āĻĨāĻžāĻ¯āĻŧ āĻāĻŽāĻ°āĻž āĻ¸āĻŽāĻ¸ā§āĻ¤ āĻĢāĻžāĻāĻ˛ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖ āĻāĻ°āĻŦā§ˇ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻĒāĻ°, āĻāĻŽāĻžāĻĻā§āĻ° āĻĒā§āĻ°āĻ¯āĻŧā§āĻāĻ¨ā§āĻ¯āĻŧ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸ā§ āĻ˛āĻāĻā§āĻ˛āĻŋāĻā§ āĻ°ā§āĻĒāĻžāĻ¨ā§āĻ¤āĻ° āĻāĻ°āĻ¤ā§ āĻšāĻŦā§āĨ¤
āĻāĻāĻ¨, āĻāĻĒāĻ¨āĻžāĻ° āĻā§āĻā§āĻ° āĻ¸āĻžāĻŽāĻ¨ā§ āĻāĻžāĻā§āĻ° āĻ ā§āĻ¯āĻžāĻ˛āĻāĻ°āĻŋāĻĻāĻŽ āĻĨāĻžāĻāĻ˛ā§, āĻāĻĒāĻ¨āĻŋ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛ā§āĻāĻžāĻ° āĻĻāĻŋāĻā§ āĻāĻāĻŋāĻ¯āĻŧā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻŋ āĻāĻ°āĻžāĻ° āĻāĻ¨ā§āĻ¯, āĻāĻĒāĻ¨āĻžāĻā§ āĻĢāĻžāĻāĻ˛āĻāĻŋ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ gitlab-ci.yml āĻ āĻĨāĻŦāĻž, āĻ¯āĻĻāĻŋ āĻāĻāĻŋ āĻŦāĻŋāĻĻā§āĻ¯āĻŽāĻžāĻ¨ āĻ¨āĻž āĻĨāĻžāĻā§ āĻ¤āĻŦā§ āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°ā§āĻ¨āĨ¤ āĻāĻāĻŋ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻ¤ā§, āĻāĻĒāĻ¨āĻžāĻā§ āĻāĻĒāĻ¨āĻžāĻ° āĻĒā§āĻ°āĻāĻ˛ā§āĻĒā§āĻ° āĻ¨āĻžāĻŽā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§ -> āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋ āĻ¸ā§āĻ āĻāĻĒ āĻāĻ°ā§āĻ¨.
āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ˛ā§āĻāĻžāĻ° āĻāĻ¨ā§āĻ¯ āĻĒā§āĻ°āĻ¸ā§āĻ¤ā§āĻ¤āĨ¤ āĻāĻ¸ā§āĻ¨ āĻĒā§āĻ°āĻĨāĻŽā§ āĻā§āĻĄāĻāĻŋ āĻ˛āĻŋāĻāĻŋ āĻ¯āĻž āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻ āĻāĻ¨āĻ¸ā§āĻāĻ˛ āĻāĻ°āĻŦā§ āĻāĻŦāĻ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ā§ āĻĒā§āĻ°āĻŦā§āĻļ āĻāĻ°āĻŦā§:
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 āĻĒā§āĻ¯āĻžāĻā§āĻāĻā§āĻ˛āĻŋ āĻĄāĻžāĻāĻ¨āĻ˛ā§āĻĄ āĻāĻ°āĻ¤ā§ āĻšāĻŦā§)āĨ¤
āĻāĻĒāĻ¨āĻŋ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§ āĻ˛āĻžāĻāĻ¸ā§āĻ¨ā§āĻ¸ āĻ¤āĻĨā§āĻ¯ āĻ§āĻžāĻ°āĻŖāĻāĻžāĻ°ā§ āĻĒāĻ°āĻŋāĻŦā§āĻļ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¸ā§āĻ āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨ āĻŦāĻŋāĻ¨ā§āĻ¯āĻžāĻ¸, āĻāĻŦāĻ āĻĒāĻ°ā§ - āĻ āĻ¨ āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋ.
āĻ¯ā§ āĻāĻāĻ¨ā§āĻĄā§āĻāĻŋ āĻā§āĻ˛ā§, āĻ¸ā§āĻāĻžāĻ¨ā§ āĻāĻāĻā§āĻŽāĻāĻŋ āĻā§āĻāĻā§āĻ¨ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛, āĻĄāĻžāĻ¨āĻĻāĻŋāĻā§āĻ° āĻŦā§āĻ¤āĻžāĻŽā§ āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨ āĻŦāĻŋāĻ¸ā§āĻ¤ā§āĻ¤ āĻāĻ°āĻž āĻāĻŦāĻ āĻā§āĻ°āĻŋāĻ¯āĻŧā§āĻŦāĻ˛ āĻ¯ā§āĻ āĻāĻ°ā§āĻ¨āĨ¤ āĻĢāĻ˛āĻžāĻĢāĻ˛ āĻāĻ āĻŽāĻ¤ āĻšāĻāĻ¯āĻŧāĻž āĻāĻāĻŋāĻ¤:
āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§ āĻ¯ā§āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤ āĻĒā§āĻ°āĻĨāĻŽā§, āĻāĻāĻāĻŋ āĻ¸āĻŽā§āĻĒā§āĻ°ā§āĻŖ āĻŦāĻŋāĻļā§āĻ˛ā§āĻˇāĻŖā§āĻ° āĻāĻ¨ā§āĻ¯ āĻāĻāĻāĻŋ āĻ¸ā§āĻā§āĻ°āĻŋāĻĒā§āĻ āĻ¯ā§āĻ āĻāĻ°āĻž āĻ¯āĻžāĻāĨ¤ āĻĒāĻ¤āĻžāĻāĻžāĻ° āĻāĻžāĻā§ -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
āĻāĻāĻ¨ āĻāĻŽāĻ°āĻž āĻļāĻžāĻāĻžāĻā§āĻ˛āĻŋāĻ° āĻŽāĻ§ā§āĻ¯ā§ āĻĒāĻžāĻ°ā§āĻĨāĻā§āĻ¯ āĻĒāĻžāĻ āĻāĻŦāĻ āĻĢāĻ˛āĻžāĻĢāĻ˛āĻāĻŋ āĻ¸āĻāĻ°āĻā§āĻˇāĻŖ āĻāĻ°āĻŋ āĻĒāĻžāĻ ā§āĻ¯ āĻĢāĻžāĻāĻ˛:
- 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
āĻāĻāĻŦāĻžāĻ° āĻāĻĒāĻ¨āĻŋ āĻĢāĻžāĻāĻ˛āĻāĻŋāĻ¤ā§ āĻ¸āĻŦāĻāĻŋāĻā§ āĻ¯ā§āĻ āĻāĻ°āĻ˛ā§, āĻā§āĻ˛āĻŋāĻ āĻāĻ°ā§āĻ¨ āĻĒāĻ°āĻŋāĻŦāĻ°ā§āĻ¤āĻ¨ā§āĻ° āĻĒā§āĻ°āĻ¤āĻŋāĻļā§āĻ°ā§āĻ¤āĻŋ āĻĻāĻŋāĻ¨. āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻ āĻāĻā§ āĻ¤āĻž āĻĻā§āĻāĻ¤ā§, āĻ¯āĻžāĻ¨ āĻ¸āĻŋāĻāĻ/āĻ¸āĻŋāĻĄāĻŋ -> āĻĒāĻžāĻāĻĒāĻ˛āĻžāĻāĻ¨ -> āĻāĻ˛āĻŽāĻžāĻ¨. āĻāĻāĻāĻŋ āĻāĻžāĻ°ā§āĻā§āĻ¯āĻŧāĻžāĻ˛ āĻŽā§āĻļāĻŋāĻ¨ āĻāĻāĻ¨ā§āĻĄā§ āĻā§āĻ˛āĻŦā§, āĻ¯āĻžāĻ° āĻļā§āĻˇā§ āĻ¨āĻŋāĻŽā§āĻ¨āĻ˛āĻŋāĻāĻŋāĻ¤āĻā§āĻ˛āĻŋ āĻĨāĻžāĻāĻž āĻāĻāĻŋāĻ¤:
āĻĻā§āĻā§āĻāĻŋ āĻāĻžāĻāĻ°āĻŋ āĻ¸āĻĢāĻ˛ āĻšāĻ¯āĻŧā§āĻā§ - āĻ¸āĻžāĻĢāĻ˛ā§āĻ¯, āĻ¸āĻŦāĻāĻŋāĻā§ āĻ āĻŋāĻ āĻāĻā§āĨ¤ āĻāĻāĻ¨ āĻāĻĒāĻ¨āĻŋ āĻ¯āĻž āĻāĻ°ā§āĻā§āĻ¨ āĻ¤āĻž āĻĒāĻ°ā§āĻā§āĻˇāĻž āĻāĻ°āĻ¤ā§ āĻĒāĻžāĻ°ā§āĻ¨āĨ¤
āĻāĻžāĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖ
āĻāĻžāĻā§āĻ° āĻāĻĻāĻžāĻšāĻ°āĻŖā§āĻ° āĻāĻ¨ā§āĻ¯, āĻāĻ¸ā§āĻ¨ āĻāĻāĻāĻŋ āĻ¸āĻžāĻ§āĻžāĻ°āĻŖ āĻĒā§āĻ°āĻāĻ˛ā§āĻĒ āĻ¤ā§āĻ°āĻŋ āĻāĻ°āĻŋ (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