)]}'
{
  "log": [
    {
      "commit": "f29c958f1c73a1d8d32d8ebcdad8cd467077cf12",
      "tree": "f7e31d32d241935c86ecebed57a719b31b3ce451",
      "parents": [
        "faa993a4faa75a5bddeea124f8b9f7a06b7d384f"
      ],
      "author": {
        "name": "Vitaly Parakhin",
        "email": "vparakhin@mirantis.com",
        "time": "Thu Nov 24 19:27:58 2016 +0200"
      },
      "committer": {
        "name": "Vitaly Parakhin",
        "email": "vparakhin@mirantis.com",
        "time": "Fri Nov 25 17:00:49 2016 +0200"
      },
      "message": "Switch port-based MCP Docker registries to subdomain\n\nChange-Id: I0f2adda5c5a7d02135b6e9fda89dc7d35f0b9db8\n"
    },
    {
      "commit": "faa993a4faa75a5bddeea124f8b9f7a06b7d384f",
      "tree": "0e43e18e7a9abda605579f2b08bfc5c1d7a8f8e5",
      "parents": [
        "4d3951c56113d0a970e7f497bb79633466b18681"
      ],
      "author": {
        "name": "Artur Kaszuba",
        "email": "akaszuba@mirantis.com",
        "time": "Thu Nov 24 17:50:20 2016 +0100"
      },
      "committer": {
        "name": "Artur Kaszuba",
        "email": "akaszuba@mirantis.com",
        "time": "Thu Nov 24 17:50:57 2016 +0100"
      },
      "message": "Update .gitreview\n\nChange-Id: I9916320395ae0c169da14e8d3133683ca958a75a\n"
    },
    {
      "commit": "4d3951c56113d0a970e7f497bb79633466b18681",
      "tree": "5db08c8fe4d7cbc05c62538dadba0646640fe01f",
      "parents": [
        "1c15df01827e560293863531abf9a8631c564473"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Nov 24 13:58:15 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Nov 24 13:58:15 2016 +0200"
      },
      "message": "Add com.mirantis.targetImg property to docker image property\n\ncom.mirantis.targetImg property allows to search docker\nartifacts by image name, for example\n\n  def properties \u003d [\n    \u0027com.mirantis.gerritChangeId\u0027: \"${env.GERRIT_CHANGE_ID}\",\n    \u0027com.mirantis.gerritPatchsetNumber\u0027: \"${env.GERRIT_PATCHSET_NUMBER}\",\n    \u0027com.mirantis.gerritChangeNumber\u0027 : \"${env.GERRIT_CHANGE_NUMBER}\",\n    \u0027com.mirantis.targetImg\u0027: \"${projectNamespace}/calico/node\"\n  ]\n\nChange-Id: I8f6cdb0b90edb263e2d24e987eee8b8be2e54df3\n"
    },
    {
      "commit": "1c15df01827e560293863531abf9a8631c564473",
      "tree": "36ff57b186077c213ad165a5521ae0eab390c3e5",
      "parents": [
        "8cd6d22a439db05e6edb5fab35d53671e8c6ea20"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Nov 21 16:59:59 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Nov 21 16:59:59 2016 +0200"
      },
      "message": "[calico-containers] Align to upstream\n\ns/BUILD_CONTAINER_NAME/PYTHON_BUILD_CONTAINER_NAME\n\n[1]. https://github.com/projectcalico/calico-containers/commit/7a4afcbc7ae1d7d0dd02129cbe079346af9681c3\n\nChange-Id: I42bea7d6c7ac3d32141ba8d63c85cb46a43af219\n"
    },
    {
      "commit": "8cd6d22a439db05e6edb5fab35d53671e8c6ea20",
      "tree": "a6c18e092a3b23af78631bfeca0353c44ce4405b",
      "parents": [
        "8567272fbc1f2df7e1faafb00ab05e8b5a700c8b"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Nov 17 13:42:47 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Nov 17 13:42:47 2016 +0200"
      },
      "message": "Extend uploadImageToArtifactory function\n\nWe need to publish BuildInfo object as well (as for binary) for\ndocker images.\n1. Replace:\n    String artifactoryURL\n   by\n    ArtifactoryServer server\n2. If buildInfo is defined, let\u0027s publish it to artifactory\n\nChange-Id: Iadb724307b81a8f40cf1852b909bbb25208dc143\n"
    },
    {
      "commit": "8567272fbc1f2df7e1faafb00ab05e8b5a700c8b",
      "tree": "84ffbf23fb44772df36b0bd7db1db6b98f5d5392",
      "parents": [
        "c70f1c21c8e9ebd7776ed4c065fd1aa05115ba3c"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Nov 16 17:46:58 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Nov 16 19:05:22 2016 +0200"
      },
      "message": "Update getGitDescribe function\n\nParametrize getGitDescribe(Boolean useShort \u003d false):\n  useShort Boolean, returns String in format:\n       false (Default): {gitTag}-{numCommits}-g{gitsha}\n       true:            {gitTag}-{numCommits}\n\nChange-Id: Ibf2e90f2fdef0611c3622b817d5f4e174fa90200\n"
    },
    {
      "commit": "c70f1c21c8e9ebd7776ed4c065fd1aa05115ba3c",
      "tree": "661410ac8d0e544c6d19e6284b96531557662a3b",
      "parents": [
        "edba5a547578272921ae33929424e36173f68ca1"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Nov 16 13:05:20 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Nov 16 13:05:20 2016 +0200"
      },
      "message": "Artifactory refactoring\n\n* Define new mandatory properties in artifactory:\n  \u0027com.mirantis.buildName\u0027:\"${env.JOB_NAME}\"\n  \u0027com.mirantis.buildNumber\u0027: \"${env.BUILD_NUMBER}\"\n\n* All mandatory properties MUST be the same both for binary\n  and docker images\n\n* Remove overloaded uriByProperties() with String as second\n  paramter, it\u0027s better to use the original one with LinkedHashMap\n\nChange-Id: I2c6ea7e4fd035a1b68122ee4bc00562c0f4d8814\n"
    },
    {
      "commit": "edba5a547578272921ae33929424e36173f68ca1",
      "tree": "3c5a6babe9cb57de0de25600d1ef632a6a1e37f2",
      "parents": [
        "91d8def7ed5c57ea5d4cadf375ecb7e8a9fb6105"
      ],
      "author": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Tue Nov 15 19:55:56 2016 +0300"
      },
      "committer": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Tue Nov 15 19:58:00 2016 +0300"
      },
      "message": "Update MCPArtifactory package according to actual code in Tools\n\nMinor update of uploadImageToArtifactory function:\n- explicity set type of function parameters;\n- remove external ENV var;\n- add reminder what should be improved;\n\nChange-Id: I116294a317dcf610f9fb4043c48593ea96212b04\n"
    },
    {
      "commit": "91d8def7ed5c57ea5d4cadf375ecb7e8a9fb6105",
      "tree": "e5d080c530b30b16e61a5c38a66938a1c9fa79f3",
      "parents": [
        "90d4e679b3ced71175587ba95dba99635ace4df5"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Nov 15 13:53:17 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Nov 15 15:42:12 2016 +0200"
      },
      "message": "Fix uploadBinariesToArtifactory function\n\nChange-Id: I51eac8b39d772dc84a6166f5d66c7e8f316afe41\n"
    },
    {
      "commit": "90d4e679b3ced71175587ba95dba99635ace4df5",
      "tree": "9575beb9488f81e5bf5746e5a5fa986cfac126fc",
      "parents": [
        "b28156cd51cef8f316f4fe339f77c1b0fc230b46"
      ],
      "author": {
        "name": "Ruslan Kamaldinov",
        "email": "rkamaldinov@mirantis.com",
        "time": "Fri Nov 11 18:31:00 2016 +0300"
      },
      "committer": {
        "name": "Ruslan Kamaldinov",
        "email": "rkamaldinov@mirantis.com",
        "time": "Mon Nov 14 18:55:27 2016 +0300"
      },
      "message": "Refactor structure of Pipeline library\n\n* Moved everything under com.mirantis.mcp package\n* Functions are grouped under different files, each with specific\n  functionality (e.g Artifactory, Docker, Git, etc)\n* Tools.groovy remains as is to avoid breaking existing jobs that\n  use it\n\nNext steps:\n* Modify existing pipelines to use functions from new package\n* Gradually get rid of Tools.groovy\n\nChange-Id: I56386f994666baa1c6db51b27beef4de4284ecb8\n"
    },
    {
      "commit": "b28156cd51cef8f316f4fe339f77c1b0fc230b46",
      "tree": "ef7adf29ba8360321a3508069b0c9ed76d8780f3",
      "parents": [
        "4932b17cb762e5c02d8f76ef5ec2b08e07d781ad"
      ],
      "author": {
        "name": "Alexander Saprykin",
        "email": "asaprykin@mirantis.com",
        "time": "Wed Nov 09 11:09:48 2016 +0100"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Nov 10 15:42:12 2016 +0000"
      },
      "message": "Add function getGitDescribe\n\nFunction getGitCommitDescribe describes commit based on\nrecent git tag\n\nChange-Id: I2e83923fcfb0800a4a1b5d7b5fc67942d02ed051\n"
    },
    {
      "commit": "4932b17cb762e5c02d8f76ef5ec2b08e07d781ad",
      "tree": "17943e2e26924ce5466be33e35956cb6fe27f14b",
      "parents": [
        "d4e31281bfea4a36052aad5e656a12c80e824328"
      ],
      "author": {
        "name": "Artem Panchenko",
        "email": "apanchenko@mirantis.com",
        "time": "Tue Nov 08 19:06:03 2016 +0200"
      },
      "committer": {
        "name": "Artem Panchenko",
        "email": "apanchenko@mirantis.com",
        "time": "Thu Nov 10 14:45:33 2016 +0000"
      },
      "message": "Update default Calico version\n\nSet current released version (upstream) as default.\n\nChange-Id: I957475bc451e857dc6d8427d962f45c16f4c20a1\n"
    },
    {
      "commit": "d4e31281bfea4a36052aad5e656a12c80e824328",
      "tree": "6c73519aff368b16fbcc4b3f55fb860909590e74",
      "parents": [
        "9cef9255475b22624f9da80fc964661940a2c5cf"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Nov 08 17:39:19 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Nov 08 17:43:45 2016 +0200"
      },
      "message": "Add uriByProperties() with String as second parameter\n\nAdd overloaded function uriByProperties() which allows to pass\nproperties for search in format\n   prop1\u003dval1\u0026prop2\u003dval2\u0026prop3\u003dval3\n\nExample:\n  // return prop1\u003dval1;prop2;val2\n  def properties \u003d tools.getBinaryBuildProperties().replaceAll(\";\", \"\u0026\")\n  // Search for an artifact with required properties\n  def artifactURI \u003d tools.uriByProperties(env.ARTIFACTORY_URL, properties)\n\nChange-Id: I112e85309d92a37963b9bb35aa07f0c8cb897b2f\n"
    },
    {
      "commit": "9cef9255475b22624f9da80fc964661940a2c5cf",
      "tree": "57bdd31e649ec20dfdf3722a169d9526ccec15a0",
      "parents": [
        "d7ea0fef42840e8405515d946cd88a864338c065"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Nov 07 11:27:50 2016 +0000"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Nov 07 11:27:53 2016 +0000"
      },
      "message": "Revert \"Switch calico projects to use libcalico from downstream\"\n\nThis reverts commit 00a84f6cbf22ca214aaa78f47dd880f3090cbdb6.\n\nChange-Id: Ied69f382c273eee07a2d7950766bab4cf37f81f0\n"
    },
    {
      "commit": "d7ea0fef42840e8405515d946cd88a864338c065",
      "tree": "859fbe18a2a977e3e4f3db405a29d95ab6fc380b",
      "parents": [
        "165f3d599a3494fcf732823bc87a8f6477738e5a"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Sat Nov 05 14:00:20 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Sat Nov 05 14:02:04 2016 +0200"
      },
      "message": "Align build targets to upstream for calico-containers\n\nBuild targets in upstream were changed, so we need to fix it in\ndownstream\n\nChange-Id: Ib188972b763fecb44f159effe6740fad57204448\n"
    },
    {
      "commit": "165f3d599a3494fcf732823bc87a8f6477738e5a",
      "tree": "7aecf6bd7c7e5fdfadc0826d089000cdddf68efd",
      "parents": [
        "20c8b1307b841582a5f3d1e89c8ed3209c739a6c"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Nov 03 16:19:33 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Nov 03 16:19:33 2016 +0200"
      },
      "message": "Fix node_image target\n\nFor now node_image target is broken in upstream, let\u0027s\nuse workaround which works both for upstream and downstream\n\n[1]. https://github.com/projectcalico/calico-containers/pull/1250\n\nChange-Id: Ie501b10ead1199c6a47a271790d701aefdc86c33\n"
    },
    {
      "commit": "20c8b1307b841582a5f3d1e89c8ed3209c739a6c",
      "tree": "fa020644b9c06d3f642457a8a27953bb428e22ae",
      "parents": [
        "00a84f6cbf22ca214aaa78f47dd880f3090cbdb6"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Nov 02 13:24:32 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Nov 02 13:58:12 2016 +0200"
      },
      "message": "Add setDockerLabels method\n\n* Add mandatory LABEL to the end of the Dockerfile\n* User can also add some custom properties\n\n1. Simple usage, which adds mandatory properties to Dockerfile which\nis located in current directory\n   tools.setDockerfileLabels()\n\n2. Extended usage, add Labels to calico ctl and node images\n   def properties \u003d [\n     \"CALICO_NODE_IMAGE_REPO\u003d${calicoNodeImageRepo}\",\n     \"CALICOCTL_IMAGE_REPO\u003d${calicoCtlImageRepo}\",\n     \"CALICO_VERSION\u003d${calicoVersion}\"\n   ]\n   tools.setDockerfileLabels(\"./calicoctl/Dockerfile\", properties)\n   tools.setDockerfileLabels(\"./calico_node/Dockerfile\", properties)\n\nChange-Id: I0f9e6b83d4ffe5fe6a5ff02da50658b9eded5824\n"
    },
    {
      "commit": "00a84f6cbf22ca214aaa78f47dd880f3090cbdb6",
      "tree": "da85bb58c50beaf656d870fd7284ba246f593809",
      "parents": [
        "bd766a4190bba7de66faf37a23498d553f3c7919"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Oct 31 14:36:18 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Oct 31 14:36:18 2016 +0200"
      },
      "message": "Switch calico projects to use libcalico from downstream\n\n* calico-containers should use libcalico repo from downstream branch\n  mcp\n\n* libcalico code should be already checkouted to the related path\n  in calico-containers repo:\n\n   ${CALICO_CONTAINERS_ROOT}/calico_node/node_share/libcalico\n\n   was already done in I06fab53da73a2694483b806d26bd55594f809307\n\nChange-Id: I507d92abf6f96f7ef6e57d98ca9c8446ddc4ec37\n"
    },
    {
      "commit": "bd766a4190bba7de66faf37a23498d553f3c7919",
      "tree": "5be347dcde2ad236332966de0027a2e0a8c679c1",
      "parents": [
        "4f2fbcbaf8d498722e0549911be91142b23b5c33"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Oct 28 17:03:55 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Oct 28 17:15:53 2016 +0300"
      },
      "message": "Add withMerge flag for gitSSHCheckout step\n\nRather than merge the changes to be built into a branch which\ntracks the remote I want to push to, it checks out one rev and\nmerges the others on, resulting in a detached HEAD.\n\nSome tools expects to be run on a specific branch, and it\nfails because the repo isn\u0027t in that state.\n\n[1]. https://issues.jenkins-ci.org/browse/JENKINS-6856\n\nChange-Id: I9d6e2caf639d1aba651ae5f709c6369ea2848546\n"
    },
    {
      "commit": "4f2fbcbaf8d498722e0549911be91142b23b5c33",
      "tree": "5febf769d0714c66b34055a0dafcec31cd59b770",
      "parents": [
        "e3552687466f62578ff7384f7061b903b71d3741"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Oct 28 14:25:20 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Oct 28 15:22:49 2016 +0300"
      },
      "message": "Add timestamp generator\n\nCan be used for artifacts versioning\n\nChange-Id: I3b80b711740f0c9da7400e91a72caee87c0d5464\n"
    },
    {
      "commit": "e3552687466f62578ff7384f7061b903b71d3741",
      "tree": "31675943296f74d9d5d903c17d320bc76202301b",
      "parents": [
        "00d743445c9306e4c8c56300ec1cc41bb54a7b0c"
      ],
      "author": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Tue Oct 18 13:29:29 2016 +0300"
      },
      "committer": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Fri Oct 28 10:30:21 2016 +0000"
      },
      "message": "Extend pipeline library for Artifactory usage\n\nThis patch extends pipeline library with functions for working\nwith Artifactory repos and artifacts.\n\nAlso adds examples of usage.\n\nChange-Id: I641d00a69028b67f35f8455c7ad235591ef27496\n"
    },
    {
      "commit": "00d743445c9306e4c8c56300ec1cc41bb54a7b0c",
      "tree": "7b421ddce14e033a9277182d7845ac6075f61470",
      "parents": [
        "1835afe0e26087df344e523d7ca7bcc7fd8e4c72"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Oct 24 15:22:11 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Oct 24 12:25:06 2016 +0000"
      },
      "message": "Do not use WORKSPACE variable in buildCalicoContainers\n\nWe can checkout calico-containers to any directory, so we shouldn\u0027t\nrely on WORKSPACE variable, instead build step should run in the\ndirectory where calico-containers code was check-outed\n\nChange-Id: I3f5f22f48dcbd49e0305663b5b5684db4bbaee91"
    },
    {
      "commit": "1835afe0e26087df344e523d7ca7bcc7fd8e4c72",
      "tree": "eb1f894f68a0a216b2088f51ef7ca204e6c8a286",
      "parents": [
        "2202ad28229f020bab263a8a43288a7db6a2d37e"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Oct 19 16:53:14 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Oct 19 16:53:14 2016 +0300"
      },
      "message": "Parse HEAD of current directory and return commit hash\n\nChange-Id: If8d5eae45dc8e60708f93b6e259ae6694b69ba64\n"
    },
    {
      "commit": "2202ad28229f020bab263a8a43288a7db6a2d37e",
      "tree": "d6cee6a7f289151573ee7912e2c9f56b9bbb81b9",
      "parents": [
        "64bc88a761ba9acdd8aae8940ae8e17f921f823c"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Oct 18 17:14:12 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Oct 18 17:58:24 2016 +0300"
      },
      "message": "Remove publishing stage from calico-containers build step\n\ncalico-containers build step should only produce artifacts and\nstore them localy. All the Artifactory stuff should be done on\nglobal pipeline.\n\nChange-Id: Ic5de0089b35e4e9f3172e8403603f099c735d655\n"
    },
    {
      "commit": "64bc88a761ba9acdd8aae8940ae8e17f921f823c",
      "tree": "f6415b104ffc4b30d9e8d6e2b420be678ff6d4db",
      "parents": [
        "247c4e733e3f1035b59b9844de4a4b3acc605c78"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Oct 18 16:26:34 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Oct 18 16:26:34 2016 +0300"
      },
      "message": "Rename property gitSha to gerritPatchsetRevision\n\nBinary property gitSha should not confuse, so we must to rename\nit to gerritPatchsetRevision since it comes from variable\nGERRIT_PATCHSET_REVISION\n\nChange-Id: Ieb388fe3162019e8ac3fb4b88756fe183bfa3ec7\n"
    },
    {
      "commit": "247c4e733e3f1035b59b9844de4a4b3acc605c78",
      "tree": "1f9b5ae2b143aec9af2372b170d4d45bff2ea609",
      "parents": [
        "56d0d05728a4cb04aeceae006b2999c0d0dd9e5e"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Oct 17 16:43:29 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Oct 17 17:11:01 2016 +0300"
      },
      "message": "Add build calico-containers as a separate step\n\nWe have a lot of places which comsume the same code - build\ncalico images. So we need to have some common step in our library\nwhich can be configured by passing different parameters\n\nChange-Id: I34752fe6ff5d382883108797f5a98faba25c3eca\n"
    },
    {
      "commit": "56d0d05728a4cb04aeceae006b2999c0d0dd9e5e",
      "tree": "21866efbfc86d669b897ee47d5fd38c66b7fc759",
      "parents": [
        "0a7c17c7ee4b1a092e0e1f68bff08fc3067c8fbc"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Oct 13 15:48:56 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Oct 17 12:14:09 2016 +0300"
      },
      "message": "Implement getBinaryBuildProperties method\n\n1. getBinaryBuildProperties() should be used to define mandatory\nproperties for binary artifact, which are:\n\n    \"gerritProject\u003d${env.GERRIT_PROJECT}\",\n    \"gerritChangeNumber\u003d${env.GERRIT_CHANGE_NUMBER}\",\n    \"gerritPatchsetNumber\u003d${env.GERRIT_PATCHSET_NUMBER}\",\n    \"gerritChangeId\u003d${env.GERRIT_CHANGE_ID}\",\n    \"gitSha\u003d${env.GERRIT_PATCHSET_REVISION}\"\n\n2. User can add some custom properties, e.g:\n\ndef properties \u003d tools.getBinaryBuildProperties(\n   [\"test\u003d123\",\n    \"prop1\u003dval1\",\n     prop2\u003dval2\"\n   ])\n\n3. The resulting values will be the string in props format with\nnamespace com.mirantis, e.g:\n\n  gerritProject\u003dasd;gerritChangeNumber\u003d123;gerritChangeId\u003dddd\n\n4. How to use:\n\n    def tools \u003d new ci.mcp.Tools()\n    ...\n    def buildInfo \u003d Artifactory.newBuildInfo()\n    ...\n    def properties \u003d tools.getBinaryBuildProperties()\n    ...\n    // Create the upload spec.\n    def uploadSpec \u003d \"\"\"{\n        \"files\": [\n                {\n                    \"pattern\": \"**\",\n                    \"target\": \"some/target\",\n                    \"props\": \"${properties}\"\n                }\n            ]\n        }\"\"\"\n    server.upload(uploadSpec, buildInfo)\n    server.publishBuildInfo buildInfo\n\nChange-Id: I6dcc879c10b7fccf6dfcd8cb3ce86f52311c1a5a\n"
    },
    {
      "commit": "0a7c17c7ee4b1a092e0e1f68bff08fc3067c8fbc",
      "tree": "1cf4064675ae4ab3dc092cfda7b5becac84d9704",
      "parents": [
        "6a0686a055a7961d40a366b0635d72a3db2a6c78"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Sep 30 17:47:22 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Sep 30 17:47:22 2016 +0300"
      },
      "message": "Remove stages from steps\n\nStages for steps should be defined in pipelines\n\nChange-Id: I0b5e9162deaf3d147329a882d3716f80668d6c86\n"
    },
    {
      "commit": "6a0686a055a7961d40a366b0635d72a3db2a6c78",
      "tree": "6c58bffa6a76da0fa2cb695af7fb40d2fbf9cc6a",
      "parents": [
        "4dc96cd90ae152fec459a970e918ef51cfc59f4a"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Sep 30 14:53:18 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Sep 30 17:36:59 2016 +0300"
      },
      "message": "Add two non-mandatory options to gerritPatchsetCheckout\n\nIn some cases we need to be able to wipe before checkout\nand merge checkouted code before starting build. This\npatch introduces such changes.\n\nMerge feature is used together with pip install from git\nrepo, since everything should be merged in branch before\nrunning:\n  pip git+https://path_to_repo@branch\n\nexample:\n  // Usage example with merging to checkouted branch\n  node {\n    gerritPatchsetCheckout{\n      credentialsId \u003d \"credentials-id-string\"\n      withMerge \u003d true\n    }\n  }\n\nChange-Id: Ic35725db554c4e5d9e70c338999cf14eb29c1559\n"
    },
    {
      "commit": "4dc96cd90ae152fec459a970e918ef51cfc59f4a",
      "tree": "c969a8f74a6121a13724e389794ed9c717372903",
      "parents": [
        "1bbd3610f04603b77eff7b999c0d157db214ffb6"
      ],
      "author": {
        "name": "Igor Belikov",
        "email": "ibelikov@mirantis.com",
        "time": "Fri Sep 30 12:26:18 2016 +0300"
      },
      "committer": {
        "name": "Igor Belikov",
        "email": "ibelikov@mirantis.com",
        "time": "Fri Sep 30 12:26:18 2016 +0300"
      },
      "message": "Fix targetDir variable naming\n\nChange-Id: Ie73b29e03c17f13fb6a773c184f4907d165608c8\n"
    },
    {
      "commit": "1bbd3610f04603b77eff7b999c0d157db214ffb6",
      "tree": "44343861e77f1a969cd1ec70a554dee0a7e2ca4c",
      "parents": [
        "72f763e29d878108b67cfde70214e3f2a02fc594"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Sep 30 11:40:11 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Sep 30 11:40:11 2016 +0300"
      },
      "message": "Add getCommandBuilder command\n\nWe need to have an ability to build command line options for\ndocker command, e.g:\n  docker build --build-arg CALICO_REPO\u003drepo \\\n               --build-arg CALICO_VER\u003dmcp-0.1 \\\n               --build-arg LIBCALICO_REPO\u003drepo \\\n               --build-arg LIBCALICO_VER\u003dmcp-0.1\n               ...\n\nThis can be easily done by groovy and works in jenkins\n   [\"opt1\", \"opt2\", \"opt3\"].collect{ \"--build-arg \" + it }.join(\" \")\n\nbut doesn\u0027t for pipelines because of [1], so we need to\nhave our own bicycle - the first one, but not the last\n\n[1]. https://issues.jenkins-ci.org/browse/JENKINS-26481\n\nChange-Id: I5e06b305fc7e3d0c26c847779ec8a1ad81850e51\n"
    },
    {
      "commit": "72f763e29d878108b67cfde70214e3f2a02fc594",
      "tree": "2196c64b634eb5bf205f13139f2fadcafad65525",
      "parents": [
        "9021bbe21a0f05d2bc042da5eac3aaab93c3a6fa"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Sep 29 17:08:44 2016 +0300"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Sep 30 11:12:07 2016 +0300"
      },
      "message": "Add git clone over ssh protocol\n\nWe need to have some short-hand for clonning over ssh:// protocol\nthis patch implements such functionality.\n  Usage example:\n\n   node {\n     gitSSHCheckout {\n       credentialsId \u003d \"mcp-ci-gerrit\"\n       branch \u003d \"mcp-0.1\"\n       host \u003d \"ci.mcp-ci.local\"\n       project \u003d \"projectcalico/calico-containers\"\n     }\n   }\n\nChange-Id: I5f8390cdbbd3df06cffa703190534fe10ecfd1ca\n"
    },
    {
      "commit": "9021bbe21a0f05d2bc042da5eac3aaab93c3a6fa",
      "tree": "0d2cdbf16e8ea1f1fde940aecea255e0a3bd0b33",
      "parents": [
        "6e41b527c99cd0495636f3418493ed1030e184f1"
      ],
      "author": {
        "name": "Igor Belikov",
        "email": "ibelikov@mirantis.com",
        "time": "Wed Sep 28 19:22:20 2016 +0300"
      },
      "committer": {
        "name": "Igor Belikov",
        "email": "ibelikov@mirantis.com",
        "time": "Thu Sep 29 15:33:37 2016 +0300"
      },
      "message": "Initial structure and basic funtions\n\n* Create initial repository structure\n* Add gerritPatchsetCheckout and runTox global functions\n\nChange-Id: I3c716e12dec76bb405d33501bc260425419814be\n"
    },
    {
      "commit": "6e41b527c99cd0495636f3418493ed1030e184f1",
      "tree": "bf91ba69f6f0dcdb24b536860a91e6c43648ca21",
      "parents": [],
      "author": {
        "name": "Fuel Infra Jeepyb",
        "email": "anikitin+jeepyb@mirantis.com",
        "time": "Wed Sep 28 16:02:28 2016 +0000"
      },
      "committer": {
        "name": "Fuel Infra Jeepyb",
        "email": "anikitin+jeepyb@mirantis.com",
        "time": "Wed Sep 28 16:02:28 2016 +0000"
      },
      "message": "Added .gitreview\n"
    }
  ]
}
