{"id":286775,"date":"2017-05-24T11:45:03","date_gmt":"2017-05-24T07:45:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=286775"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2017-05-24T07:45:03","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=286775","title":{"rendered":"\u041d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f (CI) \u0434\u043b\u044f GitHub \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 \u0421\/C++ \u0441 CMake-\u0441\u0431\u043e\u0440\u043a\u043e\u0439"},"content":{"rendered":"<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ad2\/54e\/b5b\/ad254eb5bc55b5223ee494ea845cbdb5.png\" alt=\"Continuous Integration\" \/><\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u043e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0438 \u0435\u0451 \u0446\u0435\u043b\u0435\u0431\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043b\u044b\u0448\u0430\u043b\u0438, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0432\u0441\u0435 \u2014 \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u0432\u043e\u0434\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0438 \u043e\u0431\u0437\u043e\u0440\u0430\u0445 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f, \u0438 \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0440\u0435\u043b\u0438\u0437-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0438 \u0441\u0430\u043c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e CI \u2014 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e <em>\u0441\u0442\u043e\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/em>, \u043d\u043e\u2026 \u041d\u043e \u0432\u043e\u0442 \u0434\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0435\u0433\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0440\u0443\u043a\u0438 \u0432 \u0441\u0438\u043b\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0448\u043b\u0438.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043d\u0438\u044e <em>\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<\/em> (build-test-deploy) \u043a \u0433\u0438\u0442\u0445\u0430\u0431\u043e\u0432\u0441\u043a\u0438\u043c C\/C++ \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c \u0441 CMake \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u2014 \u043f\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u043b\u043e. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u043c\u043e\u0451 \u0433\u0443\u0433\u043b-\u0444\u0443 \u043f\u043e\u0434\u0432\u0435\u043b\u043e \u043c\u0435\u043d\u044f, \u0438 \u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u043b\u043e \u2014 \u043d\u0435 \u0431\u0435\u0434\u0430. \u041b\u0438\u0448\u043d\u0438\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u0441\u0451 \u043f\u043e\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0433\u043b\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0433\u0430\u044e\u0449\u0438\u0439 \u043e\u0442 \u043d\u0435\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430\u0431\u0438\u0442\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0448\u0438\u0448\u0435\u043a, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442.<\/p>\n<p>  <a name=\"habracut\"><\/a>  <\/p>\n<h2>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0441\u0435\u0440\u0432\u0438\u0441\u044b<\/h2>\n<p>  <\/p>\n<p>\u041a\u0440\u0438\u0442\u0435\u0440\u0438\u0435\u0432 \u0432\u044b\u0431\u043e\u0440\u0430 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e (\u043a\u0430\u043a \u044f \u043d\u0430\u0438\u0432\u043d\u043e \u043f\u043e\u043b\u0430\u0433\u0430\u043b).<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c:<br \/> \n<ul>\n<li>Windows<\/li>\n<li>Linux<\/li>\n<li>Mac OS X<\/li>\n<\/ul>\n<\/li>\n<li>\u041e\u0431\u043b\u0430\u0447\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u2014 \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0442\u044c \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u0435\u0440\u0432\u0435\u0440<\/li>\n<li>\u0418\u0437-\u043a\u043e\u0440\u043e\u0431\u043e\u0447\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0441 GitHub<\/li>\n<li>\u0411\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e\u0441\u0442\u044c<\/li>\n<li>\u0420\u0430\u0437\u043c\u0435\u0440 \u0438 \u0430\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0431\u0430\u0437\u044b<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412\u043e\u043f\u0440\u0435\u043a\u0438 \u043c\u043e\u0438\u043c \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f\u043c, \u0441\u0435\u0440\u0432\u0438\u0441\u0430, \u0432 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0443 \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e \u0432\u0441\u0435 \u044d\u0442\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u0435 \u043d\u0430\u0448\u043b\u043e\u0441\u044c. \u0421\u0442\u0440\u0430\u043d\u043d\u043e. \u041d\u0443 \u0434\u0430 \u043d\u0438\u0447\u0435\u0433\u043e \u0441\u0442\u0440\u0430\u0448\u043d\u043e\u0433\u043e \u2014 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0430\u0440\u044b \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e:<\/p>\n<p>  <\/p>\n<p>1) <a href=\"http:\/\/travis-ci.org\">Travis CI<\/a> \u2014 \u0434\u043b\u044f Linux \u0438 Mac OS X<br \/>  2) <a href=\"http:\/\/appveyor.com\">AppVeyor<\/a> \u2014 \u0434\u043b\u044f Windows<\/p>\n<p>  <\/p>\n<h2>\u041e\u0431\u0449\u0438\u043c \u043f\u043b\u0430\u043d\u043e\u043c<\/h2>\n<p>  <\/p>\n<p>\u0418 Travis CI, \u0438 AppVeyor \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u0448\u0438\u043d\u044b \u0441 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u043c, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 Travis<\/b><\/p>\n<div class=\"spoiler_text\">\n<p>\u0421\u0442\u0440\u043e\u0433\u043e \u0433\u043e\u0432\u043e\u0440\u044f, Travis \u0443\u043c\u0435\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u0438\u0437 \u043f\u043e\u043b\u043d\u043e\u0432\u0435\u0441\u043d\u043e\u0439 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0442\u0430\u043a \u0438 \u0438\u0437 Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0412 \u0442\u0435\u043e\u0440\u0438\u0438, \u044d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u044f \u043c\u0435\u0436\u0434\u0443 <code>git push<\/code> \u0438 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0441\u0431\u043e\u0440\u043a\u0438 \u2014 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430 \u043e\u0434\u043d\u0443 \u043c\u0438\u043d\u0443\u0442\u0443. \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0437\u0430 \u044d\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0437\u0430\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u043f\u043e\u0442\u0435\u0440\u0435\u0439 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u043b\u0430\u0442\u044c <code>sudo<\/code>, \u0430 \u044d\u0442\u043e, \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u0432\u0435\u0434\u0451\u0442 \u043a \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f\u043c \u043f\u0440\u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043d\u0443\u0436\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041f\u043e\u0441\u043b\u0435 \u043d\u0435\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043b\u044f\u0441\u043e\u043a \u0441 \u0431\u0443\u0431\u043d\u043e\u043c \u0432 \u043f\u043e\u043f\u044b\u0442\u043a\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u043d\u044b\u0439 \u0422\u0440\u0435\u0432\u0438\u0441 32-\u0431\u0438\u0442\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0434\u043b\u044f \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438, \u044f \u0441\u043a\u0430\u0437\u0430\u043b \u0441\u0435\u0431\u0435: \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0431\u0438\u043b\u0434\u0430 \u0432\u0441\u0435\u0433\u043e <strong>\u043d\u0430 \u043e\u0434\u043d\u0443 \u043c\u0438\u043d\u0443\u0442\u0443<\/strong> \u2014 \u0438 \u0432\u0441\u0435\u0433\u043e <strong>\u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u0442\u0440\u0451\u0445<\/strong> \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u0442.\u043a. Docker-\u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u044b \u0432 Travis \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f Linux! \u2014 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u044d\u0442\u0438\u043c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0435\u0439.<\/p>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u043c\u0438 \u0432 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 <strong>YAML<\/strong>. \u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u043b\u0435\u0436\u0430\u0442\u044c \u0432 \u043a\u043e\u0440\u043d\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f \u0438 \u0438\u043c\u0435\u0442\u044c \u0438\u043c\u044f <code>.travis.yml<\/code> \u0438\u043b\u0438 <code>appveyor.yml<\/code> (\u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f <code>.appveyor.yml<\/code>) \u2014 \u0434\u043b\u044f Travis CI \u0438 AppVeyor \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u041c\u044b \u0445\u043e\u0442\u0438\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0444\u0430\u0439\u043b\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0434\u0432\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e, \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b YAML \u0440\u0430\u043d\u0435\u0435. YAML \u044d\u0442\u043e \u044f\u0437\u044b\u043a \u0441 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <em>\u043e\u0442\u0441\u0442\u0443\u043f\u043e\u0432<\/em> (\u043a\u0430\u043a \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u041f\u0438\u0442\u043e\u043d), \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c <em>\u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u0438<\/em>. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043b\u0438\u0431\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0430\u0448 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043d\u0430 <code>expand-tabs-to-spaces<\/code> \u0434\u043b\u044f <code>.yml<\/code> \u0444\u0430\u0439\u043b\u043e\u0432, \u043b\u0438\u0431\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u044b \u0432\u043e\u043e\u0431\u0449\u0435 \u0438 \u0432\u0431\u0438\u0432\u0430\u0442\u044c \u043e\u0442\u0441\u0442\u0443\u043f\u044b \u043f\u0440\u043e\u0431\u0435\u043b\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a YAML \u0444\u0430\u0439\u043b\u044b \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u044b \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439, \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 Travis \u0438 AppVeyor. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e. \u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 <a href=\"http:\/\/travis.org\">http:\/\/travis.org<\/a> \u043f\u043e\u0434 \u0441\u0432\u043e\u0438\u043c GitHub \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u043e\u043c, \u0441\u043e\u0433\u043b\u0430\u0448\u0430\u0435\u043c\u0441\u044f \u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 Travis CI (\u0435\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u043d\u043e\u0432\u044b\u0445 \u043a\u043e\u043c\u043c\u0438\u0442\u0430\u0445), \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0438 \u0449\u0451\u043b\u043a\u0430\u0435\u043c \u043d\u0430 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u044c. \u0413\u043e\u0442\u043e\u0432\u043e. \u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0435\u043c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"http:\/\/ci.appveyor.com\">http:\/\/ci.appveyor.com<\/a><\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <code>git push<\/code> \u0432 \u0432\u0430\u0448 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438: \u0441\u0435\u0440\u0432\u0438\u0441\u044b Travis \u0438 AppVeyor \u043f\u043e\u0434\u043d\u0438\u043c\u0443\u0442 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u0430\u0448\u0438\u043d\u0443, \u043d\u0430\u0441\u0442\u0440\u043e\u044f\u0442 \u0441\u0440\u0435\u0434\u0443, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u0441\u043a\u0430\u0447\u0430\u044e\u0442 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u043e\u0431\u0435\u0440\u0443\u0442 \u0438 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u044e\u0442 \u0435\u0433\u043e, \u0430 \u0442\u0430\u043a\u0436\u0435, \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438, \u0432\u044b\u043b\u043e\u0436\u0430\u0442 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440\u044b, \u0430\u0440\u0445\u0438\u0432\u044b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u043c\u0438 \u0438 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u2014 \u0432\u0441\u0451 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0432 YAML-\u0444\u0430\u0439\u043b\u0430\u0445.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 YAML-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u0448\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430.<\/p>\n<p>  <\/p>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 .travis.yml<\/h2>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0444\u0430\u0439\u043b\u0430 <code>.travis.yml<\/code> \u0441 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438:<\/p>\n<p>  <\/p>\n<pre><code>dist:     trusty    # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Ubuntu 14.04 Trusty Tahr (\u0430 \u043d\u0435 12.02 Precise Pangolin) sudo:     required  # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c Virtual Machine (\u0430 \u043d\u0435 Docker container)  language: cpp       # \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u043c \u0434\u043b\u044f C++ \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435\u043c                     # \u0438, \u0441\u043a\u0430\u0436\u0435\u043c, python -- \u043d\u0438\u043a\u0430\u043a\u043e\u0439. \u041d\u043e \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442 cpp.  os:     # \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c CI \u0438 \u043d\u0430 Linux, \u0438 \u043d\u0430 Mac OS X...     - linux     - osx  compiler:     # ... \u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e GCC, \u0438 Clang     - gcc     - clang  env:     # \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0445 \u043d\u0430 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0441\u0431\u043e\u0440\u043a\u0438:     - TARGET_CPU=amd64 BUILD_CONFIGURATION=Debug     - TARGET_CPU=amd64 BUILD_CONFIGURATION=Release     - TARGET_CPU=x86 BUILD_CONFIGURATION=Debug     - TARGET_CPU=x86 BUILD_CONFIGURATION=Release  matrix:     exclude:         # \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0438\u0441\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0438\u0437 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0431\u043e\u0440\u043a\u0438:         - os:       osx           compiler: gcc          - os:  osx           env: TARGET_CPU=x86 BUILD_CONFIGURATION=Debug          - os:  osx           env: TARGET_CPU=x86 BUILD_CONFIGURATION=Release  install:     # \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0440\u0435\u0434\u044b \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439:     - source ci\/travis\/install-$TRAVIS_OS_NAME.sh  script:     # \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430:     - mkdir build     - cd build     - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_CONFIGURATION -DTARGET_CPU=$TARGET_CPU     - cmake --build .     - ctest --output-on-failure  deploy:     # \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c tagged-\u043a\u043e\u043c\u043c\u0438\u0442\u044b \u043d\u0430 GitHub Releases:     provider:     releases     file:         &lt;package-file&gt;     skip_cleanup: true     overwrite:    true      api_key:         secure:   &lt;encrypted-github-token&gt;      on:         tags:     true<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442\u044b \u044d\u0442\u0430\u043f\u043e\u0432 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043f\u043e\u044f\u0441\u043d\u0435\u043d\u0438\u0439 \u2014 \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u0434\u0430\u043d\u044b \u0434\u0430\u043b\u0435\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0436\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043f\u043e\u043d\u044f\u0442\u0438\u0439 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u2014 <strong>\u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0441\u0431\u043e\u0440\u043a\u0438<\/strong> (build matrix).<\/p>\n<p>  <\/p>\n<p>\u0412\u0441\u0435 \u043c\u044b \u0437\u043d\u0430\u043a\u043e\u043c\u044b \u0441 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0435\u0439, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432\u043d\u0435\u0441\u043b\u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043f\u0440\u043e\u0435\u043a\u0442, \u0441\u043e\u0431\u0440\u0430\u043b\u0438, \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043b\u0438, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u043b\u0438 \u2014 \u0432\u0441\u0451 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u0421\u0434\u0435\u043b\u0430\u043b\u0438 \u0440\u0435\u043b\u0438\u0437, \u0438 \u2014 \u0411\u0410\u041c! \u041e\u043d \u0442\u0443\u0442 \u0436\u0435 \u0443\u043f\u0430\u043b \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0443 \u0441\u0435\u0431\u044f \u0435\u0449\u0451 \u0440\u0430\u0437 \u2014 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0441\u043e\u0431\u0430\u043a\u0430! \u0412 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435 \u0435\u0441\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043a\u0440\u043e\u043d\u0438\u043c \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0451\u0442:<\/p>\n<p>  <\/p>\n<p><strong>IWOMM \u2014 It works on my machine!<\/strong><\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430, \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0449\u0430\u044f \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435, \u043c\u043e\u0436\u0435\u0442 \u0442\u0430\u0438\u0442\u044c\u0441\u044f \u0433\u0434\u0435 \u0443\u0433\u043e\u0434\u043d\u043e \u2014 \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u0443 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 \u043d\u0430 \u0441\u0431\u043e\u0440\u043e\u0447\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u0435, \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0430\u044f\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u0439, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043a\u0435, \u0430 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b\u0438 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u0434\u0430 \u043c\u0430\u043b\u043e \u043b\u0438 \u0447\u0442\u043e \u0435\u0449\u0451!<\/p>\n<p>  <\/p>\n<p>\u0421\u043f\u043e\u0441\u043e\u0431 \u0431\u043e\u0440\u044c\u0431\u044b \u0441 \u044d\u0442\u0438\u043c \u043f\u0430\u043a\u043e\u0441\u0442\u043d\u044b\u043c \u0444\u0435\u043d\u043e\u043c\u0435\u043d\u043e\u043c \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u2014 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <em>\u043e\u0431\u0448\u0438\u0440\u043d\u043e\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0431\u043e\u0440\u043a\u0438<\/em>, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0430 <em>\u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439<\/em>. \u042d\u0442\u043e, \u0432\u043a\u0443\u043f\u0435 \u0441 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u044b\u043c \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 <em>\u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/em>, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0437\u0438\u0442\u044c \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c IWOMM.<\/p>\n<p>  <\/p>\n<p>C\/C++ \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 Travis CI \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0433\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043f\u043e\u0434 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043c\u0430\u0442\u0440\u0438\u0446\u0435\u0439:<\/p>\n<p>  <\/p>\n<ul>\n<li>OS<br \/> \n<ul>\n<li>Linux<\/li>\n<li>Mac OS X<\/li>\n<\/ul>\n<\/li>\n<li>Compiler<br \/> \n<ul>\n<li>GCC<\/li>\n<li>Clang<\/li>\n<\/ul>\n<\/li>\n<li>Target CPU<br \/> \n<ul>\n<li>amd64<\/li>\n<li>x86<\/li>\n<\/ul>\n<\/li>\n<li>Configuration<br \/> \n<ul>\n<li>Debug<\/li>\n<li>Release<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0422\u0440\u0435\u0432\u0438\u0441 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043d\u0430 \u0432\u044b\u0431\u043e\u0440 \u0432\u0441\u0435\u0433\u043e \u0434\u0432\u0430 \u0434\u0438\u0441\u0442\u0440\u0438\u0431\u0443\u0442\u0438\u0432\u0430 Linux \u2014 <strong>Ubuntu 12.04 Precise Pangolin<\/strong> (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e) \u0438 <strong>Ubuntu 14.04 Trusty Tahr<\/strong>. \u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043e\u0442\u0432\u043b\u0435\u0447\u044c\u0441\u044f \u043e\u0442 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043a\u0430\u043a\u0438\u0445-\u043b\u0438\u0431\u043e \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432 Ubuntu, \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0430\u044f LTS (long-term-support) \u0432\u0435\u0440\u0441\u0438\u044f Ubuntu \u2014 \u044d\u0442\u043e <strong>Ubuntu 16.04 Yakkety Yak<\/strong>, \u0430 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043d\u0435-LTS \u0432\u0435\u0440\u0441\u0438\u044f \u2014 <strong>Ubuntu 17.04 Zesty Zapus<\/strong>. \u0418\u043d\u044b\u043c\u0438 \u0441\u043b\u043e\u0432\u0430\u043c\u0438, \u0432 \u043c\u0430\u0435 2017 \u0433\u043e\u0434\u0430 \u043d\u0430\u043c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u0441\u0438\u044f Ubuntu, \u0432\u044b\u043f\u0443\u0449\u0435\u043d\u043d\u0430\u044f \u0432 2012 \u0433\u043e\u0434\u0443 \u0438 \u043e\u0442\u0441\u0442\u0430\u044e\u0449\u0430\u044f \u043d\u0430 5 \u043c\u0430\u0436\u043e\u0440\u043d\u044b\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432. \u041c\u0434\u0430. \u041d\u0443 \u0447\u0442\u043e \u0436, \u0431\u0443\u0434\u0435\u043c \u0438\u0433\u0440\u0430\u0442\u044c \u043a\u0430\u0440\u0442\u0430\u043c\u0438, \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u043d\u0430 \u0440\u0443\u043a\u0430\u0445.<\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0431\u044b \u0442\u043e \u043d\u0438 \u0431\u044b\u043b\u043e, \u0434\u0430\u043d\u043d\u0430\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 16 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439. \u0412\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c \u043e\u0442\u0441\u044e\u0434\u0430 x86 \u043f\u043e\u0434 Mac OS X \u2014 \u0446\u0435\u043b\u0435\u0432\u0430\u044f \u043c\u0430\u0448\u0438\u043d\u0430 \u0442\u0430\u043c \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u0431\u0443\u0434\u0435\u0442 64-\u0431\u0438\u0442\u043d\u0430\u044f. \u0422\u0430\u043a\u0436\u0435 \u0432\u044b\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u043c GCC \u043f\u043e\u0434 Mac OS X \u2014 GCC \u043f\u043e\u0434 \u041c\u0430\u043a\u043e\u043c \u044d\u0442\u043e \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u043c \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u0434\u043b\u044f GCC-\u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u043e\u043f\u0446\u0438\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438, \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u0436\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 Clang. \u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437 \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0441\u0435\u043a\u0446\u0438\u0438<\/p>\n<p>  <\/p>\n<pre><code>matrix:     exclude:<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0436\u0435\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0438\u0441\u043a\u043b\u044e\u0447\u0430\u0435\u043c\u044b\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f (\u043a\u0430\u043a \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <code>TARGET_CPU<\/code>), \u0442\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u0441\u0442\u0440\u043e\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code>env: TARGET_CPU=x86 BUILD_CONFIGURATION=Debug<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u0436\u0443\u0449\u0435\u0433\u043e\u0441\u044f \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c <code>env: TARGET_CPU=x86<\/code> \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e.<\/p>\n<p>  <\/p>\n<p>\u0418\u0442\u043e\u0433\u043e, \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f <strong>12 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439<\/strong> \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <code>git push<\/code>. \u0421\u043e\u0433\u043b\u0430\u0441\u0438\u0442\u0435\u0441\u044c, \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c \u043e\u0434\u043d\u0430-\u0434\u0432\u0435, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e, \u0431\u0435\u0437 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438?<\/p>\n<p>  <\/p>\n<p>\u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 Travis CI \u0432\u0441\u0451 \u044d\u0442\u043e \u0437\u0432\u0443\u0447\u0438\u0442 \u0442\u0430\u043a. \u041a\u0430\u0436\u0434\u044b\u0439 <em>\u043a\u043e\u043c\u043c\u0438\u0442<\/em> (commit) \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443 <em>\u0441\u0431\u043e\u0440\u043a\u0438<\/em> (build), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 <em>\u0437\u0430\u0434\u0430\u043d\u0438\u0439<\/em> (jobs) \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443 \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u0432 <em>\u043c\u0430\u0442\u0440\u0438\u0446\u0435 \u0441\u0431\u043e\u0440\u043a\u0438<\/em> (build matrix).<\/p>\n<p>  <\/p>\n<h2>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 .appveyor.yml<\/h2>\n<p>  <\/p>\n<p>YAML-\u0444\u0430\u0439\u043b \u0432 AppVeyor \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435 \u0441 \u043f\u043e\u043f\u0440\u0430\u0432\u043a\u043e\u0439 \u043d\u0430 \u0438\u043c\u0435\u043d\u0430 \u0441\u0435\u043a\u0446\u0438\u0439 \u2014 \u0432\u0441\u0451 \u0442\u0443\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443:<\/p>\n<p>  <\/p>\n<pre><code>image: Visual Studio 2015   # \u043d\u0430 \u044d\u0442\u043e\u043c VM-\u043e\u0431\u0440\u0430\u0437\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0432\u0441\u0435 Visual Studio \u0441 2008 \u043f\u043e 2015  init:     # \u0441\u0435\u043a\u0446\u0438\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430     # \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0441\u0442\u0440\u043e\u0447\u043a\u0430 \u043d\u0438\u0436\u0435 \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430 (\u0442\u0430\u043a \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e),     # \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0442\u0435\u043c, \u043e\u043d\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0443\u0441\u0442\u044c \u0431\u0443\u0434\u0435\u0442:     - git config --global core.autocrlf input  clone_folder: c:\\projects\\my-prj # \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e \u0434\u043b\u044f \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f shallow_clone: true              # \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u043c\u043c\u0438\u0442, \u0431\u0435\u0437 \u0438\u0441\u0442\u043e\u0440\u0438\u0438 (git clone --depth 1)  matrix:     fast_finish: false           # \u043d\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u0438\u0437 \u0437\u0430\u0434\u0430\u043d\u0438\u0439  platform:     # \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u043d\u044f\u0442\u044c CI \u043d\u0430 amd64 \u0438 x86...     - x64     - x86  configuration:     # ... \u0438 \u0432 \u0434\u0435\u0431\u0430\u0436\u043d\u043e\u0439, \u0438 \u0432 \u0440\u0435\u043b\u0438\u0437\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u0445 ...     - Debug     - Release  environment:     matrix:         # ... \u043d\u0430 \u0442\u0440\u0451\u0445 \u0441\u0442\u0443\u0434\u0438\u044f\u0445 (2010, 2012, 2015)         - TOOLCHAIN: msvc10         - TOOLCHAIN: msvc12         - TOOLCHAIN: msvc14  install:     # \u0441\u043a\u0440\u0438\u043f\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0440\u0435\u0434\u044b \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439:     - call ci\\appveyor\\set-env.bat %TOOLCHAIN% %PLATFORM%      - appveyor DownloadFile &lt;url&gt; -FileName &lt;local-file&gt;     - 7z e -y &lt;local-file&gt; -o&lt;local-dir&gt;     - ...  build_script:     # \u0441\u043a\u0440\u0438\u043f\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:     - mkdir build     - cd build     - cmake .. %CMAKE_CONFIGURE_FLAGS%     - cmake --build . %CMAKE_BUILD_FLAGS%  test_script:     # \u0441\u043a\u0440\u0438\u043f\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430:     - ctest -C %CONFIGURATION% --output-on-failure  artifacts:     - path: &lt;local-package-path&gt;       name: package_name  deploy:     # \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c tagged-\u043a\u043e\u043c\u043c\u0438\u0442\u044b \u043d\u0430 GitHub Releases:     description: '$(APPVEYOR_REPO_TAG_NAME)'     provider: GitHub      auth_token:         secure: &lt;encrypted-github-token&gt;      artifact: package_name     force_update: true      on:         appveyor_repo_tag: true<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u043d\u0446\u0435\u043f\u0446\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0432 \u043f\u043e\u043b\u043d\u043e\u0439 \u043c\u0435\u0440\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u0438 \u0437\u0434\u0435\u0441\u044c. \u041a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0441\u0442\u043e\u0438\u0442 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c CI \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440 <code>x86\/amd64<\/code>, \u043e\u0431\u0435 \u043f\u043e\u0434 <code>Debug\/Release<\/code>. \u041f\u043e\u043c\u0438\u043c\u043e \u044d\u0442\u043e\u0433\u043e, \u044f \u0431\u044b \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043b \u0442\u0430\u043a\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0441\u0431\u043e\u0440\u043a\u0438 \u0438 \u0432\u0435\u0440\u0441\u0438\u044e Visual Studio \u2014 \u0432\u044b \u0432\u0435\u0434\u044c \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u043a\u0430\u043a\u0443\u044e \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u0442\u0443\u0434\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0430\u0443\u0433\u0430\u0434 \u0432\u0437\u044f\u0442\u044b\u0439 \u043a\u043b\u043e\u043d\u0435\u0440?<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f Visual Studio 2017 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 VM \u043e\u0431\u0440\u0430\u0437 \u2014 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c, \u0443\u0432\u044b, \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043d\u0430 \u043e\u0431\u0440\u0430\u0437\u0435 \u0434\u043b\u044f Visual Studio 2015. \u0415\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e-\u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0433\u043e\u043d\u044f\u0442\u044c CI \u043d\u0430 VS 2017, \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code>- TOOLCHAIN: msvc15   APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017<\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0436\u0435 \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0440\u0435\u0448\u0438\u043b \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0442\u044c\u0441\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043e\u043c VS 2010 \u2014 VS 2015. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0441\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 AppVeyor \u0438\u0441\u043f\u0440\u0430\u0432\u044f\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0441 VS 2017 \u0432 \u043b\u0443\u0447\u0448\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<\/p>\n<p>  <\/p>\n<ul>\n<li>Toolchain<br \/> \n<ul>\n<li>Visual Studio 2010<\/li>\n<li>Visual Studio 2012<\/li>\n<li>Visual Studio 2015<\/li>\n<\/ul>\n<\/li>\n<li>Target CPU<br \/> \n<ul>\n<li>amd64<\/li>\n<li>x86<\/li>\n<\/ul>\n<\/li>\n<li>Configuration<br \/> \n<ul>\n<li>Debug<\/li>\n<li>Release<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412 \u0441\u0443\u043c\u043c\u0435 \u044d\u0442\u043e \u0434\u0430\u0451\u0442 \u043d\u0430\u043c \u0441\u0438\u043c\u043f\u0430\u0442\u0438\u0447\u043d\u0443\u044e \u043c\u0430\u0442\u0440\u0438\u0446\u0443 \u043d\u0430 <strong>12 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432 YAML \u0444\u0430\u0439\u043b\u0430\u0445 \u043a\u0430\u043a \u0434\u043b\u044f AppVeyor, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f Travis \u0441\u043a\u0440\u0438\u043f\u0442\u044b <code>install<\/code> \u0441\u0441\u044b\u043b\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0435 shell-\u0444\u0430\u0439\u043b\u044b (<code>.sh\/.bat<\/code>) \u0412\u043e\u0437\u043d\u0438\u043a\u0430\u0435\u0442 \u0432\u043e\u043f\u0440\u043e\u0441: \u043d\u0435\u043b\u044c\u0437\u044f \u043b\u0438 \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u043e\u0434\u043d\u0438\u043c\u0438 YAML \u0444\u0430\u0439\u043b\u0430\u043c\u0438, \u0431\u0435\u0437 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u0432? \u041a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u043e\u0442\u0432\u0435\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 &quot;\u043d\u0435\u0442&quot;.<\/p>\n<p>  <\/p>\n<h2>\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u044b<\/h2>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e shell-\u043a\u043e\u043c\u0430\u043d\u0434\u044b, \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0435 \u0432 YAML \u0444\u0430\u0439\u043b\u0430\u0445, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f <em>\u043f\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u043e<\/em>. \u041d\u0443\u0436\u0435\u043d <code>if-then-else<\/code> \u0438\u043b\u0438 <code>for<\/code>? \u0411\u0443\u0434\u044c\u0442\u0435 \u0434\u043e\u0431\u0440\u044b \u0443\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443. \u041f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0432 \u0442\u0435\u043e\u0440\u0438\u0438 \u0432 \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 \u043c\u043e\u0436\u043d\u043e \u0443\u0442\u0440\u0430\u043c\u0431\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0447\u0442\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0436\u0435 \u044d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043a \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u044f\u043c. \u0412\u0441\u044e \u043d\u0435\u0442\u0440\u0438\u0432\u0438\u0430\u043b\u044c\u043d\u0443\u044e \u043c\u043d\u043e\u0433\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0432\u044b\u043d\u043e\u0441\u0438\u0442\u044c \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 shell-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0437 YAML \u0443\u0436\u0435 \u0438\u0445.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u0435\u043c\u0443, \u044f \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u043e\u0432\u0430\u043b \u0432\u0441\u0451 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u043f\u0430\u043f\u043a\u0430 <code>ci<\/code> (continuous integration) \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u043e\u0434\u043f\u0430\u043f\u043a\u0430\u043c\u0438 <code>travis<\/code> \u0438 <code>appveyor<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043b\u0435\u0436\u0430\u0442 shell-\u0441\u043a\u0440\u0438\u043f\u0442\u044b:<\/p>\n<p>  <\/p>\n<pre><code>ci\/     travis\/         install-linux.sh         install-osx.sh         ...     appveyor\/         install.bat         set-env.bat         ...<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 YAML-\u0444\u0430\u0439\u043b\u0430\u0445 \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0442\u0438\u043f\u0430:<\/p>\n<p>  <\/p>\n<pre><code>- source ci\/travis\/install.sh<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412\u044b\u0434\u0435\u043b\u0438\u043c \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0430\u0445 Travis \u0438 AppVeyor \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0445 \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<p>  <\/p>\n<ul>\n<li>Install \u2014 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u044b, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439<\/li>\n<li>Build &amp; Test \u2014 \u0441\u0431\u043e\u0440\u043a\u0430 \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u043a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044e\u0442\u0441\u044f \u0432\u043c\u0435\u0441\u0442\u0435)<\/li>\n<li>Deploy \u2014 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432\/\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u043b\u043e\u043a\u0430\u0446\u0438\u0438 (\u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c GitHub Releases)<\/li>\n<\/ul>\n<p>  <\/p>\n<h2>Install<\/h2>\n<p>  <\/p>\n<p>\u0421\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u0438\u0441\u0435\u0442\u044c \u043e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u041d\u0438\u0436\u0435 \u0434\u0430\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u0449\u0438\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p>Travis \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u0434\u043e\u0438\u0441\u0442\u043e\u0440\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u042e\u0431\u0443\u043d\u0442\u043e\u0439 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 <strong>CMake 3.2<\/strong> \u0438 <strong>GCC 4.8.4<\/strong> \u2014 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u043b\u044f \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u044d\u0442\u043e\u0433\u043e \u043e\u043a\u0430\u0436\u0435\u0442\u0441\u044f \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e. \u0414\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f GCC, \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0432\u0430\u0442\u044c C++14, \u0432 <code>install-linux.sh<\/code> \u043f\u0438\u0448\u0435\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">sudo add-apt-repository -y ppa:ubuntu-toolchain-r\/test sudo apt-get update -qq  sudo apt-get install -qq g++-5 sudo update-alternatives --install \/usr\/bin\/g++ g++ \/usr\/bin\/g++-5 90<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e CMake \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 \u0442\u043e\u0442 \u0436\u0435 <code>install-linux.sh<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">CMAKE_VERSION=3.3.2 CMAKE_VERSION_DIR=v3.3  CMAKE_OS=Linux-x86_64 CMAKE_TAR=cmake-$CMAKE_VERSION-$CMAKE_OS.tar.gz CMAKE_URL=http:\/\/www.cmake.org\/files\/$CMAKE_VERSION_DIR\/$CMAKE_TAR CMAKE_DIR=$(pwd)\/cmake-$CMAKE_VERSION  wget --quiet $CMAKE_URL mkdir -p $CMAKE_DIR tar --strip-components=1 -xzf $CMAKE_TAR -C $CMAKE_DIR export PATH=$CMAKE_DIR\/bin:$PATH<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043c\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 CMake \u0432\u0435\u0440\u0441\u0438\u0438 3.3 \u0445\u0432\u0430\u0442\u0430\u0435\u0442, \u0430 \u0432\u043e\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 3.2 \u2014 \u043d\u0435\u0442 (\u0432 3.3 \u0431\u044b\u043b\u043e \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439). \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0430\u0448\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0443\u0436\u043d\u043e \u0447\u0442\u043e-\u0442\u043e \u043f\u043e\u0441\u0432\u0435\u0436\u0435\u0435 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 Visual Studio 2017, \u0434\u043b\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432 CMake 3.3 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430) \u2014 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u043c\u0435\u043d\u044f\u0439\u0442\u0435 <code>CMAKE_VERSION<\/code> \u0438 <code>CMAKE_VERSION_DIR<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>amd64-&gt;x86<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0442\u0430\u043a\u0436\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <code>multilib<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">if [ &quot;$TARGET_CPU&quot; == &quot;x86&quot; ]; then     sudo dpkg --add-architecture i386     sudo apt-get -qq update      sudo apt-get install -y liblua5.2-dev:i386     sudo apt-get install -y libusb-1.0:i386     # ...      # \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c g++-multilib -- \u0432 \u0441\u0430\u043c\u043e\u043c \u043a\u043e\u043d\u0446\u0435, \u043f\u043e\u0441\u043b\u0435 i386-\u043f\u0430\u043a\u0435\u0442\u043e\u0432!      sudo apt-get install -y g++-5-multilib fi<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418 Clang, \u0438 CMake \u043f\u043e\u0434 \u041c\u0430\u043a\u043e\u043c \u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u0434\u0440\u0435\u0432\u043d\u0438\u0435, \u043a\u0430\u043a \u043f\u043e\u0434 Ubuntu, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 <code>install-osx.sh<\/code> \u0443 \u043c\u0435\u043d\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0438\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0445 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439. \u041e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>homebrew<\/code>. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c <code>ragel<\/code>, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0432 <code>install-osx.sh<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">brew update brew install ragel<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0432\u043e\u0442 install-\u0441\u043a\u0440\u0438\u043f\u0442 \u0432 AppVeyor \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0443\u0441\u0442\u0440\u0430\u0448\u0430\u044e\u0449\u0435 \u2014 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 CMake \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Visual Studio \u0438 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u043e\u0439.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 CMake-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<p>\u041f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u043e \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0441\u043a\u0440\u0438\u043f\u0442 <code>ci\/appveyor\/set-env.bat<\/code> \u0447\u0442\u043e-\u0442\u043e \u0432\u0440\u043e\u0434\u0435:<\/p>\n<p>  <\/p>\n<pre><code>@echo off  :loop  if &quot;%1&quot; == &quot;&quot; goto :finalize if \/i &quot;%1&quot; == &quot;msvc10&quot; goto :msvc10 if \/i &quot;%1&quot; == &quot;msvc12&quot; goto :msvc12 if \/i &quot;%1&quot; == &quot;msvc14&quot; goto :msvc14 if \/i &quot;%1&quot; == &quot;msvc15&quot; goto :msvc15 if \/i &quot;%1&quot; == &quot;x86&quot; goto :x86 if \/i &quot;%1&quot; == &quot;i386&quot; goto :x86 if \/i &quot;%1&quot; == &quot;amd64&quot; goto :amd64 if \/i &quot;%1&quot; == &quot;x86_64&quot; goto :amd64 if \/i &quot;%1&quot; == &quot;x64&quot; goto :amd64  echo Invalid argument: '%1' exit -1  :msvc10 set TOOLCHAIN=msvc10 set CMAKE_GENERATOR=Visual Studio 10 2010 shift goto :loop  :msvc12 set TOOLCHAIN=msvc12 set CMAKE_GENERATOR=Visual Studio 12 2013 shift goto :loop  :msvc14 set TOOLCHAIN=msvc14 set CMAKE_GENERATOR=Visual Studio 14 2015 shift goto :loop  :msvc15 set TOOLCHAIN=msvc15 set CMAKE_GENERATOR=Visual Studio 15 2017 shift goto :loop  :x86 set TARGET_CPU=x86 set CMAKE_GENERATOR_SUFFIX= set OPENSSL_DIR=C:\\OpenSSL-Win32 shift goto :loop  :amd64 set TARGET_CPU=amd64 set CMAKE_GENERATOR_SUFFIX= Win64 set OPENSSL_DIR=C:\\OpenSSL-Win64 shift goto :loop  :finalize  if &quot;%TOOLCHAIN%&quot; == &quot;&quot; goto :msvc14 if &quot;%TARGET_CPU%&quot; == &quot;&quot; goto :amd64 if &quot;%CONFIGURATION%&quot; == &quot;&quot; (set CONFIGURATION=Release)  set CMAKE_CONFIGURE_FLAGS=-G &quot;%CMAKE_GENERATOR%%CMAKE_GENERATOR_SUFFIX%&quot;  set CMAKE_BUILD_FLAGS= ^     --config %CONFIGURATION% ^     -- ^     \/nologo ^     \/verbosity:minimal ^     \/consoleloggerparameters:Summary<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e\u0442 \u0441\u043a\u0440\u0438\u043f\u0442 \u0438\u0437 <code>.appveyor.yml<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>install:     - call ci\\appveyor\\set-env.bat %TOOLCHAIN% %PLATFORM%<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438, \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>appveyor<\/code>, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u0430 AppVeyor. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0442\u043e\u0431\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c ragel, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 <code>ci\/appveyor\/install.bat<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>set DOWNLOAD_DIR=c:\\downloads mkdir %DOWNLOAD_DIR%  set RAGEL_DOWNLOAD_URL=http:\/\/downloads.yorickpeterse.com\/files\/ragel-68-visualstudio2012.7z mkdir %DOWNLOAD_DIR%\\ragel appveyor DownloadFile %RAGEL_DOWNLOAD_URL% -FileName %DOWNLOAD_DIR%\\ragel\\ragel.7z 7z e -y %DOWNLOAD_DIR%\\ragel\\ragel.7z -o%DOWNLOAD_DIR%\\ragel set PATH=%DOWNLOAD_DIR%\\ragel;%PATH%<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u2014 \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b \u0434\u043b\u044f C++ \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u043c\u0443\u0441\u043e\u0440\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u043b\u043e\u0433\u0430\u0445 \u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code>del &quot;c:\\Program Files (x86)\\MSBuild\\14.0\\Microsoft.Common.targets\\ImportAfter\\Xamarin.Common.targets&quot; del &quot;c:\\Program Files (x86)\\MSBuild\\4.0\\Microsoft.Common.targets\\ImportAfter\\Xamarin.Common.targets&quot;<\/code><\/pre>\n<p>  <\/p>\n<h2>Build &amp; Test<\/h2>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u044d\u0442\u0430\u043f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0449\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0433\u043e \u2014 \u0434\u043b\u044f \u043d\u0435\u0433\u043e, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0434\u0430\u0436\u0435 \u043d\u0435 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0433\u043e shell-\u0441\u043a\u0440\u0438\u043f\u0442\u0430. \u0415\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043f\u043e\u0434 Linux \u043d\u0430 Travis CI. \u0414\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 <code>amd64-&gt;x86<\/code> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0432 \u043a\u043e\u0440\u043d\u0435\u0432\u043e\u0439 <code>CMakeLists.txt<\/code> \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"cmake\">if (&quot;${TARGET_CPU}&quot; STREQUAL &quot;amd64&quot;)     set (CMAKE_SIZEOF_VOID_P 8)      set_property (GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS TRUE)     set_property (GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS FALSE) elseif (&quot;${TARGET_CPU}&quot; STREQUAL &quot;x86&quot;)     set (CMAKE_SIZEOF_VOID_P 4)      set_property (GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS FALSE)     set_property (GLOBAL PROPERTY FIND_LIBRARY_USE_LIB32_PATHS TRUE)      if (GCC)         set (CMAKE_CXX_FLAGS &quot;${CMAKE_CXX_FLAGS} -m32&quot;)         set (CMAKE_C_FLAGS   &quot;${CMAKE_C_FLAGS} -m32&quot;)     endif () else ()     message (FATAL_ERROR &quot;Unsupported CPU: ${TARGET_CPU}&quot;) endif ()<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u043c, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e. \u0421\u0431\u043e\u0440\u043a\u0430 CMake-\u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u0430\u043f\u043a\u0435 <code>build<\/code> \u0432 \u0434\u0432\u0430 \u044d\u0442\u0430\u043f\u0430: <em>Configure<\/em> \u0438 <em>Build<\/em>. \u0412\u043d\u0443\u0442\u0440\u0438 <code>travis.yml<\/code> \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code>script:     - mkdir build     - cd build     - cmake .. -DCMAKE_BUILD_TYPE=$BUILD_CONFIGURATION -DTARGET_CPU=$TARGET_CPU     - cmake --build .<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <strong>CTest<\/strong> \u0441\u0440\u0430\u0437\u0443 \u043f\u043e \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044e \u0441\u0431\u043e\u0440\u043a\u0438 \u2014 \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u0434\u0430\u043d\u043d\u044b\u0439 \u0448\u0430\u0433 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0432\u0430\u0448 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0435\u0441\u0442\u044b, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e CMake-\u043a\u043e\u043c\u0430\u043d\u0434 <code>enable_testing ()<\/code> \u0438 <code>add_test (...)<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>    - ctest --output-on-failure<\/code><\/pre>\n<p>  <\/p>\n<p>\u042f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c <code>ctest<\/code> \u0441 \u0444\u043b\u0430\u0436\u043a\u043e\u043c <code>--output-on-failure<\/code> \u2014 \u0432 \u044d\u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0435 \u0442\u0435\u0441\u0442\u0430 \u0432 \u043b\u043e\u0433\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0438\u0434\u0435\u043d \u0432\u044b\u0445\u043b\u043e\u043f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0434 AppVeyor \u0432\u0441\u0451 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e, \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c\u0438 \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043e\u0442\u043b\u0438\u0447\u0438\u044f\u043c\u0438. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043d\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u043b\u0430\u0436\u043a\u043e\u0432 C++ \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0431\u043e\u0440\u0430 \u043d\u0443\u0436\u043d\u043e\u0433\u043e CMake-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 (\u043c\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c \u044d\u0442\u043e \u0432 <code>set-env.bat<\/code>). \u0412\u043e \u0432\u0442\u043e\u0440\u044b\u0445, Visual Studio \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u044b, \u0432 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 Unix Makefiles, \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0442.\u043d. multi-configuration-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430\u043c\u0438, \u0430 \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0438\u0442, \u0447\u0442\u043e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f <code>Debug\/Release<\/code> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 CMake-configure, \u0430 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 Build. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0432\u0441\u0451 \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u0435 \u0436\u0435 \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u044b\u0435 4 \u0441\u0442\u0440\u043e\u0447\u043a\u0438:<\/p>\n<p>  <\/p>\n<pre><code>build_script:     - mkdir build     - cd build     - cmake .. %CMAKE_CONFIGURE_FLAGS%     # \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043d\u0443\u0436\u043d\u044b\u0439 CMake-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440     - cmake --build . %CMAKE_BUILD_FLAGS%  # \u0437\u0430\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e Debug\/Release                                            # \u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f msbuild.exe<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0435\u043a\u0446\u0438\u044e <code>test_script<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>test_script:     - ctest -C %CONFIGURATION% --output-on-failure<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e <code>Debug\/Release<\/code> \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043b\u044e\u0447\u0430 <code>-C<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0423\u0440\u0430! \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0438 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0434 <strong>24-\u043c\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u043c\u0438<\/strong> \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 <code>git-push<\/code>. \u0421\u043a\u043e\u0440\u0435\u0435 \u0431\u0435\u0436\u0438\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0441\u0442\u0430\u0442\u0443\u0441-\u0431\u044d\u0439\u0434\u0436\u0438\u043a\u0438 \u0432 README-\u0444\u0430\u0439\u043b!<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 Travis CI \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443:<\/p>\n<p>  <\/p>\n<pre><code>https:\/\/travis-ci.org\/&lt;user-name&gt;\/&lt;project-name&gt;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043b\u0438\u043a\u0430\u0435\u043c \u043d\u0430 \u0431\u044d\u0439\u0434\u0436\u0438\u043a <code>build|passing<\/code> \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0435 \u043b\u043e\u0433\u043e\u0432 \u0441\u0431\u043e\u0440\u043a\u0438 \u2014 \u043e\u0442\u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043e\u043a\u043e\u0448\u043a\u043e \u0441 \u043b\u0438\u043d\u043a\u043e\u043c \u043d\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043b\u0438\u043d\u043a \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0433\u043e \u0432 <code>README.rst<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>.. image:: https:\/\/travis-ci.org\/&lt;user-name&gt;\/&lt;project-name&gt;.svg?branch=master     :target: https:\/\/travis-ci.org\/&lt;user-name&gt;\/&lt;project-name&gt;<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u043d\u0435 \u043f\u043e\u0441\u043b\u044b\u0448\u0430\u043b\u043e\u0441\u044c, \u0438\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u043b <code>README.md<\/code>? \u041d\u0438-\u043a\u043e\u0433-\u0434\u0430! <strong>reStructuredText<\/strong> FTW!<\/p>\n<p>  <\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u043f\u043e\u0441\u0442\u0443\u043f\u0430\u0435\u043c \u0441 \u0431\u044d\u0439\u0434\u0436\u0438\u043a\u043e\u043c AppVeyor. \u041b\u0438\u043d\u043a\u0438 \u043d\u0430 \u0431\u044d\u0439\u0434\u0436\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443:<\/p>\n<p>  <\/p>\n<pre><code>https:\/\/ci.appveyor.com\/project\/&lt;user-name&gt;\/&lt;project-name&gt;\/settings\/badges<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u043d\u0443\u0436\u043d\u0443\u044e \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u0438 \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0440\u044f\u0434\u044b\u0448\u043a\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code>.. image:: https:\/\/ci.appveyor.com\/api\/projects\/status\/&lt;gibberish-code&gt;?svg=true     :target: https:\/\/ci.appveyor.com\/project\/&lt;user-name&gt;\/&lt;project-name&gt;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u0435\u043b\u0430\u0435\u043c \u043a\u043e\u043c\u043c\u0438\u0442 \u0434\u043b\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0451\u043d\u043d\u043e\u0433\u043e <code>README.rst<\/code> \u0438 \u043d\u0430\u0441\u043b\u0430\u0436\u0434\u0430\u0435\u043c\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"http:\/\/tibbo.com\/downloads\/archive\/.internal\/image\/readme-badges.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<h2>Deploy<\/h2>\n<p>  <\/p>\n<p>\u041f\u043e\u043a\u0430\u0436\u0435\u043c, \u043a\u0430\u043a \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 <a href=\"https:\/\/help.github.com\/articles\/creating-releases\">GitHub Releases<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0432\u0441\u0435\u0433\u043e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0432\u0438\u0441\u044b Travis \u0438 AppVeyor, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043c\u043e\u0433\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u044b \u0432 \u0432\u0430\u0448\u0438\u0445 GitHub \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445. \u041b\u043e\u0433\u0438\u043d\u0438\u043c\u0441\u044f \u043d\u0430 GitHub, \u0437\u0430\u0445\u043e\u0434\u0438\u043c \u0432 <code>Profile-&gt;Settings-&gt;Developer settings-&gt;Personal access tokens<\/code>. \u041a\u043b\u0438\u043a\u0430\u0435\u043c \u043d\u0430 <code>Generate new token<\/code>, \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0442\u043e\u043a\u0435\u043d, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>CI Deploy Token<\/code> \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0444\u043b\u0430\u0436\u043e\u043a <code>public_repo<\/code> (\u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044e \u0442\u043e\u043a\u0435\u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u044f\u043c). \u041a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0442\u043e\u043a\u0435\u043d \u0432 \u043a\u0430\u043a\u043e\u0439-\u043d\u0438\u0431\u0443\u0434\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043b\u043e\u043a\u0430\u0446\u0438\u044e (\u0432\u0441\u043a\u043e\u0440\u0435 \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0434\u0430\u043b\u0438\u0442\u044c).<\/p>\n<p>  <\/p>\n<p>\u0421 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0433\u043e \u0442\u043e\u043a\u0435\u043d\u0430 \u043c\u043e\u0436\u043d\u043e \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u044b, \u0442\u0430\u043a \u0438 \u043f\u0443\u0448\u0438\u0442\u044c \u0432\u043e <em>\u0432\u0441\u0435 \u0432\u0430\u0448\u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/em>. \u041a\u0430\u043f\u0438\u0442\u0430\u043d \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u043c\u0435\u043a\u0430\u0435\u0442, \u0447\u0442\u043e \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0439 \u0442\u043e\u043a\u0435\u043d \u0432\u043e \u0432\u0441\u0435\u043e\u0431\u0449\u0438\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0432\u0438\u0434\u0435 \u043d\u0435\u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e. \u041d\u0430\u0434\u043e \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u0431\u044b\u043b <em>\u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 Travis CI \u0438 AppVeyor<\/em>.<\/p>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u0434\u043b\u044f Travis, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c Ruby-\u0443\u0442\u0438\u043b\u0438\u0442\u0443 <code>travis<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">gem install travis<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0435 \u0432 \u043f\u0430\u043f\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">travis encrypt &lt;github-token&gt;<\/code><\/pre>\n<p>  <\/p>\n<p>\u0423\u0442\u0438\u043b\u0438\u0442\u0430 \u0437\u0430\u0448\u0438\u0444\u0440\u0443\u0435\u0442 \u0442\u043e\u043a\u0435\u043d \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e\u0433\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0444\u0440\u043e\u0432\u043a\u0438 \u2014 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 \u0441\u0435\u0440\u0432\u0438\u0441\u0435 Travis CI \u2014 \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0443 \u0441\u0430\u043c\u043e\u0433\u043e Travis CI. \u0412\u044b\u0445\u043e\u0434 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432 <code>.travis.yml<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0442\u043e\u043a\u0435\u043d \u0430\u0441\u0438\u043c\u043c\u0435\u0442\u0440\u0438\u0447\u043d\u043e \u0448\u0438\u0444\u0440\u0443\u0435\u0442\u0441\u044f \u0438 \u0434\u043b\u044f AppVeyor. \u0422\u0443\u0442, \u043e\u0434\u043d\u0430\u043a\u043e, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0435 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0442\u0438\u043b\u0438\u0442\u044b \u043d\u0435 \u043d\u0430\u0434\u043e \u2014 \u0432\u0441\u0451 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u043e \u0441 \u0441\u0430\u0439\u0442\u0430 <a href=\"https:\/\/ci.appveyor.com\">https:\/\/ci.appveyor.com<\/a> \u0447\u0435\u0440\u0435\u0437 <code>Account-&gt;Tools-&gt;Encrypt Data<\/code>.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043d\u0430\u0434\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u043d\u043e \u0444\u0430\u0439\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0435\u043e\u0431\u0449\u0435\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f\u0430. \u0412 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 GitHub Releases \u0442\u0430\u043a\u0438\u0435 \u0444\u0430\u0439\u043b\u044b \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f <strong>\u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438 \u0440\u0435\u043b\u0438\u0437\u0430<\/strong> (release artifacts). \u042d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440\u044b, \u0430\u0440\u0445\u0438\u0432\u044b \u0438\u043b\u0438 \u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b. \u041d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u043e\u043c \u043a \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u0430\u0440\u0445\u0438\u0432\u043e\u0432 \u0438\u043b\u0438 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0441 CMake-\u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <strong>CPack<\/strong>, \u043d\u043e, \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0438 \u043d\u0430\u0431\u043e\u0440 \u0440\u0435\u043b\u0438\u0437-\u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432, \u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0437\u043d\u0438\u0442\u044c\u0441\u044f \u043e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043a \u043f\u0440\u043e\u0435\u043a\u0442\u0443.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0443 \u043d\u0430\u0441 \u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b <code>file1.pkg<\/code>, <code>file2.pkg<\/code>, \u0438 \u0442.\u0434. \u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0438\u0445 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 release artifcats \u043a \u0440\u0435\u043b\u0438\u0437\u0430\u043c \u043d\u0430\u0448\u0435\u0433\u043e GitHub \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u0412 <code>.travis.yml<\/code> \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0441\u0435\u043a\u0446\u0438\u044e <code>deploy<\/code>:<\/p>\n<p>  <\/p>\n<pre><code>deploy:     provider: releases # \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043d\u0430 GitHub Releases      api_key:         secure: encrypted-github-token # \u0442\u043e\u043a\u0435\u043d, \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e `travis encrypt`      file:         # \u0441\u043f\u0438\u0441\u043e\u043a \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u043e\u0432         - file1.pkg         - file2.pkg         - ...      skip_cleanup: true # \u043d\u0435 \u0443\u0434\u0430\u043b\u044f\u0442\u044c \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0444\u0430\u0439\u043b\u044b \u043f\u0435\u0440\u0435\u0434 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435\u043c      on:         tags: true     # \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c deploy \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f tagged-commit<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 <code>.appveyor.yml<\/code> \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code>artifacts:     # \u0444\u0430\u0439\u043b\u044b-\u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u043d\u0443\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u044f\u0432\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438     # \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u043e\u043b\u043e\u0433\u0438\u0438 AppVeyor \u044d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f &quot;push artifacts&quot;     - path: file1.pkg     - path: file2.pkg     - ...  deploy:     provider: GitHub                         # \u0432\u044b\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043d\u0430 GitHub Releases     description: '$(APPVEYOR_REPO_TAG_NAME)' # tag \u043a\u0430\u043a \u0438\u043c\u044f \u0440\u0435\u043b\u0438\u0437\u0430 (\u043d\u0430 Travis \u0442\u0430\u043a \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e)      auth_token:         secure: &lt;secret-github-token&gt; # \u0442\u043e\u043a\u0435\u043d, \u0437\u0430\u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 appveyor.ci      artifact: \/.*\\.pkg\/ # \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0432\u0441\u0435 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430     force_update: true  # \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u044b, \u0435\u0441\u043b\u0438 \u0444\u0430\u0439\u043b \u0441 \u0442\u0430\u043a\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u0443\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f      on:         appveyor_repo_tag: true # \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c deploy \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f tagged-commit<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0441\u043e\u0437\u0434\u0430\u0451\u043c tagged-commit \u0434\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 \u0438 \u043f\u0443\u0448\u0438\u043c \u0435\u0433\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">git add --all git commit --message &quot;release 1.0.0&quot; git tag project-name-1.0.0 git push git push origin project-name-1.0.0<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0431\u043e\u0440\u043a\u0430, \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0448\u043b\u043e \u0443\u0434\u0430\u0447\u043d\u043e, \u0442\u043e \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0447\u043a\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 GitHub \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u0441 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0430\u0440\u0442\u0435\u0444\u0430\u043a\u0442\u0430\u043c\u0438:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"http:\/\/tibbo.com\/downloads\/archive\/.internal\/image\/github-release.png\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<h2>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h2>\n<p>  <\/p>\n<p>\u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u043a C++\/CMake \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c \u043d\u0430 GitHub. \u0420\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u0433\u043e \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b\u0430 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0445\u0432\u0430\u0442\u0438\u0442\u044c \u0432\u0441\u0435\u0433\u043e \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0430 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u0438 \u0434\u0435\u0442\u0430\u043b\u0435\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0441\u0447\u0438\u0442\u0430\u044e \u0441\u0432\u043e\u0438\u043c \u0434\u043e\u043b\u0433\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0435\u0439 \u043a \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 Travis CI &amp; AppVeyor:<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/docs.travis-ci.com\">https:\/\/docs.travis-ci.com<\/a><br \/>  <a href=\"https:\/\/www.appveyor.com\/docs\">https:\/\/www.appveyor.com\/docs<\/a><\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u0432\u043e\u0436\u0443 \u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u0440\u0443\u044e\u0442 \u0432\u0441\u0451 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435, \u0438 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0445, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0438 \u0431\u044b\u043b \u043f\u043e\u043b\u0443\u0447\u0435\u043d \u043e\u043f\u044b\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<p><a href=\"http:\/\/github.com\/vovkos\/jancy\">http:\/\/github.com\/vovkos\/jancy<\/a><br \/>  <a href=\"http:\/\/github.com\/vovkos\/doxyrest\">http:\/\/github.com\/vovkos\/doxyrest<\/a><br \/>  <a href=\"http:\/\/github.com\/vovkos\/llvm-package-travis\">http:\/\/github.com\/vovkos\/llvm-package-travis<\/a><br \/>  <a href=\"http:\/\/github.com\/vovkos\/llvm-package-windows\">http:\/\/github.com\/vovkos\/llvm-package-windows<\/a><\/p>\n<p>  <\/p>\n<p>\u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u043b\u044e\u0431\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habrahabr.ru\/post\/329264\/\"> https:\/\/habrahabr.ru\/post\/329264\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div style=\"text-align:center;\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/post_images\/ad2\/54e\/b5b\/ad254eb5bc55b5223ee494ea845cbdb5.png\" alt=\"Continuous Integration\" \/><\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u043e \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0443\u044e \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044e \u0438 \u0435\u0451 \u0446\u0435\u043b\u0435\u0431\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0441\u043b\u044b\u0448\u0430\u043b\u0438, \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0432\u0441\u0435 \u2014 \u043d\u0435 \u0431\u0443\u0434\u0443 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0435 \u0432 \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0432\u0432\u043e\u0434\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u044c\u044f\u0445 \u0438 \u043e\u0431\u0437\u043e\u0440\u0430\u0445 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u0436\u0435 \u0442\u0430\u043a\u043e\u0435 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f, \u0438 \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u043e\u043d\u0430 \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u044c \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c, \u0440\u0435\u043b\u0438\u0437-\u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0430\u043c \u0438 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430\u043c. \u041f\u0440\u0435\u0434\u043f\u043e\u043b\u0430\u0433\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u0438 \u0441\u0430\u043c \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442, \u0447\u0442\u043e CI \u2014 \u0432\u043d\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u044b\u0445 \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u044f\u0437\u044b\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e <em>\u0441\u0442\u043e\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043d\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434<\/em>, \u043d\u043e\u2026 \u041d\u043e \u0432\u043e\u0442 \u0434\u043e \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0435\u0433\u043e \u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044f \u0440\u0443\u043a\u0438 \u0432 \u0441\u0438\u043b\u0443 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u043f\u043e\u043a\u0430 \u043d\u0435 \u0434\u043e\u0448\u043b\u0438.<\/p>\n<p>  <\/p>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u043f\u043e \u043f\u0440\u0438\u043a\u0440\u0443\u0447\u0438\u0432\u0430\u043d\u0438\u044e <em>\u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438<\/em> (build-test-deploy) \u043a \u0433\u0438\u0442\u0445\u0430\u0431\u043e\u0432\u0441\u043a\u0438\u043c C\/C++ \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c \u0441 CMake \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u2014 \u043f\u043e \u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c, \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0442\u0430\u043a\u043e\u0433\u043e \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043d\u0435 \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u043b\u043e. \u0412\u043f\u0440\u043e\u0447\u0435\u043c, \u0435\u0441\u043b\u0438 \u043c\u043e\u0451 \u0433\u0443\u0433\u043b-\u0444\u0443 \u043f\u043e\u0434\u0432\u0435\u043b\u043e \u043c\u0435\u043d\u044f, \u0438 \u0442\u0430\u043a\u0438 \u043f\u0440\u043e\u0441\u043a\u0430\u043b\u044c\u0437\u044b\u0432\u0430\u043b\u043e \u2014 \u043d\u0435 \u0431\u0435\u0434\u0430. \u041b\u0438\u0448\u043d\u0438\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432\u0441\u0451 \u043f\u043e\u0434 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u0438\u043c \u0443\u0433\u043b\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0435\u0440\u0435\u0433\u0430\u044e\u0449\u0438\u0439 \u043e\u0442 \u043d\u0435\u043f\u043e\u0432\u0442\u043e\u0440\u0438\u043c\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430\u0431\u0438\u0442\u044b\u0445 \u0430\u0432\u0442\u043e\u0440\u043e\u043c \u0448\u0438\u0448\u0435\u043a, \u0441\u043e\u0432\u0435\u0440\u0448\u0435\u043d\u043d\u043e \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u043e\u0432\u0440\u0435\u0434\u0438\u0442.<\/p>\n<p>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-286775","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286775","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=286775"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/286775\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=286775"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=286775"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=286775"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}