{"action":"created","comment":{"url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/comments/87892196","pull_request_review_id":8473636,"id":87892196,"diff_hunk":"@@ -0,0 +1,297 @@\n+HOL - BDD-Security Framework integration into VSTS\n+=========================================\n+\n+BDD-Security is a security testing framework that uses Behavior Driven Development concepts to create self-verifying security specifications. In this lab you will set up BDD-Security framework on a Linux VM running in Azure and trigger test runs during release stage to dev environment.\n+\n+\n+## Pre-requisites:\n+\n+* [HOL - Continuous Integration](https://github.com/Microsoft/PartsUnlimitedMRP/tree/master/docs/HOL_Continuous-Integration)\n+\n+* [HOL - Continuous Deployment](https://github.com/Microsoft/PartsUnlimitedMRP/tree/master/docs/HOL_Continuous-Deployment)\n+\n+\n+## Tasks Overview:\n+**1. Create a Ubuntu VM in Azure** This task walks you though creating an Ubuntu 16.10 VM in Azure.  \n+\n+**2. Set up BDD-Security Framework on Ubuntu VM** In this task you will install prerequisites for BDD-Security Framework and then install and set up framework itself through a SSH client.\n+\n+**3. Integrate BDD-Security into VSTS** In this task you will update Continuous Integration and Continuous Deployment definition in VSTS to trigger test runs and then publish test results.\n+\n+**4. Update BDD-Security to include more tests** In this task you will add more tests to run by BDD-Security framework. You will also learn how to find the exact reason for test failure.\n+\n+\n+\n+## HOL:\n+\n+### Task 1: Create a Ubuntu VM in Azure\n+To integrate BDD-Security with VSTS, you need to create a VM where all the tests are going to be run on.\n+\n+**Step 1.** Open Azure Portal, navigate to the resource group with your environment and click on \"Add\".\n+\n+![](media/1.png)\n+\n+\n+**Step 2.** Enter `Ubuntu Server 16.10` into the search field, press \"Enter\", select `Ubuntu Server 16.10` option and click on \"Create\".  \n+\n+![](media/2.png)\n+\n+\n+**Step 3.** Enter \"Name\", \"User name\", select \"Password\" as authentication type, enter \"Password\" for this VM and confirm it, choose your subscription and click on \"OK\".\n+\n+![](media/3.png)\n+\n+\n+**Step 4.** Choose \"DS`X`\\_V`X` Standard\" size on the next page and click \"Select\".   \n+\n+\n+**Step 5.** On the next page, leave everything as defaults and click \"OK\".\n+\n+\n+**Step 6.** On the final page, just click on \"OK\".\n+\n+\n+\n+### Task 2: Set up BDD-Security Framework on Ubuntu VM\n+\n+**Step 1.** Navigate to your Resource Group and click on the newly created VM.\n+\n+![](media/4.png)\n+\n+\n+**Step 2.** On \"Overview\" page, copy the public IP address.\n+\n+![](media/5.png)\n+\n+\n+**Step 3.** Open your preferred SSH client and connect to your Ubuntu machine.\n+\n+![](media/6.png)\n+>**Note:** In this lab we use [PuTTY](http://www.putty.org/) ssh client.\n+\n+\n+**Step 4.** When the security warning will pop up, note the fingerprint of the Ubuntu VM. This fingerprint is required for VSTS setup later on. Click on \"Yes\" to add fingerprint to your machine and connect to the machine.\n+\n+![](media/9.png)\n+\n+**Step 5.** Enter your credentials to your VM.\n+\n+![](media/7.png)\n+\n+\n+**Step 6.** Download and install Java Development Kit (JDK) 8 on this VM using the following commands:\n+\n+```\n+sudo apt-get update\n+sudo apt-get install default-jre -y\n+sudo apt-get install default-jdk -y\n+export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64\n+export PATH=$PATH:/usr/lib/jvm/java-8-openjdk-amd64/bin\n+```\n+>**Note:** Ubuntu 16.10 is shipped with java 8 by default.\n+\n+\n+**Step 7.** Clone [BDD-Security]( https://github.com/continuumsecurity/bdd-security) repository and navigate to it.\n+```\n+git clone https://github.com/continuumsecurity/bdd-security.git\n+cd bdd-security/\n+```\n+\n+\n+**Step 8.** Modify `config.xml` file.\n+\n+1. Use the following command to open `config.xml`:\n+    ```\n+    nano config.xml\n+    ```\n+\n+2. Update the following tags:\n+  * baseUrl: URL to your MRP solution\n+  * class: `net.continuumsecurity.CustomApplication`\n+\n+    ![](media/8.png)\n+\n+3. Save the changes and exit the editor. Press `Ctrl+x` to indicate that you want to exit the editor. Press `Y` to save the changes and press `Enter` to confirm file name.\n+\n+\n+**Step 9.** Create `CustomApplication.java` .\n+\n+1. Run the following command to create the `CustomApplication.java` file\n+\n+    ```\n+    cat > src/test/java/net/continuumsecurity/CustomApplication.java\n+    ```\n+\n+2. Copy the following code into the console:\n+\n+    ```\n+    package net.continuumsecurity;\n+\n+    import net.continuumsecurity.Config;\n+    import net.continuumsecurity.Credentials;\n+    import net.continuumsecurity.UserPassCredentials;\n+    import net.continuumsecurity.behaviour.ILogin;\n+    import net.continuumsecurity.behaviour.ILogout;\n+    import net.continuumsecurity.behaviour.INavigable;\n+    import net.continuumsecurity.web.WebApplication;\n+    import org.openqa.selenium.By;\n+\n+    public class CustomApplication extends WebApplication implements INavigable {\n+\n+        public void navigate() {\n+        }\n+    }\n+    ```\n+\n+3. Press `Ctrl+d` to save the file with the content specified.\n+\n+\n+**Step 10.** Trigger a build of BDD-Security framework using the following command:\n+```\n+./gradlew -Dcucumber.options=\"--tags @app_scan --tags ~@skip\"\n+```\n+\n+\n+\n+### Task 3: Integrate BDD-Security into VSTS\n+\n+**Step 1.** Update the build definition to include the BDD-Security script as an artifact.\n+\n+1.  Open your VSTS and navigate to \"Build & Release\" of your MRP project and click on \"Builds\".\n+\n+    ![](media/10.png)\n+\n+2. Click on ellipses (...) next to your build definition and select \"Edit...\"\n+\n+    ![](media/24.png)\n+\n+3. Select `Copy Publish Artifact: deploy` task, add `**/deploy/SSH-MRP-BDD-Security.ps1` on a new line in `Contents` and save this definition by clicking on \"Save\".\n+\n+    ![](media/25.png)\n+\n+4. Create a new build by clicking on \"Queue new build\", then \"OK\".\n+\n+    ![](media/26.png)\n+\n+**Step 2.** Navigate to \"Build & Release\" of your MRP project and click on \"Releases\".\n+\n+![](media/11.png)\n+\n+\n+**Step 3.** Select your Release Definition and click on \"Edit\".\n+\n+![](media/12.png)\n+\n+\n+**Step 4.** Add new PowerShell task by clicking on \"Add tasks\", in \"Utility\" category click on \"Add\" next to \"PowerShell\", then click on \"Close\".\n+\n+![](media/14.png)\n+\n+**Step 5.** Change name of the task to \"BDD-Security\" and set the following values into the task's fields:\n+\n+  * Type: `File Path`\n+  * Script Path:  `$(System.DefaultWorkingDirectory)/PartsUnlimitedMRP.CI/deploy/SSH-MRP-BDD-Security.ps1`\n+  * Arguments: `-sshUser $(BDDSecurityUser) -sshPassword $(BDDSecurityPassword) -sshTarget $(BDDSecurityIP) -sshKey $(BDDSecurityKey)`\n+\n+    ![](media/15.png)\n+\n+**Step 6.** Let's define the variables in this environment.\n+\n+1.  Click on ellipses(...) next to `Dev` environment definition, then on \"Configure variables...\".\n+\n+    ![](media/16.png)\n+\n+2.  Add `BDDSecurityUser` and `BDDSecurityPassword` variables, set their values to the credentials of the BDD-Security VM. Add `BDDSecurityIP` variable and set its value to the IP address or DNS name of the BDD-Security VM. Add `BDDSecurityKey` and set its value to fingerprint of your Ubuntu Machine. Click on \"OK\".\n+\n+    ![](media/17.png)\n+    >**Note:** if you haven't noted the fingerprint of your Ubuntu machine before, you can connect to it using SSH and run the following command: `ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_rsa_key.pub`\n+\n+\n+**Step 7.** Add a new task by clicking on “Add tasks”, in \"Test\" category click on “Add” next to \"Publish Test Results\", then click on \"Close\".\n+\n+  ![](media/20.png)\n+\n+\n+**Step 8.** Change name of this step to `Publish Security Test Results`, then fill in the fields in the following way:\n+\n+* Test Result Format: `JUnit`\n+* Test Results Files: `$(System.DefaultWorkingDirectory)/all_tests.xml`\n+* Test Run Title: `Security Test`\n+* Always run: Ticked\n+\n+    ![](media/21.png)\n+\n+**Step 9.** Save the changes by clicking on \"Save\" and then \"OK\".\n+\n+  ![](media/22.png)\n+\n+**Step 10.** Create a new release to run the security tests. Click on \"Release\" button, select \"Create Release\", select the latest build(created at the beginning of this task) and click on \"Create\".\n+\n+  ![](media/23.png)\n+\n+**Step 11.** Once the release has successfully completed, lets check test result.\n+\n+1. Hover over \"Test\" and then click on \"Runs\".\n+\n+    ![](media/27.png)\n+\n+2. Double click on the latest test results.\n+\n+    ![](media/28.png)\n+\n+3. All of the 16 selected tests should have passed and you should see the following summary.\n+\n+    ![](media/29.png)\n+\n+\n+\n+### Task 4: Update BDD-Security to include more tests\n+\n+**Step 1.** Lets add more tests to be run by BDD-Security. Navigate to the location where you keep your PartsUnlimitedMRP repository and open **SSH-MRP-BDD-Security.ps1** script located at **PartsUnlimitedMRP -> deploy**.\n+\n+\n+**Step 2.** Replace `./gradlew -Dcucumber.options=\"--tags @app_scan --tags ~@skip\"` with:\n+\n+ ```\n+ ./gradlew -Dcucumber.options=\"--tags @app_scan,@host_config --tags ~@skip\"\n+ ```\n+\n+\n+**Step 3.** At this stage you should also address a possibility of insecure website being promoted to production environment. Add the following code at the end of the script to fail the release if there were errors in test results:\n+```\n+# If file with results contains \"failed\" then returning non-zero value will indicate error and fail the build.\n+return @(Get-Content all_tests.xml | Where-Object { $_.Contains(\"failed\") }).Count\n+```\n+>**Note:** This is not required to fail the build if you have \"Fail on Standard Error\" ticked (by default) on \"BDD-Security\" task.\n+    ![](media/30.png)\n+\n+\n+**Step 4.** Save `SSH-MRP-BDD-Security.ps1`. Open command line (which supports git) and navigate to your PartsUnlimitedMRP repository location. Run the following commands to add these changes to the remote repo and trigger automatic build and release.\n+\n+```\n+git add .\n+git commit -m \"added more tests to run by SSH-MRP-BDD-Security.ps1\"\n+git push\n+```\n+\n+\n+**Step 5.** Once the build and release have completed executing, open test runs in VSTS again and click on the latest result.\n+\n+  ![](media/31.png)\n+\n+\n+**Step 6.** You should see the summary indicating that one test has failed. To investigate the reason of failure, download the attachment `all_tests.xml` by clicking on it.\n+\n+  ![](media/32.png)\n+\n+\n+**Step 7.** Open downloaded `all_tests.xml` in text editor and find which test has failed. Based on the stack trace, a port test has failed by finding open ports other than 80 and 443. To fix this issue, you will need to modify the test to expect 22 to be open and run tests again.","path":"docs/HOL_BDD-Security-Framework-integration-into-VSTS/README.md","position":288,"original_position":288,"commit_id":"a44556c6a58e65fc3759345e40a084993d24599a","original_commit_id":"a44556c6a58e65fc3759345e40a084993d24599a","user":{"login":"gavinbarron","id":7122716,"avatar_url":"https://avatars.githubusercontent.com/u/7122716?v=3","gravatar_id":"","url":"https://api.github.com/users/gavinbarron","html_url":"https://github.com/gavinbarron","followers_url":"https://api.github.com/users/gavinbarron/followers","following_url":"https://api.github.com/users/gavinbarron/following{/other_user}","gists_url":"https://api.github.com/users/gavinbarron/gists{/gist_id}","starred_url":"https://api.github.com/users/gavinbarron/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gavinbarron/subscriptions","organizations_url":"https://api.github.com/users/gavinbarron/orgs","repos_url":"https://api.github.com/users/gavinbarron/repos","events_url":"https://api.github.com/users/gavinbarron/events{/privacy}","received_events_url":"https://api.github.com/users/gavinbarron/received_events","type":"User","site_admin":false},"body":"Give instructions on how to modify this test fix this please.","created_at":"2016-11-14T21:04:08Z","updated_at":"2016-11-14T21:05:44Z","html_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP/pull/3#discussion_r87892196","pull_request_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3","_links":{"self":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/comments/87892196"},"html":{"href":"https://github.com/Intergen-NZ/PartsUnlimitedMRP/pull/3#discussion_r87892196"},"pull_request":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3"}}},"pull_request":{"url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3","id":91122280,"html_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP/pull/3","diff_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP/pull/3.diff","patch_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP/pull/3.patch","issue_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/3","number":3,"state":"open","locked":false,"title":"BDD-Security-framework-integration-into-VSTS (Gavin)","user":{"login":"bernarden","id":12289537,"avatar_url":"https://avatars.githubusercontent.com/u/12289537?v=3","gravatar_id":"","url":"https://api.github.com/users/bernarden","html_url":"https://github.com/bernarden","followers_url":"https://api.github.com/users/bernarden/followers","following_url":"https://api.github.com/users/bernarden/following{/other_user}","gists_url":"https://api.github.com/users/bernarden/gists{/gist_id}","starred_url":"https://api.github.com/users/bernarden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bernarden/subscriptions","organizations_url":"https://api.github.com/users/bernarden/orgs","repos_url":"https://api.github.com/users/bernarden/repos","events_url":"https://api.github.com/users/bernarden/events{/privacy}","received_events_url":"https://api.github.com/users/bernarden/received_events","type":"User","site_admin":false},"body":"","created_at":"2016-10-27T02:18:53Z","updated_at":"2016-11-14T21:05:44Z","closed_at":null,"merged_at":null,"merge_commit_sha":"75efaeab0e62b56e0de6ef79c0096ef7ada7a01e","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3/commits","review_comments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3/comments","review_comment_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/3/comments","statuses_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/statuses/a44556c6a58e65fc3759345e40a084993d24599a","head":{"label":"Intergen-NZ:feature/BDD-Security-framework-integration-into-VSTS","ref":"feature/BDD-Security-framework-integration-into-VSTS","sha":"a44556c6a58e65fc3759345e40a084993d24599a","user":{"login":"Intergen-NZ","id":17167744,"avatar_url":"https://avatars.githubusercontent.com/u/17167744?v=3","gravatar_id":"","url":"https://api.github.com/users/Intergen-NZ","html_url":"https://github.com/Intergen-NZ","followers_url":"https://api.github.com/users/Intergen-NZ/followers","following_url":"https://api.github.com/users/Intergen-NZ/following{/other_user}","gists_url":"https://api.github.com/users/Intergen-NZ/gists{/gist_id}","starred_url":"https://api.github.com/users/Intergen-NZ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Intergen-NZ/subscriptions","organizations_url":"https://api.github.com/users/Intergen-NZ/orgs","repos_url":"https://api.github.com/users/Intergen-NZ/repos","events_url":"https://api.github.com/users/Intergen-NZ/events{/privacy}","received_events_url":"https://api.github.com/users/Intergen-NZ/received_events","type":"Organization","site_admin":false},"repo":{"id":70638190,"name":"PartsUnlimitedMRP","full_name":"Intergen-NZ/PartsUnlimitedMRP","owner":{"login":"Intergen-NZ","id":17167744,"avatar_url":"https://avatars.githubusercontent.com/u/17167744?v=3","gravatar_id":"","url":"https://api.github.com/users/Intergen-NZ","html_url":"https://github.com/Intergen-NZ","followers_url":"https://api.github.com/users/Intergen-NZ/followers","following_url":"https://api.github.com/users/Intergen-NZ/following{/other_user}","gists_url":"https://api.github.com/users/Intergen-NZ/gists{/gist_id}","starred_url":"https://api.github.com/users/Intergen-NZ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Intergen-NZ/subscriptions","organizations_url":"https://api.github.com/users/Intergen-NZ/orgs","repos_url":"https://api.github.com/users/Intergen-NZ/repos","events_url":"https://api.github.com/users/Intergen-NZ/events{/privacy}","received_events_url":"https://api.github.com/users/Intergen-NZ/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP","description":"Parts Unlimited MRP is a fictional outsourced Manufacturing Resource Planning (MRP) application based on The Phoenix Project by Gene Kim, Kevin Behr and George Spafford. The application uses entirely open source software including Linux, Java, Apache, and MongoDB which creates a web front end, an order service, and an integration service.","fork":true,"url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP","forks_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/forks","keys_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/teams","hooks_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/hooks","issue_events_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/events{/number}","events_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/events","assignees_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/assignees{/user}","branches_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/branches{/branch}","tags_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/tags","blobs_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/refs{/sha}","trees_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/statuses/{sha}","languages_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/languages","stargazers_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/stargazers","contributors_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/contributors","subscribers_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/subscribers","subscription_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/subscription","commits_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/commits{/sha}","git_commits_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/commits{/sha}","comments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/comments{/number}","issue_comment_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/comments{/number}","contents_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/contents/{+path}","compare_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/merges","archive_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/downloads","issues_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues{/number}","pulls_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls{/number}","milestones_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/milestones{/number}","notifications_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/labels{/name}","releases_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/releases{/id}","deployments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/deployments","created_at":"2016-10-11T21:48:19Z","updated_at":"2016-10-11T21:48:20Z","pushed_at":"2016-11-09T22:27:35Z","git_url":"git://github.com/Intergen-NZ/PartsUnlimitedMRP.git","ssh_url":"git@github.com:Intergen-NZ/PartsUnlimitedMRP.git","clone_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP.git","svn_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP","homepage":"","size":57416,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":4,"forks":0,"open_issues":4,"watchers":0,"default_branch":"master"}},"base":{"label":"Intergen-NZ:master","ref":"master","sha":"aab0c0d098027ded2e2389ed4681f984b4a9ad5d","user":{"login":"Intergen-NZ","id":17167744,"avatar_url":"https://avatars.githubusercontent.com/u/17167744?v=3","gravatar_id":"","url":"https://api.github.com/users/Intergen-NZ","html_url":"https://github.com/Intergen-NZ","followers_url":"https://api.github.com/users/Intergen-NZ/followers","following_url":"https://api.github.com/users/Intergen-NZ/following{/other_user}","gists_url":"https://api.github.com/users/Intergen-NZ/gists{/gist_id}","starred_url":"https://api.github.com/users/Intergen-NZ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Intergen-NZ/subscriptions","organizations_url":"https://api.github.com/users/Intergen-NZ/orgs","repos_url":"https://api.github.com/users/Intergen-NZ/repos","events_url":"https://api.github.com/users/Intergen-NZ/events{/privacy}","received_events_url":"https://api.github.com/users/Intergen-NZ/received_events","type":"Organization","site_admin":false},"repo":{"id":70638190,"name":"PartsUnlimitedMRP","full_name":"Intergen-NZ/PartsUnlimitedMRP","owner":{"login":"Intergen-NZ","id":17167744,"avatar_url":"https://avatars.githubusercontent.com/u/17167744?v=3","gravatar_id":"","url":"https://api.github.com/users/Intergen-NZ","html_url":"https://github.com/Intergen-NZ","followers_url":"https://api.github.com/users/Intergen-NZ/followers","following_url":"https://api.github.com/users/Intergen-NZ/following{/other_user}","gists_url":"https://api.github.com/users/Intergen-NZ/gists{/gist_id}","starred_url":"https://api.github.com/users/Intergen-NZ/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Intergen-NZ/subscriptions","organizations_url":"https://api.github.com/users/Intergen-NZ/orgs","repos_url":"https://api.github.com/users/Intergen-NZ/repos","events_url":"https://api.github.com/users/Intergen-NZ/events{/privacy}","received_events_url":"https://api.github.com/users/Intergen-NZ/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP","description":"Parts Unlimited MRP is a fictional outsourced Manufacturing Resource Planning (MRP) application based on The Phoenix Project by Gene Kim, Kevin Behr and George Spafford. The application uses entirely open source software including Linux, Java, Apache, and MongoDB which creates a web front end, an order service, and an integration service.","fork":true,"url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP","forks_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/forks","keys_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/teams","hooks_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/hooks","issue_events_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/events{/number}","events_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/events","assignees_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/assignees{/user}","branches_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/branches{/branch}","tags_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/tags","blobs_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/refs{/sha}","trees_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/statuses/{sha}","languages_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/languages","stargazers_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/stargazers","contributors_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/contributors","subscribers_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/subscribers","subscription_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/subscription","commits_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/commits{/sha}","git_commits_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/git/commits{/sha}","comments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/comments{/number}","issue_comment_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/comments{/number}","contents_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/contents/{+path}","compare_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/merges","archive_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/downloads","issues_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues{/number}","pulls_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls{/number}","milestones_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/milestones{/number}","notifications_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/labels{/name}","releases_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/releases{/id}","deployments_url":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/deployments","created_at":"2016-10-11T21:48:19Z","updated_at":"2016-10-11T21:48:20Z","pushed_at":"2016-11-09T22:27:35Z","git_url":"git://github.com/Intergen-NZ/PartsUnlimitedMRP.git","ssh_url":"git@github.com:Intergen-NZ/PartsUnlimitedMRP.git","clone_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP.git","svn_url":"https://github.com/Intergen-NZ/PartsUnlimitedMRP","homepage":"","size":57416,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":4,"forks":0,"open_issues":4,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3"},"html":{"href":"https://github.com/Intergen-NZ/PartsUnlimitedMRP/pull/3"},"issue":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/3"},"comments":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/issues/3/comments"},"review_comments":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3/comments"},"review_comment":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/pulls/3/commits"},"statuses":{"href":"https://api.github.com/repos/Intergen-NZ/PartsUnlimitedMRP/statuses/a44556c6a58e65fc3759345e40a084993d24599a"}}}}
{"actor":{"display_login":"gavinbarron"}}