{"action":"created","comment":{"url":"https://api.github.com/repos/circleci/circleci-docs/pulls/comments/219347756","pull_request_review_id":157502427,"id":219347756,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxOTM0Nzc1Ng==","diff_hunk":"@@ -2,104 +2,266 @@\n layout: classic-docs\n title: \"Language Guide: Python\"\n short-title: \"Python\"\n-description: \"Building and Testing with Python on CircleCI 2.0\"\n+description: \"Continuous integration and deployment with Python on CircleCI\"\n categories: [language-guides]\n order: 7\n ---\n \n-This document describes the [`.circleci/config.yml`]({{ site.baseurl }}/2.0/configuration-reference/) file for a sample application written in Python. \n+This document describes\n+how to configure CircleCI\n+using a sample application written in Python.\n \n * TOC\n {:toc}\n \n-## Demo Python Django Reference Project\n+## Overview\n \n-We maintain a reference Python Django project to show how to build Django on CircleCI 2.0:\n+This guide uses a [sample Django application](https://github.com/CircleCI-Public/circleci-demo-python-django)\n+to describe configuration best practices\n+for Python applications building on CircleCI.\n+Consider [forking the repository](https://help.github.com/articles/fork-a-repo/)\n+and rewriting the configuration file\n+as you follow this guide.\n \n-- <a href=\"https://github.com/CircleCI-Public/circleci-demo-python-django\" target=\"_blank\">Demo Python Django Project on GitHub</a>\n-[Demo Python Django Project building on CircleCI](https://circleci.com/gh/CircleCI-Public/circleci-demo-python-django){:rel=\"nofollow\"}\n+## Configuration Walkthrough\n \n-In the project you will find a commented CircleCI configuration file <a href=\"https://github.com/CircleCI-Public/circleci-demo-python-django/blob/master/.circleci/config.yml\" target=\"_blank\">`.circleci/config.yml`</a>. This file shows best practice for using CircleCI 2.0 with Python projects.\n+Every CircleCI project requires a configuration file called `.circleci/config.yml`.\n+Follow the steps below\n+to create a complete `config.yml` file.\n \n-Refer to the [Project Walkthrough]({{ site.baseurl }}/2.0/project-walkthrough/) for a sample Flask application: <https://github.com/CircleCI-Public/circleci-demo-python-flask>.\n+### Specify a Version\n \n-## Pre-Built CircleCI Docker Images\n+Every `config.yml` starts with the [`version`]({{ site.baseurl }}/2.0/configuration-reference/#version) key.\n+This key is used\n+to issue warnings about breaking changes.\n \n-We recommend using a CircleCI pre-built image that comes pre-installed with tools that are useful in a CI environment. You can select the Python version you need from Docker Hub: <https://hub.docker.com/r/circleci/python/>. The demo project uses an official CircleCI image.\n+```yaml\n+version: 2\n+```\n+\n+### Create a Build Job\n \n-Database images for use as a secondary 'service' container are also available on Docker Hub in the `circleci` directory.\n+A run is comprised of one or more [jobs]({{ site.baseurl }}/2.0/configuration-reference/#jobs).\n+Because this run does not use [workflows]({{ site.baseurl }}/2.0/configuration-reference/#workflows),\n+it must have a `build` job.\n \n-## Build the Demo Django Project \n+Use the [`working_directory`]({{ site.baseurl }}/2.0/configuration-reference/#job_name) key\n+to specify where a job's [`steps`]({{ site.baseurl }}/2.0/configuration-reference/#steps) run.\n \n-A good way to start using CircleCI is to build a project yourself. Here's how to build the demo project with your own account:\n+```yaml\n+version: 2\n+jobs:\n+  build:  # required for runs that don't use workflows\n+    working_directory: ~/circleci-demo-python-django\n+```\n \n-1. Fork the project on GitHub to your own account.\n-2. Go to the [Add Projects](https://circleci.com/add-projects){:rel=\"nofollow\"} page in CircleCI and click the Build Project button next to the project you just forked.\n-3. To make changes you can edit the `.circleci/config.yml` file and make a commit. When you push a commit to GitHub, CircleCI will build and test the project.\n+### Choose an Executor Type\n \n-## Config Walkthrough\n+A job's steps occur in a virtual environment called an [executor]({{ site.baseurl }}/2.0/executor-types/).\n \n-Start with the version:\n+In this example,\n+the [`docker`]({{ site.baseurl }}/2.0/configuration-reference/#docker) executor is used\n+to specify a custom Docker image.\n+The first image listed becomes the job's [primary container]({{ site.baseurl }}/2.0/glossary/#primary-container).\n+All of a job's commands execute in this container.\n \n ```yaml\n-version: 2 # use CircleCI 2.0\n+version: 2\n+jobs:\n+  build:\n+    working_directory: ~/circleci-demo-python-django\n+    docker:\n+      - image: circleci/python:3.6.4  # primary container\n ```\n \n-First, specify a `jobs` key. Each job represents a phase in your Build-Test-Deploy (BTD) process. The sample app only needs a `build` job, so all other configuration will be nested under that key.\n+**Note:**\n+`circleci/python:3.6.4` is a [convenience image]({{ site.baseurl }}/2.0/circleci-images/) provided by CircleCI.\n+These images are extensions of official Docker images\n+and include tools useful for CI/CD environments.\n+\n+### Add Other Services and Set Environment Variables\n \n-Specify a working directory and container images for this build in `docker` section:\n+You can specify additional containers for services like databases.\n+Use the [`environment`]({{ site.baseurl }}/2.0/env-vars/#setting-an-environment-variable-in-a-container) key\n+to set environment variables for all commands in a container.\n \n ```yaml\n-...\n-jobs: # a collection of steps\n-  build: # runs not using Workflows must have a `build` job as entry point\n-    working_directory: ~/circleci-demo-python-django # directory where steps will run\n-    docker: # run the steps with Docker\n-      - image: circleci/python:3.6.1 # ...with this image as the primary container; this is where all `steps` will run\n-      - image: circleci/postgres:9.6.2 # database image for service container available at `localhost:<port>`\n-        environment: # environment variables for database\n+version: 2\n+jobs:\n+  build:\n+    working_directory: ~/circleci-demo-python-django\n+    docker:\n+      - image: circleci/python:3.6.4\n+        environment:\n+          PIPENV_VENV_IN_PROJECT: true\n+          DATABASE_URL: postgresql://root@localhost/circle_test?sslmode=disable\n+      - image: circleci/postgres:9.6.2\n+        environment:\n           POSTGRES_USER: root\n           POSTGRES_DB: circle_test\n ```\n \n-Finally, add several `steps` within the `build` job:\n+### Install Dependencies\n+\n+After choosing containers for a job,\n+create [`steps`]({{ site.baseurl }}/2.0/configuration-reference/#steps) to run specific commands.\n+\n+Use the [`checkout`]({{ site.baseurl }}/2.0/configuration-reference/#checkout) step\n+to check out source code.\n+By default,\n+source code is checked out to the path specified by `working_directory`.\n+\n+Use the [`run`]({{ site.baseurl }}/2.0/configuration-reference/#run) step\n+to execute bash commands.\n+In this example,\n+[Pipenv](https://pipenv.readthedocs.io/en/latest/) is used\n+to create a virtual environment\n+and install Python packages.\n+\n+```yaml\n+version: 2\n+jobs:\n+  build:\n+    # ...\n+    steps:\n+      - checkout  # checkout source code to working directory\n+      - run:\n+        command: |  # use pipenv to install dependencies\n+          sudo pip install pipenv\n+          pipenv install\n+```\n+\n+### Cache Dependencies\n+\n+To save time between runs,\n+consider [caching dependencies or source code]({{ site.baseurl }}/2.0/caching/).\n+\n+Use the [`save_cache`]({{ site.baseurl }}/2.0/configuration-reference/#save_cache) step\n+to cache certain files or directories.\n+In this example,\n+the virtual environment and installed packages are cached.\n+\n+Use the [`restore_cache`]({{ site.baseurl }}/2.0/configuration-reference/#restore_cache) step\n+to restore cached files or directories.\n \n {% raw %}\n \n ```yaml\n-    steps: # a collection of executable commands\n-      - checkout # special step to check out source code to the working directory\n-      - restore_cache: # restores saved dependency cache if the Branch key template or requirements.txt files have not changed since the previous run\n-          key: deps1-{{ .Branch }}-{{ checksum \"requirements.txt\" }}\n-      - run: # install and activate virtual environment with pip\n-          command: |\n-            python3 -m venv venv\n-            . venv/bin/activate\n-            pip install -r requirements.txt\n-      - save_cache: # special step to save dependency cache\n-          key: deps1-{{ .Branch }}-{{ checksum \"requirements.txt\" }}\n+version: 2\n+jobs:\n+  build:\n+    # ...\n+    steps:\n+      - checkout\n+      - run: sudo chown -R circleci:circleci /usr/local/bin\n+      - run: sudo chown -R circleci:circleci /usr/local/lib/python3.6/site-packages\n+      - restore_cache:  # ensure this step occurs *before* installing dependencies\n+          key: deps9-{{ .Branch }}-{{ checksum \"Pipfile.lock\" }}\n+      - run:\n+        command: |\n+          sudo pip install pipenv\n+          pipenv install\n+      - save_cache:\n+          key: deps9-{{ .Branch }}-{{ checksum \"Pipfile.lock\" }}\n           paths:\n-            - \"venv\"\n-      - run: # run tests\n-          command: |\n-            . venv/bin/activate\n-            python manage.py test\n-      - store_artifacts: # special step to store test reports as artifacts\n-          path: test-reports/\n-          destination: tr1\n-      # See https://circleci.com/docs/2.0/deployment-integrations/ for deploy examples    \n+            - \".venv\"\n+            - \"/usr/local/bin\"\n+            - \"/usr/local/lib/python3.6/site-packages\"\n ```\n \n {% endraw %}\n \n-For the complete list of CircleCI configuration keys,\n-refer to the [Configuring CircleCI]({{ site.baseurl }}/2.0/configuration-reference/) document.\n+**Note:**\n+Use the `chown` command\n+to grant CircleCI access to dependency locations.\n \n-## See Also\n-{:.no_toc}\n+### Run Tests\n \n-- See the [Deploy]({{ site.baseurl }}/2.0/deployment-integrations/) document for example deploy target configurations.\n-- See the [Caching Dependencies]({{ site.baseurl }}/2.0/caching/) document for caching strategies.\n+Use the `run` step\n+to run your test suite.\n \n+```yaml\n+version: 2\n+jobs:\n+  build:\n+    # ...\n+    steps:\n+      # ...\n+      - run:\n+        command: |\n+          pipenv run \"python manage.py test\"\n+```\n \n+### Upload And Store Test Results\n \n+Use the [`store_test_results`]({{ site.baseurl }}/2.0/configuration-reference/#store_test_results) step\n+to upload test results to CircleCI.\n+These results will display in the **Test Summary** section of the CircleCI application.\n+\n+Use the [`store_artifacts`]({{ site.baseurl }}/2.0/configuration-reference/#store_artifacts) step\n+to save test results as artifacts.\n+\n+```yaml\n+version: 2\n+jobs:\n+  build:\n+    # ...\n+    steps:\n+      # ...\n+      - store_test_results:\n+        path: test-results\n+      - store_artifacts:\n+        path: test-results\n+        destination: tr1\n+```\n+\n+### Deploy Application\n+\n+This Django application is not deployed anywhere.\n+See the [Flask Project Walkthrough]({{ site.baseurl }}/2.0/project-walkthrough/) or the [Deploy]({{ site.baseurl }}/2.0/deployment-integrations/) document for deploy examples.\n+\n+## Full Configuration File\n+\n+{% raw %}\n+\n+```yaml\n+version: 2\n+jobs:\n+  build:\n+    working_directory: ~/circleci-demo-python-django\n+    docker:\n+      - image: circleci/python:3.6.4\n+        environment:\n+          PIPENV_VENV_IN_PROJECT: true\n+          DATABASE_URL: postgresql://root@localhost/circle_test?sslmode=disable\n+      - image: circleci/postgres:9.6.2\n+        environment:\n+          POSTGRES_USER: root\n+          POSTGRES_DB: circle_test\n+    steps:\n+      - checkout\n+      - run: sudo chown -R circleci:circleci /usr/local/bin","path":"jekyll/_cci2/language-python.md","position":298,"original_position":298,"commit_id":"09e26941b0e92c538fba7ac6978646ac1e143c79","original_commit_id":"09e26941b0e92c538fba7ac6978646ac1e143c79","user":{"login":"eddiewebb","id":5262154,"node_id":"MDQ6VXNlcjUyNjIxNTQ=","avatar_url":"https://avatars0.githubusercontent.com/u/5262154?v=4","gravatar_id":"","url":"https://api.github.com/users/eddiewebb","html_url":"https://github.com/eddiewebb","followers_url":"https://api.github.com/users/eddiewebb/followers","following_url":"https://api.github.com/users/eddiewebb/following{/other_user}","gists_url":"https://api.github.com/users/eddiewebb/gists{/gist_id}","starred_url":"https://api.github.com/users/eddiewebb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eddiewebb/subscriptions","organizations_url":"https://api.github.com/users/eddiewebb/orgs","repos_url":"https://api.github.com/users/eddiewebb/repos","events_url":"https://api.github.com/users/eddiewebb/events{/privacy}","received_events_url":"https://api.github.com/users/eddiewebb/received_events","type":"User","site_admin":false},"body":"Are these necessary, if so I think something is wrong in our images..","created_at":"2018-09-20T23:28:19Z","updated_at":"2018-09-20T23:28:20Z","html_url":"https://github.com/circleci/circleci-docs/pull/2726#discussion_r219347756","pull_request_url":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/circleci/circleci-docs/pulls/comments/219347756"},"html":{"href":"https://github.com/circleci/circleci-docs/pull/2726#discussion_r219347756"},"pull_request":{"href":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726"}}},"pull_request":{"url":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726","id":217130617,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE3MTMwNjE3","html_url":"https://github.com/circleci/circleci-docs/pull/2726","diff_url":"https://github.com/circleci/circleci-docs/pull/2726.diff","patch_url":"https://github.com/circleci/circleci-docs/pull/2726.patch","issue_url":"https://api.github.com/repos/circleci/circleci-docs/issues/2726","number":2726,"state":"open","locked":false,"title":"Migrate 1.0 CI/CD with Python and revise 2.0 Python language guide","user":{"login":"smart-alek","id":5043885,"node_id":"MDQ6VXNlcjUwNDM4ODU=","avatar_url":"https://avatars0.githubusercontent.com/u/5043885?v=4","gravatar_id":"","url":"https://api.github.com/users/smart-alek","html_url":"https://github.com/smart-alek","followers_url":"https://api.github.com/users/smart-alek/followers","following_url":"https://api.github.com/users/smart-alek/following{/other_user}","gists_url":"https://api.github.com/users/smart-alek/gists{/gist_id}","starred_url":"https://api.github.com/users/smart-alek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smart-alek/subscriptions","organizations_url":"https://api.github.com/users/smart-alek/orgs","repos_url":"https://api.github.com/users/smart-alek/repos","events_url":"https://api.github.com/users/smart-alek/events{/privacy}","received_events_url":"https://api.github.com/users/smart-alek/received_events","type":"User","site_admin":false},"body":"# Description\r\nFull revision of the Python language guide. Highlights include:\r\n\r\n- migrate steps from 1.0 document re: Python CI/CD on CircleCI\r\n- fix configuration to match related Django application\r\n- aggressively link configuration keys to the miraculous Configuration Reference document\r\n\r\n# Reasons\r\nResolves [this JIRA issue](https://circleci.atlassian.net/browse/CIRCLE-12486).","created_at":"2018-09-20T23:04:16Z","updated_at":"2018-09-20T23:28:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"f9cd6390cc0a3eed52cb5607524ae91be4fe235b","assignee":{"login":"smart-alek","id":5043885,"node_id":"MDQ6VXNlcjUwNDM4ODU=","avatar_url":"https://avatars0.githubusercontent.com/u/5043885?v=4","gravatar_id":"","url":"https://api.github.com/users/smart-alek","html_url":"https://github.com/smart-alek","followers_url":"https://api.github.com/users/smart-alek/followers","following_url":"https://api.github.com/users/smart-alek/following{/other_user}","gists_url":"https://api.github.com/users/smart-alek/gists{/gist_id}","starred_url":"https://api.github.com/users/smart-alek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smart-alek/subscriptions","organizations_url":"https://api.github.com/users/smart-alek/orgs","repos_url":"https://api.github.com/users/smart-alek/repos","events_url":"https://api.github.com/users/smart-alek/events{/privacy}","received_events_url":"https://api.github.com/users/smart-alek/received_events","type":"User","site_admin":false},"assignees":[{"login":"smart-alek","id":5043885,"node_id":"MDQ6VXNlcjUwNDM4ODU=","avatar_url":"https://avatars0.githubusercontent.com/u/5043885?v=4","gravatar_id":"","url":"https://api.github.com/users/smart-alek","html_url":"https://github.com/smart-alek","followers_url":"https://api.github.com/users/smart-alek/followers","following_url":"https://api.github.com/users/smart-alek/following{/other_user}","gists_url":"https://api.github.com/users/smart-alek/gists{/gist_id}","starred_url":"https://api.github.com/users/smart-alek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/smart-alek/subscriptions","organizations_url":"https://api.github.com/users/smart-alek/orgs","repos_url":"https://api.github.com/users/smart-alek/repos","events_url":"https://api.github.com/users/smart-alek/events{/privacy}","received_events_url":"https://api.github.com/users/smart-alek/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"thomasr8","id":6386813,"node_id":"MDQ6VXNlcjYzODY4MTM=","avatar_url":"https://avatars2.githubusercontent.com/u/6386813?v=4","gravatar_id":"","url":"https://api.github.com/users/thomasr8","html_url":"https://github.com/thomasr8","followers_url":"https://api.github.com/users/thomasr8/followers","following_url":"https://api.github.com/users/thomasr8/following{/other_user}","gists_url":"https://api.github.com/users/thomasr8/gists{/gist_id}","starred_url":"https://api.github.com/users/thomasr8/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thomasr8/subscriptions","organizations_url":"https://api.github.com/users/thomasr8/orgs","repos_url":"https://api.github.com/users/thomasr8/repos","events_url":"https://api.github.com/users/thomasr8/events{/privacy}","received_events_url":"https://api.github.com/users/thomasr8/received_events","type":"User","site_admin":false},{"login":"michelle-luna","id":25971961,"node_id":"MDQ6VXNlcjI1OTcxOTYx","avatar_url":"https://avatars2.githubusercontent.com/u/25971961?v=4","gravatar_id":"","url":"https://api.github.com/users/michelle-luna","html_url":"https://github.com/michelle-luna","followers_url":"https://api.github.com/users/michelle-luna/followers","following_url":"https://api.github.com/users/michelle-luna/following{/other_user}","gists_url":"https://api.github.com/users/michelle-luna/gists{/gist_id}","starred_url":"https://api.github.com/users/michelle-luna/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michelle-luna/subscriptions","organizations_url":"https://api.github.com/users/michelle-luna/orgs","repos_url":"https://api.github.com/users/michelle-luna/repos","events_url":"https://api.github.com/users/michelle-luna/events{/privacy}","received_events_url":"https://api.github.com/users/michelle-luna/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":814489866,"node_id":"MDU6TGFiZWw4MTQ0ODk4NjY=","url":"https://api.github.com/repos/circleci/circleci-docs/labels/incorrect","name":"incorrect","color":"f1c40f","default":false},{"id":814181894,"node_id":"MDU6TGFiZWw4MTQxODE4OTQ=","url":"https://api.github.com/repos/circleci/circleci-docs/labels/undocumented","name":"undocumented","color":"e67e22","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726/commits","review_comments_url":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726/comments","review_comment_url":"https://api.github.com/repos/circleci/circleci-docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/circleci/circleci-docs/issues/2726/comments","statuses_url":"https://api.github.com/repos/circleci/circleci-docs/statuses/09e26941b0e92c538fba7ac6978646ac1e143c79","head":{"label":"circleci:migrate-python-ci-cd","ref":"migrate-python-ci-cd","sha":"09e26941b0e92c538fba7ac6978646ac1e143c79","user":{"login":"circleci","id":1231870,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMzE4NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/1231870?v=4","gravatar_id":"","url":"https://api.github.com/users/circleci","html_url":"https://github.com/circleci","followers_url":"https://api.github.com/users/circleci/followers","following_url":"https://api.github.com/users/circleci/following{/other_user}","gists_url":"https://api.github.com/users/circleci/gists{/gist_id}","starred_url":"https://api.github.com/users/circleci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/circleci/subscriptions","organizations_url":"https://api.github.com/users/circleci/orgs","repos_url":"https://api.github.com/users/circleci/repos","events_url":"https://api.github.com/users/circleci/events{/privacy}","received_events_url":"https://api.github.com/users/circleci/received_events","type":"Organization","site_admin":false},"repo":{"id":48750547,"node_id":"MDEwOlJlcG9zaXRvcnk0ODc1MDU0Nw==","name":"circleci-docs","full_name":"circleci/circleci-docs","private":false,"owner":{"login":"circleci","id":1231870,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMzE4NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/1231870?v=4","gravatar_id":"","url":"https://api.github.com/users/circleci","html_url":"https://github.com/circleci","followers_url":"https://api.github.com/users/circleci/followers","following_url":"https://api.github.com/users/circleci/following{/other_user}","gists_url":"https://api.github.com/users/circleci/gists{/gist_id}","starred_url":"https://api.github.com/users/circleci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/circleci/subscriptions","organizations_url":"https://api.github.com/users/circleci/orgs","repos_url":"https://api.github.com/users/circleci/repos","events_url":"https://api.github.com/users/circleci/events{/privacy}","received_events_url":"https://api.github.com/users/circleci/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/circleci/circleci-docs","description":"Documentation for CircleCI.","fork":false,"url":"https://api.github.com/repos/circleci/circleci-docs","forks_url":"https://api.github.com/repos/circleci/circleci-docs/forks","keys_url":"https://api.github.com/repos/circleci/circleci-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/circleci/circleci-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/circleci/circleci-docs/teams","hooks_url":"https://api.github.com/repos/circleci/circleci-docs/hooks","issue_events_url":"https://api.github.com/repos/circleci/circleci-docs/issues/events{/number}","events_url":"https://api.github.com/repos/circleci/circleci-docs/events","assignees_url":"https://api.github.com/repos/circleci/circleci-docs/assignees{/user}","branches_url":"https://api.github.com/repos/circleci/circleci-docs/branches{/branch}","tags_url":"https://api.github.com/repos/circleci/circleci-docs/tags","blobs_url":"https://api.github.com/repos/circleci/circleci-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/circleci/circleci-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/circleci/circleci-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/circleci/circleci-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/circleci/circleci-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/circleci/circleci-docs/languages","stargazers_url":"https://api.github.com/repos/circleci/circleci-docs/stargazers","contributors_url":"https://api.github.com/repos/circleci/circleci-docs/contributors","subscribers_url":"https://api.github.com/repos/circleci/circleci-docs/subscribers","subscription_url":"https://api.github.com/repos/circleci/circleci-docs/subscription","commits_url":"https://api.github.com/repos/circleci/circleci-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/circleci/circleci-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/circleci/circleci-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/circleci/circleci-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/circleci/circleci-docs/contents/{+path}","compare_url":"https://api.github.com/repos/circleci/circleci-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/circleci/circleci-docs/merges","archive_url":"https://api.github.com/repos/circleci/circleci-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/circleci/circleci-docs/downloads","issues_url":"https://api.github.com/repos/circleci/circleci-docs/issues{/number}","pulls_url":"https://api.github.com/repos/circleci/circleci-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/circleci/circleci-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/circleci/circleci-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/circleci/circleci-docs/labels{/name}","releases_url":"https://api.github.com/repos/circleci/circleci-docs/releases{/id}","deployments_url":"https://api.github.com/repos/circleci/circleci-docs/deployments","created_at":"2015-12-29T14:14:27Z","updated_at":"2018-09-20T23:23:57Z","pushed_at":"2018-09-20T23:26:59Z","git_url":"git://github.com/circleci/circleci-docs.git","ssh_url":"git@github.com:circleci/circleci-docs.git","clone_url":"https://github.com/circleci/circleci-docs.git","svn_url":"https://github.com/circleci/circleci-docs","homepage":"https://circleci.com/docs/","size":23774,"stargazers_count":204,"watchers_count":204,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":484,"mirror_url":null,"archived":false,"open_issues_count":17,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":484,"open_issues":17,"watchers":204,"default_branch":"master"}},"base":{"label":"circleci:master","ref":"master","sha":"6c3a35f0f33929ecff6237ddedb0b6054f9e2c6f","user":{"login":"circleci","id":1231870,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMzE4NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/1231870?v=4","gravatar_id":"","url":"https://api.github.com/users/circleci","html_url":"https://github.com/circleci","followers_url":"https://api.github.com/users/circleci/followers","following_url":"https://api.github.com/users/circleci/following{/other_user}","gists_url":"https://api.github.com/users/circleci/gists{/gist_id}","starred_url":"https://api.github.com/users/circleci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/circleci/subscriptions","organizations_url":"https://api.github.com/users/circleci/orgs","repos_url":"https://api.github.com/users/circleci/repos","events_url":"https://api.github.com/users/circleci/events{/privacy}","received_events_url":"https://api.github.com/users/circleci/received_events","type":"Organization","site_admin":false},"repo":{"id":48750547,"node_id":"MDEwOlJlcG9zaXRvcnk0ODc1MDU0Nw==","name":"circleci-docs","full_name":"circleci/circleci-docs","private":false,"owner":{"login":"circleci","id":1231870,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEyMzE4NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/1231870?v=4","gravatar_id":"","url":"https://api.github.com/users/circleci","html_url":"https://github.com/circleci","followers_url":"https://api.github.com/users/circleci/followers","following_url":"https://api.github.com/users/circleci/following{/other_user}","gists_url":"https://api.github.com/users/circleci/gists{/gist_id}","starred_url":"https://api.github.com/users/circleci/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/circleci/subscriptions","organizations_url":"https://api.github.com/users/circleci/orgs","repos_url":"https://api.github.com/users/circleci/repos","events_url":"https://api.github.com/users/circleci/events{/privacy}","received_events_url":"https://api.github.com/users/circleci/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/circleci/circleci-docs","description":"Documentation for CircleCI.","fork":false,"url":"https://api.github.com/repos/circleci/circleci-docs","forks_url":"https://api.github.com/repos/circleci/circleci-docs/forks","keys_url":"https://api.github.com/repos/circleci/circleci-docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/circleci/circleci-docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/circleci/circleci-docs/teams","hooks_url":"https://api.github.com/repos/circleci/circleci-docs/hooks","issue_events_url":"https://api.github.com/repos/circleci/circleci-docs/issues/events{/number}","events_url":"https://api.github.com/repos/circleci/circleci-docs/events","assignees_url":"https://api.github.com/repos/circleci/circleci-docs/assignees{/user}","branches_url":"https://api.github.com/repos/circleci/circleci-docs/branches{/branch}","tags_url":"https://api.github.com/repos/circleci/circleci-docs/tags","blobs_url":"https://api.github.com/repos/circleci/circleci-docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/circleci/circleci-docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/circleci/circleci-docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/circleci/circleci-docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/circleci/circleci-docs/statuses/{sha}","languages_url":"https://api.github.com/repos/circleci/circleci-docs/languages","stargazers_url":"https://api.github.com/repos/circleci/circleci-docs/stargazers","contributors_url":"https://api.github.com/repos/circleci/circleci-docs/contributors","subscribers_url":"https://api.github.com/repos/circleci/circleci-docs/subscribers","subscription_url":"https://api.github.com/repos/circleci/circleci-docs/subscription","commits_url":"https://api.github.com/repos/circleci/circleci-docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/circleci/circleci-docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/circleci/circleci-docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/circleci/circleci-docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/circleci/circleci-docs/contents/{+path}","compare_url":"https://api.github.com/repos/circleci/circleci-docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/circleci/circleci-docs/merges","archive_url":"https://api.github.com/repos/circleci/circleci-docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/circleci/circleci-docs/downloads","issues_url":"https://api.github.com/repos/circleci/circleci-docs/issues{/number}","pulls_url":"https://api.github.com/repos/circleci/circleci-docs/pulls{/number}","milestones_url":"https://api.github.com/repos/circleci/circleci-docs/milestones{/number}","notifications_url":"https://api.github.com/repos/circleci/circleci-docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/circleci/circleci-docs/labels{/name}","releases_url":"https://api.github.com/repos/circleci/circleci-docs/releases{/id}","deployments_url":"https://api.github.com/repos/circleci/circleci-docs/deployments","created_at":"2015-12-29T14:14:27Z","updated_at":"2018-09-20T23:23:57Z","pushed_at":"2018-09-20T23:26:59Z","git_url":"git://github.com/circleci/circleci-docs.git","ssh_url":"git@github.com:circleci/circleci-docs.git","clone_url":"https://github.com/circleci/circleci-docs.git","svn_url":"https://github.com/circleci/circleci-docs","homepage":"https://circleci.com/docs/","size":23774,"stargazers_count":204,"watchers_count":204,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":484,"mirror_url":null,"archived":false,"open_issues_count":17,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"forks":484,"open_issues":17,"watchers":204,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726"},"html":{"href":"https://github.com/circleci/circleci-docs/pull/2726"},"issue":{"href":"https://api.github.com/repos/circleci/circleci-docs/issues/2726"},"comments":{"href":"https://api.github.com/repos/circleci/circleci-docs/issues/2726/comments"},"review_comments":{"href":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726/comments"},"review_comment":{"href":"https://api.github.com/repos/circleci/circleci-docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/circleci/circleci-docs/pulls/2726/commits"},"statuses":{"href":"https://api.github.com/repos/circleci/circleci-docs/statuses/09e26941b0e92c538fba7ac6978646ac1e143c79"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"eddiewebb"}}