{"action":"created","comment":{"url":"https://api.github.com/repos/OpenTOSCA/container/pulls/comments/226823152","pull_request_review_id":166745560,"id":226823152,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNjgyMzE1Mg==","diff_hunk":"@@ -0,0 +1,280 @@\n+package org.opentosca.planbuilder.core.bpel;\n+\n+import java.util.ArrayList;\n+import java.util.Iterator;\n+import java.util.List;\n+\n+import javax.xml.namespace.QName;\n+import javax.xml.parsers.ParserConfigurationException;\n+import javax.xml.soap.Node;\n+\n+import org.opentosca.container.core.tosca.convention.Interfaces;\n+import org.opentosca.planbuilder.AbstractTerminationPlanBuilder;\n+import org.opentosca.planbuilder.core.bpel.context.BPELPlanContext;\n+import org.opentosca.planbuilder.core.bpel.handlers.BPELPlanHandler;\n+import org.opentosca.planbuilder.core.bpel.helpers.BPELFinalizer;\n+import org.opentosca.planbuilder.core.bpel.helpers.NodeRelationInstanceVariablesHandler;\n+import org.opentosca.planbuilder.core.bpel.helpers.PropertyVariableInitializer;\n+import org.opentosca.planbuilder.core.bpel.helpers.PropertyVariableInitializer.PropertyMap;\n+import org.opentosca.planbuilder.core.bpel.helpers.ServiceInstanceVariablesHandler;\n+import org.opentosca.planbuilder.model.plan.AbstractPlan;\n+import org.opentosca.planbuilder.model.plan.bpel.BPELPlan;\n+import org.opentosca.planbuilder.model.plan.bpel.BPELScopeActivity;\n+import org.opentosca.planbuilder.model.tosca.AbstractDefinitions;\n+import org.opentosca.planbuilder.model.tosca.AbstractImplementationArtifact;\n+import org.opentosca.planbuilder.model.tosca.AbstractNodeTemplate;\n+import org.opentosca.planbuilder.model.tosca.AbstractNodeTypeImplementation;\n+import org.opentosca.planbuilder.model.tosca.AbstractServiceTemplate;\n+import org.opentosca.planbuilder.model.utils.ModelUtils;\n+import org.opentosca.planbuilder.plugins.IPlanBuilderPostPhasePlugin;\n+import org.slf4j.Logger;\n+import org.slf4j.LoggerFactory;\n+import org.w3c.dom.Element;\n+import org.w3c.dom.NodeList;\n+\n+/**\n+ * @author Jan Ruthardt - st107755@stud.uni-stuttgart.de\n+ *\n+ */\n+public class BPELFreezeProcessBuilder extends AbstractTerminationPlanBuilder {\n+\n+\tprivate final static Logger LOG = LoggerFactory.getLogger(BPELFreezeProcessBuilder.class);\n+\n+\t// handler for abstract buildplan operations\n+\tprivate BPELPlanHandler planHandler;\n+\n+\t// class for initializing properties inside the build plan\n+\tprivate final PropertyVariableInitializer propertyInitializer;\n+\t// adds serviceInstance Variable and instanceDataAPIUrl to buildPlans\n+\tprivate ServiceInstanceVariablesHandler serviceInstanceVarsHandler;\n+\t// adds nodeInstanceIDs to each templatePlan\n+\tprivate NodeRelationInstanceVariablesHandler instanceVarsHandler;\n+\t// class for finalizing build plans (e.g when some template didn't receive\n+\t// some provisioning logic and they must be filled with empty elements)\n+\tprivate final BPELFinalizer finalizer;\n+\n+\t// accepted operations for provisioning\n+\tprivate final List<String> opNames = new ArrayList<>();\n+\n+\t/**\n+\t * <p>\n+\t * Default Constructor\n+\t * </p>\n+\t */\n+\tpublic BPELFreezeProcessBuilder() {\n+\t\ttry {\n+\t\t\tthis.planHandler = new BPELPlanHandler();\n+\t\t\tthis.serviceInstanceVarsHandler = new ServiceInstanceVariablesHandler();\n+\t\t\tthis.instanceVarsHandler = new NodeRelationInstanceVariablesHandler(this.planHandler);\n+\t\t} catch (final ParserConfigurationException e) {\n+\t\t\tBPELFreezeProcessBuilder.LOG.error(\"Error while initializing BuildPlanHandler\", e);\n+\t\t}\n+\t\tthis.propertyInitializer = new PropertyVariableInitializer(this.planHandler);\n+\t\tthis.finalizer = new BPELFinalizer();\n+\t}\n+\n+\t/*\n+\t * (non-Javadoc)\n+\t *\n+\t * @see org.opentosca.planbuilder.IPlanBuilder#buildPlan(java.lang.String,\n+\t * org.opentosca.planbuilder.model.tosca.AbstractDefinitions,\n+\t * javax.xml.namespace.QName)\n+\t */\n+\t@Override\n+\tpublic BPELPlan buildPlan(final String csarName, final AbstractDefinitions definitions,\n+\t\t\tfinal QName serviceTemplateId) {\n+\t\tBPELFreezeProcessBuilder.LOG.info(\"Making Concrete Plans\");\n+\n+\t\tfor (final AbstractServiceTemplate serviceTemplate : definitions.getServiceTemplates()) {\n+\t\t\tString namespace;\n+\t\t\tif (serviceTemplate.getTargetNamespace() != null) {\n+\t\t\t\tnamespace = serviceTemplate.getTargetNamespace();\n+\t\t\t} else {\n+\t\t\t\tnamespace = definitions.getTargetNamespace();\n+\t\t\t}\n+\n+\t\t\tfinal String processName = ModelUtils.makeValidNCName(serviceTemplate.getId() + \"_freezePlan\");\n+\t\t\tfinal String processNamespace = serviceTemplate.getTargetNamespace() + \"_freezePlan\";\n+\n+\t\t\tfinal AbstractPlan newAbstractBackupPlan = generateTOG(new QName(processNamespace, processName).toString(),\n+\t\t\t\t\tdefinitions, serviceTemplate);\n+\n+\t\t\tfinal BPELPlan newTerminationPlan = this.planHandler.createEmptyBPELPlan(processNamespace, processName,\n+\t\t\t\t\tnewAbstractBackupPlan, \"freeze\");\n+\n+\t\t\tthis.planHandler.initializeBPELSkeleton(newTerminationPlan, csarName);\n+\n+\t\t\tthis.instanceVarsHandler.addInstanceURLVarToTemplatePlans(newTerminationPlan);\n+\t\t\tthis.instanceVarsHandler.addInstanceIDVarToTemplatePlans(newTerminationPlan);\n+\n+\t\t\tfinal PropertyMap propMap = this.propertyInitializer.initializePropertiesAsVariables(newTerminationPlan);\n+\n+\t\t\t// instanceDataAPI handling is done solely trough this extension\n+\t\t\tthis.planHandler.registerExtension(\"http://www.apache.org/ode/bpel/extensions/bpel4restlight\", true,\n+\t\t\t\t\tnewTerminationPlan);\n+\n+\t\t\t// initialize instanceData handling, add\n+\t\t\t// instanceDataAPI/serviceInstanceID into input, add global\n+\t\t\t// variables to hold the value for plugins\n+\t\t\tthis.serviceInstanceVarsHandler.addManagementPlanServiceInstanceVarHandlingFromInput(newTerminationPlan);\n+\t\t\tthis.serviceInstanceVarsHandler.initPropertyVariablesFromInstanceData(newTerminationPlan, propMap);\n+\n+\t\t\t// fetch all nodeinstances that are running\n+\t\t\tthis.instanceVarsHandler.addNodeInstanceFindLogic(newTerminationPlan,\n+\t\t\t\t\t\"?state=STARTED&amp;state=CREATED&amp;state=CONFIGURED\");\n+\t\t\tthis.instanceVarsHandler.addPropertyVariableUpdateBasedOnNodeInstanceID(newTerminationPlan, propMap);\n+\n+\t\t\tfinal List<BPELScopeActivity> changedActivities = runPlugins(newTerminationPlan, propMap);\n+\n+\t\t\tthis.serviceInstanceVarsHandler.addCorrellationID(newTerminationPlan);\n+\n+\t\t\tthis.finalizer.finalize(newTerminationPlan);\n+\n+\t\t\t// add for each loop over found node instances to terminate each running\n+\t\t\t// instance\n+\t\t\t/*\n+\t\t\t * for (final BPELScopeActivity activ : changedActivities) { if\n+\t\t\t * (activ.getNodeTemplate() != null) { final BPELPlanContext context = new\n+\t\t\t * BPELPlanContext(activ, propMap, newTerminationPlan.getServiceTemplate());\n+\t\t\t * this.instanceVarsHandler.appendCountInstancesLogic(context,\n+\t\t\t * activ.getNodeTemplate(),\n+\t\t\t * \"?state=STARTED&amp;state=CREATED&amp;state=CONFIGURED\"); } }\n+\t\t\t */\n+\n+\t\t\tBPELFreezeProcessBuilder.LOG.debug(\"Created Plan:\");\n+\t\t\tBPELFreezeProcessBuilder.LOG.debug(ModelUtils.getStringFromDoc(newTerminationPlan.getBpelDocument()));\n+\n+\t\t\treturn newTerminationPlan;\n+\t\t}\n+\n+\t\tBPELFreezeProcessBuilder.LOG.warn(\n+\t\t\t\t\"Couldn't create BackupPlan for ServiceTemplate {} in Definitions {} of CSAR {}\",\n+\t\t\t\tserviceTemplateId.toString(), definitions.getId(), csarName);\n+\t\treturn null;\n+\t}\n+\n+\t@Override\n+\tpublic List<AbstractPlan> buildPlans(final String csarName, final AbstractDefinitions definitions) {\n+\t\tBPELFreezeProcessBuilder.LOG.info(\"Builing the Plans\");\n+\t\tfinal List<AbstractPlan> plans = new ArrayList<>();\n+\t\tfor (final AbstractServiceTemplate serviceTemplate : definitions.getServiceTemplates()) {\n+\t\t\tQName serviceTemplateId;\n+\t\t\t// targetNamespace attribute doesn't has to be set, so we check it\n+\t\t\tif (serviceTemplate.getTargetNamespace() != null) {\n+\t\t\t\tserviceTemplateId = new QName(serviceTemplate.getTargetNamespace(), serviceTemplate.getId());\n+\t\t\t} else {\n+\t\t\t\tserviceTemplateId = new QName(definitions.getTargetNamespace(), serviceTemplate.getId());\n+\t\t\t}\n+\n+\t\t\tBPELFreezeProcessBuilder.LOG.debug(\"ServiceTemplate {} has no BackupPlan, generating BackuopPlan\",\n+\t\t\t\t\tserviceTemplateId.toString());\n+\t\t\tfinal BPELPlan newBuildPlan = buildPlan(csarName, definitions, serviceTemplateId);\n+\n+\t\t\tif (newBuildPlan != null) {\n+\t\t\t\tBPELFreezeProcessBuilder.LOG\n+\t\t\t\t\t\t.debug(\"Created BackupPlan \" + newBuildPlan.getBpelProcessElement().getAttribute(\"name\"));\n+\t\t\t\tplans.add(newBuildPlan);\n+\t\t\t}\n+\n+\t\t}\n+\t\treturn plans;\n+\t}\n+\n+\tprivate boolean isDockerContainer(final AbstractNodeTemplate nodeTemplate) {\n+\t\tif (nodeTemplate.getProperties() == null) {\n+\t\t\treturn false;\n+\t\t}\n+\t\tfinal Element propertyElement = nodeTemplate.getProperties().getDOMElement();\n+\t\tfinal NodeList childNodeList = propertyElement.getChildNodes();\n+\n+\t\tint check = 0;\n+\t\tboolean foundDockerImageProp = false;\n+\t\tfor (int index = 0; index < childNodeList.getLength(); index++) {\n+\t\t\tif (childNodeList.item(index).getNodeType() != Node.ELEMENT_NODE) {\n+\t\t\t\tcontinue;\n+\t\t\t}\n+\t\t\tif (childNodeList.item(index).getLocalName().equals(\"ContainerPort\")) {\n+\t\t\t\tcheck++;\n+\t\t\t} else if (childNodeList.item(index).getLocalName().equals(\"Port\")) {\n+\t\t\t\tcheck++;\n+\t\t\t} else if (childNodeList.item(index).getLocalName().equals(\"ContainerImage\")) {\n+\t\t\t\tfoundDockerImageProp = true;\n+\t\t\t}\n+\t\t}\n+\n+\t\tif (check != 2) {\n+\t\t\treturn false;\n+\t\t}\n+\t\treturn true;\n+\t}\n+\n+\t/**\n+\t * This Methods Finds out if a Service Template Container a freeze method and\n+\t * then creats a freeze plan out of this method\n+\t *\n+\t * @param plan            the plan to execute the plugins on\n+\t * @param serviceTemplate the serviceTemplate the plan belongs to\n+\t * @param propMap         a PropertyMapping from NodeTemplate to Properties to\n+\t *                        BPELVariables\n+\t */\n+\tprivate List<BPELScopeActivity> runPlugins(final BPELPlan plan, final PropertyMap propMap) {\n+\n+\t\tfinal List<BPELScopeActivity> changedActivities = new ArrayList<>();\n+\n+\t\tfor (final BPELScopeActivity templatePlan : plan.getTemplateBuildPlans()) {\n+\t\t\tif (templatePlan.getNodeTemplate() != null) {\n+\n+\t\t\t\t// Only looks at Nodes that are no docker engine\n+\t\t\t\tif (!org.opentosca.container.core.tosca.convention.Utils","path":"org.opentosca.planbuilder.core.bpel/src/org/opentosca/planbuilder/core/bpel/BPELFreezeProcessBuilder.java","position":228,"original_position":228,"commit_id":"9d67d225eee1deacb3ea23fa4462c81d049c7f60","original_commit_id":"9d67d225eee1deacb3ea23fa4462c81d049c7f60","user":{"login":"st107755","id":18166762,"node_id":"MDQ6VXNlcjE4MTY2NzYy","avatar_url":"https://avatars2.githubusercontent.com/u/18166762?v=4","gravatar_id":"","url":"https://api.github.com/users/st107755","html_url":"https://github.com/st107755","followers_url":"https://api.github.com/users/st107755/followers","following_url":"https://api.github.com/users/st107755/following{/other_user}","gists_url":"https://api.github.com/users/st107755/gists{/gist_id}","starred_url":"https://api.github.com/users/st107755/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/st107755/subscriptions","organizations_url":"https://api.github.com/users/st107755/orgs","repos_url":"https://api.github.com/users/st107755/repos","events_url":"https://api.github.com/users/st107755/events{/privacy}","received_events_url":"https://api.github.com/users/st107755/received_events","type":"User","site_admin":false},"body":"The Docker Engine is the DinD Container. It's not good for the security if i allow to run scripts on this.\r\nThe script could mess with the other deployed Services","created_at":"2018-10-20T10:30:03Z","updated_at":"2018-10-20T10:30:03Z","html_url":"https://github.com/OpenTOSCA/container/pull/84#discussion_r226823152","pull_request_url":"https://api.github.com/repos/OpenTOSCA/container/pulls/84","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/OpenTOSCA/container/pulls/comments/226823152"},"html":{"href":"https://github.com/OpenTOSCA/container/pull/84#discussion_r226823152"},"pull_request":{"href":"https://api.github.com/repos/OpenTOSCA/container/pulls/84"}},"in_reply_to_id":226608682},"pull_request":{"url":"https://api.github.com/repos/OpenTOSCA/container/pulls/84","id":215585888,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE1NTg1ODg4","html_url":"https://github.com/OpenTOSCA/container/pull/84","diff_url":"https://github.com/OpenTOSCA/container/pull/84.diff","patch_url":"https://github.com/OpenTOSCA/container/pull/84.patch","issue_url":"https://api.github.com/repos/OpenTOSCA/container/issues/84","number":84,"state":"open","locked":false,"title":"Feature/Generate Freeze- and Defrost Plans","user":{"login":"st107755","id":18166762,"node_id":"MDQ6VXNlcjE4MTY2NzYy","avatar_url":"https://avatars2.githubusercontent.com/u/18166762?v=4","gravatar_id":"","url":"https://api.github.com/users/st107755","html_url":"https://github.com/st107755","followers_url":"https://api.github.com/users/st107755/followers","following_url":"https://api.github.com/users/st107755/following{/other_user}","gists_url":"https://api.github.com/users/st107755/gists{/gist_id}","starred_url":"https://api.github.com/users/st107755/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/st107755/subscriptions","organizations_url":"https://api.github.com/users/st107755/orgs","repos_url":"https://api.github.com/users/st107755/repos","events_url":"https://api.github.com/users/st107755/events{/privacy}","received_events_url":"https://api.github.com/users/st107755/received_events","type":"User","site_admin":false},"body":"Automated resumption of scheduled TOSCA applications\r\n\r\nTwo new bpel plan builder added. \r\nThey create new backup plans if the interface \"http://opentosca.org/interfaces/backup\" is added\r\n\r\n- Start and end date:  25.04.18 - 25.10.18\r\n- Supervisor: Lukas Harzenetter\r\n\r\n","created_at":"2018-09-14T12:57:40Z","updated_at":"2018-10-20T10:30:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b749c54b4876c13ff2c6378791b8fdd430d2d52c","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":973155158,"node_id":"MDU6TGFiZWw5NzMxNTUxNTg=","url":"https://api.github.com/repos/OpenTOSCA/container/labels/in%20progress","name":"in progress","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/OpenTOSCA/container/pulls/84/commits","review_comments_url":"https://api.github.com/repos/OpenTOSCA/container/pulls/84/comments","review_comment_url":"https://api.github.com/repos/OpenTOSCA/container/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenTOSCA/container/issues/84/comments","statuses_url":"https://api.github.com/repos/OpenTOSCA/container/statuses/9d67d225eee1deacb3ea23fa4462c81d049c7f60","head":{"label":"OpenTOSCA:feature/backupPlan","ref":"feature/backupPlan","sha":"9d67d225eee1deacb3ea23fa4462c81d049c7f60","user":{"login":"OpenTOSCA","id":4577846,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ1Nzc4NDY=","avatar_url":"https://avatars0.githubusercontent.com/u/4577846?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenTOSCA","html_url":"https://github.com/OpenTOSCA","followers_url":"https://api.github.com/users/OpenTOSCA/followers","following_url":"https://api.github.com/users/OpenTOSCA/following{/other_user}","gists_url":"https://api.github.com/users/OpenTOSCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenTOSCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenTOSCA/subscriptions","organizations_url":"https://api.github.com/users/OpenTOSCA/orgs","repos_url":"https://api.github.com/users/OpenTOSCA/repos","events_url":"https://api.github.com/users/OpenTOSCA/events{/privacy}","received_events_url":"https://api.github.com/users/OpenTOSCA/received_events","type":"Organization","site_admin":false},"repo":{"id":23577967,"node_id":"MDEwOlJlcG9zaXRvcnkyMzU3Nzk2Nw==","name":"container","full_name":"OpenTOSCA/container","private":false,"owner":{"login":"OpenTOSCA","id":4577846,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ1Nzc4NDY=","avatar_url":"https://avatars0.githubusercontent.com/u/4577846?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenTOSCA","html_url":"https://github.com/OpenTOSCA","followers_url":"https://api.github.com/users/OpenTOSCA/followers","following_url":"https://api.github.com/users/OpenTOSCA/following{/other_user}","gists_url":"https://api.github.com/users/OpenTOSCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenTOSCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenTOSCA/subscriptions","organizations_url":"https://api.github.com/users/OpenTOSCA/orgs","repos_url":"https://api.github.com/users/OpenTOSCA/repos","events_url":"https://api.github.com/users/OpenTOSCA/events{/privacy}","received_events_url":"https://api.github.com/users/OpenTOSCA/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/OpenTOSCA/container","description":"OpenTOSCA Container - TOSCA Runtime","fork":false,"url":"https://api.github.com/repos/OpenTOSCA/container","forks_url":"https://api.github.com/repos/OpenTOSCA/container/forks","keys_url":"https://api.github.com/repos/OpenTOSCA/container/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenTOSCA/container/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenTOSCA/container/teams","hooks_url":"https://api.github.com/repos/OpenTOSCA/container/hooks","issue_events_url":"https://api.github.com/repos/OpenTOSCA/container/issues/events{/number}","events_url":"https://api.github.com/repos/OpenTOSCA/container/events","assignees_url":"https://api.github.com/repos/OpenTOSCA/container/assignees{/user}","branches_url":"https://api.github.com/repos/OpenTOSCA/container/branches{/branch}","tags_url":"https://api.github.com/repos/OpenTOSCA/container/tags","blobs_url":"https://api.github.com/repos/OpenTOSCA/container/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenTOSCA/container/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenTOSCA/container/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenTOSCA/container/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenTOSCA/container/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenTOSCA/container/languages","stargazers_url":"https://api.github.com/repos/OpenTOSCA/container/stargazers","contributors_url":"https://api.github.com/repos/OpenTOSCA/container/contributors","subscribers_url":"https://api.github.com/repos/OpenTOSCA/container/subscribers","subscription_url":"https://api.github.com/repos/OpenTOSCA/container/subscription","commits_url":"https://api.github.com/repos/OpenTOSCA/container/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenTOSCA/container/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenTOSCA/container/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenTOSCA/container/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenTOSCA/container/contents/{+path}","compare_url":"https://api.github.com/repos/OpenTOSCA/container/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenTOSCA/container/merges","archive_url":"https://api.github.com/repos/OpenTOSCA/container/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenTOSCA/container/downloads","issues_url":"https://api.github.com/repos/OpenTOSCA/container/issues{/number}","pulls_url":"https://api.github.com/repos/OpenTOSCA/container/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenTOSCA/container/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenTOSCA/container/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenTOSCA/container/labels{/name}","releases_url":"https://api.github.com/repos/OpenTOSCA/container/releases{/id}","deployments_url":"https://api.github.com/repos/OpenTOSCA/container/deployments","created_at":"2014-09-02T12:36:02Z","updated_at":"2018-10-02T14:30:20Z","pushed_at":"2018-10-19T13:43:56Z","git_url":"git://github.com/OpenTOSCA/container.git","ssh_url":"git@github.com:OpenTOSCA/container.git","clone_url":"https://github.com/OpenTOSCA/container.git","svn_url":"https://github.com/OpenTOSCA/container","homepage":"https://opentosca.github.io/container/","size":68228,"stargazers_count":33,"watchers_count":33,"language":"Java","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":18,"mirror_url":null,"archived":false,"open_issues_count":12,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":18,"open_issues":12,"watchers":33,"default_branch":"master"}},"base":{"label":"OpenTOSCA:master","ref":"master","sha":"0fd25f041c9a538ca54ead2a82ccf0718891feaa","user":{"login":"OpenTOSCA","id":4577846,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ1Nzc4NDY=","avatar_url":"https://avatars0.githubusercontent.com/u/4577846?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenTOSCA","html_url":"https://github.com/OpenTOSCA","followers_url":"https://api.github.com/users/OpenTOSCA/followers","following_url":"https://api.github.com/users/OpenTOSCA/following{/other_user}","gists_url":"https://api.github.com/users/OpenTOSCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenTOSCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenTOSCA/subscriptions","organizations_url":"https://api.github.com/users/OpenTOSCA/orgs","repos_url":"https://api.github.com/users/OpenTOSCA/repos","events_url":"https://api.github.com/users/OpenTOSCA/events{/privacy}","received_events_url":"https://api.github.com/users/OpenTOSCA/received_events","type":"Organization","site_admin":false},"repo":{"id":23577967,"node_id":"MDEwOlJlcG9zaXRvcnkyMzU3Nzk2Nw==","name":"container","full_name":"OpenTOSCA/container","private":false,"owner":{"login":"OpenTOSCA","id":4577846,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ1Nzc4NDY=","avatar_url":"https://avatars0.githubusercontent.com/u/4577846?v=4","gravatar_id":"","url":"https://api.github.com/users/OpenTOSCA","html_url":"https://github.com/OpenTOSCA","followers_url":"https://api.github.com/users/OpenTOSCA/followers","following_url":"https://api.github.com/users/OpenTOSCA/following{/other_user}","gists_url":"https://api.github.com/users/OpenTOSCA/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenTOSCA/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenTOSCA/subscriptions","organizations_url":"https://api.github.com/users/OpenTOSCA/orgs","repos_url":"https://api.github.com/users/OpenTOSCA/repos","events_url":"https://api.github.com/users/OpenTOSCA/events{/privacy}","received_events_url":"https://api.github.com/users/OpenTOSCA/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/OpenTOSCA/container","description":"OpenTOSCA Container - TOSCA Runtime","fork":false,"url":"https://api.github.com/repos/OpenTOSCA/container","forks_url":"https://api.github.com/repos/OpenTOSCA/container/forks","keys_url":"https://api.github.com/repos/OpenTOSCA/container/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenTOSCA/container/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenTOSCA/container/teams","hooks_url":"https://api.github.com/repos/OpenTOSCA/container/hooks","issue_events_url":"https://api.github.com/repos/OpenTOSCA/container/issues/events{/number}","events_url":"https://api.github.com/repos/OpenTOSCA/container/events","assignees_url":"https://api.github.com/repos/OpenTOSCA/container/assignees{/user}","branches_url":"https://api.github.com/repos/OpenTOSCA/container/branches{/branch}","tags_url":"https://api.github.com/repos/OpenTOSCA/container/tags","blobs_url":"https://api.github.com/repos/OpenTOSCA/container/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenTOSCA/container/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenTOSCA/container/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenTOSCA/container/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenTOSCA/container/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenTOSCA/container/languages","stargazers_url":"https://api.github.com/repos/OpenTOSCA/container/stargazers","contributors_url":"https://api.github.com/repos/OpenTOSCA/container/contributors","subscribers_url":"https://api.github.com/repos/OpenTOSCA/container/subscribers","subscription_url":"https://api.github.com/repos/OpenTOSCA/container/subscription","commits_url":"https://api.github.com/repos/OpenTOSCA/container/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenTOSCA/container/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenTOSCA/container/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenTOSCA/container/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenTOSCA/container/contents/{+path}","compare_url":"https://api.github.com/repos/OpenTOSCA/container/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenTOSCA/container/merges","archive_url":"https://api.github.com/repos/OpenTOSCA/container/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenTOSCA/container/downloads","issues_url":"https://api.github.com/repos/OpenTOSCA/container/issues{/number}","pulls_url":"https://api.github.com/repos/OpenTOSCA/container/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenTOSCA/container/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenTOSCA/container/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenTOSCA/container/labels{/name}","releases_url":"https://api.github.com/repos/OpenTOSCA/container/releases{/id}","deployments_url":"https://api.github.com/repos/OpenTOSCA/container/deployments","created_at":"2014-09-02T12:36:02Z","updated_at":"2018-10-02T14:30:20Z","pushed_at":"2018-10-19T13:43:56Z","git_url":"git://github.com/OpenTOSCA/container.git","ssh_url":"git@github.com:OpenTOSCA/container.git","clone_url":"https://github.com/OpenTOSCA/container.git","svn_url":"https://github.com/OpenTOSCA/container","homepage":"https://opentosca.github.io/container/","size":68228,"stargazers_count":33,"watchers_count":33,"language":"Java","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":18,"mirror_url":null,"archived":false,"open_issues_count":12,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":18,"open_issues":12,"watchers":33,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenTOSCA/container/pulls/84"},"html":{"href":"https://github.com/OpenTOSCA/container/pull/84"},"issue":{"href":"https://api.github.com/repos/OpenTOSCA/container/issues/84"},"comments":{"href":"https://api.github.com/repos/OpenTOSCA/container/issues/84/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenTOSCA/container/pulls/84/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenTOSCA/container/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenTOSCA/container/pulls/84/commits"},"statuses":{"href":"https://api.github.com/repos/OpenTOSCA/container/statuses/9d67d225eee1deacb3ea23fa4462c81d049c7f60"}},"author_association":"NONE"}}
{"actor":{"display_login":"st107755"}}