)]}'
{
  "log": [
    {
      "commit": "bc13d2645229d20c8fc4aae9d2c6b3b2c20dbc89",
      "tree": "1db7756109e84eb0ff7c0447c79a4f298c9c555d",
      "parents": [
        "c4cd5b70fe1607ba371f3061d27041530116e312"
      ],
      "author": {
        "name": "Artem Panchenko",
        "email": "apanchenko@mirantis.com",
        "time": "Fri Jan 20 12:40:58 2017 +0200"
      },
      "committer": {
        "name": "Artem Panchenko",
        "email": "apanchenko@mirantis.com",
        "time": "Fri Jan 27 12:57:13 2017 +0200"
      },
      "message": "Move Calico test/build/publish stuff to library\n\nSince we use the same stages by different Calico\npipelines, moved them to library in order to\nmake DRY jobs.\n\nChange-Id: Ibf4dc7712e463cb0e137f1de87289e30dff46fa1\n"
    },
    {
      "commit": "c4cd5b70fe1607ba371f3061d27041530116e312",
      "tree": "2818b7fd74683f9d5b9e65ec3a57add4028b7c87",
      "parents": [
        "b36e36ea262faf333e4a283fc62987110df145fb"
      ],
      "author": {
        "name": "asledzinskiy",
        "email": "asledzinskiy@mirantis.com",
        "time": "Wed Jan 25 16:50:56 2017 +0200"
      },
      "committer": {
        "name": "asledzinskiy",
        "email": "asledzinskiy@mirantis.com",
        "time": "Wed Jan 25 16:57:51 2017 +0200"
      },
      "message": "Remove env erase from runTest\n\n- Env erase shouldn\u0027t be part of runTest because it erases\nenvs between stages and so that all starts from scratch.\n- Env erase moved to separate function\n\nChange-Id: I49ed4ca05606486f5d4955d99cfa4e42f6cd9663\n"
    },
    {
      "commit": "b36e36ea262faf333e4a283fc62987110df145fb",
      "tree": "e24f6b3e5009a716d863f34dfbdf6d8ca3c27f61",
      "parents": [
        "b1aa0ff6d49751d98f41c35ee493619d58100b1b"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Jan 23 18:26:40 2017 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Jan 23 18:26:40 2017 +0200"
      },
      "message": "[k8s-slave] Running function can potentially return values\n\nWe can expect reutrning values from function which is running\non k8s cluster\n\nExample:\n  def artifacts \u003d common.runOnKubernetes([\n    function : this.\u0026buildCalicoContainers,\n    jnlpImg  : jnlpSlaveImg,\n    slaveImg : jenkinsSlaveImg\n  ])\n  // run system test\n  node (\u0027calico\u0027){\n    stage (\"Run system tests\") {\n       build job: \u0027calico.system-test.deploy\u0027, propagate: true, wait: true, parameters:\n        [\n            [$class: \u0027StringParameterValue\u0027, name: \u0027CALICO_NODE_IMAGE_REPO\u0027, value: artifacts[\"CALICO_NODE_IMAGE_REPO\"]],\n            [$class: \u0027StringParameterValue\u0027, name: \u0027CALICOCTL_IMAGE_REPO\u0027, value: artifacts[\"CALICOCTL_IMAGE_REPO\"]],\n            [$class: \u0027StringParameterValue\u0027, name: \u0027CALICO_VERSION\u0027, value: artifacts[\"CALICO_VERSION\"]],\n            [$class: \u0027StringParameterValue\u0027, name: \u0027MCP_BRANCH\u0027, value: \u0027mcp\u0027],\n        ]\n    }\n  }\n\nChange-Id: I058537700e0bec06d9e14b422d452e2e7eb45e23\n"
    },
    {
      "commit": "b1aa0ff6d49751d98f41c35ee493619d58100b1b",
      "tree": "930b089887a5e22003240ab2a69023431ef87ca3",
      "parents": [
        "e897d8f3b7e343516fb7a45b7b6a4f6a952405c5"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Jan 23 17:48:44 2017 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Jan 23 17:48:44 2017 +0200"
      },
      "message": "Fix type if instead of id\n\nChange-Id: I59ef5a2f05d7f9b1fc82e84075e9e18c5e4d3491\n"
    },
    {
      "commit": "e897d8f3b7e343516fb7a45b7b6a4f6a952405c5",
      "tree": "15c19281a2b99d570780aa487eb620ede0d6a7fb",
      "parents": [
        "e9e6faaed041bd3ab1813f6c366f63e6259f390f"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Jan 23 16:44:03 2017 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Mon Jan 23 15:18:11 2017 +0000"
      },
      "message": "Allow to run code on k8s-slave\n\nRun function on k8s cluster\n\n@param config LinkedHashMap\n   config includes next parameters:\n   - label, pod label\n   - function, code that should be run on k8s cluster\n   - jnlpImg, jnlp slave image\n   - slaveImg, slave image\n\nUsage example:\n def runFunc \u003d new com.mirantis.mcp.Common()\n  runFunc.runOnKubernetes ([\n    function : this.\u0026buildCalicoContainers,\n    slaveImg : \u0027sandbox-docker-dev-local.docker.mirantis.net/skulanov/jenkins-slave-images/calico-slave:1\u0027,\n    jnlpImg: \u0027docker-prod-virtual.docker.mirantis.net/mirantis/jenkins-slave-images/jnlp-slave:latest\u0027\n  ])\n\n //promotion example. In case of promotion we need only jnlp container\n def runFunc \u003d new com.mirantis.mcp.Common()\n runFunc.runOnKubernetes ([\n   jnlpImg: \u0027docker-prod-virtual.docker.mirantis.net/mirantis/jenkins-slave-images/jnlp-slave:latest\u0027,\n   function : this.\u0026promote_artifacts\n ])\n\nChange-Id: I167157a70d732455e5263d0a5e97854e5dc6a248\n"
    },
    {
      "commit": "e9e6faaed041bd3ab1813f6c366f63e6259f390f",
      "tree": "1bef1507c906c62f0cd3b846115d2551124d47a1",
      "parents": [
        "69307daca0723efff45b5a939521e5416f2df37f"
      ],
      "author": {
        "name": "Tatyana Leontovich",
        "email": "tleontovich@mirantis.com",
        "time": "Fri Jan 20 18:50:36 2017 +0200"
      },
      "committer": {
        "name": "Tatyana Leontovich",
        "email": "tleontovich@mirantis.com",
        "time": "Mon Jan 23 17:13:45 2017 +0200"
      },
      "message": "Add function run_e2e tests\n\nChange-Id: I8a84f35d9be4dcb43c96bff10495dc43ac2c3f35\n"
    },
    {
      "commit": "69307daca0723efff45b5a939521e5416f2df37f",
      "tree": "0fbe8a65eb19448cbcaddf69dd65d4f1b8f3d63a",
      "parents": [
        "f36af07eeafeea7e17921485857aa7ed472a5424"
      ],
      "author": {
        "name": "asledzinskiy",
        "email": "asledzinskiy@mirantis.com",
        "time": "Thu Jan 19 16:37:16 2017 +0200"
      },
      "committer": {
        "name": "Mateusz Matuszkowiak",
        "email": "mmatuszkowiak@mirantis.com",
        "time": "Fri Jan 20 12:30:58 2017 +0000"
      },
      "message": "Fix hyphen in package name\n\nChange-Id: Ie69e35996f90f5dad62a8f13df8b83bb009672fd\n"
    },
    {
      "commit": "f36af07eeafeea7e17921485857aa7ed472a5424",
      "tree": "e2c480d74784be1168901725217d4c09e2cfb6a7",
      "parents": [
        "e65f7b061dcc8e951bbeff470df53e0bc032575d"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Jan 20 13:35:57 2017 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Fri Jan 20 12:10:34 2017 +0000"
      },
      "message": "Re-use already running ssh-agent if any\n\nprepareSshAgentKey() will not start ssh-agent if there is already\nrunning any ssh-agent process, as the result there will be no\n\"config\" file (~/.ssh/ssh-agent.sh) and runSshAgentCommand fails\n\nInstead we need to re-use already running ssh-agent and re-construct\n  * SSH_AUTH_SOCK\n  * SSH_AGENT_PID\n\nE.g:\n  [env-01-configure-system] Running shell script\n   + head -n 1\n   + grep /tmp/ssh-.*/agent.*\n   + find /tmp/ -type s -name agent.*\n   + export SSH_AUTH_SOCK\u003d/tmp/ssh-NQmNvs9SM9wu/agent.5363\n   + echo /tmp/ssh-NQmNvs9SM9wu/agent.5363\n   + cut -d. -f2\n   + export SSH_AGENT_PID\u003d5363\n   + ssh-add /home/jenkins/.ssh/id_rsa_deployments-key\n   Identity added: /home/jenkins/.ssh/id_rsa_deployments-key (/home/jenkins/.ssh/id_rsa_deployments-key)\n\nChange-Id: I1e7126513fa623c83b5fdd3448a4654e24f09e33\n"
    },
    {
      "commit": "e65f7b061dcc8e951bbeff470df53e0bc032575d",
      "tree": "b66d87650b8d9cf3dbd768009a2439148476536c",
      "parents": [
        "e0948fd5ef25d25ca6f603014203d2af53ddc277"
      ],
      "author": {
        "name": "Tomáš Kukrál",
        "email": "tkukral@mirantis.com",
        "time": "Thu Jan 19 13:16:43 2017 +0100"
      },
      "committer": {
        "name": "Tomáš Kukrál",
        "email": "tkukral@mirantis.com",
        "time": "Thu Jan 19 16:04:22 2017 +0100"
      },
      "message": "Update k8s deploy steps\n\nChange deploy steps to comply with updated salt-formula-kubernetes\n\nChange-Id: I4ef1a542d82e4d241828873b40e261934538368a\n"
    },
    {
      "commit": "e0948fd5ef25d25ca6f603014203d2af53ddc277",
      "tree": "7aacf83cf56ac78a449ecd067721a4c4f89bd684",
      "parents": [
        "9fcec461a53ece5f5501c3473b2876ad780a7863"
      ],
      "author": {
        "name": "asledzinskiy",
        "email": "asledzinskiy@mirantis.com",
        "time": "Fri Jan 06 16:23:54 2017 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Wed Jan 18 11:08:10 2017 +0000"
      },
      "message": "Add common functions to run mcp-qa tests\n\n- Added RunTest package with function to run test\n- Added EnvActions package with functions to manipulate env\n- Added Common package with common functions\n\nChange-Id: I921c75f990e182c1264aeecf29780b2390cfcc9c\n"
    },
    {
      "commit": "88054e65efdfa90da645f59313d6dac9804ceda7",
      "tree": "f219f9382d146f30e6e97a3138b2dbe665760e31",
      "parents": [
        "e945ec9b39a50c8173f409cd653097023c66bcb9"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Jan 17 16:21:54 2017 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Jan 17 16:34:04 2017 +0200"
      },
      "message": "Add ability for anonymous gerrit code checkout\n\nChange-Id: I80eb5c651ff8a481b60616cb7f3170125e22387a\n"
    },
    {
      "commit": "e945ec9b39a50c8173f409cd653097023c66bcb9",
      "tree": "e4490dcb3a41bef4ece84541f48e04d1ea1d21fc",
      "parents": [
        "f89a188e398bfb1acbc803e655054df89077f5c8"
      ],
      "author": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Wed Dec 21 19:15:10 2016 +0400"
      },
      "committer": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Fri Jan 13 09:04:28 2017 +0000"
      },
      "message": "Switch *Checkout functions from closure to simple function\n\nBecause of scope visible problems for groovy closure in pipelines\nis better to switch to simple function.\n\nChange-Id: I993b2ba3cf311205e692c31e962f6a92b0a68100\n"
    },
    {
      "commit": "f89a188e398bfb1acbc803e655054df89077f5c8",
      "tree": "f4b117f40c766a5996d895e9246eba75c77a1b10",
      "parents": [
        "6f2bc66a3328d907a4ddaaa13b65caa376fce29d"
      ],
      "author": {
        "name": "Alexander Tivelkov",
        "email": "ativelkov@mirantis.com",
        "time": "Wed Jan 11 13:29:35 2017 +0300"
      },
      "committer": {
        "name": "Alexander Tivelkov",
        "email": "ativelkov@mirantis.com",
        "time": "Wed Jan 11 13:37:43 2017 +0300"
      },
      "message": "Screened credentials printing in openstack env\n\nAdded \"set +x\" / \"set -x\" commands to the generated openstack\nenvironment file to prevent password to be logged when the file is\nsourced during job execution.\n\nChange-Id: Id8622019a648619a5ea6c814fc06e430316af2f3\n"
    },
    {
      "commit": "6f2bc66a3328d907a4ddaaa13b65caa376fce29d",
      "tree": "55974f33e9664b7c9e81431cf55c32bff47c5d0b",
      "parents": [
        "ddb44d08c385c4d0bd4f89233a9fe363c10cac6f"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Thu Jan 05 11:52:47 2017 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Thu Jan 05 11:52:47 2017 +0100"
      },
      "message": "Avoid batch runs as we need to handle salt async calls first\n\nChange-Id: I3ac78edd57f18edc1fea5493da0865bb363bebb1\n"
    },
    {
      "commit": "ddb44d08c385c4d0bd4f89233a9fe363c10cac6f",
      "tree": "0d7d139d1e182e912ba2fe5124ed6e4909a20862",
      "parents": [
        "eeed8658c183d990b9df8da23a51285f15b0819c"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Wed Jan 04 13:17:04 2017 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Wed Jan 04 14:18:42 2017 +0100"
      },
      "message": "Overhauled Salt workflows to cope with NoCPS issue\n\nChange-Id: Ie5038233ad464e2b07f3e212354f78665e1f9494\n"
    },
    {
      "commit": "eeed8658c183d990b9df8da23a51285f15b0819c",
      "tree": "33544c68ffd79629d3f7f40a16010fe4df8f3987",
      "parents": [
        "bfd10f4804669a3b9db9a8c1d8df824a1eefc587"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 15:20:21 2017 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 15:20:30 2017 +0100"
      },
      "message": "No CSP for saltCommand function to fix hashmap serialization error\n\nChange-Id: I5c637ca3deb61649ae963be0be5b963c4b7025d1\n"
    },
    {
      "commit": "bfd10f4804669a3b9db9a8c1d8df824a1eefc587",
      "tree": "b17f621aca08b0c588d56e143e1588933d96b9b7",
      "parents": [
        "fc65ea7aae475030a4bc704f4f5a972a5e6e5750"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 13:40:12 2017 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 13:40:12 2017 +0100"
      },
      "message": "Fixed ommited http module include\n\nChange-Id: Id0fedc52b6501c9dadb88ba1359a6871aa72e86c\n"
    },
    {
      "commit": "fc65ea7aae475030a4bc704f4f5a972a5e6e5750",
      "tree": "55ff31ea91eda598e09d8ee80e11d8bdb3b66b09",
      "parents": [
        "7ebd00629546905be114e372002a5707f7828e8e"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 12:13:36 2017 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 12:13:36 2017 +0100"
      },
      "message": "Simple echo\n\nChange-Id: Icfc28f6fa08521d274f55762d22f895815850f97\n"
    },
    {
      "commit": "7ebd00629546905be114e372002a5707f7828e8e",
      "tree": "3b8ffad09fcbedd2a1c9fe8d83831c5281b7931d",
      "parents": [
        "eedc222d33857dbd51da9eb297c776fda9e45ee1"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 10:59:29 2017 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 10:59:29 2017 +0100"
      },
      "message": "Hackfix\n\nChange-Id: Ia09d93153ac5e62666db11ec9c895b2074686ada\n"
    },
    {
      "commit": "eedc222d33857dbd51da9eb297c776fda9e45ee1",
      "tree": "5a32f0a63c7c09bd39b7d9856aed45174902a4e8",
      "parents": [
        "dce8b479cba49663035bece7db4bfe3078d87506"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 10:10:03 2017 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Tue Jan 03 10:10:03 2017 +0100"
      },
      "message": "Debug output\n\nChange-Id: Ia3d3bb51c68529e1b1345f6d90b619e6bbe89d28\n"
    },
    {
      "commit": "dce8b479cba49663035bece7db4bfe3078d87506",
      "tree": "c5b0aae8fb7be6e420fdaa072d5fee356899e6a9",
      "parents": [
        "c6d28dda61d002412f688e36fcef36962f5b5231"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Fri Dec 30 16:56:07 2016 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Fri Dec 30 16:56:07 2016 +0100"
      },
      "message": "Fixed status condition\n\nChange-Id: If78b271ecd70efb812e980037952d36563db518a\n"
    },
    {
      "commit": "c6d28dda61d002412f688e36fcef36962f5b5231",
      "tree": "3eed3a16286a66d22f1294b9dff342a4dafe0be9",
      "parents": [
        "e11e87940ec5c1098b398af3217cc94245f99c04"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Wed Dec 28 12:59:38 2016 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Wed Dec 28 12:59:38 2016 +0100"
      },
      "message": "No python module prefix\n\nChange-Id: I6e9a6da78eb69bb536087f4d232a0beb23ac48ae\n"
    },
    {
      "commit": "e11e87940ec5c1098b398af3217cc94245f99c04",
      "tree": "c97b6e55376ff5b5d865f75684b16f0bbc0ca526",
      "parents": [
        "6307d34c4ae19260ea45813cdc0fbd5062dff532"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Wed Dec 28 09:42:25 2016 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Wed Dec 28 09:42:25 2016 +0100"
      },
      "message": "Fixed abdundant parameter\n\nChange-Id: I54778c982d7958107564119dc4f399bed502cbc3\n"
    },
    {
      "commit": "6307d34c4ae19260ea45813cdc0fbd5062dff532",
      "tree": "63b9ab437255702a649b8ebc780e6f30c26bc17f",
      "parents": [
        "67af6c2a675e1d0640849e5e35d743f70fcc215b"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Dec 27 14:29:31 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Tue Dec 27 14:29:31 2016 +0200"
      },
      "message": "Supress private key output in jenkins console\n\nChange-Id: I0fa3f48388da50daac16dc4532952cbcde48719a\n"
    },
    {
      "commit": "67af6c2a675e1d0640849e5e35d743f70fcc215b",
      "tree": "4227667d6e1ea4cdc9a1c7e6761d43f4b49b6c10",
      "parents": [
        "d874d480bf2edae5389c6a5642af0a0752b1ece2"
      ],
      "author": {
        "name": "iberezovskiy",
        "email": "iberezovskiy@mirantis.com",
        "time": "Mon Dec 26 18:17:21 2016 +0400"
      },
      "committer": {
        "name": "iberezovskiy",
        "email": "iberezovskiy@mirantis.com",
        "time": "Mon Dec 26 18:18:48 2016 +0400"
      },
      "message": "Fix prepareSshAgentKey method in MK ssl\n\nWe need to include MK common to use\ngetSshCredentials method inside prepareSshAgentKey.\n\nChange-Id: Ia94a9cb6f019bfbc8fadb7d133694fc1d7460f8d\n"
    },
    {
      "commit": "d874d480bf2edae5389c6a5642af0a0752b1ece2",
      "tree": "d9032c7252a14fef2a028b17b3b2c0110b79d198",
      "parents": [
        "c000c150eae946a26d315c71cd15283e678c258a"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Mon Dec 26 10:33:29 2016 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Mon Dec 26 10:33:29 2016 +0100"
      },
      "message": "Pip based docutols\n\nChange-Id: I09d51954f01d8dac5e651852b5b164ad1166e7cd\n"
    },
    {
      "commit": "c000c150eae946a26d315c71cd15283e678c258a",
      "tree": "022707416c46f43f72536ab992406daa6345a449",
      "parents": [
        "0e558ee30998e405ddc27669cdc5b1b208a0eeda"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Fri Dec 23 15:32:54 2016 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Fri Dec 23 15:36:37 2016 +0100"
      },
      "message": "Escaped new line character and added MCP processes\n\nChange-Id: If537b3b908d7690542282765c5dba37674cfe691\n"
    },
    {
      "commit": "0e558ee30998e405ddc27669cdc5b1b208a0eeda",
      "tree": "ecb0eab29620b6c729adb2cbf53943e828e80dde",
      "parents": [
        "ba20398337517c47040f10774ef1da91afd198c0"
      ],
      "author": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Fri Dec 23 13:02:55 2016 +0100"
      },
      "committer": {
        "name": "Ales Komarek",
        "email": "akomarek@mirantis.com",
        "time": "Fri Dec 23 13:03:41 2016 +0100"
      },
      "message": "Fix Keystone RC and parser\n\nChange-Id: I0b4657bcbd46917e355916aa62cbd1578563ee67\n"
    },
    {
      "commit": "ba20398337517c47040f10774ef1da91afd198c0",
      "tree": "4b77810760db3c77042a74a1150d5606bf6e53d1",
      "parents": [
        "a56d231cb26d376f99ee1e222bdb1687a7d29630"
      ],
      "author": {
        "name": "Sergey Kolekonov",
        "email": "skolekonov@mirantis.com",
        "time": "Wed Dec 21 18:32:17 2016 +0400"
      },
      "committer": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Thu Dec 22 09:15:55 2016 +0000"
      },
      "message": "Add mk libraries\n\nChange-Id: I829b299b6329e8f4d4424c89717d432513d1eece\n"
    },
    {
      "commit": "bb1f8795e1c4d5dd510931abf1bcb9c6dd1e4582",
      "tree": "58eb8af0cc54194d50a7582281fe7b2cfb2839e3",
      "parents": [
        "2bc89179c01bf0f5d9befd0f32a3d56f58e2725f"
      ],
      "author": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Wed Dec 21 13:13:24 2016 +0400"
      },
      "committer": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Wed Dec 21 13:41:42 2016 +0000"
      },
      "message": "Allow to wipe workspace before cloning for gitSSHCheckout for Mirantis package\n\nPatch I0a1c8491584b7e50140b738303bad9240fd7f347 missed this change for\nmain lib package, so let\u0027s add it, because basic \u0027vars\u0027 functions will\nbe removed.\n\nChange-Id: Ic1dec6bd48ca82d87a730e85b4730d25cbcafa8f\n"
    },
    {
      "commit": "2bc89179c01bf0f5d9befd0f32a3d56f58e2725f",
      "tree": "5e41fec8d8135aa55b39060a591900e878c26544",
      "parents": [
        "0327d507ee3c32240bb21c7b9280c8ec4a0cf864"
      ],
      "author": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Wed Dec 21 17:31:19 2016 +0400"
      },
      "committer": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Wed Dec 21 17:33:27 2016 +0400"
      },
      "message": "Add missed definition for Docker function\n\nChange-Id: I7e07ff3d1ad0fb518c1762d77288babeaaeeccc5\n"
    },
    {
      "commit": "8c60655dc08ab26968359621cba838d6a4f1eddb",
      "tree": "a14d3ee0429926f2c218e7197d9df9db0eee54ec",
      "parents": [
        "33043c1cfd630c7f16db7fb358e647168eef2e5a"
      ],
      "author": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Wed Dec 07 14:22:50 2016 +0400"
      },
      "committer": {
        "name": "Denis Egorenko",
        "email": "degorenko@mirantis.com",
        "time": "Mon Dec 12 18:18:40 2016 +0400"
      },
      "message": "Refactor var functions of Pipeline library\n\nMove all named functions under com.mirantis.mcp package\n\nChange-Id: I98002e038173fce2325d069e951b221c61109e69\n"
    },
    {
      "commit": "12b3f1629f66437caf8a56b2a2a31232baf30ad9",
      "tree": "d69f0620af0bc5c47d4e91241bcc54fc5b45819f",
      "parents": [
        "3f117e832fd41368f3f896a2bd880ee54609345c"
      ],
      "author": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Dec 01 11:29:12 2016 +0200"
      },
      "committer": {
        "name": "Sergey Kulanov",
        "email": "skulanov@mirantis.com",
        "time": "Thu Dec 01 11:29:12 2016 +0200"
      },
      "message": "Remove ci.mcp.Tools package\n\nInstead one must use packages from com.mirantis.mcp.* namespace\n\nChange-Id: I43808b56642fc84deac933323b33172ce433775c\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": "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": "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": "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": "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": "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": "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": "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": "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": "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"
    }
  ]
}
