CINXE.COM

GitHub OAuth app integration overview - CircleCI

<!DOCTYPE html><html lang="en"><style data-emotion="css-global 1ccfmri">html{line-height:1.15;-webkit-text-size-adjust:100%;}body{margin:0;}main{display:block;}h1{font-size:2em;margin:0.67em 0;}hr{box-sizing:content-box;height:0;overflow:visible;}pre{font-family:monospace,monospace;font-size:1em;}a{background-color:transparent;}abbr[title]{border-bottom:none;-webkit-text-decoration:underline;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;}b,strong{font-weight:bolder;}code,kbd,samp{font-family:monospace,monospace;font-size:1em;}small{font-size:80%;}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline;}sub{bottom:-0.25em;}sup{top:-0.5em;}img{border-style:none;}button,input,optgroup,select,textarea{font-family:inherit;font-size:100%;line-height:1.15;margin:0;}button,input{overflow:visible;}button,select{text-transform:none;}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button;}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0;}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText;}fieldset{padding:0.35em 0.75em 0.625em;}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal;}progress{vertical-align:baseline;}textarea{overflow:auto;}[type="checkbox"],[type="radio"]{box-sizing:border-box;padding:0;}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto;}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px;}[type="search"]::-webkit-search-decoration{-webkit-appearance:none;}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit;}details{display:block;}summary{display:-webkit-box;display:-webkit-list-item;display:-ms-list-itembox;display:list-item;}template{display:none;}[hidden]{display:none;}*,*::after,*::before{box-sizing:border-box;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-smoothing:antialiased;}html{font-family:'Roboto',sans-serif;}html,body,#__next,#root{width:100%;min-height:100vh;scroll-padding-top:128px;}#__next,#root{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}</style><style data-emotion="css-global 1x25u27">pre.highlight{padding:1em;padding-left:3.8em;margin:0.5em 0;color:#ffffff;background-color:#2b2b2b;white-space:pre-wrap!important;border-radius:4px;word-wrap:break-word;}pre[class*='language-'],code[class*='language-']{color:#ffffff;font-size:14px;text-shadow:none;font-family:Menlo,Monaco,'Courier New',monospace;direction:ltr;text-align:left;white-space:normal;word-spacing:normal;word-break:normal;line-height:24px;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none;font-weight:normal;font-feature-settings:'liga' 0,'calt' 0;letter-spacing:0px;}@media print{pre[class*='language-'],code[class*='language-']{text-shadow:none;}}pre[class*='language-']{padding:1em;margin:0.5em 0;overflow:auto;background:#2b2b2b;}:not(pre)>code{border-radius:0.3em;color:#555!important;background:#1b1f230d;word-wrap:anywhere;padding:2px;white-space:pre-wrap;font-size:14px;line-height:initial!important;}.namespace{opacity:0.7;}.token.doctype .token.doctype-tag{color:#569cd6;}.token.doctype .token.name{color:#9cdcfe;}.token.comment,.token.prolog{color:#959595;}.token.punctuation,.language-html .language-css .token.punctuation,.language-html .language-javascript .token.punctuation{color:#d4d4d4;}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol,.token.inserted,.token.unit{color:#ffffff;}.token.number{color:#b5cea8;}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.deleted{color:#ffffff;}.language-css .token.string.url{-webkit-text-decoration:underline;text-decoration:underline;}.token.operator,.token.entity{color:#d4d4d4;}.token.operator.arrow{color:#569cd6;}.token.atrule{color:#fff176;}.token.atrule .token.rule{color:#c586c0;}.token.atrule .token.url{color:#9cdcfe;}.token.atrule .token.url .token.function{color:#dcdcaa;}.token.atrule .token.url .token.punctuation{color:#d4d4d4;}.token.keyword{color:#569cd6;}.token.keyword.module,.token.keyword.control-flow{color:#c586c0;}.token.function,.token.function .token.maybe-class-name{color:#dcdcaa;}.token.regex{color:#d16969;}.token.important{color:#d4d4d4;font-weight:500;}.token.italic{font-style:italic;}.token.constant{color:#9cdcfe;}.token.class-name,.token.maybe-class-name{color:#4ec9b0;}.token.console{color:#9cdcfe;}.token.parameter{color:#9cdcfe;}.token.interpolation{color:#9cdcfe;}.token.punctuation.interpolation-punctuation{color:#569cd6;}.token.boolean{color:#569cd6;}.token.property,.token.variable,.token.imports .token.maybe-class-name,.token.exports .token.maybe-class-name{color:#fff176;}.token.selector{color:#d7ba7d;}.token.escape{color:#d7ba7d;}.token.tag{color:#569cd6;}.token.tag .token.punctuation{color:#808080;}.token.cdata{color:#808080;}.token.attr-name{color:#9cdcfe;}.token.attr-value,.token.attr-value .token.punctuation{color:#ce9178;}.token.attr-value .token.punctuation.attr-equals{color:#d4d4d4;}.token.entity{color:#569cd6;}.token.namespace{color:#4ec9b0;}pre[class*='language-javascript'],code[class*='language-javascript'],pre[class*='language-jsx'],code[class*='language-jsx'],pre[class*='language-typescript'],code[class*='language-typescript'],pre[class*='language-tsx'],code[class*='language-tsx']{color:#9cdcfe;}pre[class*='language-css'],code[class*='language-css']{color:#ce9178;}pre[class*='language-html'],code[class*='language-html']{color:#d4d4d4;}.language-regex .token.anchor{color:#dcdcaa;}.language-html .token.punctuation{color:#808080;}pre[class*='language-']>code[class*='language-']{position:relative;z-index:1;}.line-highlight.line-highlight{background:#f7ebc6;box-shadow:inset 5px 0 0 #f7d87c;z-index:0;}.line-numbers .line-numbers-rows{border-right:0px!important;top:-4px!important;}.line-numbers .line-numbers-rows span{min-height:24px!important;}.line-numbers .line-numbers-rows span:before{color:#858585!important;}</style><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><title>GitHub OAuth app integration overview - CircleCI</title><meta name="description" content="This document provides an overview of using GitHub and GitHub Enterprise with CircleCI."/><meta property="og:title" content="GitHub OAuth app integration overview - CircleCI"/><meta property="og:description" content="This document provides an overview of using GitHub and GitHub Enterprise with CircleCI."/><meta property="og:url" content="https://circleci.com/docs/github-integration/"/><meta property="og:image" content="https://circleci.com/docs/assets/meta/open-graph-cci-docs.jpg"/><link href="/docs/assets/meta/favicon.png" rel="icon" type="image/png"/><link rel="canonical" href="https://circleci.com/docs/github-integration/"/><link rel="alternate" hrefLang="en" href="https://circleci.com/docs/github-integration/"/><link rel="alternate" hrefLang="ja" href="https://circleci.com/docs/ja/github-integration/"/><link rel="alternate" hrefLang="x-default" href="https://circleci.com/docs/github-integration/"/><meta name="twitter:card" content="summary_large_image"/><meta property="twitter:domain" content="circleci.com"/><meta property="twitter:url" content="https://circleci.com/docs/github-integration/"/><meta name="twitter:title" content="GitHub OAuth app integration overview - CircleCI"/><meta name="twitter:description" content="This document provides an overview of using GitHub and GitHub Enterprise with CircleCI."/><meta name="twitter:image" content="https://circleci.com/docs/assets/meta/open-graph-cci-docs.jpg"/><meta name="next-head-count" content="19"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="anonymous"/><link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"/><script data-cookieconsent="marketing">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-W9HDVK');</script><script data-cookieconsent="statistics">!function(){var analytics=window.analytics=window.analytics||[];if(!analytics.initialize)if(analytics.invoked)window.console&&console.error&&console.error("Segment snippet included twice.");else{analytics.invoked=!0;analytics.methods=["trackSubmit","trackClick","trackLink","trackForm","pageview","identify","reset","group","track","ready","alias","debug","page","once","off","on","addSourceMiddleware","addIntegrationMiddleware","setAnonymousId","addDestinationMiddleware"];analytics.factory=function(e){return function(){var t=Array.prototype.slice.call(arguments);t.unshift(e);analytics.push(t);return analytics}};for(var e=0;e<analytics.methods.length;e++){var key=analytics.methods[e];analytics[key]=analytics.factory(key)}analytics.load=function(key,e){var t=document.createElement("script");t.type="text/javascript";t.async=!0;t.src="https://cci-growth-utils.s3.us-east-2.amazonaws.com/segment/analytics.js/v1/" + key + "/analytics.min.js";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);analytics._loadOptions=e};analytics._writeKey="AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35";;analytics.SNIPPET_VERSION="4.15.3"; }}();</script><script data-cookieconsent="statistics">window.analytics.load('AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35', { integrations: { All: false, Amplitude: true, Postgres: true, "Segment.io": true, Hotjar: true }, });</script><script defer="" src="https://widget.kapa.ai/kapa-widget.bundle.js" data-website-id="06cd008c-32ae-46d3-946b-211d1afd443c" data-project-name="CircleCI" data-project-color="#161616" data-project-logo="https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTI7jLeuu2k66svJDmHxYKlP7Ysf7FvNbkuvzAhHEPCsvLbhcpVRnoJCm538OSv6o5uzlQ&amp;usqp=CAU"></script><meta name="zd-site-verification" content="srxqwtrxsmb1bcawp5j3d1"/><link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /><link rel="preload" href="https://assets-docs.circleci.com/docs/_next/static/css/95e8257575110deb.css" as="style"/><link rel="stylesheet" href="https://assets-docs.circleci.com/docs/_next/static/css/95e8257575110deb.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="https://assets-docs.circleci.com/docs/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/webpack-3ed24fe7b432eeb8.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/framework-9c679519b7b20335.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/main-4575c0bb82696f32.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/pages/_app-07319b956598f57c.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/103-386f95112f80b86b.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/365-1084b37a8a894cf6.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/137-74c9709c103ee7b5.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/chunks/pages/%5B...slug%5D-808ad58695d6efe0.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/9e2f0ef33c33cd80cc959c1747acd17d270b8bd8/_buildManifest.js" defer=""></script><script src="https://assets-docs.circleci.com/docs/_next/static/9e2f0ef33c33cd80cc959c1747acd17d270b8bd8/_ssgManifest.js" defer=""></script><style data-href="https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap">@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5vAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Me5g.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9vAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlvAA.woff) format('woff')}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:300;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmSU5fBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu72xKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu5mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu7mxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu4WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu7WxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu7GxKKTU1Kvnz.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOmCnqEu92Fr1Mu4mxKKTU1Kg.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmEU9fBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfCRc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0460-052F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfABc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfCBc4AMP6lbBP.woff2) format('woff2');unicode-range:U+1F00-1FFF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfBxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0370-0377,U+037A-037F,U+0384-038A,U+038C,U+038E-03A1,U+03A3-03FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfCxc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfChc4AMP6lbBP.woff2) format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:'Roboto';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/roboto/v32/KFOlCnqEu92Fr1MmWUlfBBc4AMP6lQ.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}</style></head><script type="text/javascript">var circleci = {config: {"exceptionLoggerClientToken":"ca1befe4db724589813fc4a2a9642d4d","analyticsKey":"AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35","datadogRumApplicationId":"2a3e19ca-297e-4a53-a2cf-082e827d13d3","datadogRumClientToken":"pubdffb4b4dd07f1f43b42276901d58da91"}};</script><body><noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-W9HDVK" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript><div id="__next"><style data-emotion-css="1vs42if">.css-1vs42if{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(to right,#F7F7F7 0%,#F7F7F7 calc(50% - 860px),#fff calc(50% - 860px),#fff 100%);}</style><style data-emotion-css="quiohg">.css-quiohg{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;background:linear-gradient(to right,#F7F7F7 0%,#F7F7F7 calc(50% - 860px),#fff calc(50% - 860px),#fff 100%);}</style><div class="layout css-quiohg"><style data-emotion-css="w4sqhj">.css-w4sqhj{width:100%;box-shadow:0 -6px 18px -3px #000000bd;z-index:100;background-color:#FFFFFF;position:-webkit-sticky;position:sticky;top:0px;}</style><style data-emotion-css="g79ewj">.css-g79ewj{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;width:100%;box-shadow:0 -6px 18px -3px #000000bd;z-index:100;background-color:#FFFFFF;position:-webkit-sticky;position:sticky;top:0px;}</style><div class="css-g79ewj"><style data-emotion-css="1l8dtod">.css-1l8dtod{margin:0 auto;width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:-webkit-sticky;position:sticky;padding:1rem 1rem 0.5rem 1rem;}@media (min-width:1200px){.css-1l8dtod{padding:1rem 1.5rem 0.5rem 1.5rem;}}</style><style data-emotion-css="1sjxx8s">.css-1sjxx8s{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;margin:0 auto;width:100%;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;position:-webkit-sticky;position:sticky;padding:1rem 1rem 0.5rem 1rem;}@media (min-width:1200px){.css-1sjxx8s{padding:1rem 1.5rem 0.5rem 1.5rem;}}</style><div data-testid="header" class="css-1sjxx8s"><style data-emotion-css="6irssd">.css-6irssd{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><style data-emotion-css="1lovh0t">.css-1lovh0t{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><div class="css-1lovh0t"><style data-emotion-css="1q9np79">.css-1q9np79{display:block;margin-right:0.5rem;}</style><div data-testid="header-circle-logo" class="css-1q9np79"><style data-emotion-css="si22pm">.css-si22pm{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-text-decoration:none;text-decoration:none;}</style><a href="https://circleci.com/docs/" data-testid="footer-circleci-logo" class="css-si22pm"><style data-emotion-css="1yqyrw2">.css-1yqyrw2{width:126;}</style><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 100" width="126" class="css-1yqyrw2"><circle fill="#161616" cx="30.44" cy="52.5" r="7.471"></circle><path fill="#161616" d="M30.44 21.124c-14.619 0-26.903 10-30.388 23.532-.03.119-.052.244-.052.373 0 .825.669 1.494 1.494 1.494h12.651c.603 0 1.118-.358 1.354-.873 0 0 .019-.035.025-.052 2.608-5.628 8.304-9.533 14.914-9.533 9.077 0 16.436 7.357 16.436 16.435S39.517 68.935 30.44 68.935c-6.61 0-12.305-3.905-14.914-9.532-.007-.018-.026-.053-.026-.053a1.489 1.489 0 0 0-1.354-.873H1.495c-.826 0-1.495.669-1.495 1.494 0 .129.021.254.052.373C3.537 73.876 15.821 83.876 30.44 83.876c17.329 0 31.376-14.048 31.376-31.376S47.769 21.124 30.44 21.124zM112.482 59.855h-4.268a.919.919 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.428 6.074-7.617 0-13.791-6.175-13.791-13.791 0-7.617 6.174-13.792 13.791-13.792 4.758 0 8.949 2.412 11.429 6.075a.916.916 0 0 0 .728.361h4.268a.92.92 0 0 0 .921-.919.91.91 0 0 0-.101-.413c-3.18-6.299-9.706-10.621-17.244-10.621-10.663 0-19.309 8.645-19.309 19.309 0 10.663 8.646 19.309 19.309 19.309 7.538 0 14.064-4.322 17.243-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM125.355 26.756a3.678 3.678 0 1 1-7.357 0 3.678 3.678 0 0 1 7.357 0zm-.919 43.213V34.11h-5.517v35.858a.92.92 0 0 0 .919.919h3.679a.918.918 0 0 0 .919-.918zM148.355 33.214c-5.564.262-10.008 2.921-12.887 6.981v-5.166a.92.92 0 0 0-.919-.919h-3.678a.92.92 0 0 0-.919.919v34.939c0 .508.41.919.919.919h3.678a.918.918 0 0 0 .919-.919V52.5c0-7.308 5.686-13.286 12.871-13.76a.921.921 0 0 0 .921-.922v-3.686a.92.92 0 0 0-.905-.918zM184.992 59.855h-4.268a.916.916 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.427 6.074-7.618 0-13.792-6.175-13.792-13.791 0-7.617 6.174-13.792 13.792-13.792 4.756 0 8.948 2.412 11.427 6.075a.917.917 0 0 0 .729.361h4.268a.92.92 0 0 0 .921-.919.898.898 0 0 0-.102-.413c-3.179-6.299-9.705-10.621-17.242-10.621-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.537 0 14.063-4.322 17.242-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM196.025 22.158h-3.678a.92.92 0 0 0-.919.919v46.892c0 .508.411.919.919.919h3.678a.92.92 0 0 0 .92-.919V23.077a.92.92 0 0 0-.92-.919zM221.771 33.191c-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.538 0 14.062-4.322 17.242-10.621a.913.913 0 0 0-.819-1.332h-4.267a.913.913 0 0 0-.741.379c-2.48 3.653-6.666 6.057-11.415 6.057-6.993 0-12.767-5.206-13.667-11.952h32.031a.92.92 0 0 0 .917-.873c.016-.32.026-.643.026-.966 0-10.665-8.644-19.31-19.307-19.31zm-13.292 15.631c1.61-5.83 6.949-10.114 13.292-10.114s11.681 4.284 13.292 10.114h-26.584zM294.483 21.239a5.517 5.517 0 1 0 0 11.034 5.517 5.517 0 0 0 0-11.034zm4.598 12.871v35.858a.92.92 0 0 1-.919.919h-7.356a.918.918 0 0 1-.919-.919V34.11h9.194zM265.902 71.809c9.014 0 16.576-6.176 18.706-14.524a.832.832 0 0 0 .023-.187.92.92 0 0 0-.919-.92h-7.782a.919.919 0 0 0-.834.537l-.002-.001c-1.599 3.48-5.11 5.899-9.192 5.899-5.584 0-10.113-4.527-10.113-10.113s4.529-10.113 10.113-10.113a10.11 10.11 0 0 1 9.192 5.899l.002-.002a.92.92 0 0 0 .834.538h7.782a.92.92 0 0 0 .919-.92.944.944 0 0 0-.022-.184c-2.128-8.35-9.693-14.527-18.707-14.527-10.661 0-19.308 8.646-19.308 19.309.001 10.664 8.647 19.309 19.308 19.309z"></path></svg><style data-emotion-css="mcrnfh">.css-mcrnfh{color:#161616;font-size:1.5rem;font-weight:300;-webkit-letter-spacing:0.01em;-moz-letter-spacing:0.01em;-ms-letter-spacing:0.01em;letter-spacing:0.01em;line-height:1.50;margin-left:0.5rem;text-align:center;-webkit-text-decoration:none;text-decoration:none;}@media (max-width:768px){.css-mcrnfh{display:none;}}</style><div color="#161616" class="css-mcrnfh">Docs</div></a></div><style data-emotion-css="1m3tj04">.css-1m3tj04{display:none;}@media (min-width:1200px){.css-1m3tj04{display:block;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0px 80px;}}</style><style data-emotion-css="tki8r1">.css-tki8r1{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;display:none;}@media (min-width:1200px){.css-tki8r1{display:block;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding:0px 80px;}}</style><div data-testid="header-search-bar" class="css-tki8r1"><style data-emotion-css="cssveg">.css-cssveg{position:relative;}</style><form novalidate="" action="" role="search" class="css-cssveg"><style data-emotion-css="409epr">.css-409epr{height:100%;position:absolute;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;left:0;}@media (min-width:1200px){.css-409epr{padding-left:1rem;}}</style><div class="css-409epr"><style data-emotion-css="19wtgi5">.css-19wtgi5{width:24px;height:24px;min-width:24px;color:currentColor;}</style><div size="24" color="currentColor" class="css-19wtgi5"><style data-emotion-css="bleycz">.css-bleycz{display:block;width:100%;}</style><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Search" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 9C14 11.7614 11.7614 14 9 14C6.23858 14 4 11.7614 4 9C4 6.23858 6.23858 4 9 4C11.7614 4 14 6.23858 14 9ZM13.1922 14.6064C12.0236 15.4816 10.5723 16 9 16C5.13401 16 2 12.866 2 9C2 5.13401 5.13401 2 9 2C12.866 2 16 5.13401 16 9C16 10.5723 15.4816 12.0236 14.6064 13.1922L21.7019 20.2877C22.0924 20.6782 22.0924 21.3114 21.7019 21.7019C21.3114 22.0924 20.6782 22.0924 20.2877 21.7019L13.1922 14.6064Z"></path></svg></div></div><style data-emotion-css="xxqz7m">.css-xxqz7m{height:100%;position:absolute;cursor:pointer;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;right:0;}@media (min-width:1200px){.css-xxqz7m{display:none;padding-right:0.75rem;}}</style><div data-testid="search-documentation-reset" class="css-xxqz7m"><style data-emotion-css="1pgy7j">.css-1pgy7j{width:28px;height:28px;min-width:28px;color:currentColor;}</style><div size="28" color="currentColor" class="css-1pgy7j"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Cancel" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M17.9865 7.45711C18.3771 7.06658 18.3771 6.43342 17.9865 6.04289C17.596 5.65237 16.9628 5.65237 16.5723 6.04289L12.0294 10.5858L7.48653 6.04289C7.096 5.65237 6.46284 5.65237 6.07231 6.04289C5.68179 6.43342 5.68179 7.06658 6.07231 7.45711L10.6152 12L6.07231 16.5429C5.68179 16.9334 5.68179 17.5666 6.07231 17.9571C6.46284 18.3476 7.096 18.3476 7.48653 17.9571L12.0294 13.4142L16.5723 17.9571C16.9628 18.3476 17.596 18.3476 17.9865 17.9571C18.377 17.5666 18.377 16.9334 17.9865 16.5429L13.4436 12L17.9865 7.45711Z"></path></svg></div></div><style data-emotion-css="th0ig7">.css-th0ig7{width:100%;border-color:#BFBFBF;border-style:solid;border-width:0px;border-radius:0.25rem;padding:0 2rem;background-color:#FFFFFF;color:#161616;font-size:1rem;line-height:1.50;outline:0;}@media (min-width:1200px){.css-th0ig7{padding:0.5rem 3rem;border-width:1px;}}.css-th0ig7::-webkit-input-placeholder{color:#6A6A6A;}.css-th0ig7::-moz-placeholder{color:#6A6A6A;}.css-th0ig7:-ms-input-placeholder{color:#6A6A6A;}.css-th0ig7::placeholder{color:#6A6A6A;}</style><style data-emotion-css="1cvkw1b">.css-1cvkw1b{height:auto;width:100%;padding:0.5rem 1rem;border:1px solid rgba(191,191,191,1);background-color:rgba(251,251,251,1);border-radius:4px;line-height:1.50;font-size:1rem;font-weight:400;color:rgba(22,22,22,1);box-sizing:border-box;width:100%;border-color:#BFBFBF;border-style:solid;border-width:0px;border-radius:0.25rem;padding:0 2rem;background-color:#FFFFFF;color:#161616;font-size:1rem;line-height:1.50;outline:0;}.css-1cvkw1b:not(:placeholder-shown){background-color:rgba(255,255,255,1);}.css-1cvkw1b:disabled{background-color:rgba(255,255,255,1);border-color:rgba(212,212,212,1);color:rgba(149,149,149,1);}.css-1cvkw1b:disabled::-webkit-input-placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b:disabled::-moz-placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b:disabled:-ms-input-placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b:disabled::placeholder{color:rgba(149,149,149,1);opacity:1;}.css-1cvkw1b::-webkit-input-placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b::-moz-placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b:-ms-input-placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b::placeholder{color:rgba(106,106,106,1);opacity:1;}.css-1cvkw1b:focus{border:2px solid rgba(26,102,247,1);outline-color:rgba(26,102,247,1);background-color:rgba(255,255,255,1);}.css-1cvkw1b:hover:enabled{border-color:rgba(52,52,52,1);background-color:rgba(255,255,255,1);}@media (min-width:1200px){.css-1cvkw1b{padding:0.5rem 3rem;border-width:1px;}}.css-1cvkw1b::-webkit-input-placeholder{color:#6A6A6A;}.css-1cvkw1b::-moz-placeholder{color:#6A6A6A;}.css-1cvkw1b:-ms-input-placeholder{color:#6A6A6A;}.css-1cvkw1b::placeholder{color:#6A6A6A;}</style><input type="text" placeholder="Search" data-testid="search-documentation-inputbox" class="css-1cvkw1b" value=""/></form></div></div><style data-emotion-css="11zozgc">.css-11zozgc{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}@media (min-width:1200px){.css-11zozgc{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><style data-emotion-css="1gf5w7k">.css-1gf5w7k{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}@media (min-width:1200px){.css-1gf5w7k{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><div data-testid="header-default-group" class="css-1gf5w7k"><div class="css-cssveg"><style data-emotion-css="dsh0zb">.css-dsh0zb{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;color:#161616;background-color:transparent;background:none;border:none;margin-top:0.125rem;cursor:pointer;}.css-dsh0zb:hover{-webkit-filter:invert(39%) sepia(99%) saturate(634%) hue-rotate(105deg) brightness(83%) contrast(97%);filter:invert(39%) sepia(99%) saturate(634%) hue-rotate(105deg) brightness(83%) contrast(97%);}@media (max-width:768px){.css-dsh0zb:hover{-webkit-filter:none;filter:none;}}</style><button data-testid="globe-btn" class="css-dsh0zb"><style data-emotion-css="14mcfqm">.css-14mcfqm{height:1.5rem;width:1.5rem;background-color:transparent;color:#161616;}</style><div class="css-14mcfqm"><svg fill="none" aria-label="Globe" role="img" height="28px" width="28px" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><g stroke="currentColor" stroke-miterlimit="10" stroke-width="1.25"><path d="m9.00001 17.3077c4.58819 0 8.30769-3.7195 8.30769-8.30771s-3.7195-8.307693-8.30769-8.307693c-4.58821 0-8.307688 3.719483-8.307688 8.307693s3.719478 8.30771 8.307688 8.30771z"></path><path d="m9 17.3077c1.7639 0 3.1938-3.7195 3.1938-8.30771s-1.4299-8.307693-3.1938-8.307693c-1.76391 0-3.19385 3.719483-3.19385 8.307693s1.42994 8.30771 3.19385 8.30771z"></path><path d="m.692322 6.44307h16.615378"></path><path d="m.692322 11.5569h16.615378"></path></g></svg></div></button></div><style data-emotion-css="1syyx6e">.css-1syyx6e{padding-left:1.5rem;}@media (max-width:768px){.css-1syyx6e{margin:1.5rem 1rem;}}</style><div class="css-1syyx6e"><style data-emotion-css="h3y3qz">.css-h3y3qz{background-color:rgba(4,155,74,1) !important;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;height:48px;font-size:18px;line-height:1.5rem !important;font-weight:700;font-style:normal;border-radius:0.25rem;border:none;-webkit-transition:background-color 300ms;transition:background-color 300ms;-webkit-flex:auto 0 0;-ms-flex:auto 0 0;flex:auto 0 0;}.css-h3y3qz:hover:enabled{cursor:pointer;}.css-h3y3qz:disabled{opacity:0.5;cursor:not-allowed;}.css-h3y3qz:hover{background-color:rgba(4,140,67,1) !important;}.css-h3y3qz:active{background-color:#00701B !important;}</style><style data-emotion-css="1ylpp6l">.css-1ylpp6l{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:0.5rem 1rem;font-size:0.875rem;font-weight:500;line-height:1.7142857143;border-radius:4px;border:none;-webkit-transition:background-color 300ms;transition:background-color 300ms;-webkit-flex:auto 0 0;-ms-flex:auto 0 0;flex:auto 0 0;color:#FFFFFF;background-color:#1A66F7;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;cursor:pointer;-webkit-text-decoration:none;text-decoration:none;background-color:rgba(4,155,74,1) !important;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;height:48px;font-size:18px;line-height:1.5rem !important;font-weight:700;font-style:normal;border-radius:0.25rem;border:none;-webkit-transition:background-color 300ms;transition:background-color 300ms;-webkit-flex:auto 0 0;-ms-flex:auto 0 0;flex:auto 0 0;}.css-1ylpp6l:hover:enabled{cursor:pointer;}.css-1ylpp6l:disabled{opacity:0.5;cursor:not-allowed;}.css-1ylpp6l:focus{outline:none;box-shadow:0px 0px 0 1px #FFFFFF, 0px 0px 0px 0.125rem #3495db, 0px 0px 0.125rem 0.125rem #3495db;}.css-1ylpp6l:focus:disabled{box-shadow:none;}.css-1ylpp6l:hover:enabled{background-color:#2152E5;}.css-1ylpp6l:active{background-color:#003DB8;}.css-1ylpp6l:hover:enabled{cursor:pointer;}.css-1ylpp6l:disabled{opacity:0.5;cursor:not-allowed;}.css-1ylpp6l:hover{background-color:rgba(4,140,67,1) !important;}.css-1ylpp6l:active{background-color:#00701B !important;}</style><a href="https://circleci.com/signup/" class="css-1ylpp6l">Start Building for Free</a></div></div><style data-emotion-css="ml1eyx">.css-ml1eyx{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-height:1.5rem;height:1.5rem;}@media (min-width:1200px){.css-ml1eyx{display:none;}}</style><style data-emotion-css="qlr832">.css-qlr832{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;max-height:1.5rem;height:1.5rem;}@media (min-width:1200px){.css-qlr832{display:none;}}</style><div data-testid="header-mobile-group" class="css-qlr832"><style data-emotion-css="hmc50w">.css-hmc50w{display:inline-block;padding-right:0.5rem;cursor:pointer;width:2rem;-webkit-transition:opacity 0.25s ease;transition:opacity 0.25s ease;}</style><style data-emotion-css="1qtr1z7">.css-1qtr1z7{width:24px;height:24px;min-width:24px;color:currentColor;display:inline-block;padding-right:0.5rem;cursor:pointer;width:2rem;-webkit-transition:opacity 0.25s ease;transition:opacity 0.25s ease;}</style><div size="24" color="currentColor" class="css-1qtr1z7"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Search" data-testid="header-mobile-search-button" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M14 9C14 11.7614 11.7614 14 9 14C6.23858 14 4 11.7614 4 9C4 6.23858 6.23858 4 9 4C11.7614 4 14 6.23858 14 9ZM13.1922 14.6064C12.0236 15.4816 10.5723 16 9 16C5.13401 16 2 12.866 2 9C2 5.13401 5.13401 2 9 2C12.866 2 16 5.13401 16 9C16 10.5723 15.4816 12.0236 14.6064 13.1922L21.7019 20.2877C22.0924 20.6782 22.0924 21.3114 21.7019 21.7019C21.3114 22.0924 20.6782 22.0924 20.2877 21.7019L13.1922 14.6064Z"></path></svg></div><style data-emotion-css="pdp0ok">.css-pdp0ok{height:24px;width:1px;background:#161616;}</style><div class="css-pdp0ok"></div><style data-emotion-css="1j3dzco">.css-1j3dzco{background:none;border:none;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:64px;width:40px;padding-right:0px;padding-left:0px;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin-right:-8px;cursor:pointer;color:#161616;}</style><button class="css-1j3dzco"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Menu" data-testid="header-mobile-menu-icon" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M3 7H21C21.5523 7 22 6.55228 22 6C22 5.44772 21.5523 5 21 5H3C2.44772 5 2 5.44772 2 6C2 6.55228 2.44772 7 3 7ZM3 13H21C21.5523 13 22 12.5523 22 12C22 11.4477 21.5523 11 21 11H3C2.44772 11 2 11.4477 2 12C2 12.5523 2.44772 13 3 13ZM21 19H3C2.44772 19 2 18.5523 2 18C2 17.4477 2.44772 17 3 17H21C21.5523 17 22 17.4477 22 18C22 18.5523 21.5523 19 21 19Z"></path></svg></div></button></div></div><style data-emotion-css="9496lj">.css-9496lj{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-height:50px;}</style><div data-testid="header-navbar" class="css-9496lj"><style data-emotion-css="acydq">.css-acydq{padding:0 1rem;}@media (min-width:1200px){.css-acydq{padding:0 1.5rem;}}</style><style data-emotion-css="wt4rcw">.css-wt4rcw{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:0 1rem;}@media (min-width:1200px){.css-wt4rcw{padding:0 1.5rem;}}</style><div class="css-wt4rcw"><style data-emotion-css="1666bo6">.css-1666bo6 > div{border-bottom-width:0;}</style><div id="navbar-tablist" role="tablist" aria-label="Navigation Tabs" class="css-1666bo6"><style data-emotion-css="1h7v07b">.css-1h7v07b{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;border-bottom-color:#D4D4D4;border-bottom-width:1px;border-bottom-style:solid;}</style><div class="css-1h7v07b"><style data-emotion-css="vu8356">.css-vu8356{-webkit-text-decoration:none;text-decoration:none;color:#6A6A6A;}.css-vu8356:hover{color:#161616;}.css-vu8356:active{color:#161616;}</style><a href="/developer/" class="css-vu8356"><style data-emotion-css="19fv6ph">.css-19fv6ph{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;height:56px;color:#6A6A6A;font-weight:500;font-size:0.875rem;border:none;margin:0;padding:1rem 0.75rem;background-color:#FFFFFF;line-height:1.50;text-transform:uppercase;cursor:pointer;}.css-19fv6ph:hover{color:#161616;}.css-19fv6ph[aria-selected='true']{color:#161616;font-weight:700;box-shadow:inset 0 -0.25rem #1A66F7;}.js-focus-visible .css-19fv6ph:focus{outline:none;z-index:1;box-shadow:0 0 0.25rem #1A66F7, -1px 1px 0 #1A66F7,1px -1px 0 #1A66F7, 1px 1px 0 #1A66F7,-1px -1px 0 #1A66F7;}.js-focus-visible .css-19fv6ph:focus.css-19fv6ph[aria-selected='true']{box-shadow:0 0 0.25rem #1A66F7, -1px 1px 0 #1A66F7,1px -1px 0 #1A66F7, 1px 1px 0 #1A66F7,-1px -1px 0 #1A66F7, inset 0 -0.25rem #1A66F7;}.js-focus-visible .css-19fv6ph:focus:not(.focus-visible),.js-focus-visible .css-19fv6ph:focus.css-19fv6ph[aria-selected='true']:not(.focus-visible){outline:none;box-shadow:inset 0 -0.25rem #1A66F7;}</style><button id="home" tabindex="0" aria-selected="false" role="tab" type="button" class="css-19fv6ph">Home</button></a><a href="/docs/" class="css-vu8356"><button id="docs" tabindex="0" aria-selected="true" role="tab" type="button" class="css-19fv6ph">Docs</button></a><a href="/developer/orbs/" class="css-vu8356"><button id="orbs" tabindex="0" aria-selected="false" role="tab" type="button" class="css-19fv6ph">Orbs</button></a><a href="/developer/images/" class="css-vu8356"><button id="images" tabindex="0" aria-selected="false" role="tab" type="button" class="css-19fv6ph">Images</button></a></div></div><style data-emotion-css="k9jl6u">.css-k9jl6u{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}.css-k9jl6u span:last-of-type{padding-right:0;}@media (min-width:1200px){.css-k9jl6u{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><style data-emotion-css="1chu1ls">.css-1chu1ls{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:none;}.css-1chu1ls span:last-of-type{padding-right:0;}@media (min-width:1200px){.css-1chu1ls{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}}</style><div class="css-1chu1ls"><style data-emotion-css="2wgwcz">.css-2wgwcz{padding-right:1.5rem;font-family:'Roboto';}.css-2wgwcz > a{color:#6A6A6A;}.css-2wgwcz > a:hover{color:#161616;}</style><span class="css-2wgwcz"><style data-emotion-css="x7gnkn">.css-x7gnkn{color:#0078CA;-webkit-text-decoration:none;text-decoration:none;font-size:1rem;line-height:1.50;font-weight:500;display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-column-gap:3px;column-gap:3px;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;}.css-x7gnkn:hover{color:#0062B0;-webkit-text-decoration:underline;text-decoration:underline;}</style><a href="https://circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">CircleCI.com</a></span><span class="css-2wgwcz"><a href="https://circleci.com/training/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Academy</a></span><span class="css-2wgwcz"><a href="https://circleci.com/blog/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Blog</a></span><span class="css-2wgwcz"><a href="https://discuss.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Community</a></span><span class="css-2wgwcz"><a href="https://support.circleci.com/hc/en-us/" target="_blank" rel="noopener noreferrer" data-testid="link" class="css-x7gnkn">Support</a></span></div></div></div></div><style data-emotion-css="1alxkfq">.css-1alxkfq{background-color:#008647;height:2px;width:0%;margin:0;padding:0;-webkit-transition-property:width;transition-property:width;-webkit-transition-duration:0.1s;transition-duration:0.1s;-webkit-transition-timing-function:linear;transition-timing-function:linear;position:fixed;top:122px;left:0;z-index:45;}@media (min-width:1200px){.css-1alxkfq{top:128px;}}</style><div width="0" height="2" class="css-1alxkfq"></div><style data-emotion-css="1yce0ae">.css-1yce0ae{width:100%;top:128;}</style><style data-emotion-css="1cibq5g">.css-1cibq5g{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:100%;top:128;}</style><div class="css-1cibq5g"></div><style data-emotion-css="3giiur">.css-3giiur{width:100%;max-width:1920px;margin:auto;}</style><style data-emotion-css="dgbsjx">.css-dgbsjx{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:inherit;-webkit-flex-grow:inherit;-ms-flex-positive:inherit;flex-grow:inherit;top:128px;width:100%;max-width:1920px;margin:auto;}</style><div class="css-dgbsjx"><style data-emotion-css="1y2jjs3">.css-1y2jjs3{display:none;}@media (min-width:1200px){.css-1y2jjs3{display:block;}}</style><style data-emotion-css="klrqbz">.css-klrqbz{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1;-ms-flex:1;flex:1;display:none;}@media screen and (min-width:480px){.css-klrqbz{-webkit-flex:1;-ms-flex:1;flex:1;}}@media screen and (min-width:768px){.css-klrqbz{-webkit-flex:0 0 288px;-ms-flex:0 0 288px;flex:0 0 288px;}}@media (min-width:1200px){.css-klrqbz{display:block;}}</style><nav class="css-klrqbz"><style data-emotion-css="11fl4l6">.css-11fl4l6{width:100%;background:white;}.css-11fl4l6 ul{padding-left:0.75rem;}.css-11fl4l6 ul + subSection{margin-top:0.5rem;}.css-11fl4l6 li{list-style-type:none;}@media (min-width:1200px){.css-11fl4l6{background:#f7f7f7;border-right:1px solid #e2e0e0;height:calc(100vh - 128px);overflow-y:scroll;padding:0px 22px 0px 0px;position:fixed;width:288px;}}</style><div class="css-11fl4l6"><style data-emotion-css="hce1c">.css-hce1c{padding-left:0px !important;margin-top:-1.5rem;}@media (min-width:1200px){.css-hce1c{padding-left:1.5rem !important;margin-top:0px;}}</style><ul data-testid="sidebar-drawers" class="css-hce1c"><style data-emotion-css="13svt41">.css-13svt41{cursor:pointer;margin-top:1.5rem;position:relative;list-style-type:none;font-size:14px;font-weight:600;color:#555;}</style><li class="css-13svt41"><style data-emotion-css="1sg2lsz">.css-1sg2lsz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}</style><div class="css-1sg2lsz"><style data-emotion-css="1m34rt5">.css-1m34rt5{margin-right:6px;width:24px;height:24px;}</style><img src="/docs/assets/img/icons/sidebar/circle-logo.svg" alt="About CircleCI icon" class="css-1m34rt5"/><style data-emotion-css="10tjyd0">.css-10tjyd0{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}</style><div class="css-10tjyd0">About CircleCI</div><style data-emotion-css="1tezdrc">.css-1tezdrc{padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;}</style><style data-emotion-css="1vlg0km">.css-1vlg0km{width:24px;height:24px;min-width:24px;color:#333;padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;}</style><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/continue.svg" alt="Getting started icon" class="css-1m34rt5"/><div class="css-10tjyd0">Getting started</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/changelog.svg" alt="Reference icon" class="css-1m34rt5"/><div class="css-10tjyd0">Reference</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/pipeline.svg" alt="Orchestrate and trigger icon" class="css-1m34rt5"/><div class="css-10tjyd0">Orchestrate and trigger</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/builds.svg" alt="Execute jobs on managed compute resources icon" class="css-1m34rt5"/><div class="css-10tjyd0">Execute jobs on managed compute resources</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/build-agent.svg" alt="Execute jobs on self-hosted runners icon" class="css-1m34rt5"/><div class="css-10tjyd0">Execute jobs on self-hosted runners</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/passed.svg" alt="Test icon" class="css-1m34rt5"/><div class="css-10tjyd0">Test</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/getting-started-new.svg" alt="Deploy icon" class="css-1m34rt5"/><div class="css-10tjyd0">Deploy</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/release.svg" alt="Release icon" class="css-1m34rt5"/><div class="css-10tjyd0">Release</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/sparkle.svg" alt="Optimize icon" class="css-1m34rt5"/><div class="css-10tjyd0">Optimize</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/insights-new.svg" alt="Project Insights icon" class="css-1m34rt5"/><div class="css-10tjyd0">Project Insights</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/orb.svg" alt="Package and re-use config with orbs icon" class="css-1m34rt5"/><div class="css-10tjyd0">Package and re-use config with orbs</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/avatar.svg" alt="Manage roles, permissions, and authentication icon" class="css-1m34rt5"/><div class="css-10tjyd0">Manage roles, permissions, and authentication</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/key.svg" alt="Manage security and secrets icon" class="css-1m34rt5"/><div class="css-10tjyd0">Manage security and secrets</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/lock.svg" alt="Manage config policies icon" class="css-1m34rt5"/><div class="css-10tjyd0">Manage config policies</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/webhook.svg" alt="Integration icon" class="css-1m34rt5"/><div class="css-10tjyd0">Integration</div><style data-emotion-css="nnsjfc">.css-nnsjfc{padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);}</style><style data-emotion-css="a2qlhg">.css-a2qlhg{width:24px;height:24px;min-width:24px;color:#333;padding:0.25rem;-webkit-transition:-webkit-transform 0.2s ease;-webkit-transition:transform 0.2s ease;transition:transform 0.2s ease;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);}</style><div size="24" color="#333" class="css-a2qlhg"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div><style data-emotion-css="i6zvb9">.css-i6zvb9{list-style-type:none;}</style><ul class="css-i6zvb9"><style data-emotion-css="1n64q0m">.css-1n64q0m{margin-top:16px;}</style><div class="subSection css-1n64q0m"><style data-emotion-css="4h1kga">.css-4h1kga{color:#555555;display:inline-block;font-size:13px;font-weight:500;-webkit-letter-spacing:0.5px;-moz-letter-spacing:0.5px;-ms-letter-spacing:0.5px;letter-spacing:0.5px;margin:0.5rem 0 0 1rem;text-transform:uppercase;}.css-4h1kga a{-webkit-text-decoration:none;text-decoration:none;color:#555555;font-size:12px;}.css-4h1kga a:hover{color:#27a0b6;}</style><div class="css-4h1kga">Integration features</div><ul class="css-i6zvb9"><style data-emotion-css="7cjp2v">.css-7cjp2v{margin-top:0.5rem;}.css-7cjp2v svg{fill:#555555;}.css-7cjp2v:hover svg{fill:#0062b0;}</style><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/webhooks/" class="css-x7gnkn"><style data-emotion-css="8bro8e">.css-8bro8e{color:#555555;margin:0 0 0 1rem;display:inline-block;margin-left:30px;font-weight:400;font-size:0.875rem;-webkit-text-decoration:none;text-decoration:none;}.css-8bro8e:hover{color:#0062b0;}</style><span class="css-8bro8e">Webhook integration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/notifications/" class="css-x7gnkn"><span class="css-8bro8e">Notifications overview</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/oss/" class="css-x7gnkn"><span class="css-8bro8e">Build open source projects</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">VCS integration</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/version-control-system-integration-overview/" class="css-x7gnkn"><span class="css-8bro8e">VCS integration overview</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/github-apps-integration/" class="css-x7gnkn"><span class="css-8bro8e">GitHub App integration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/gitlab-integration/" class="css-x7gnkn"><span class="css-8bro8e">GitLab integration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/bitbucket-data-center-integration/" class="css-x7gnkn"><span class="css-8bro8e">Bitbucket Data Center integration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/github-integration/" class="css-x7gnkn"><style data-emotion-css="1ouqygm">.css-1ouqygm{color:inherit;margin:0 0 0 1rem;display:inline-block;margin-left:30px;font-weight:400;font-size:0.875rem;-webkit-text-decoration:none;text-decoration:none;}.css-1ouqygm:hover{color:#0062b0;}</style><span class="css-1ouqygm">GitHub OAuth app integration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/bitbucket-integration/" class="css-x7gnkn"><span class="css-8bro8e">Bitbucket Cloud integration</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Third-party integrations</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/enable-checks/" class="css-x7gnkn"><span class="css-8bro8e">Enable GitHub Checks</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/jira-plugin/" class="css-x7gnkn"><span class="css-8bro8e">Connect with Jira</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/new-relic-integration/" class="css-x7gnkn"><span class="css-8bro8e">New Relic integration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/datadog-integration/" class="css-x7gnkn"><span class="css-8bro8e">Datadog integration</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/sumo-logic-integration/" class="css-x7gnkn"><span class="css-8bro8e">Sumo Logic integration</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Tutorials</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/authorize-google-cloud-sdk/" class="css-x7gnkn"><span class="css-8bro8e">Authorize Google Cloud SDK</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">How-to guides</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/status-badges/" class="css-x7gnkn"><span class="css-8bro8e">Adding status badges</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/webhooks-airtable/" class="css-x7gnkn"><span class="css-8bro8e">CircleCI webhooks with Airtable</span></a></span></li><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/add-ssh-key/" class="css-x7gnkn"><span class="css-8bro8e">Add additional SSH keys</span></a></span></li></ul></div><div class="subSection css-1n64q0m"><div class="css-4h1kga">Reference</div><ul class="css-i6zvb9"><li class="css-7cjp2v"><span><a data-testid="link" href="/docs/webhooks-reference/" class="css-x7gnkn"><span class="css-8bro8e">Webhooks reference</span></a></span></li></ul></div></ul></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/code.svg" alt="Developer toolkit icon" class="css-1m34rt5"/><div class="css-10tjyd0">Developer toolkit</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.7 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.7</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.6 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.6</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.5 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.5</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.4 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.4</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.3 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.3</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.2 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.2</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/admin-new.svg" alt="Server administration v4.1 icon" class="css-1m34rt5"/><div class="css-10tjyd0">Server administration v4.1</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/plans-outline.svg" alt="Plans and pricing icon" class="css-1m34rt5"/><div class="css-10tjyd0">Plans and pricing</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li><li class="css-13svt41"><div class="css-1sg2lsz"><img src="/docs/assets/img/icons/sidebar/changelog.svg" alt="Contributing to CircleCI docs icon" class="css-1m34rt5"/><div class="css-10tjyd0">Contributing to CircleCI docs</div><div size="24" color="#333" class="css-1vlg0km"><svg role="img" focusable="false" viewBox="0 0 16 16" aria-label="Arrow Right" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M10.7071 7.29289C11.0976 7.68342 11.0976 8.31658 10.7071 8.70711L5.70711 13.7071C5.31658 14.0976 4.68342 14.0976 4.29289 13.7071C3.90237 13.3166 3.90237 12.6834 4.29289 12.2929L8.58579 8L4.29289 3.70711C3.90237 3.31658 3.90237 2.68342 4.29289 2.29289C4.68342 1.90237 5.31658 1.90237 5.70711 2.29289L10.7071 7.29289Z"></path></svg></div></div></li></ul></div></nav><style data-emotion-css="lfzoxb">.css-lfzoxb{padding:3rem 2.5rem 0 2.5rem;}@media (max-width:768px){.css-lfzoxb{padding:1.5rem 1rem;}}</style><style data-emotion-css="1xwsbgo">.css-1xwsbgo{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex:1;-ms-flex:1;flex:1;padding:3rem 2.5rem 0 2.5rem;}@media (max-width:768px){.css-1xwsbgo{padding:1.5rem 1rem;}}</style><main class="css-1xwsbgo"><article> <style data-emotion-css="ha3tto">.css-ha3tto{color:#555555;font-size:1rem;line-height:1.5rem;}.css-ha3tto .circle-green{color:#04aa4e;}.css-ha3tto .circle-red{color:#c13937;}.css-ha3tto p{margin-top:0px;margin-bottom:10px;}.css-ha3tto ol,.css-ha3tto ul{margin-bottom:10px;margin-top:0;}.css-ha3tto .table-striped{margin:1.5rem 0;}.css-ha3tto .table{border-collapse:collapse;border-spacing:0;max-width:100%;width:100%;table-layout:auto;}.css-ha3tto .table thead{background:#F7F7F7;}.css-ha3tto .table th,.css-ha3tto .table td{line-height:1.50;padding:0.5rem;text-align:left;vertical-align:top;}.css-ha3tto .table th{border-bottom:1px solid #E3E3E3;color:#555555;font-weight:500;font-size:1rem;}.css-ha3tto .table tr th:first-of-type code.language-plaintext,.css-ha3tto .table tr td:first-of-type code.language-plaintext{white-space:nowrap !important;}.css-ha3tto .table.table-striped > tbody > tr:nth-of-type(even){background-color:#F7F7F7;}.css-ha3tto .table.table-no-background > tbody > tr:nth-of-type(even){background:none;}.css-ha3tto .table.table-migrating-page tr > td:not(:only-child):first-of-type{padding-left:0;padding-right:0.25rem;}.css-ha3tto .table.table-migrating-page tr>td+td{padding-left:0.25rem;padding-right:0;}.css-ha3tto .table.table-migrating-page tbody > tr:nth-of-type(even){background:none;}.css-ha3tto .table td :not(pre)>code{word-wrap:normal;}.css-ha3tto hr{border:0;border-top:1px solid #E3E3E3;width:100%;margin:1.5rem 0;}.css-ha3tto .video-wrapper,.css-ha3tto .videoblock{height:0;padding-bottom:56.25%;padding-top:25px;position:relative;margin:1.25rem 0;}</style><div class="css-ha3tto"><style data-emotion-css="2va2ht">.css-2va2ht{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}</style><div class="css-2va2ht"><style data-emotion-css="qcooo9">.css-qcooo9{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}</style><div class="css-qcooo9"><style data-emotion-css="16173t9">.css-16173t9{max-width:calc( 960px - 48px - 48px );}@media (min-width:1300px){.css-16173t9{width:calc(100% - 400px);}}</style><div class="css-16173t9"><section data-testid="content-page-heading"><style data-emotion-css="1d5kwgy">.css-1d5kwgy{margin-bottom:1rem;margin-top:0;font-size:2.25rem;font-weight:500;color:#161616;line-height:52px;}</style><h1 class="css-1d5kwgy">GitHub OAuth app integration overview</h1><style data-emotion-css="12ut1uv">.css-12ut1uv{background:#FFFFFF;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border:1px solid #D4D4D4;border-radius:4px;box-sizing:border-box;margin:1rem 0;font-size:15px;}@media (max-width:891px){.css-12ut1uv{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;padding:0.5rem;}}</style><div class="css-12ut1uv"><style data-emotion-css="tkbaat">.css-tkbaat{padding:0.125rem;margin-left:0.5rem;margin-right:1rem;}@media (max-width:891px){.css-tkbaat{margin-left:0.2em;}}</style><style data-emotion-css="ib8kn6">.css-ib8kn6{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:0.125rem;margin-left:0.5rem;margin-right:1rem;}@media (max-width:891px){.css-ib8kn6{margin-left:0.2em;}}</style><div class="css-ib8kn6"><style data-emotion-css="2iw00g">.css-2iw00g{width:1.5rem;margin:0.5rem;}</style><div class="css-2iw00g"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Duration" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M12 20C15.866 20 19 16.866 19 13C19 9.13401 15.866 6 12 6C8.13401 6 5 9.13401 5 13C5 16.866 8.13401 20 12 20ZM12 22C7.02944 22 3 17.9706 3 13C3 8.02944 7.02944 4 12 4C16.9706 4 21 8.02944 21 13C21 17.9706 16.9706 22 12 22ZM11 1H13C13.5523 1 14 1.44772 14 2C14 2.55228 13.5523 3 13 3H11C10.4477 3 10 2.55228 10 2C10 1.44772 10.4477 1 11 1ZM19.7782 3.80761L21.1924 5.22183C21.5829 5.61235 21.5829 6.24551 21.1924 6.63604C20.8019 7.02656 20.1687 7.02656 19.7782 6.63604L18.364 5.22183C17.9734 4.8313 17.9734 4.19814 18.364 3.80761C18.7545 3.41709 19.3876 3.41709 19.7782 3.80761ZM13 9V12.5858L14.7071 14.2929C15.0976 14.6834 15.0976 15.3166 14.7071 15.7071C14.3166 16.0976 13.6834 16.0976 13.2929 15.7071L11.2929 13.7071C11.1054 13.5196 11 13.2652 11 13V9C11 8.44772 11.4477 8 12 8C12.5523 8 13 8.44772 13 9Z"></path></svg></div></div><style data-emotion-css="gw0ftn">.css-gw0ftn > span{line-height:1.5rem;}</style><div data-tip="true" data-for="readUpdateTime" class="css-gw0ftn"><span data-testid="git-file-link"><style data-emotion-css="qjll1l">.css-qjll1l a{font-size:15px;}</style><span class="css-qjll1l"><a href="https://github.com/circleci/circleci-docs/commits/master/jekyll/_cci2/github-integration.adoc" target="_blank" rel="noopener noreferrer" data-testid="external-git-file-link" class="css-x7gnkn">1 week ago</a></span></span><style data-emotion-css="1sqa8jq">.css-1sqa8jq{line-height:1.5rem;}.css-1sqa8jq:before{background:#343434;border-radius:50%;content:"\a";display:inline-block;height:3px;margin:0 5px 3px 5px;width:3px;}</style><span data-testid="content-read-time" class="css-1sqa8jq">11<!-- --> min read</span></div><style data-emotion-css="1ioox4k">.css-1ioox4k{background-color:#2B2B2B;color:#FFFFFF;text-align:center;border-radius:5px;padding:0.25rem 0.5rem;font-size:0.8125rem;font-weight:700;z-index:1;}</style></div><style data-emotion-css="100omiu">.css-100omiu{border-left:1px solid #ddd;padding:0.125rem 0.25rem;}@media (max-width:891px){.css-100omiu{border-left:none;}}</style><style data-emotion-css="brpd47">.css-brpd47{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-left:1px solid #ddd;padding:0.125rem 0.25rem;}@media (max-width:891px){.css-brpd47{border-left:none;}}</style><div data-testid="FrontMatterTags" class="css-brpd47"><div class="css-2iw00g"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Tag" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M14.2929 2.29289C14.6834 1.90237 15.3166 1.90237 15.7071 2.29289L21.7071 8.29289C22.0977 8.68342 22.0977 9.31658 21.7071 9.70711L9.70714 21.7071C9.42114 21.9931 8.99102 22.0787 8.61735 21.9239C8.24367 21.7691 8.00003 21.4045 8.00003 21V16H3.00003C2.59557 16 2.23093 15.7564 2.07615 15.3827C1.92137 15.009 2.00692 14.5789 2.29292 14.2929L14.2929 2.29289ZM5.41424 14H9.00003C9.55231 14 10 14.4477 10 15V18.5858L19.5858 9L15 4.41421L5.41424 14Z"></path> </svg></div></div><div data-tip="true" data-for="Cloud"><style data-emotion-css="15alkjj">.css-15alkjj{line-height:1.5rem;}</style><span class="css-15alkjj">Cloud</span></div></div></div></section></div><style data-emotion-css="wurzvf">.css-wurzvf{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width:1300px){.css-wurzvf{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}}</style><style data-emotion-css="w4wk6o">.css-w4wk6o{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;}@media (min-width:1300px){.css-w4wk6o{-webkit-flex-direction:row-reverse;-ms-flex-direction:row-reverse;flex-direction:row-reverse;}}</style><div class="css-w4wk6o"><style data-emotion-css="c06me2">.css-c06me2{max-height:auto;}</style><div class="css-c06me2"><style data-emotion-css="gjrqsi">@media (max-width:1300px){.css-gjrqsi{margin:1.5rem 0 2.5rem 0;}}@media (min-width:1300px){.css-gjrqsi{position:-webkit-sticky;position:sticky;top:100px;margin-top:-100px;padding-left:3rem;padding-right:0.5rem;max-height:calc(100vh - 140px);overflow-y:auto;width:400px;}}.css-gjrqsi ul{list-style-type:none;margin-bottom:0;}</style><div data-testid="right-bar" class="css-gjrqsi"><style data-emotion-css="1u486hm">.css-1u486hm{font-size:1rem;font-weight:500;margin:0;}</style><h5 data-testid="on-this-page" class="css-1u486hm">On This Page</h5><style data-emotion-css="7w93ns">.css-7w93ns{margin-left:0.25rem;padding-left:10px;border-left:2px solid #F1F1F1;}</style><ul data-testid="toc-list" class="css-7w93ns"><style data-emotion-css="15ss6d4">.css-15ss6d4{list-style-type:none;margin:0.5rem 0;margin-left:0rem;padding:0 8px;}</style><li data-testid="toc-entry" class="css-15ss6d4"><style data-emotion-css="rvafwm">.css-rvafwm a{color:#343434;font-weight:400;}.css-rvafwm a:hover{-webkit-text-decoration:underline;text-decoration:underline;}</style><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#introduction" class="css-x7gnkn">Introduction</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#permissions-overview" class="css-x7gnkn">Permissions overview</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#saml-sso" class="css-x7gnkn">SAML SSO</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#connect-a-github-account" class="css-x7gnkn">Connect a GitHub account</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#disconnect-a-github-account" class="css-x7gnkn">Disconnect a GitHub account</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#deploy-keys-and-user-keys" class="css-x7gnkn">Deploy keys and user keys</a></span></li><style data-emotion-css="1kc30t0">.css-1kc30t0{list-style-type:none;margin:0.5rem 0;margin-left:1rem;padding:0 8px;}</style><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#create-additional-github-ssh-keys" class="css-x7gnkn">Create additional GitHub SSH keys</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#how-are-private-keys-used" class="css-x7gnkn">How are private keys used?</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#user-key-security" class="css-x7gnkn">User key security</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#user-key-access-related-error-messages" class="css-x7gnkn">User key access-related error messages</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#add-a-circleci-config-file" class="css-x7gnkn">Add a .circleci/config.yml file</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#enable-your-project-to-check-out-additional-private-repositories" class="css-x7gnkn">Enable your project to check out additional private repositories</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#best-practice-for-keys" class="css-x7gnkn">Best practices for keys</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#establish-the-authenticity-of-an-ssh-host" class="css-x7gnkn">Establish the authenticity of an SSH host</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#controlling-access-via-a-machine-user" class="css-x7gnkn">Controlling access via a machine user</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#third-party-applications" class="css-x7gnkn">Third party applications</a></span></li><li data-testid="toc-entry" class="css-1kc30t0"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#how-to-re-enable-circlecip-for-a-github-organization" class="css-x7gnkn">How to re-enable CircleCI for a GitHub organization</a></span></li><style data-emotion-css="1puo75j">.css-1puo75j{list-style-type:none;margin:0.5rem 0;margin-left:2rem;padding:0 8px;}</style><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#non-admin-member-workflow" class="css-x7gnkn">Non-admin member workflow</a></span></li><li data-testid="toc-entry" class="css-1puo75j"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#admin-owner-workflow" class="css-x7gnkn">Admin owner workflow</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#rename-organizations-and-repositories" class="css-x7gnkn">Rename organizations and repositories</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#using-github-app-functionality" class="css-x7gnkn">Using GitHub App functionality alongside the GitHub OAuth app</a></span></li><li data-testid="toc-entry" class="css-15ss6d4"><span class="styled-link css-rvafwm"><a data-testid="link" href="/docs/github-integration/#next-steps" class="css-x7gnkn">Next steps</a></span></li></ul></div></div><div class="css-16173t9"><style data-emotion-css="1d1hm3o">.css-1d1hm3o .toolbar{top:0.2em;right:0.2em !important;padding:6px;}.css-1d1hm3o .toolbar .copy-to-clipboard-button{cursor:pointer;-webkit-transition:opacity 0.3s ease-in-out;transition:opacity 0.3s ease-in-out;opacity:0;background-color:#EDEDED !important;background-position:50% !important;background-repeat:no-repeat !important;border-radius:4px !important;height:30px;width:46px;}.css-1d1hm3o .toolbar .copy-to-clipboard-button:hover{background-color:#E3E3E3 !important;}.css-1d1hm3o .toolbar .copy-to-clipboard-button:active{background-color:#D4D4D4 !important;}.css-1d1hm3o .toolbar .copy-to-clipboard-button span{display:none;}.css-1d1hm3o .toolbar .copy-to-clipboard-button[data-copy-state='copy']{background-image:url('/docs/icons/copy.svg') !important;}.css-1d1hm3o .toolbar .copy-to-clipboard-button[data-copy-state='copy-success']{background-color:#e3e3e3 !important;background-image:url('/docs/icons/check.svg') !important;}.css-1d1hm3o .code-toolbar:hover .copy-to-clipboard-button{opacity:1;}</style><div data-prismjs-copy-timeout="3000" class="line-numbers css-1d1hm3o"><div><div id="user-content-preamble"> <div class="sectionbody"> <div class="paragraph"> <p>If your CircleCI organization is authenticated with GitHub through the <strong>GitHub OAuth app</strong>, the content on this page is for you.</p> </div> <style data-emotion-css="bdwfpm">.css-bdwfpm{margin:1.5rem 0;}</style><div class="css-bdwfpm"><style data-emotion-css="rcrvz9">.css-rcrvz9{box-sizing:border-box;min-width:0;margin:0;border:1px solid #D4D4D4;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:60px;margin:0.25rem 0;border-left:4px solid #D4D4D4;}</style><div data-testid="compass-suggestion-alert" role="alert" aria-live="polite" class="css-rcrvz9"><style data-emotion-css="v7m42f">.css-v7m42f{-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-column-gap:0.75rem;column-gap:0.75rem;margin:11px;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}@media (min-width:768px){.css-v7m42f{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}</style><style data-emotion-css="1i7vmqf">.css-1i7vmqf{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-column-gap:0.75rem;column-gap:0.75rem;margin:11px;-webkit-align-items:flex-start;-webkit-box-align:flex-start;-ms-flex-align:flex-start;align-items:flex-start;}@media (min-width:768px){.css-1i7vmqf{-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}</style><div class="css-1i7vmqf"><style data-emotion-css="3792lh">.css-3792lh{width:20px;height:20px;min-width:20px;color:#161616;}</style><div color="#161616" class="css-3792lh"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Suggestion Lightbulb" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.96 3C12.96 2.44772 12.5123 2 11.96 2C11.4077 2 10.96 2.44772 10.96 3V4.43C10.96 4.98228 11.4077 5.43 11.96 5.43C12.5123 5.43 12.96 4.98228 12.96 4.43V3ZM16.2341 14.5901C16.2572 14.5555 16.275 14.5291 16.2868 14.5118L16.3592 14.3965C16.4802 14.1732 16.584 13.9411 16.6697 13.7021C16.8716 13.1555 16.9733 12.577 16.97 11.9943L16.9698 11.9792C16.954 11.2218 16.7664 10.478 16.421 9.80378C16.0757 9.12958 15.5817 8.54266 14.9763 8.08734C14.3709 7.63202 13.67 7.3202 12.9264 7.17544C12.1829 7.03067 11.4162 7.05674 10.6842 7.25168C9.95218 7.44662 9.27405 7.80533 8.70099 8.30072C8.12793 8.79611 7.67492 9.41523 7.37617 10.1113C7.07742 10.8074 6.94074 11.5623 6.97645 12.319C7.01216 13.0756 7.21932 13.8143 7.5823 14.4792L7.65423 14.593C7.66538 14.6093 7.68239 14.6344 7.70443 14.6672C7.74853 14.7329 7.81255 14.8297 7.88981 14.9503C8.04494 15.1925 8.25052 15.5264 8.45469 15.896C8.66041 16.2684 8.85554 16.6607 8.99681 17.022C9.14607 17.4037 9.20002 17.6639 9.20002 17.8C9.20002 18.3478 9.64074 18.7936 10.1885 18.7999L13.6585 18.8399C13.9257 18.843 14.183 18.739 14.373 18.5512C14.5631 18.3633 14.67 18.1072 14.67 17.84C14.67 17.7085 14.7255 17.444 14.8826 17.0473C15.0306 16.6735 15.2349 16.2652 15.4499 15.8768C15.6633 15.4913 15.8781 15.1416 16.0402 14.8876C16.121 14.761 16.1879 14.6594 16.2341 14.5901ZM12.5442 9.13858C12.0981 9.05172 11.6381 9.06736 11.1989 9.18432C10.7597 9.30128 10.3528 9.51651 10.0089 9.81374C9.66511 10.111 9.39331 10.4825 9.21406 10.9001C9.03481 11.3178 8.9528 11.7707 8.97422 12.2247C8.9949 12.663 9.11145 13.0911 9.31542 13.4792C9.32861 13.4985 9.34532 13.5232 9.36514 13.5527C9.4162 13.6288 9.48812 13.7375 9.57398 13.8716C9.7451 14.1388 9.97452 14.5111 10.2054 14.929C10.4346 15.3441 10.6745 15.8206 10.8595 16.2937C10.923 16.4561 10.9848 16.6299 11.0379 16.8096L12.8402 16.8304C12.895 16.6494 12.9583 16.4744 13.0231 16.3108C13.2144 15.8278 13.4626 15.3373 13.7001 14.9082C13.9392 14.4762 14.1769 14.0896 14.3542 13.8118C14.4431 13.6724 14.5176 13.5592 14.5704 13.4801C14.5915 13.4484 14.6092 13.4222 14.623 13.4018C14.6867 13.2797 14.742 13.1533 14.7883 13.0236L14.7923 13.0124C14.9108 12.6926 14.9711 12.3542 14.9701 12.0132C14.9595 11.5614 14.847 11.1178 14.641 10.7156C14.4338 10.3111 14.1374 9.95891 13.7741 9.68572C13.4109 9.41252 12.9903 9.22543 12.5442 9.13858ZM9.22998 21C9.22998 20.4477 9.6777 20 10.23 20H13.69C14.2423 20 14.69 20.4477 14.69 21C14.69 21.5523 14.2423 22 13.69 22H10.23C9.6777 22 9.22998 21.5523 9.22998 21ZM19.0071 4.9129C19.3976 5.30342 19.3976 5.93658 19.0071 6.32711L17.9971 7.33711C17.6066 7.72763 16.9734 7.72763 16.5829 7.33711C16.1923 6.94659 16.1923 6.31342 16.5829 5.9229L17.5929 4.9129C17.9834 4.52237 18.6166 4.52237 19.0071 4.9129ZM19.5 10.96C18.9477 10.96 18.5 11.4077 18.5 11.96C18.5 12.5123 18.9477 12.96 19.5 12.96H20.92C21.4723 12.96 21.92 12.5123 21.92 11.96C21.92 11.4077 21.4723 10.96 20.92 10.96H19.5ZM4.91289 4.9129C5.30341 4.52237 5.93658 4.52237 6.3271 4.9129L7.3371 5.9229C7.72763 6.31342 7.72763 6.94659 7.3371 7.33711C6.94658 7.72763 6.31341 7.72763 5.92289 7.33711L4.91289 6.32711C4.52236 5.93659 4.52236 5.30342 4.91289 4.9129ZM3 10.96C2.44772 10.96 2 11.4077 2 11.96C2 12.5123 2.44772 12.96 3 12.96H4.43C4.98228 12.96 5.43 12.5123 5.43 11.96C5.43 11.4077 4.98228 10.96 4.43 10.96H3Z"></path></svg></div><style data-emotion-css="1aoesim">.css-1aoesim{-webkit-column-gap:0.75rem;column-gap:0.75rem;row-gap:0.75rem;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex:1;-ms-flex:1;flex:1;}</style><style data-emotion-css="45kv77">.css-45kv77{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:100%;-webkit-column-gap:0.75rem;column-gap:0.75rem;row-gap:0.75rem;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-flex:1;-ms-flex:1;flex:1;}</style><div id="collapsible-flex" class="css-45kv77"><style data-emotion-css="seohoz">.css-seohoz{box-sizing:border-box;min-width:0;margin:0;-webkit-flex:1;-ms-flex:1;flex:1;}</style><div class="css-seohoz"><style data-emotion-css="1c1tyii">.css-1c1tyii{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1rem;line-height:1.5;}</style><span class="css-1c1tyii"> <div style="overflow:auto"><table><tbody><tr><td class="icon"> <i class="fa icon-tip" title="Tip"></i> </td><td class="content"> <div class="paragraph"> <p><strong>Check your project slug to discover which GitHub integration you have set up:</strong></p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>Head to the <span><a href="https://app.circleci.com/home" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->CircleCI web app<style data-emotion-css="1ie5e7y">.css-1ie5e7y{display:inline-block;width:1rem;height:1rem;margin-left:-5px;}</style><span color="currentColor" class="css-1ie5e7y"><style data-emotion-css="qzco2h">.css-qzco2h{display:block;width:100%;fill:#0078CA;}</style><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span> and select your org from the cards on your user homepage.</p> </li> <li> <p>Select <strong>Projects</strong> from the sidebar and locate your project from the list. You can use the search to help.</p> </li> <li> <p>Select the ellipsis menu (<span class="icon"><i class="fa fa-ellipsis-h fa-ellipsis"></i></span>) next to your project and select <strong>Project Settings</strong>. The project slug is listed on the project settings homepage.</p> <div class="ulist"> <ul> <li> <p><strong>GitHub App</strong>: Project slug starts with <code class="" data-testid="code-snippet-highlight">circleci</code> followed by UUIDs. For example, <code class="" data-testid="code-snippet-highlight">circleci/34R3kN5RtfEE7v4sa4nWAU/4nYdoKGkb6RXn7JGt8SQtg</code>).</p> </li> <li> <p><strong>GitHub OAuth app</strong>: Project slug is human readable. For example, <code class="" data-testid="code-snippet-highlight">github/circleci/circleci-demo-workflows</code>.</p> </li> </ul> </div> </li> </ol> </div> <div class="paragraph"> <p>For more information about the differences, see the <span><a data-testid="link" href="/docs/version-control-system-integration-overview/" class="css-x7gnkn"> <!-- -->VCS integration overview</a></span>.</p> </div> </td></tr></tbody></table></div> </span></div><style data-emotion-css="1ng7dzp">.css-1ng7dzp{-webkit-column-gap:0.75rem;column-gap:0.75rem;min-height:36px;}</style><style data-emotion-css="1828gbe">.css-1828gbe{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-column-gap:0.75rem;column-gap:0.75rem;min-height:36px;}</style><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> </div> </div> <div class="sect1"> <div><style data-emotion-css="1gt1ibw">.css-1gt1ibw{color:#161616;line-height:1.50;}</style><div class="css-1gt1ibw"><style data-emotion-css="n6xkmh">.css-n6xkmh{margin-bottom:10px;margin-top:1.25rem;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><style data-emotion-css="sycgw4">.css-sycgw4{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.75rem;font-weight:700;line-height:1.25;margin-bottom:10px;margin-top:1.25rem;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><h2 id="introduction" data-testid="title-introduction" class="css-sycgw4">Introduction</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>When you add a project to CircleCI, the following settings are added to the repository using the permissions you gave CircleCI when you signed up:</p> </div> <div class="ulist"> <ul> <li> <p>A deploy key that is used to check out your project from GitHub.</p> </li> <li> <p>A service hook (or &quot;push hook&quot;) that is used to notify CircleCI when you push to GitHub.</p> </li> </ul> </div> <div class="paragraph"> <p>CircleCI builds push hooks by default. Builds are triggered for all push hooks for the repository and PUSH is the most common case of triggering a build.</p> </div> <div class="paragraph"> <p>Some additional, less common cases where CircleCI uses hooks are as follows:</p> </div> <div class="ulist"> <ul> <li> <p>CircleCI processes PR hooks (pull request hooks) to store PR information for the CircleCI app. If the <strong>Only build pull requests</strong> setting is enabled within CircleCI, CircleCI will only trigger builds when a PR is opened, or when there is a push to a branch for which there is an existing PR. Even if this setting is enabled, CircleCI will always build all pushes to the project’s default branch.</p> </li> <li> <p>If the <strong>Build forked pull requests</strong> setting is enabled in CircleCI, CircleCI will trigger builds in response to PRs created from forked repositories.</p> </li> </ul> </div> <div class="paragraph"> <p>These settings can be found in each project’s individual <strong>Project Settings</strong> section of the CircleCI web app.</p> </div> <div class="paragraph"> <p>The ability to override the <strong>Only build pull requests</strong> setting is supported. Specifically, CircleCI will run validation on all commits from additional, non-default branches that are specified via regular expression (for example, <code class="" data-testid="code-snippet-highlight">release.\*</code>). Details on how to enable can be found on our <span><a href="https://discuss.circleci.com/t/product-launch-override-only-build-prs-setting/47807" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->community forum<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>.</p> </div> <div class="paragraph"> <p>It is possible to edit the webhooks in GitHub to restrict events that trigger a build. Editing the webhook settings lets you change which hooks get sent to CircleCI, but does not change the types of hooks that trigger builds. CircleCI will always build push hooks, and build on PR hooks (depending on settings), but if you remove push hooks from the webhook settings, CircleCI will not build.</p> </div> <div class="paragraph"> <p>Refer to the <span><a href="https://developer.github.com/v3/repos/hooks/#edit-a-hook" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->GitHub Edit a Hook document<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span> for details.</p> </div> <div class="paragraph"> <p>Refer to the CircleCI documentation on <span><a data-testid="link" href="/docs/workflows/#using-filters-in-your-workflows" class="css-x7gnkn"> <!-- -->Workflow filters</a></span> for information on how to build tag pushes.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="permissions-overview" data-testid="title-permissions-overview" class="css-sycgw4">Permissions overview</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>CircleCI requests the following permissions from GitHub, defined in the <span><a href="https://developer.github.com/v3/oauth/#scopes" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->GitHub permissions model<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>.</p> </div> <div class="paragraph"> <p><strong>Read Permission</strong></p> </div> <div class="ulist"> <ul> <li> <p>Get a user’s email address</p> </li> </ul> </div> <div class="paragraph"> <p><strong>Write Permissions</strong></p> </div> <div class="ulist"> <ul> <li> <p>Get a list of a user’s repositories</p> </li> <li> <p>Add an SSH key to a user’s account</p> </li> </ul> </div> <div class="paragraph"> <p><strong>Admin Permissions</strong>, needed for setting up a project</p> </div> <div class="ulist"> <ul> <li> <p>Add deploy keys to a repository</p> </li> <li> <p>Add service hooks to a repository</p> </li> </ul> </div> <div class="css-bdwfpm"><style data-emotion-css="l2fvwh">.css-l2fvwh{box-sizing:border-box;min-width:0;margin:0;border:1px solid #D4D4D4;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:60px;margin:0.25rem 0;border-left:4px solid #0078CA;}</style><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><style data-emotion-css="15qiqgw">.css-15qiqgw{width:20px;height:20px;min-width:20px;color:#0078CA;}</style><div color="#0078CA" class="css-15qiqgw"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Info Circle" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M12 2C17.52 2 22 6.48 22 12C22 17.52 17.52 22 12 22C6.48 22 2 17.52 2 12C2 6.48 6.48 2 12 2ZM12 6C11.4477 6 11 6.44772 11 7C11 7.55228 11.4477 8 12 8C12.5523 8 13 7.55228 13 7C13 6.44772 12.5523 6 12 6ZM12 10C11.4477 10 11 10.4477 11 11V17C11 17.5523 11.4477 18 12 18C12.5523 18 13 17.5523 13 17V11C13 10.4477 12.5523 10 12 10Z"></path></svg></div><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii"> <div style="overflow:auto"><table><tbody><tr><td class="icon"> <i class="fa icon-note" title="Note"></i> </td><td class="content"> CircleCI only asks for permissions that are absolutely necessary. However, as a GitHub OAuth app, CircleCI is constrained by the specific permissions available via GitHub’s OAuth scopes. For example, getting a full list of a user’s repository, public and private, from GitHub, requires the <span><a href="https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <code class="" data-testid="code-snippet-highlight">repo</code> scope<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>, which is write-level access. GitHub does not provide a read-only OAuth scope for listing all of a user’s repositories. </td></tr></tbody></table></div> </span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="saml-sso" data-testid="title-saml-sso" class="css-sycgw4">SAML SSO</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>Enabling SAML protection on a GitHub org can cause changes to CircleCI’s settings related to GitHub Checks and GitHub status updates. Ensure these settings are configured for their desired state after enabling SAML for your organization. You can find these settings at:</p> </div> <div class="ulist"> <ul> <li> <p>GitHub Checks, from the GitHub website, select <span class="menuseq"><b class="menu">Organization Settings</b> <i class="fa fa-angle-right caret"></i> <b class="submenu">VCS</b> <i class="fa fa-angle-right caret"></i> <b class="menuitem">GitHub Checks</b></span></p> </li> <li> <p>GitHub status updates, from the CircleCI web app <span class="menuseq"><b class="menu">Project Settings</b> <i class="fa fa-angle-right caret"></i> <b class="submenu">Advanced</b> <i class="fa fa-angle-right caret"></i> <b class="menuitem">GitHub Status Updates</b></span></p> </li> </ul> </div> <div class="paragraph"> <p>For more information on GitHub Checks and GitHub status updates, see the <span><a data-testid="link" href="/docs/enable-checks/#github-check-and-github-status-updates" class="css-x7gnkn"> <!-- -->Enabling GitHub checks</a></span>.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="connect-a-github-account" data-testid="title-connect-a-github-account" class="css-sycgw4">Connect a GitHub account</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>In the <span><a href="https://app.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->CircleCI web app<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>, select the organization you want to connect to GitHub and navigate to the <strong>User Settings</strong> by clicking on the user icon on the bottom of sidebar. Here you will be able to select GitHub. Once connected, you should see any existing projects populate on your dashboard, and you can choose which projects to follow.</p> </div> <div class="paragraph"> <p>Next you will need to set up the necessary permissions to run your projects on CircleCI.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="disconnect-a-github-account" data-testid="title-disconnect-a-github-account" class="css-sycgw4">Disconnect a GitHub account</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>Follow these steps to disconnect your CircleCI account from GitHub.</p> </div> <div class="css-bdwfpm"><style data-emotion-css="1wj9qpq">.css-1wj9qpq{box-sizing:border-box;min-width:0;margin:0;border:1px solid #D4D4D4;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:60px;margin:0.25rem 0;border-left:4px solid #BF8532;}</style><div data-testid="compass-warning-alert" role="alert" aria-live="polite" class="css-1wj9qpq"><div class="css-1i7vmqf"><style data-emotion-css="1xk4zua">.css-1xk4zua{width:20px;height:20px;min-width:20px;color:#BF8532;}</style><div color="#BF8532" class="css-1xk4zua"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Warning" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M21.7961 18.7493C21.9297 18.9776 22 19.2367 22 19.5006C22 20.3287 21.3215 21 20.4846 21H3.51564C3.24902 21 2.98712 20.9304 2.75638 20.7982C2.03208 20.3833 1.78485 19.466 2.20418 18.7493L10.6887 4.24842C10.8213 4.02168 11.0117 3.8333 11.2409 3.70203C11.9652 3.28712 12.8923 3.53174 13.3116 4.24842L21.7961 18.7493ZM12 18C12.5523 18 13 17.5523 13 17C13 16.4477 12.5523 16 12 16C11.4477 16 11 16.4477 11 17C11 17.5523 11.4477 18 12 18ZM11 13C11 13.5523 11.4477 14 12 14C12.5523 14 13 13.5523 13 13V8.9957C13 8.44341 12.5523 7.9957 12 7.9957C11.4477 7.9957 11 8.44341 11 8.9957V13Z"></path></svg></div><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii"> <div style="overflow:auto"><table><tbody><tr><td class="icon"> <i class="fa icon-caution" title="Caution"></i> </td><td class="content"> <div class="paragraph"> <p>When disconnecting a VCS connection using the method described here, any existing personal API keys will be invalidated. Any SSH keys, or deploy keys may also be invalidated. Disconnecting the VCS connection is intended to be used when issues arise, for example:</p> </div> <div class="ulist"> <ul> <li> <p>You joined the wrong organization</p> </li> <li> <p>You connected with the wrong GitHub user account</p> </li> <li> <p>Changes to the organization name in your VCS</p> </li> </ul> </div> </td></tr></tbody></table></div> </span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div class="olist arabic"> <ol class="arabic"> <li> <p>From the <span><a href="https://app.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->CircleCI web app<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>, select the organization you want to disconnect from GitHub. To do this use the org switcher at the top of the sidebar</p> </li> <li> <p>Navigate to <strong>User Settings</strong> by clicking on the user icon on the bottom of sidebar, then select <strong>Account Integrations</strong></p> </li> <li> <p>You will see a list of connections along with the GitHub organizations they are associated with. Select <b class="button">Disconnect</b> for the GitHub connection you wish to disconnect.</p> </li> </ol> </div> <div class="paragraph"> <p>Once disconnected, you will be redirected to the CircleCI login page. To reconnect your account, log in to CircleCI, navigate to user settings (icon at the bottom of the web app sidebar), and under <strong>Account Integrations</strong> select <b class="button">Connect</b> next to GitHub.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="deploy-keys-and-user-keys" data-testid="title-deploy-keys-and-user-keys" class="css-sycgw4">Deploy keys and user keys</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p><strong>What is a deploy key?</strong></p> </div> <div class="paragraph"> <p>When you add a new project, CircleCI creates a deployment key on GitHub for your project. A deploy key is an SSH key-pair, one public, one private. GitHub stores the public key, and CircleCI stores the private key. The deployment key gives CircleCI access to a single repository. To prevent CircleCI from pushing to your repository, this deployment key is read-only.</p> </div> <div class="paragraph"> <p>If you want to push to the repository from your builds, you will need a deployment key with write access. See the below section for GitHub-specific instructions to create a deployment key.</p> </div> <div class="paragraph"> <p><strong>What is a user key?</strong></p> </div> <div class="paragraph"> <p>A user key is user-specific an SSH key-pair. GitHub stores the public key, and CircleCI stores the private key. Possession of the private key gives the ability to act as that user, for purposes of &#x27;git&#x27; access to projects.</p> </div> <div class="paragraph"> <p><strong>What is the difference between deploy keys and user keys?</strong></p> </div> <div class="paragraph"> <p>Deploy keys and user keys are the only key types that GitHub supports. Deploy keys are globally unique (for example, no mechanism exists to make a deploy key with access to multiple repositories) and user keys have no notion of <em>scope</em> separate from the user associated with them.</p> </div> <div class="paragraph"> <p>To achieve fine-grained access to more than one repository, consider creating what GitHub calls a <span><a data-testid="link" href="/docs/github-integration/#controlling-access-via-a-machine-user" class="css-x7gnkn"> <!-- -->machine user</a></span>. Give this user exactly the permissions your build requires, and then associate its user key with your project on CircleCI.</p> </div> <div class="sect2"> <div><div class="css-1gt1ibw"><style data-emotion-css="2s9iz">.css-2s9iz{margin-bottom:10px;margin-top:10px;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><style data-emotion-css="ycntf9">.css-ycntf9{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.5rem;font-weight:500;line-height:1.3333333;margin-bottom:10px;margin-top:10px;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><h3 id="create-additional-github-ssh-keys" data-testid="title-create-additional-github-ssh-keys" class="css-ycntf9">Create additional GitHub SSH keys</h3></div></div> <div class="paragraph"> <p>If you need additional SSH keys to access other services, you can create additional keys by following the steps below.</p> </div> <div class="paragraph"> <p>In this example, the GitHub repository is <code class="" data-testid="code-snippet-highlight">https://github.com/you/test-repo</code>, and the CircleCI project is <code class="" data-testid="code-snippet-highlight">https://app.circleci.com/pipelines/github/you/test-repo</code>.</p> </div> <div class="olist arabic"> <ol class="arabic"> <li> <p>Create an SSH key-pair by following the <span><a href="https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->GitHub instructions<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>. When prompted to enter a passphrase, do <strong>not</strong> enter one (below is one example command to generate a key on macOS):</p> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-shell" data-testid="code-snippet-highlight"> ssh-keygen -t ed25519 -C &quot;your_email@example.com&quot;</code></pre> </div> </div> </li> <li> <p>Go to <code class="" data-testid="code-snippet-highlight">https://github.com/you/test-repo/settings/keys</code>, and select <strong>Add Deploy Key</strong>. Enter a title in the &quot;Title&quot; field, then copy and paste the public key you created in step 1. Check <strong>Allow write access</strong>, then select <strong>Add key</strong>.</p> </li> <li> <p>Go to your project settings in the CircleCI app, select <strong>SSH Keys</strong>, and <strong>Add SSH key</strong>. In the &quot;hostname&quot; field, enter <code class="" data-testid="code-snippet-highlight">github.com</code> and add the private key you created in step 1. Then select <strong>Add SSH Key</strong>.</p> </li> <li> <p>In your <code class="" data-testid="code-snippet-highlight">.circleci/config.yml</code> file, add the fingerprint to a job using the <code class="" data-testid="code-snippet-highlight">add_ssh_keys</code> key:</p> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-yaml" data-testid="code-snippet-highlight"> version: 2.1 jobs: deploy-job: steps: - add_ssh_keys: fingerprints: - &quot;SO:ME:FIN:G:ER:PR:IN:T&quot;</code></pre> </div> </div> </li> </ol> </div> <div class="paragraph"> <p>When you push to your GitHub repository from a job, CircleCI will use the SSH key you added.</p> </div> </div> <div class="sect2"> <div><div class="css-1gt1ibw"><h3 id="how-are-private-keys-used" data-testid="title-how-are-private-keys-used" class="css-ycntf9">How are private keys used?</h3></div></div> <div class="paragraph"> <p>When CircleCI builds your project, the private key is installed into the <code class="" data-testid="code-snippet-highlight">.ssh</code> directory and SSH is subsequently configured to communicate with your version control provider. Therefore, the private key is used for:</p> </div> <div class="ulist"> <ul> <li> <p>Checking out the main project</p> </li> <li> <p>Checking out any GitHub-hosted submodules</p> </li> <li> <p>Checking out any GitHub-hosted private dependencies</p> </li> <li> <p>Automatic git merging/tagging/etc</p> </li> </ul> </div> <div class="paragraph"> <p>Private keys are also used to enable your project to <span><a data-testid="link" href="/docs/github-integration/#enable-your-project-to-check-out-additional-private-repositories" class="css-x7gnkn"> <!-- -->check out additional private repositories</a></span>.</p> </div> </div> <div class="sect2"> <div><div class="css-1gt1ibw"><h3 id="user-key-security" data-testid="title-user-key-security" class="css-ycntf9">User key security</h3></div></div> <div class="paragraph"> <p>CircleCI will never make your SSH keys public.</p> </div> <div class="paragraph"> <p>The private keys of the checkout key-pairs CircleCI generates never leave the CircleCI systems (only the public key is transmitted to GitHub) and are safely encrypted in storage. However, since the keys are installed into your build containers, any code that you run in CircleCI can read them. Likewise, developers that can SSH in will have direct access to this key.</p> </div> <div class="paragraph"> <p>Remember that SSH keys should be shared only with trusted users. GitHub collaborators on projects employing user keys can access your repositories, therefore, only entrust a user key to someone with whom you would entrust your source code.</p> </div> </div> <div class="sect2"> <div><div class="css-1gt1ibw"><h3 id="user-key-access-related-error-messages" data-testid="title-user-key-access-related-error-messages" class="css-ycntf9">User key access-related error messages</h3></div></div> <div class="paragraph"> <p>Here are common errors that indicate you need to add a user key.</p> </div> <div class="paragraph"> <p><strong>Python</strong>: During the <code class="" data-testid="code-snippet-highlight">pip install</code> step:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="" data-testid="code-snippet-highlight">ERROR: Repository not found.</code></pre> </div> </div> <div class="paragraph"> <p><strong>Ruby</strong>: During the <code class="" data-testid="code-snippet-highlight">bundle install</code> step:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="" data-testid="code-snippet-highlight">Permission denied (publickey).</code></pre> </div> </div> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="add-a-circleci-config-file" data-testid="title-add-a-circleci-config-file" class="css-sycgw4">Add a <code class="" data-testid="code-snippet-highlight">.circleci/config.yml</code> file</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>After the necessary permissions have been set up, the next step is adding a <code class="" data-testid="code-snippet-highlight">.circleci/config.yml</code> file to the projects you would like to use with CircleCI. Add a <code class="" data-testid="code-snippet-highlight">.circleci</code> directory to a repository you want to connect to CircleCI. Inside that directory, add a <code class="" data-testid="code-snippet-highlight">config.yml</code> file.</p> </div> <div class="paragraph"> <p>After you create and commit a <code class="" data-testid="code-snippet-highlight">.circleci/config.yml</code> file to your GitHub repository, CircleCI immediately checks your code out and runs your first job along with any configured tests.</p> </div> <div class="paragraph"> <p>CircleCI runs your tests on a clean container every time so that your tests are fresh each time you push code, and so that your code is never accessible to other users. Watch your tests update in real-time on <span><a data-testid="link" href="https://circleci.com/dashboard" class="css-x7gnkn"> <!-- -->your dashboard</a></span>. You can also get status updates through email notifications, or look for the status badges that appear on GitHub. Integrated statuses also appear on the pull request screen, to show that all tests have passed.</p> </div> <div class="paragraph"> <p>See the <span><a data-testid="link" href="/docs/config-intro/" class="css-x7gnkn"> <!-- -->Configuration tutorial</a></span> page for a configuration walkthrough.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="enable-your-project-to-check-out-additional-private-repositories" data-testid="title-enable-your-project-to-check-out-additional-private-repositories" class="css-sycgw4">Enable your project to check out additional private repositories</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>If your testing process refers to multiple repositories, CircleCI will need a GitHub user key in addition to the deploy key because each deploy key is valid for only <em>one</em> repository, while a GitHub user key has access to <em>all</em> of your GitHub repositories.</p> </div> <div class="paragraph"> <p>Provide CircleCI with a GitHub user key in your project’s <strong>Project Settings</strong> &gt; <strong>SSH keys</strong>. Scroll down the page to <strong>User Key</strong> and select <strong>Authorize with GitHub</strong>. CircleCI creates and associates this new SSH key with your GitHub user account for access to all your repositories.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="best-practice-for-keys" data-testid="title-best-practice-for-keys" class="css-sycgw4">Best practices for keys</h2></div></div> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p>Use Deploy Keys whenever possible.</p> </li> <li> <p>When Deploy Keys cannot be used, <span><a data-testid="link" href="/docs/github-integration/#controlling-access-via-a-machine-user" class="css-x7gnkn"> <!-- -->Machine user keys</a></span> must be used, and have their access restricted to the most limited set of repository and permissions necessary.</p> </li> <li> <p>Never use non-Machine user keys (keys should be associated with the build, not with a specific person).</p> </li> <li> <p>You must rotate the Deploy or User key as part of revoking user access to that repository.</p> <div class="olist loweralpha"> <ol class="loweralpha" type="a"> <li> <p>After revoking the user’s access in GitHub, delete keys in GitHub.</p> </li> <li> <p>Delete the keys in the CircleCI project.</p> </li> <li> <p>Regenerate the keys in CircleCI project.</p> </li> </ol> </div> </li> <li> <p>Ensure no developer has access to a build in a repository with a User Key that requires more access than they have.</p> </li> </ul> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="establish-the-authenticity-of-an-ssh-host" data-testid="title-establish-the-authenticity-of-an-ssh-host" class="css-sycgw4">Establish the authenticity of an SSH host</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>When using SSH keys to check out repositories, it may be necessary to add the fingerprints for GitHub to a &quot;known hosts&quot; file (<code class="" data-testid="code-snippet-highlight">~/.ssh/known_hosts</code>) so that the executor can verify that the host it is connecting to is authentic. The <span><a data-testid="link" href="/docs/configuration-reference/#checkout" class="css-x7gnkn"> <code class="" data-testid="code-snippet-highlight">checkout</code> job step</a></span> does this automatically, so you will need to run the following commands if you opt to use a custom checkout command:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-shell" data-testid="code-snippet-highlight">mkdir -p ~/.ssh echo &#x27;github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= &#x27; &gt;&gt; ~/.ssh/known_hosts</code></pre> </div> </div> <div class="paragraph"> <p>SSH keys for servers can be fetched by running <code class="" data-testid="code-snippet-highlight">ssh-keyscan &lt;host&gt;</code>, then adding the key that is prefixed with <code class="" data-testid="code-snippet-highlight">ssh-rsa</code> to the <code class="" data-testid="code-snippet-highlight">known_hosts</code> file of your job. You can see this in action here:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-shell" data-testid="code-snippet-highlight">➜ ~ ssh-keyscan github.com # github.com:22 SSH-2.0-babeld-439edbdb github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk= # github.com:22 SSH-2.0-babeld-439edbdb # github.com:22 SSH-2.0-babeld-439edbdb ➜ ~ ✗</code></pre> </div> </div> <div class="paragraph"> <p>You can add the key to <code class="" data-testid="code-snippet-highlight">known_hosts</code> by running the following command:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-shell" data-testid="code-snippet-highlight">ssh-keyscan github.com &gt;&gt; ~/.ssh/known_hosts</code></pre> </div> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="controlling-access-via-a-machine-user" data-testid="title-controlling-access-via-a-machine-user" class="css-sycgw4">Controlling access via a machine user</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>For fine-grained access to multiple repositories, it is best practice to create a machine user for your CircleCI projects. A <span><a href="https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->machine user<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span> is a GitHub user that you create for running automated tasks. By using the SSH key of a machine user, you allow anyone with repository access to build, test, and deploy the project. Creating a machine user also reduces the risk of losing credentials linked to a single user.</p> </div> <div class="paragraph"> <p>To use the SSH key of a machine user, follow the steps below.</p> </div> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><div color="#0078CA" class="css-15qiqgw"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Info Circle" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M12 2C17.52 2 22 6.48 22 12C22 17.52 17.52 22 12 22C6.48 22 2 17.52 2 12C2 6.48 6.48 2 12 2ZM12 6C11.4477 6 11 6.44772 11 7C11 7.55228 11.4477 8 12 8C12.5523 8 13 7.55228 13 7C13 6.44772 12.5523 6 12 6ZM12 10C11.4477 10 11 10.4477 11 11V17C11 17.5523 11.4477 18 12 18C12.5523 18 13 17.5523 13 17V11C13 10.4477 12.5523 10 12 10Z"></path></svg></div><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii"> <div style="overflow:auto"><table><tbody><tr><td class="icon"> <i class="fa icon-note" title="Note"></i> </td><td class="content"> To perform these steps, the machine user must have admin access. When you have finished adding projects, you can revert the machine user to read-only access. </td></tr></tbody></table></div> </span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div class="olist arabic"> <ol class="arabic"> <li> <p>Create a machine user by following the <span><a href="https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->instructions on GitHub<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>.</p> </li> <li> <p>Log in to GitHub as the machine user.</p> </li> <li> <p>Log in to the <span><a data-testid="link" href="https://circleci.com/login" class="css-x7gnkn"> <!-- -->CircleCI web app</a></span>. When GitHub prompts you to authorize CircleCI, select <strong>Authorize application</strong>.</p> </li> <li> <p>From the <strong>Projects</strong> page, follow all projects you want the machine user to have access to.</p> </li> <li> <p>On the <strong>Project Settings &gt; SSH keys</strong> page, under the <strong>User Key</strong> section, select <strong>Authorize With GitHub</strong>. This gives CircleCI permission to create and upload SSH keys to GitHub on behalf of the machine user.</p> </li> <li> <p>After authorizing, navigate to the <strong>SSH keys</strong> page again, go to the <strong>User Key</strong> section, and select <strong>Add User Key</strong>, then <strong>Confirm User</strong>.</p> </li> </ol> </div> <div class="paragraph"> <p>Now, CircleCI will use the machine user’s SSH key for any Git commands that run during your builds.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="third-party-applications" data-testid="title-third-party-applications" class="css-sycgw4">Third party applications</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>GitHub recently added the ability to approve third party application access on a <span><a href="https://help.github.com/articles/about-third-party-application-restrictions/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->per-organization level<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>. Before this change, any member of an organization could authorize an application (generating an OAuth token associated with their GitHub user account), and the application could use that OAuth token to act on behalf of the user via the API, with whatever permissions were granted during the OAuth flow.</p> </div> <div class="paragraph"> <p>Now OAuth tokens will, by default, <em>not</em> have access to organization data when third party access restrictions are enabled. You must specifically request access on a per organization basis, either during the OAuth process or later, and an organization admin must approve the request.</p> </div> <div class="paragraph"> <p>If you are an owner or admin, you can enable third party access restrictions by visiting the <span><a href="https://github.com/settings/organizations" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->Organization settings<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span> page on GitHub, and clicking the <strong>Settings</strong> button for that organization. Under the <strong>Third-party application access policy</strong> section, you can select the <strong>Setup application access restrictions</strong> button if you want to set up restrictions for third party applications.</p> </div> <div class="paragraph"> <p>You can read more about these settings and how to configure them in the <span><a href="https://docs.github.com/en/organizations/restricting-access-to-your-organizations-data/enabling-oauth-app-access-restrictions-for-your-organization" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->GitHub documentation<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>.</p> </div> <div class="css-bdwfpm"><div data-testid="compass-info-alert" role="alert" aria-live="polite" class="css-l2fvwh"><div class="css-1i7vmqf"><div color="#0078CA" class="css-15qiqgw"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Info Circle" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M12 2C17.52 2 22 6.48 22 12C22 17.52 17.52 22 12 22C6.48 22 2 17.52 2 12C2 6.48 6.48 2 12 2ZM12 6C11.4477 6 11 6.44772 11 7C11 7.55228 11.4477 8 12 8C12.5523 8 13 7.55228 13 7C13 6.44772 12.5523 6 12 6ZM12 10C11.4477 10 11 10.4477 11 11V17C11 17.5523 11.4477 18 12 18C12.5523 18 13 17.5523 13 17V11C13 10.4477 12.5523 10 12 10Z"></path></svg></div><div id="collapsible-flex" class="css-45kv77"><div class="css-seohoz"><span class="css-1c1tyii"> <div style="overflow:auto"><table><tbody><tr><td class="icon"> <i class="fa icon-note" title="Note"></i> </td><td class="content"> If you enable these restrictions on an organization for which CircleCI has been running builds, CircleCI will stop receiving push event hooks from GitHub, and will not build new pushes. API calls will also be denied, causing, for instance, re-builds of old builds to fail the source checkout. To get CircleCI working again, you will need to grant access to the CircleCI application. </td></tr></tbody></table></div> </span></div><div class="css-1828gbe"> <!-- --> </div><div class="css-1828gbe"> <!-- --> </div></div></div></div></div> <div class="sect2"> <div><div class="css-1gt1ibw"><h3 id="how-to-re-enable-circlecip-for-a-github-organization" data-testid="title-how-to-re-enable-circlecip-for-a-github-organization" class="css-ycntf9">How to re-enable CircleCI for a GitHub organization</h3></div></div> <div class="paragraph"> <p>This section describes how to re-enable CircleCI after enabling third-party application restrictions for a GitHub organization. Go to <span><a href="https://github.com/settings/connections/applications/78a2ba87f071c28e65bb" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->GitHub Settings<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span>, and in the <strong>Organization access</strong> section, you will have the option to request access if you are not an admin, or grant access if you are an admin.</p> </div> <div class="sect3"> <div><div class="css-1gt1ibw"><style data-emotion-css="19alzbx">.css-19alzbx{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.25rem;font-weight:500;line-height:1.4;margin-bottom:10px;margin-top:10px;-webkit-scroll-margin-top:100px;-moz-scroll-margin-top:100px;-ms-scroll-margin-top:100px;scroll-margin-top:100px;}</style><h4 id="non-admin-member-workflow" data-testid="title-non-admin-member-workflow" class="css-19alzbx">Non-admin member workflow</h4></div></div> <div class="ulist"> <ul> <li> <p>If you are member of a GitHub organization (not an admin), select <strong>Request</strong> and a message will be sent to an admin of your organization. An admin will have to approve the request.</p> </li> <li> <p>Select <strong>Request approval from owners</strong> to send an email to your organization’s owners.</p> </li> <li> <p>While waiting for approval, you will see <strong>Access request pending</strong> next to your organization’s name.</p> </li> <li> <p>If CircleCI has been approved by your organization, you will see a checkmark next to your organization’s name.</p> </li> </ul> </div> </div> <div class="sect3"> <div><div class="css-1gt1ibw"><h4 id="admin-owner-workflow" data-testid="title-admin-owner-workflow" class="css-19alzbx">Admin owner workflow</h4></div></div> <div class="ulist"> <ul> <li> <p>If you are an owner of your organization (an admin), you may grant access to CircleCI by clicking on the <strong>Grant</strong> button.</p> </li> <li> <p>You may be asked to confirm your password in order to authorize our app.</p> </li> <li> <p>Once you’ve approved CircleCI, you will see a checkmark next to your organization’s name.</p> </li> </ul> </div> <div class="paragraph"> <p>After access is granted, CircleCI should behave normally again.</p> </div> </div> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="rename-organizations-and-repositories" data-testid="title-rename-organizations-and-repositories" class="css-sycgw4">Rename organizations and repositories</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p>If you would like to rename your organization or repository, follow the <span><a data-testid="link" href="/docs/rename-organizations-and-repositories/" class="css-x7gnkn"> <!-- -->Rename organizations and repositories</a></span> guide to make sure you do not lose access to environment variables or contexts in the process.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="using-github-app-functionality" data-testid="title-using-github-app-functionality" class="css-sycgw4">Using GitHub App functionality alongside the GitHub OAuth app</h2></div></div> <div class="sectionbody"> <div class="paragraph"> <p><span><a data-testid="link" href="/docs/github-apps-integration/" class="css-x7gnkn"> <!-- -->CircleCI’s GitHub App integration</a></span> offers increased control over which resources in your VCS CircleCI can access, and lets CircleCI access those resources in a more secure manner. Specifically:</p> </div> <div class="ulist"> <ul> <li> <p>You can choose to only allow the CircleCI GitHub App access to specific repositories within your GitHub organization.</p> </li> <li> <p>The CircleCI GitHub App only asks for fine-grained permissions to access your resources.</p> </li> <li> <p>The CircleCI GitHub App uses short-lived tokens when accessing your resources.</p> </li> </ul> </div> <div class="paragraph"> <p>Some existing and future functionality on CircleCI, such as triggering a pipeline via a <span><a data-testid="link" href="/docs/webhooks/#custom-webhooks" class="css-x7gnkn"> <!-- -->custom webhook</a></span>, will only be available when using the more secure GitHub App integration. Despite only being available when using the GitHub App, this functionality <strong>is still usable by organizations that currently integrate with CircleCI’s GitHub OAuth App</strong>. The GitHub App and OAuth app <strong>can co-exist side-by-side in the same organization</strong> without needing to sacrifice any functionality that is <span><a data-testid="link" href="/docs/github-apps-integration/#currently-not-supported" class="css-x7gnkn"> <!-- -->not yet available</a></span> to the GitHub App integration (such as <span><a data-testid="link" href="/docs/scheduled-pipelines/" class="css-x7gnkn"> <!-- -->scheduled pipelines</a></span>) or needing to set up and migrate to a new organization.</p> </div> <div class="paragraph"> <p>Refer to our <span><a href="https://discuss.circleci.com/t/product-update-trigger-pipelines-from-anywhere-custom-webhooks/49864" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"> <!-- -->community forum<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span> for an example and known limitations.</p> </div> </div> </div> <div class="sect1"> <div><div class="css-1gt1ibw"><h2 id="next-steps" data-testid="title-next-steps" class="css-sycgw4">Next steps</h2></div></div> <div class="sectionbody"> <div class="ulist"> <ul> <li> <p><span><a data-testid="link" href="/docs/config-intro/" class="css-x7gnkn"> <!-- -->Configuration tutorial</a></span></p> </li> <li> <p><span><a data-testid="link" href="/docs/hello-world/" class="css-x7gnkn"> <!-- -->Hello world</a></span></p> </li> </ul> </div> </div> </div></div><style data-emotion-css="7hkygd">.css-7hkygd{margin:1.25rem 0;}</style><section class="css-7hkygd"><hr/><style data-emotion-css="19dgxp1">.css-19dgxp1{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;gap:4rem;}</style><div class="css-19dgxp1"><div class="css-qcooo9"><style data-emotion-css="2xshll">.css-2xshll{margin-bottom:1.25rem;margin-top:10px;}</style><style data-emotion-css="xvmmyz">.css-xvmmyz{box-sizing:border-box;min-width:0;margin:0;color:#161616;font-size:1.25rem;font-weight:500;line-height:1.4;margin-bottom:1.25rem;margin-top:10px;}</style><h4 class="css-xvmmyz">Suggest an edit to this page</h4><span><a href="https://github.com/circleci/circleci-docs/blob/master/jekyll/_cci2/github-integration.adoc" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><style data-emotion-css="v3gaol">.css-v3gaol{width:20px;height:20px;min-width:20px;color:currentColor;}</style><div size="20" color="currentColor" class="css-v3gaol"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Git Pull Request" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M11.2929 5.29289C10.9024 5.68342 10.9024 6.31658 11.2929 6.70711L14.2929 9.70711C14.6834 10.0976 15.3166 10.0976 15.7071 9.70711C16.0976 9.31658 16.0976 8.68342 15.7071 8.29289L14.4142 7H16C16.5523 7 17 7.44772 17 8V15.1449C15.5543 15.5752 14.5 16.9145 14.5 18.5C14.5 20.433 16.067 22 18 22C19.933 22 21.5 20.433 21.5 18.5C21.5 16.9145 20.4457 15.5752 19 15.1449V8C19 6.34315 17.6569 5 16 5H14.4142L15.7071 3.70711C16.0976 3.31658 16.0976 2.68342 15.7071 2.29289C15.3166 1.90237 14.6834 1.90237 14.2929 2.29289L11.2929 5.29289ZM5 6.5C5 5.67157 5.67157 5 6.5 5C7.32843 5 8 5.67157 8 6.5C8 7.32843 7.32843 8 6.5 8C5.67157 8 5 7.32843 5 6.5ZM7.5 9.85506C8.94574 9.42479 10 8.08551 10 6.5C10 4.567 8.433 3 6.5 3C4.567 3 3 4.567 3 6.5C3 8.08551 4.05426 9.42479 5.5 9.85506V15.1449C4.05426 15.5752 3 16.9145 3 18.5C3 20.433 4.567 22 6.5 22C8.433 22 10 20.433 10 18.5C10 16.9145 8.94574 15.5752 7.5 15.1449V9.85506ZM6.5 17C5.67157 17 5 17.6716 5 18.5C5 19.3284 5.67157 20 6.5 20C7.32843 20 8 19.3284 8 18.5C8 17.6716 7.32843 17 6.5 17ZM18 17C17.1716 17 16.5 17.6716 16.5 18.5C16.5 19.3284 17.1716 20 18 20C18.8284 20 19.5 19.3284 19.5 18.5C19.5 17.6716 18.8284 17 18 17Z"></path></svg></div>Make a contribution<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span><span><a href="https://github.com/circleci/circleci-docs/blob/master/docs/CONTRIBUTING.md#contributing-to-circleci-docs" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><div size="20" color="currentColor" class="css-v3gaol"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Approve" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M11.6386 8.85709C12.8363 7.34424 13.4053 5.22606 13.646 4.06665L13.7732 4.07643C14.4084 4.17391 14.8302 4.7616 14.7024 5.41633C14.4483 6.60149 13.9857 8.63287 13.3427 9.78242C12.6912 10.8929 13.5638 12.1818 14.7 12.1818H19.7728C19.8058 12.1818 19.8657 12.1981 19.9247 12.2571C19.9838 12.3162 20 12.3761 20 12.4091C20 12.4421 19.9838 12.5021 19.9247 12.5611C19.8657 12.6201 19.8058 12.6364 19.7728 12.6364H18.9546C18.4023 12.6364 17.9546 13.0841 17.9546 13.6364C17.9546 14.1887 18.4023 14.6364 18.9546 14.6364C18.9876 14.6364 19.0475 14.6526 19.1066 14.7117C19.1656 14.7707 19.1819 14.8306 19.1819 14.8637C19.1819 14.8967 19.1656 14.9566 19.1066 15.0156C19.0475 15.0747 18.9876 15.0909 18.9546 15.0909H18.1364C17.5841 15.0909 17.1364 15.5386 17.1364 16.0909C17.1364 16.6432 17.5841 17.0909 18.1364 17.0909C18.1694 17.0909 18.2293 17.1072 18.2884 17.1662C18.3474 17.2253 18.3637 17.2852 18.3637 17.3182C18.3637 17.3512 18.3474 17.4111 18.2884 17.4702C18.2293 17.5292 18.1694 17.5455 18.1364 17.5455H17.3182C16.7659 17.5455 16.3182 17.9932 16.3182 18.5455C16.3182 19.0978 16.7659 19.5455 17.3182 19.5455C17.3512 19.5455 17.4112 19.5617 17.4702 19.6208C17.5292 19.6798 17.5455 19.7397 17.5455 19.7727C17.5455 19.8058 17.5292 19.8657 17.4702 19.9247C17.4112 19.9838 17.3512 20 17.3182 20H11.5091C10.2295 20 9.29059 19.6463 8.68113 19.3077C8.42899 19.1676 8.23214 19.0294 8.09094 18.9187V12.225L8.16104 12.1662C8.42917 11.941 8.79898 11.6259 9.20579 11.2661C10.0043 10.5597 10.9987 9.63447 11.6265 8.87209L11.6386 8.85709ZM21.1819 14.8637C21.1819 14.6341 21.1449 14.4113 21.0768 14.2009C21.6321 13.7912 22 13.1338 22 12.4091C22 11.2023 20.9796 10.1818 19.7728 10.1818H15.3766C16.0315 8.72943 16.4529 6.79313 16.6597 5.82775L16.6624 5.81432C17.0203 4.02485 15.8184 2.33119 14.014 2.09061C13.9956 2.08815 13.9771 2.08621 13.9585 2.08478L13.3703 2.03953C12.5717 1.9781 11.8938 2.5452 11.7592 3.29181C11.5854 4.25625 11.0994 6.31052 10.0764 7.60821C9.55796 8.23586 8.67438 9.06591 7.88064 9.76807C7.83197 9.81112 7.78384 9.85352 7.73636 9.89519C7.46121 9.5701 7.05016 9.36371 6.59091 9.36371H3.5C2.67157 9.36371 2 10.0353 2 10.8637V20.5001C2 21.3285 2.67157 22.0001 3.5 22.0001H6.59091C7.177 22.0001 7.68459 21.6639 7.93139 21.1739C8.785 21.6089 9.98048 22 11.5091 22H17.3182C18.525 22 19.5455 20.9796 19.5455 19.7727C19.5455 19.5432 19.5086 19.3203 19.4404 19.11C19.9957 18.7003 20.3637 18.0429 20.3637 17.3182C20.3637 17.0886 20.3267 16.8658 20.2586 16.6555C20.8139 16.2458 21.1819 15.5883 21.1819 14.8637ZM4 20.0001V11.3637H6.09091V20.0001H4Z"></path></svg></div> <!-- -->Learn how to contribute<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span></div><div class="css-qcooo9"><h4 class="css-xvmmyz">Still need help?</h4><span><a href="https://discuss.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Organization" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path d="M22 15.5417V16C22 16.5523 21.5523 17 21 17H18.5V15.5417C18.5 14.6783 18.045 14.0192 17.39 13.5292C18.5364 13.4276 22 13.9336 22 15.5417ZM18.4576 11.75C17.4498 11.75 16.6364 10.9683 16.6364 10C16.6364 9.03167 17.4498 8.25 18.4576 8.25C19.4653 8.25 20.2727 9.03167 20.2727 10C20.2727 10.9683 19.4653 11.75 18.4576 11.75ZM6.61 13.5292C5.95504 14.0192 5.5 14.6783 5.5 15.5417V17H3C2.44772 17 2 16.5523 2 16V15.5417C2 13.8811 5.33594 13.4163 6.61 13.5292ZM5.54242 11.75C4.53468 11.75 3.72727 10.9683 3.72727 10C3.72727 9.03167 4.53468 8.25 5.54242 8.25C6.55016 8.25 7.36364 9.03167 7.36364 10C7.36364 10.9683 6.55016 11.75 5.54242 11.75ZM12 12.625C13.8156 12.625 16.5 13.5756 16.5 15.4688V16.5C16.5 17.0523 16.0523 17.5 15.5 17.5H8.49998C7.9477 17.5 7.49998 17.0523 7.49998 16.5V15.4688C7.49998 13.5756 10.1844 12.625 12 12.625ZM12.0042 11.3563C10.6185 11.3563 9.5 10.2717 9.5 8.92813C9.5 7.58456 10.6185 6.5 12.0042 6.5C13.3898 6.5 14.5 7.58456 14.5 8.92813C14.5 10.2717 13.3898 11.3563 12.0042 11.3563Z"></path></svg></div> <!-- -->Ask the CircleCI community<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span><span><a data-testid="link" href="https://circleci.com/research" class="css-x7gnkn"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Suggestion Lightbulb" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.96 3C12.96 2.44772 12.5123 2 11.96 2C11.4077 2 10.96 2.44772 10.96 3V4.43C10.96 4.98228 11.4077 5.43 11.96 5.43C12.5123 5.43 12.96 4.98228 12.96 4.43V3ZM16.2341 14.5901C16.2572 14.5555 16.275 14.5291 16.2868 14.5118L16.3592 14.3965C16.4802 14.1732 16.584 13.9411 16.6697 13.7021C16.8716 13.1555 16.9733 12.577 16.97 11.9943L16.9698 11.9792C16.954 11.2218 16.7664 10.478 16.421 9.80378C16.0757 9.12958 15.5817 8.54266 14.9763 8.08734C14.3709 7.63202 13.67 7.3202 12.9264 7.17544C12.1829 7.03067 11.4162 7.05674 10.6842 7.25168C9.95218 7.44662 9.27405 7.80533 8.70099 8.30072C8.12793 8.79611 7.67492 9.41523 7.37617 10.1113C7.07742 10.8074 6.94074 11.5623 6.97645 12.319C7.01216 13.0756 7.21932 13.8143 7.5823 14.4792L7.65423 14.593C7.66538 14.6093 7.68239 14.6344 7.70443 14.6672C7.74853 14.7329 7.81255 14.8297 7.88981 14.9503C8.04494 15.1925 8.25052 15.5264 8.45469 15.896C8.66041 16.2684 8.85554 16.6607 8.99681 17.022C9.14607 17.4037 9.20002 17.6639 9.20002 17.8C9.20002 18.3478 9.64074 18.7936 10.1885 18.7999L13.6585 18.8399C13.9257 18.843 14.183 18.739 14.373 18.5512C14.5631 18.3633 14.67 18.1072 14.67 17.84C14.67 17.7085 14.7255 17.444 14.8826 17.0473C15.0306 16.6735 15.2349 16.2652 15.4499 15.8768C15.6633 15.4913 15.8781 15.1416 16.0402 14.8876C16.121 14.761 16.1879 14.6594 16.2341 14.5901ZM12.5442 9.13858C12.0981 9.05172 11.6381 9.06736 11.1989 9.18432C10.7597 9.30128 10.3528 9.51651 10.0089 9.81374C9.66511 10.111 9.39331 10.4825 9.21406 10.9001C9.03481 11.3178 8.9528 11.7707 8.97422 12.2247C8.9949 12.663 9.11145 13.0911 9.31542 13.4792C9.32861 13.4985 9.34532 13.5232 9.36514 13.5527C9.4162 13.6288 9.48812 13.7375 9.57398 13.8716C9.7451 14.1388 9.97452 14.5111 10.2054 14.929C10.4346 15.3441 10.6745 15.8206 10.8595 16.2937C10.923 16.4561 10.9848 16.6299 11.0379 16.8096L12.8402 16.8304C12.895 16.6494 12.9583 16.4744 13.0231 16.3108C13.2144 15.8278 13.4626 15.3373 13.7001 14.9082C13.9392 14.4762 14.1769 14.0896 14.3542 13.8118C14.4431 13.6724 14.5176 13.5592 14.5704 13.4801C14.5915 13.4484 14.6092 13.4222 14.623 13.4018C14.6867 13.2797 14.742 13.1533 14.7883 13.0236L14.7923 13.0124C14.9108 12.6926 14.9711 12.3542 14.9701 12.0132C14.9595 11.5614 14.847 11.1178 14.641 10.7156C14.4338 10.3111 14.1374 9.95891 13.7741 9.68572C13.4109 9.41252 12.9903 9.22543 12.5442 9.13858ZM9.22998 21C9.22998 20.4477 9.6777 20 10.23 20H13.69C14.2423 20 14.69 20.4477 14.69 21C14.69 21.5523 14.2423 22 13.69 22H10.23C9.6777 22 9.22998 21.5523 9.22998 21ZM19.0071 4.9129C19.3976 5.30342 19.3976 5.93658 19.0071 6.32711L17.9971 7.33711C17.6066 7.72763 16.9734 7.72763 16.5829 7.33711C16.1923 6.94659 16.1923 6.31342 16.5829 5.9229L17.5929 4.9129C17.9834 4.52237 18.6166 4.52237 19.0071 4.9129ZM19.5 10.96C18.9477 10.96 18.5 11.4077 18.5 11.96C18.5 12.5123 18.9477 12.96 19.5 12.96H20.92C21.4723 12.96 21.92 12.5123 21.92 11.96C21.92 11.4077 21.4723 10.96 20.92 10.96H19.5ZM4.91289 4.9129C5.30341 4.52237 5.93658 4.52237 6.3271 4.9129L7.3371 5.9229C7.72763 6.31342 7.72763 6.94659 7.3371 7.33711C6.94658 7.72763 6.31341 7.72763 5.92289 7.33711L4.91289 6.32711C4.52236 5.93659 4.52236 5.30342 4.91289 4.9129ZM3 10.96C2.44772 10.96 2 11.4077 2 11.96C2 12.5123 2.44772 12.96 3 12.96H4.43C4.98228 12.96 5.43 12.5123 5.43 11.96C5.43 11.4077 4.98228 10.96 4.43 10.96H3Z"></path></svg></div> <!-- -->Join the research community</a></span><span><a href="https://support.circleci.com/" target="_blank" rel="noopener noreferrer" data-testid="external-link" class="css-x7gnkn"><div size="24" color="currentColor" class="css-19wtgi5"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="Support" fill="currentColor" xmlns="http://www.w3.org/2000/svg" class="css-bleycz"><path fill-rule="evenodd" clip-rule="evenodd" d="M3 7C3 5.89543 3.89543 5 5 5H20C21.1046 5 22 5.89543 22 7V15C22 16.1046 21.1046 17 20 17H6.70588L3.88597 20.4242C3.58776 20.7863 3 20.5754 3 20.1063V15V10.7583V7ZM7.5 13C8.32843 13 9 12.3284 9 11.5C9 10.6716 8.32843 10 7.5 10C6.67157 10 6 10.6716 6 11.5C6 12.3284 6.67157 13 7.5 13ZM14 11.5C14 12.3284 13.3284 13 12.5 13C11.6716 13 11 12.3284 11 11.5C11 10.6716 11.6716 10 12.5 10C13.3284 10 14 10.6716 14 11.5ZM17.5 13C18.3284 13 19 12.3284 19 11.5C19 10.6716 18.3284 10 17.5 10C16.6716 10 16 10.6716 16 11.5C16 12.3284 16.6716 13 17.5 13Z"></path></svg></div> <!-- -->Visit our Support site<span color="currentColor" class="css-1ie5e7y"><svg role="img" focusable="false" viewBox="0 0 24 24" aria-label="New Window Link" data-testid="external-icon" class="css-qzco2h"><path fill-rule="evenodd" d="M9,4 L15,4 L15.0752385,4.00278786 L15.2007255,4.02024007 L15.3121422,4.04973808 L15.4232213,4.09367335 L15.5207085,4.14599544 L15.6170221,4.21292768 L15.7071408,4.29291093 C15.7425006,4.32828725 15.7746868,4.3656744 15.8036651,4.40469337 L15.8753285,4.51593788 L15.9287742,4.62866395 L15.9641546,4.73400701 L15.9932723,4.88337887 L16,5 L16,11 C16,11.5522847 15.5522847,12 15,12 C14.4871642,12 14.0644928,11.6139598 14.0067277,11.1166211 L14,11 L14,7.414 L10.0502525,11.363961 C9.65972827,11.7544853 9.02656329,11.7544853 8.63603899,11.363961 C8.27555502,11.0034771 8.24782547,10.436246 8.55285035,10.0439548 L8.63603895,9.94974748 L12.585,5.999 L9,6 C8.48716416,6 8.06449284,5.61395981 8.00672773,5.11662113 L8,5 C8,4.48716416 8.38604019,4.06449284 8.88337887,4.00672773 L9,4 Z"></path></svg></span></a></span></div></div></section></div></div></div></div></div></div> </article><style data-emotion-css="18c0lxf">.css-18c0lxf{padding:3rem 0;}</style><style data-emotion-css="1ccmuz">.css-1ccmuz{box-sizing:border-box;min-width:0;margin:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;padding:3rem 0;}</style><footer class="css-1ccmuz"><style data-emotion-css="1s092o">.css-1s092o{width:100%;background:#FFFFFF;}@media (max-width:768px){.css-1s092o{margin-left:0;width:100%;}}</style><div class="css-1s092o"><style data-emotion-css="mrk95c">.css-mrk95c{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;border-top:2px solid #343434;padding:1.5rem 0 1.75rem;}@media (min-width:992px){.css-mrk95c{padding:1rem 0;}}.css-mrk95c:first-of-type{border-top:none;}@media (max-width:768px){.css-mrk95c:first-of-type{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}}</style><div class="css-mrk95c"><a href="https://circleci.com/docs/" data-testid="footer-circleci-logo" class="css-si22pm"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 100" width="126" class="css-1yqyrw2"><circle fill="#161616" cx="30.44" cy="52.5" r="7.471"></circle><path fill="#161616" d="M30.44 21.124c-14.619 0-26.903 10-30.388 23.532-.03.119-.052.244-.052.373 0 .825.669 1.494 1.494 1.494h12.651c.603 0 1.118-.358 1.354-.873 0 0 .019-.035.025-.052 2.608-5.628 8.304-9.533 14.914-9.533 9.077 0 16.436 7.357 16.436 16.435S39.517 68.935 30.44 68.935c-6.61 0-12.305-3.905-14.914-9.532-.007-.018-.026-.053-.026-.053a1.489 1.489 0 0 0-1.354-.873H1.495c-.826 0-1.495.669-1.495 1.494 0 .129.021.254.052.373C3.537 73.876 15.821 83.876 30.44 83.876c17.329 0 31.376-14.048 31.376-31.376S47.769 21.124 30.44 21.124zM112.482 59.855h-4.268a.919.919 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.428 6.074-7.617 0-13.791-6.175-13.791-13.791 0-7.617 6.174-13.792 13.791-13.792 4.758 0 8.949 2.412 11.429 6.075a.916.916 0 0 0 .728.361h4.268a.92.92 0 0 0 .921-.919.91.91 0 0 0-.101-.413c-3.18-6.299-9.706-10.621-17.244-10.621-10.663 0-19.309 8.645-19.309 19.309 0 10.663 8.646 19.309 19.309 19.309 7.538 0 14.064-4.322 17.243-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM125.355 26.756a3.678 3.678 0 1 1-7.357 0 3.678 3.678 0 0 1 7.357 0zm-.919 43.213V34.11h-5.517v35.858a.92.92 0 0 0 .919.919h3.679a.918.918 0 0 0 .919-.918zM148.355 33.214c-5.564.262-10.008 2.921-12.887 6.981v-5.166a.92.92 0 0 0-.919-.919h-3.678a.92.92 0 0 0-.919.919v34.939c0 .508.41.919.919.919h3.678a.918.918 0 0 0 .919-.919V52.5c0-7.308 5.686-13.286 12.871-13.76a.921.921 0 0 0 .921-.922v-3.686a.92.92 0 0 0-.905-.918zM184.992 59.855h-4.268a.916.916 0 0 0-.729.361c-2.479 3.664-6.671 6.074-11.427 6.074-7.618 0-13.792-6.175-13.792-13.791 0-7.617 6.174-13.792 13.792-13.792 4.756 0 8.948 2.412 11.427 6.075a.917.917 0 0 0 .729.361h4.268a.92.92 0 0 0 .921-.919.898.898 0 0 0-.102-.413c-3.179-6.299-9.705-10.621-17.242-10.621-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.537 0 14.063-4.322 17.242-10.621a.914.914 0 0 0 .102-.413.92.92 0 0 0-.921-.919zM196.025 22.158h-3.678a.92.92 0 0 0-.919.919v46.892c0 .508.411.919.919.919h3.678a.92.92 0 0 0 .92-.919V23.077a.92.92 0 0 0-.92-.919zM221.771 33.191c-10.664 0-19.309 8.645-19.309 19.309 0 10.663 8.645 19.309 19.309 19.309 7.538 0 14.062-4.322 17.242-10.621a.913.913 0 0 0-.819-1.332h-4.267a.913.913 0 0 0-.741.379c-2.48 3.653-6.666 6.057-11.415 6.057-6.993 0-12.767-5.206-13.667-11.952h32.031a.92.92 0 0 0 .917-.873c.016-.32.026-.643.026-.966 0-10.665-8.644-19.31-19.307-19.31zm-13.292 15.631c1.61-5.83 6.949-10.114 13.292-10.114s11.681 4.284 13.292 10.114h-26.584zM294.483 21.239a5.517 5.517 0 1 0 0 11.034 5.517 5.517 0 0 0 0-11.034zm4.598 12.871v35.858a.92.92 0 0 1-.919.919h-7.356a.918.918 0 0 1-.919-.919V34.11h9.194zM265.902 71.809c9.014 0 16.576-6.176 18.706-14.524a.832.832 0 0 0 .023-.187.92.92 0 0 0-.919-.92h-7.782a.919.919 0 0 0-.834.537l-.002-.001c-1.599 3.48-5.11 5.899-9.192 5.899-5.584 0-10.113-4.527-10.113-10.113s4.529-10.113 10.113-10.113a10.11 10.11 0 0 1 9.192 5.899l.002-.002a.92.92 0 0 0 .834.538h7.782a.92.92 0 0 0 .919-.92.944.944 0 0 0-.022-.184c-2.128-8.35-9.693-14.527-18.707-14.527-10.661 0-19.308 8.646-19.308 19.309.001 10.664 8.647 19.309 19.308 19.309z"></path></svg><style data-emotion-css="1hbtu16">.css-1hbtu16{color:#161616;font-size:1.5rem;font-weight:300;-webkit-letter-spacing:0.01em;-moz-letter-spacing:0.01em;-ms-letter-spacing:0.01em;letter-spacing:0.01em;line-height:1.50;margin-left:0.5rem;text-align:center;-webkit-text-decoration:none;text-decoration:none;}@media (max-width:768px){.css-1hbtu16{display:inline;}}</style><div color="#161616" class="css-1hbtu16">Docs</div></a><style data-emotion-css="1val13a">.css-1val13a{margin-left:-1rem;margin-right:-1rem;padding:0 1rem 0 1rem;}</style><div class="css-1val13a"><style data-emotion-css="6kxz8c">.css-6kxz8c{font-size:1.5rem;line-height:1.5rem;padding-top:0.5rem;}</style><div class="css-6kxz8c"><style data-emotion-css="1y68cb7">.css-1y68cb7{margin-left:20px;}.css-1y68cb7 a{color:#343434;}</style><span class="css-1y68cb7"><a href="https://circleci.com/blog/feed.xml" target="_blank" rel="noopener noreferrer" data-testid="footer-media-0" class="css-x7gnkn"><style data-emotion-css="6ahvz3">.css-6ahvz3{width:25px;height:auto;}</style><svg aria-labelledby="svg-inline--fa-title-LXLWedyhoGD3" data-prefix="fas" data-icon="rss" class="svg-inline--fa fa-rss css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-LXLWedyhoGD3">CircleCI RSS feed</title><path fill="currentColor" d="M25.57 176.1C12.41 175.4 .9117 185.2 .0523 198.4s9.173 24.65 22.39 25.5c120.1 7.875 225.7 112.7 233.6 233.6C256.9 470.3 267.4 480 279.1 480c.5313 0 1.062-.0313 1.594-.0625c13.22-.8438 23.25-12.28 22.39-25.5C294.6 310.3 169.7 185.4 25.57 176.1zM32 32C14.33 32 0 46.31 0 64s14.33 32 32 32c194.1 0 352 157.9 352 352c0 17.69 14.33 32 32 32s32-14.31 32-32C448 218.6 261.4 32 32 32zM63.1 351.9C28.63 351.9 0 380.6 0 416s28.63 64 63.1 64s64.08-28.62 64.08-64S99.37 351.9 63.1 351.9z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://www.facebook.com/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-1" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-xbcH3NEt681u" data-prefix="fab" data-icon="facebook-square" class="svg-inline--fa fa-facebook-square css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-xbcH3NEt681u">CircleCI Facebook</title><path fill="currentColor" d="M400 32H48A48 48 0 0 0 0 80v352a48 48 0 0 0 48 48h137.3V327.7h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.27c-30.81 0-40.42 19.12-40.42 38.73V256h68.78l-11 71.69h-57.78V480H400a48 48 0 0 0 48-48V80a48 48 0 0 0 -48-48z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://twitter.com/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-2" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-OJOqogSUqDEI" data-prefix="fab" data-icon="twitter" class="svg-inline--fa fa-twitter css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" aria-hidden="true"><title id="svg-inline--fa-title-OJOqogSUqDEI">CircleCI Twitter</title><path fill="currentColor" d="M459.4 151.7c.325 4.548 .325 9.097 .325 13.65 0 138.7-105.6 298.6-298.6 298.6-59.45 0-114.7-17.22-161.1-47.11 8.447 .974 16.57 1.299 25.34 1.299 49.06 0 94.21-16.57 130.3-44.83-46.13-.975-84.79-31.19-98.11-72.77 6.498 .974 12.99 1.624 19.82 1.624 9.421 0 18.84-1.3 27.61-3.573-48.08-9.747-84.14-51.98-84.14-102.1v-1.299c13.97 7.797 30.21 12.67 47.43 13.32-28.26-18.84-46.78-51.01-46.78-87.39 0-19.49 5.197-37.36 14.29-52.95 51.65 63.67 129.3 105.3 216.4 109.8-1.624-7.797-2.599-15.92-2.599-24.04 0-57.83 46.78-104.9 104.9-104.9 30.21 0 57.5 12.67 76.67 33.14 23.72-4.548 46.46-13.32 66.6-25.34-7.798 24.37-24.37 44.83-46.13 57.83 21.12-2.273 41.58-8.122 60.43-16.24-14.29 20.79-32.16 39.31-52.63 54.25z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://github.com/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-3" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-ZMQtOhGY7TWq" data-prefix="fab" data-icon="github" class="svg-inline--fa fa-github css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512" aria-hidden="true"><title id="svg-inline--fa-title-ZMQtOhGY7TWq">CircleCI GitHub</title><path fill="currentColor" d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3 .3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5 .3-6.2 2.3zm44.2-1.7c-2.9 .7-4.9 2.6-4.6 4.9 .3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3 .7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3 .3 2.9 2.3 3.9 1.6 1 3.6 .7 4.3-.7 .7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3 .7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3 .7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://twitch.tv/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-4" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-pnLLHzD6RevD" data-prefix="fab" data-icon="twitch" class="svg-inline--fa fa-twitch css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" aria-hidden="true"><title id="svg-inline--fa-title-pnLLHzD6RevD">CircleCI Twitch</title><path fill="currentColor" d="M391.2 103.5H352.5v109.7h38.63zM285 103H246.4V212.8H285zM120.8 0 24.31 91.42V420.6H140.1V512l96.53-91.42h77.25L487.7 256V0zM449.1 237.8l-77.22 73.12H294.6l-67.6 64v-64H140.1V36.58H449.1z"></path></svg></a></span><span class="css-1y68cb7"><a href="https://www.linkedin.com/company/circleci" target="_blank" rel="noopener noreferrer" data-testid="footer-media-5" class="css-x7gnkn"><svg aria-labelledby="svg-inline--fa-title-3XLDSv19y11D" data-prefix="fab" data-icon="linkedin-in" class="svg-inline--fa fa-linkedin-in css-6ahvz3" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512" aria-hidden="true"><title id="svg-inline--fa-title-3XLDSv19y11D">CircleCI LinkedIn</title><path fill="currentColor" d="M100.3 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.6 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.3 61.9 111.3 142.3V448z"></path></svg></a></span></div></div></div><div class="css-mrk95c"><style data-emotion-css="181qfh3">@media (max-width:1200px){.css-181qfh3{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;text-align:center;}}</style><nav class="css-181qfh3"><style data-emotion-css="t24vho">.css-t24vho{margin:0 -0.75rem;padding:0;list-style:none;}@media (min-width:768px){.css-t24vho{margin-right:0;}}.css-t24vho li{display:inline-block;margin:0 0.75rem 0.25rem;}</style><ul class="css-t24vho"><li><style data-emotion-css="1eiuvq9">.css-1eiuvq9 a{color:#343434;font-weight:500;}</style><span class="css-1eiuvq9"><a href="https://circleci.com/terms-of-service/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-0" class="css-x7gnkn">Terms of Use</a></span></li><li><span class="css-1eiuvq9"><a href="https://circleci.com/legal/privacy/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-1" class="css-x7gnkn">Privacy Policy</a></span></li><li><span class="css-1eiuvq9"><a href="https://circleci.com/legal/cookie-policy/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-2" class="css-x7gnkn">Cookie Policy</a></span></li><li><span class="css-1eiuvq9"><a href="https://circleci.com/security/" target="_blank" rel="noopener noreferrer" data-testid="footer-policy-3" class="css-x7gnkn">Security</a></span></li></ul></nav><style data-emotion-css="1ra2zmg">.css-1ra2zmg{margin-bottom:0.25rem;color:#6A6A6A;}@media (max-width:1200px){.css-1ra2zmg{margin-top:1rem;text-align:center;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}</style><div data-testid="current-year" class="css-1ra2zmg">© 2024 Circle Internet Services, Inc., All Rights Reserved.</div></div></div></footer></main></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"error":null,"content":"\u003cdiv id=\"preamble\"\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf your CircleCI organization is authenticated with GitHub through the \u003cstrong\u003eGitHub OAuth app\u003c/strong\u003e, the content on this page is for you.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock tip\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-tip\" title=\"Tip\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eCheck your project slug to discover which GitHub integration you have set up:\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eHead to the \u003ca href=\"https://app.circleci.com/home\"\u003eCircleCI web app\u003c/a\u003e and select your org from the cards on your user homepage.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eSelect \u003cstrong\u003eProjects\u003c/strong\u003e from the sidebar and locate your project from the list. You can use the search to help.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eSelect the ellipsis menu (\u003cspan class=\"icon\"\u003e\u003ci class=\"fa fa-ellipsis-h fa-ellipsis\"\u003e\u003c/i\u003e\u003c/span\u003e) next to your project and select \u003cstrong\u003eProject Settings\u003c/strong\u003e. The project slug is listed on the project settings homepage.\u003c/p\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003e\u003cstrong\u003eGitHub App\u003c/strong\u003e: Project slug starts with \u003ccode\u003ecircleci\u003c/code\u003e followed by UUIDs. For example, \u003ccode\u003ecircleci/34R3kN5RtfEE7v4sa4nWAU/4nYdoKGkb6RXn7JGt8SQtg\u003c/code\u003e).\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003e\u003cstrong\u003eGitHub OAuth app\u003c/strong\u003e: Project slug is human readable. For example, \u003ccode\u003egithub/circleci/circleci-demo-workflows\u003c/code\u003e.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFor more information about the differences, see the \u003ca href=\"../version-control-system-integration-overview/\"\u003eVCS integration overview\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen you add a project to CircleCI, the following settings are added to the repository using the permissions you gave CircleCI when you signed up:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eA deploy key that is used to check out your project from GitHub.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eA service hook (or \"push hook\") that is used to notify CircleCI when you push to GitHub.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI builds push hooks by default. Builds are triggered for all push hooks for the repository and PUSH is the most common case of triggering a build.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSome additional, less common cases where CircleCI uses hooks are as follows:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eCircleCI processes PR hooks (pull request hooks) to store PR information for the CircleCI app. If the \u003cstrong\u003eOnly build pull requests\u003c/strong\u003e setting is enabled within CircleCI, CircleCI will only trigger builds when a PR is opened, or when there is a push to a branch for which there is an existing PR. Even if this setting is enabled, CircleCI will always build all pushes to the project\u0026#8217;s default branch.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eIf the \u003cstrong\u003eBuild forked pull requests\u003c/strong\u003e setting is enabled in CircleCI, CircleCI will trigger builds in response to PRs created from forked repositories.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThese settings can be found in each project\u0026#8217;s individual \u003cstrong\u003eProject Settings\u003c/strong\u003e section of the CircleCI web app.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe ability to override the \u003cstrong\u003eOnly build pull requests\u003c/strong\u003e setting is supported. Specifically, CircleCI will run validation on all commits from additional, non-default branches that are specified via regular expression (for example, \u003ccode\u003erelease.\\*\u003c/code\u003e). Details on how to enable can be found on our \u003ca href=\"https://discuss.circleci.com/t/product-launch-override-only-build-prs-setting/47807\"\u003ecommunity forum\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIt is possible to edit the webhooks in GitHub to restrict events that trigger a build. Editing the webhook settings lets you change which hooks get sent to CircleCI, but does not change the types of hooks that trigger builds. CircleCI will always build push hooks, and build on PR hooks (depending on settings), but if you remove push hooks from the webhook settings, CircleCI will not build.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRefer to the \u003ca href=\"https://developer.github.com/v3/repos/hooks/#edit-a-hook\"\u003eGitHub Edit a Hook document\u003c/a\u003e for details.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRefer to the CircleCI documentation on \u003ca href=\"../workflows/#using-filters-in-your-workflows\"\u003eWorkflow filters\u003c/a\u003e for information on how to build tag pushes.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"permissions-overview\"\u003ePermissions overview\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI requests the following permissions from GitHub, defined in the \u003ca href=\"https://developer.github.com/v3/oauth/#scopes\"\u003eGitHub permissions model\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eRead Permission\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eGet a user\u0026#8217;s email address\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWrite Permissions\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eGet a list of a user\u0026#8217;s repositories\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAdd an SSH key to a user\u0026#8217;s account\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eAdmin Permissions\u003c/strong\u003e, needed for setting up a project\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eAdd deploy keys to a repository\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAdd service hooks to a repository\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e CircleCI only asks for permissions that are absolutely necessary. However, as a GitHub OAuth app, CircleCI is constrained by the specific permissions available via GitHub’s OAuth scopes. For example, getting a full list of a user’s repository, public and private, from GitHub, requires the \u003ca href=\"https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes\"\u003e\u003ccode\u003erepo\u003c/code\u003e scope\u003c/a\u003e, which is write-level access. GitHub does not provide a read-only OAuth scope for listing all of a user’s repositories. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"saml-sso\"\u003eSAML SSO\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eEnabling SAML protection on a GitHub org can cause changes to CircleCI’s settings related to GitHub Checks and GitHub status updates. Ensure these settings are configured for their desired state after enabling SAML for your organization. You can find these settings at:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eGitHub Checks, from the GitHub website, select \u003cspan class=\"menuseq\"\u003e\u003cb class=\"menu\"\u003eOrganization Settings\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"submenu\"\u003eVCS\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"menuitem\"\u003eGitHub Checks\u003c/b\u003e\u003c/span\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eGitHub status updates, from the CircleCI web app \u003cspan class=\"menuseq\"\u003e\u003cb class=\"menu\"\u003eProject Settings\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"submenu\"\u003eAdvanced\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"menuitem\"\u003eGitHub Status Updates\u003c/b\u003e\u003c/span\u003e\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFor more information on GitHub Checks and GitHub status updates, see the \u003ca href=\"../enable-checks/#github-check-and-github-status-updates\"\u003eEnabling GitHub checks\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"connect-a-github-account\"\u003eConnect a GitHub account\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIn the \u003ca href=\"https://app.circleci.com/\"\u003eCircleCI web app\u003c/a\u003e, select the organization you want to connect to GitHub and navigate to the \u003cstrong\u003eUser Settings\u003c/strong\u003e by clicking on the user icon on the bottom of sidebar. Here you will be able to select GitHub. Once connected, you should see any existing projects populate on your dashboard, and you can choose which projects to follow.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eNext you will need to set up the necessary permissions to run your projects on CircleCI.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"disconnect-a-github-account\"\u003eDisconnect a GitHub account\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFollow these steps to disconnect your CircleCI account from GitHub.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock caution\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-caution\" title=\"Caution\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen disconnecting a VCS connection using the method described here, any existing personal API keys will be invalidated. Any SSH keys, or deploy keys may also be invalidated. Disconnecting the VCS connection is intended to be used when issues arise, for example:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eYou joined the wrong organization\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou connected with the wrong GitHub user account\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eChanges to the organization name in your VCS\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eFrom the \u003ca href=\"https://app.circleci.com/\"\u003eCircleCI web app\u003c/a\u003e, select the organization you want to disconnect from GitHub. To do this use the org switcher at the top of the sidebar\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eNavigate to \u003cstrong\u003eUser Settings\u003c/strong\u003e by clicking on the user icon on the bottom of sidebar, then select \u003cstrong\u003eAccount Integrations\u003c/strong\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou will see a list of connections along with the GitHub organizations they are associated with. Select \u003cb class=\"button\"\u003eDisconnect\u003c/b\u003e for the GitHub connection you wish to disconnect.\u003c/p\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eOnce disconnected, you will be redirected to the CircleCI login page. To reconnect your account, log in to CircleCI, navigate to user settings (icon at the bottom of the web app sidebar), and under \u003cstrong\u003eAccount Integrations\u003c/strong\u003e select \u003cb class=\"button\"\u003eConnect\u003c/b\u003e next to GitHub.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"deploy-keys-and-user-keys\"\u003eDeploy keys and user keys\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWhat is a deploy key?\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen you add a new project, CircleCI creates a deployment key on GitHub for your project. A deploy key is an SSH key-pair, one public, one private. GitHub stores the public key, and CircleCI stores the private key. The deployment key gives CircleCI access to a single repository. To prevent CircleCI from pushing to your repository, this deployment key is read-only.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you want to push to the repository from your builds, you will need a deployment key with write access. See the below section for GitHub-specific instructions to create a deployment key.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWhat is a user key?\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eA user key is user-specific an SSH key-pair. GitHub stores the public key, and CircleCI stores the private key. Possession of the private key gives the ability to act as that user, for purposes of 'git' access to projects.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWhat is the difference between deploy keys and user keys?\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eDeploy keys and user keys are the only key types that GitHub supports. Deploy keys are globally unique (for example, no mechanism exists to make a deploy key with access to multiple repositories) and user keys have no notion of \u003cem\u003escope\u003c/em\u003e separate from the user associated with them.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eTo achieve fine-grained access to more than one repository, consider creating what GitHub calls a \u003ca href=\"#controlling-access-via-a-machine-user\"\u003emachine user\u003c/a\u003e. Give this user exactly the permissions your build requires, and then associate its user key with your project on CircleCI.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"create-additional-github-ssh-keys\"\u003eCreate additional GitHub SSH keys\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you need additional SSH keys to access other services, you can create additional keys by following the steps below.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIn this example, the GitHub repository is \u003ccode\u003e\u003ca href=\"https://github.com/you/test-repo\" class=\"bare\"\u003ehttps://github.com/you/test-repo\u003c/a\u003e\u003c/code\u003e, and the CircleCI project is \u003ccode\u003e\u003ca href=\"https://app.circleci.com/pipelines/github/you/test-repo\" class=\"bare\"\u003ehttps://app.circleci.com/pipelines/github/you/test-repo\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eCreate an SSH key-pair by following the \u003ca href=\"https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/\"\u003eGitHub instructions\u003c/a\u003e. When prompted to enter a passphrase, do \u003cstrong\u003enot\u003c/strong\u003e enter one (below is one example command to generate a key on macOS):\u003c/p\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e ssh-keygen -t ed25519 -C \"your_email@example.com\"\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eGo to \u003ccode\u003e\u003ca href=\"https://github.com/you/test-repo/settings/keys\" class=\"bare\"\u003ehttps://github.com/you/test-repo/settings/keys\u003c/a\u003e\u003c/code\u003e, and select \u003cstrong\u003eAdd Deploy Key\u003c/strong\u003e. Enter a title in the \"Title\" field, then copy and paste the public key you created in step 1. Check \u003cstrong\u003eAllow write access\u003c/strong\u003e, then select \u003cstrong\u003eAdd key\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eGo to your project settings in the CircleCI app, select \u003cstrong\u003eSSH Keys\u003c/strong\u003e, and \u003cstrong\u003eAdd SSH key\u003c/strong\u003e. In the \"hostname\" field, enter \u003ccode\u003egithub.com\u003c/code\u003e and add the private key you created in step 1. Then select \u003cstrong\u003eAdd SSH Key\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eIn your \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file, add the fingerprint to a job using the \u003ccode\u003eadd_ssh_keys\u003c/code\u003e key:\u003c/p\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e version: 2.1\n\n jobs:\n deploy-job:\n steps:\n - add_ssh_keys:\n fingerprints:\n - \"SO:ME:FIN:G:ER:PR:IN:T\"\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen you push to your GitHub repository from a job, CircleCI will use the SSH key you added.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"how-are-private-keys-used\"\u003eHow are private keys used?\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen CircleCI builds your project, the private key is installed into the \u003ccode\u003e.ssh\u003c/code\u003e directory and SSH is subsequently configured to communicate with your version control provider. Therefore, the private key is used for:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eChecking out the main project\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eChecking out any GitHub-hosted submodules\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eChecking out any GitHub-hosted private dependencies\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAutomatic git merging/tagging/etc\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003ePrivate keys are also used to enable your project to \u003ca href=\"#enable-your-project-to-check-out-additional-private-repositories\"\u003echeck out additional private repositories\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"user-key-security\"\u003eUser key security\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI will never make your SSH keys public.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe private keys of the checkout key-pairs CircleCI generates never leave the CircleCI systems (only the public key is transmitted to GitHub) and are safely encrypted in storage. However, since the keys are installed into your build containers, any code that you run in CircleCI can read them. Likewise, developers that can SSH in will have direct access to this key.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRemember that SSH keys should be shared only with trusted users. GitHub collaborators on projects employing user keys can access your repositories, therefore, only entrust a user key to someone with whom you would entrust your source code.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"user-key-access-related-error-messages\"\u003eUser key access-related error messages\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eHere are common errors that indicate you need to add a user key.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003ePython\u003c/strong\u003e: During the \u003ccode\u003epip install\u003c/code\u003e step:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode\u003eERROR: Repository not found.\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eRuby\u003c/strong\u003e: During the \u003ccode\u003ebundle install\u003c/code\u003e step:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode\u003ePermission denied (publickey).\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"add-a-circleci-config-file\"\u003eAdd a \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eAfter the necessary permissions have been set up, the next step is adding a \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file to the projects you would like to use with CircleCI. Add a \u003ccode\u003e.circleci\u003c/code\u003e directory to a repository you want to connect to CircleCI. Inside that directory, add a \u003ccode\u003econfig.yml\u003c/code\u003e file.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eAfter you create and commit a \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file to your GitHub repository, CircleCI immediately checks your code out and runs your first job along with any configured tests.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI runs your tests on a clean container every time so that your tests are fresh each time you push code, and so that your code is never accessible to other users. Watch your tests update in real-time on \u003ca href=\"https://circleci.com/dashboard\"\u003eyour dashboard\u003c/a\u003e. You can also get status updates through email notifications, or look for the status badges that appear on GitHub. Integrated statuses also appear on the pull request screen, to show that all tests have passed.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSee the \u003ca href=\"../config-intro/\"\u003eConfiguration tutorial\u003c/a\u003e page for a configuration walkthrough.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"enable-your-project-to-check-out-additional-private-repositories\"\u003eEnable your project to check out additional private repositories\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf your testing process refers to multiple repositories, CircleCI will need a GitHub user key in addition to the deploy key because each deploy key is valid for only \u003cem\u003eone\u003c/em\u003e repository, while a GitHub user key has access to \u003cem\u003eall\u003c/em\u003e of your GitHub repositories.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eProvide CircleCI with a GitHub user key in your project\u0026#8217;s \u003cstrong\u003eProject Settings\u003c/strong\u003e \u0026gt; \u003cstrong\u003eSSH keys\u003c/strong\u003e. Scroll down the page to \u003cstrong\u003eUser Key\u003c/strong\u003e and select \u003cstrong\u003eAuthorize with GitHub\u003c/strong\u003e. CircleCI creates and associates this new SSH key with your GitHub user account for access to all your repositories.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"best-practice-for-keys\"\u003eBest practices for keys\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eUse Deploy Keys whenever possible.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eWhen Deploy Keys cannot be used, \u003ca href=\"#controlling-access-via-a-machine-user\"\u003eMachine user keys\u003c/a\u003e must be used, and have their access restricted to the most limited set of repository and permissions necessary.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eNever use non-Machine user keys (keys should be associated with the build, not with a specific person).\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou must rotate the Deploy or User key as part of revoking user access to that repository.\u003c/p\u003e \u003cdiv class=\"olist loweralpha\"\u003e \u003col class=\"loweralpha\" type=\"a\"\u003e \u003cli\u003e \u003cp\u003eAfter revoking the user’s access in GitHub, delete keys in GitHub.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eDelete the keys in the CircleCI project.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eRegenerate the keys in CircleCI project.\u003c/p\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eEnsure no developer has access to a build in a repository with a User Key that requires more access than they have.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"establish-the-authenticity-of-an-ssh-host\"\u003eEstablish the authenticity of an SSH host\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen using SSH keys to check out repositories, it may be necessary to add the fingerprints for GitHub to a \"known hosts\" file (\u003ccode\u003e~/.ssh/known_hosts\u003c/code\u003e) so that the executor can verify that the host it is connecting to is authentic. The \u003ca href=\"../configuration-reference/#checkout\"\u003e\u003ccode\u003echeckout\u003c/code\u003e job step\u003c/a\u003e does this automatically, so you will need to run the following commands if you opt to use a custom checkout command:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003emkdir -p ~/.ssh\n\necho 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=\n' \u0026gt;\u0026gt; ~/.ssh/known_hosts\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSSH keys for servers can be fetched by running \u003ccode\u003essh-keyscan \u0026lt;host\u0026gt;\u003c/code\u003e, then adding the key that is prefixed with \u003ccode\u003essh-rsa\u003c/code\u003e to the \u003ccode\u003eknown_hosts\u003c/code\u003e file of your job. You can see this in action here:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e➜ ~ ssh-keyscan github.com\n# github.com:22 SSH-2.0-babeld-439edbdb\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=\n# github.com:22 SSH-2.0-babeld-439edbdb\n# github.com:22 SSH-2.0-babeld-439edbdb\n➜ ~ ✗\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eYou can add the key to \u003ccode\u003eknown_hosts\u003c/code\u003e by running the following command:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003essh-keyscan github.com \u0026gt;\u0026gt; ~/.ssh/known_hosts\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"controlling-access-via-a-machine-user\"\u003eControlling access via a machine user\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFor fine-grained access to multiple repositories, it is best practice to create a machine user for your CircleCI projects. A \u003ca href=\"https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users\"\u003emachine user\u003c/a\u003e is a GitHub user that you create for running automated tasks. By using the SSH key of a machine user, you allow anyone with repository access to build, test, and deploy the project. Creating a machine user also reduces the risk of losing credentials linked to a single user.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eTo use the SSH key of a machine user, follow the steps below.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e To perform these steps, the machine user must have admin access. When you have finished adding projects, you can revert the machine user to read-only access. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eCreate a machine user by following the \u003ca href=\"https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users\"\u003einstructions on GitHub\u003c/a\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eLog in to GitHub as the machine user.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eLog in to the \u003ca href=\"https://circleci.com/login\"\u003eCircleCI web app\u003c/a\u003e. When GitHub prompts you to authorize CircleCI, select \u003cstrong\u003eAuthorize application\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eFrom the \u003cstrong\u003eProjects\u003c/strong\u003e page, follow all projects you want the machine user to have access to.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eOn the \u003cstrong\u003eProject Settings \u0026gt; SSH keys\u003c/strong\u003e page, under the \u003cstrong\u003eUser Key\u003c/strong\u003e section, select \u003cstrong\u003eAuthorize With GitHub\u003c/strong\u003e. This gives CircleCI permission to create and upload SSH keys to GitHub on behalf of the machine user.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAfter authorizing, navigate to the \u003cstrong\u003eSSH keys\u003c/strong\u003e page again, go to the \u003cstrong\u003eUser Key\u003c/strong\u003e section, and select \u003cstrong\u003eAdd User Key\u003c/strong\u003e, then \u003cstrong\u003eConfirm User\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eNow, CircleCI will use the machine user\u0026#8217;s SSH key for any Git commands that run during your builds.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"third-party-applications\"\u003eThird party applications\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eGitHub recently added the ability to approve third party application access on a \u003ca href=\"https://help.github.com/articles/about-third-party-application-restrictions/\"\u003eper-organization level\u003c/a\u003e. Before this change, any member of an organization could authorize an application (generating an OAuth token associated with their GitHub user account), and the application could use that OAuth token to act on behalf of the user via the API, with whatever permissions were granted during the OAuth flow.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eNow OAuth tokens will, by default, \u003cem\u003enot\u003c/em\u003e have access to organization data when third party access restrictions are enabled. You must specifically request access on a per organization basis, either during the OAuth process or later, and an organization admin must approve the request.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you are an owner or admin, you can enable third party access restrictions by visiting the \u003ca href=\"https://github.com/settings/organizations\"\u003eOrganization settings\u003c/a\u003e page on GitHub, and clicking the \u003cstrong\u003eSettings\u003c/strong\u003e button for that organization. Under the \u003cstrong\u003eThird-party application access policy\u003c/strong\u003e section, you can select the \u003cstrong\u003eSetup application access restrictions\u003c/strong\u003e button if you want to set up restrictions for third party applications.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eYou can read more about these settings and how to configure them in the \u003ca href=\"https://docs.github.com/en/organizations/restricting-access-to-your-organizations-data/enabling-oauth-app-access-restrictions-for-your-organization\"\u003eGitHub documentation\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e If you enable these restrictions on an organization for which CircleCI has been running builds, CircleCI will stop receiving push event hooks from GitHub, and will not build new pushes. API calls will also be denied, causing, for instance, re-builds of old builds to fail the source checkout. To get CircleCI working again, you will need to grant access to the CircleCI application. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"how-to-re-enable-circlecip-for-a-github-organization\"\u003eHow to re-enable CircleCI for a GitHub organization\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThis section describes how to re-enable CircleCI after enabling third-party application restrictions for a GitHub organization. Go to \u003ca href=\"https://github.com/settings/connections/applications/78a2ba87f071c28e65bb\"\u003eGitHub Settings\u003c/a\u003e, and in the \u003cstrong\u003eOrganization access\u003c/strong\u003e section, you will have the option to request access if you are not an admin, or grant access if you are an admin.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"sect3\"\u003e \u003ch4 id=\"non-admin-member-workflow\"\u003eNon-admin member workflow\u003c/h4\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eIf you are member of a GitHub organization (not an admin), select \u003cstrong\u003eRequest\u003c/strong\u003e and a message will be sent to an admin of your organization. An admin will have to approve the request.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eSelect \u003cstrong\u003eRequest approval from owners\u003c/strong\u003e to send an email to your organization’s owners.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eWhile waiting for approval, you will see \u003cstrong\u003eAccess request pending\u003c/strong\u003e next to your organization’s name.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eIf CircleCI has been approved by your organization, you will see a checkmark next to your organization’s name.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect3\"\u003e \u003ch4 id=\"admin-owner-workflow\"\u003eAdmin owner workflow\u003c/h4\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eIf you are an owner of your organization (an admin), you may grant access to CircleCI by clicking on the \u003cstrong\u003eGrant\u003c/strong\u003e button.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou may be asked to confirm your password in order to authorize our app.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eOnce you’ve approved CircleCI, you will see a checkmark next to your organization’s name.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eAfter access is granted, CircleCI should behave normally again.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"rename-organizations-and-repositories\"\u003eRename organizations and repositories\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you would like to rename your organization or repository, follow the \u003ca href=\"../rename-organizations-and-repositories/\"\u003eRename organizations and repositories\u003c/a\u003e guide to make sure you do not lose access to environment variables or contexts in the process.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"using-github-app-functionality\"\u003eUsing GitHub App functionality alongside the GitHub OAuth app\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003ca href=\"../github-apps-integration/\"\u003eCircleCI’s GitHub App integration\u003c/a\u003e offers increased control over which resources in your VCS CircleCI can access, and lets CircleCI access those resources in a more secure manner. Specifically:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eYou can choose to only allow the CircleCI GitHub App access to specific repositories within your GitHub organization.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eThe CircleCI GitHub App only asks for fine-grained permissions to access your resources.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eThe CircleCI GitHub App uses short-lived tokens when accessing your resources.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSome existing and future functionality on CircleCI, such as triggering a pipeline via a \u003ca href=\"../webhooks/#custom-webhooks\"\u003ecustom webhook\u003c/a\u003e, will only be available when using the more secure GitHub App integration. Despite only being available when using the GitHub App, this functionality \u003cstrong\u003eis still usable by organizations that currently integrate with CircleCI’s GitHub OAuth App\u003c/strong\u003e. The GitHub App and OAuth app \u003cstrong\u003ecan co-exist side-by-side in the same organization\u003c/strong\u003e without needing to sacrifice any functionality that is \u003ca href=\"../github-apps-integration/#currently-not-supported\"\u003enot yet available\u003c/a\u003e to the GitHub App integration (such as \u003ca href=\"../scheduled-pipelines/\"\u003escheduled pipelines\u003c/a\u003e) or needing to set up and migrate to a new organization.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRefer to our \u003ca href=\"https://discuss.circleci.com/t/product-update-trigger-pipelines-from-anywhere-custom-webhooks/49864\"\u003ecommunity forum\u003c/a\u003e for an example and known limitations.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"next-steps\"\u003eNext steps\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../config-intro/\"\u003eConfiguration tutorial\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../hello-world/\"\u003eHello world\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e","frontMatter":{"draft":false,"categories":[],"last_modified_at":"03-Dec-24","hide":false,"search":true,"toc":true,"suggested":false,"sitemap":true,"readtime":true,"contentTags":{"platform":["Cloud"]},"sectionTags":null,"lang":"en","title":"GitHub OAuth app integration overview","slug":"github-integration","ext":".adoc","tags":[],"excerpt":"\u003cdiv class=\"paragraph\"\u003e\n\u003cp\u003eIf your CircleCI organization is authenticated with GitHub through the \u003cstrong\u003eGitHub OAuth app\u003c/strong\u003e, the content on this page is for you.\u003c/p\u003e\n\u003c/div\u003e","asciidoc":true,"layout":"classic-docs","liquid":"","description":"This document provides an overview of using GitHub and GitHub Enterprise with CircleCI.","category":null,"tag":null,"excerpt_origin":"body","document":"#\u003cAsciidoctor::Document@7360 {doctype: \"article\", doctitle: \"GitHub OAuth app integration overview\", blocks: 16}\u003e","date":"2024-12-11 13:16:02 +0000","content":"\u003cdiv id=\"preamble\"\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf your CircleCI organization is authenticated with GitHub through the \u003cstrong\u003eGitHub OAuth app\u003c/strong\u003e, the content on this page is for you.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock tip\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-tip\" title=\"Tip\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eCheck your project slug to discover which GitHub integration you have set up:\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eHead to the \u003ca href=\"https://app.circleci.com/home\"\u003eCircleCI web app\u003c/a\u003e and select your org from the cards on your user homepage.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eSelect \u003cstrong\u003eProjects\u003c/strong\u003e from the sidebar and locate your project from the list. You can use the search to help.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eSelect the ellipsis menu (\u003cspan class=\"icon\"\u003e\u003ci class=\"fa fa-ellipsis-h fa-ellipsis\"\u003e\u003c/i\u003e\u003c/span\u003e) next to your project and select \u003cstrong\u003eProject Settings\u003c/strong\u003e. The project slug is listed on the project settings homepage.\u003c/p\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003e\u003cstrong\u003eGitHub App\u003c/strong\u003e: Project slug starts with \u003ccode\u003ecircleci\u003c/code\u003e followed by UUIDs. For example, \u003ccode\u003ecircleci/34R3kN5RtfEE7v4sa4nWAU/4nYdoKGkb6RXn7JGt8SQtg\u003c/code\u003e).\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003e\u003cstrong\u003eGitHub OAuth app\u003c/strong\u003e: Project slug is human readable. For example, \u003ccode\u003egithub/circleci/circleci-demo-workflows\u003c/code\u003e.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFor more information about the differences, see the \u003ca href=\"../version-control-system-integration-overview/\"\u003eVCS integration overview\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"introduction\"\u003eIntroduction\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen you add a project to CircleCI, the following settings are added to the repository using the permissions you gave CircleCI when you signed up:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eA deploy key that is used to check out your project from GitHub.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eA service hook (or \"push hook\") that is used to notify CircleCI when you push to GitHub.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI builds push hooks by default. Builds are triggered for all push hooks for the repository and PUSH is the most common case of triggering a build.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSome additional, less common cases where CircleCI uses hooks are as follows:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eCircleCI processes PR hooks (pull request hooks) to store PR information for the CircleCI app. If the \u003cstrong\u003eOnly build pull requests\u003c/strong\u003e setting is enabled within CircleCI, CircleCI will only trigger builds when a PR is opened, or when there is a push to a branch for which there is an existing PR. Even if this setting is enabled, CircleCI will always build all pushes to the project\u0026#8217;s default branch.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eIf the \u003cstrong\u003eBuild forked pull requests\u003c/strong\u003e setting is enabled in CircleCI, CircleCI will trigger builds in response to PRs created from forked repositories.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThese settings can be found in each project\u0026#8217;s individual \u003cstrong\u003eProject Settings\u003c/strong\u003e section of the CircleCI web app.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe ability to override the \u003cstrong\u003eOnly build pull requests\u003c/strong\u003e setting is supported. Specifically, CircleCI will run validation on all commits from additional, non-default branches that are specified via regular expression (for example, \u003ccode\u003erelease.\\*\u003c/code\u003e). Details on how to enable can be found on our \u003ca href=\"https://discuss.circleci.com/t/product-launch-override-only-build-prs-setting/47807\"\u003ecommunity forum\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIt is possible to edit the webhooks in GitHub to restrict events that trigger a build. Editing the webhook settings lets you change which hooks get sent to CircleCI, but does not change the types of hooks that trigger builds. CircleCI will always build push hooks, and build on PR hooks (depending on settings), but if you remove push hooks from the webhook settings, CircleCI will not build.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRefer to the \u003ca href=\"https://developer.github.com/v3/repos/hooks/#edit-a-hook\"\u003eGitHub Edit a Hook document\u003c/a\u003e for details.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRefer to the CircleCI documentation on \u003ca href=\"../workflows/#using-filters-in-your-workflows\"\u003eWorkflow filters\u003c/a\u003e for information on how to build tag pushes.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"permissions-overview\"\u003ePermissions overview\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI requests the following permissions from GitHub, defined in the \u003ca href=\"https://developer.github.com/v3/oauth/#scopes\"\u003eGitHub permissions model\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eRead Permission\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eGet a user\u0026#8217;s email address\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWrite Permissions\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eGet a list of a user\u0026#8217;s repositories\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAdd an SSH key to a user\u0026#8217;s account\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eAdmin Permissions\u003c/strong\u003e, needed for setting up a project\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eAdd deploy keys to a repository\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAdd service hooks to a repository\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e CircleCI only asks for permissions that are absolutely necessary. However, as a GitHub OAuth app, CircleCI is constrained by the specific permissions available via GitHub’s OAuth scopes. For example, getting a full list of a user’s repository, public and private, from GitHub, requires the \u003ca href=\"https://developer.github.com/apps/building-oauth-apps/understanding-scopes-for-oauth-apps/#available-scopes\"\u003e\u003ccode\u003erepo\u003c/code\u003e scope\u003c/a\u003e, which is write-level access. GitHub does not provide a read-only OAuth scope for listing all of a user’s repositories. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"saml-sso\"\u003eSAML SSO\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eEnabling SAML protection on a GitHub org can cause changes to CircleCI’s settings related to GitHub Checks and GitHub status updates. Ensure these settings are configured for their desired state after enabling SAML for your organization. You can find these settings at:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eGitHub Checks, from the GitHub website, select \u003cspan class=\"menuseq\"\u003e\u003cb class=\"menu\"\u003eOrganization Settings\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"submenu\"\u003eVCS\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"menuitem\"\u003eGitHub Checks\u003c/b\u003e\u003c/span\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eGitHub status updates, from the CircleCI web app \u003cspan class=\"menuseq\"\u003e\u003cb class=\"menu\"\u003eProject Settings\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"submenu\"\u003eAdvanced\u003c/b\u003e\u0026#160;\u003ci class=\"fa fa-angle-right caret\"\u003e\u003c/i\u003e \u003cb class=\"menuitem\"\u003eGitHub Status Updates\u003c/b\u003e\u003c/span\u003e\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFor more information on GitHub Checks and GitHub status updates, see the \u003ca href=\"../enable-checks/#github-check-and-github-status-updates\"\u003eEnabling GitHub checks\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"connect-a-github-account\"\u003eConnect a GitHub account\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIn the \u003ca href=\"https://app.circleci.com/\"\u003eCircleCI web app\u003c/a\u003e, select the organization you want to connect to GitHub and navigate to the \u003cstrong\u003eUser Settings\u003c/strong\u003e by clicking on the user icon on the bottom of sidebar. Here you will be able to select GitHub. Once connected, you should see any existing projects populate on your dashboard, and you can choose which projects to follow.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eNext you will need to set up the necessary permissions to run your projects on CircleCI.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"disconnect-a-github-account\"\u003eDisconnect a GitHub account\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFollow these steps to disconnect your CircleCI account from GitHub.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock caution\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-caution\" title=\"Caution\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen disconnecting a VCS connection using the method described here, any existing personal API keys will be invalidated. Any SSH keys, or deploy keys may also be invalidated. Disconnecting the VCS connection is intended to be used when issues arise, for example:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eYou joined the wrong organization\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou connected with the wrong GitHub user account\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eChanges to the organization name in your VCS\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eFrom the \u003ca href=\"https://app.circleci.com/\"\u003eCircleCI web app\u003c/a\u003e, select the organization you want to disconnect from GitHub. To do this use the org switcher at the top of the sidebar\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eNavigate to \u003cstrong\u003eUser Settings\u003c/strong\u003e by clicking on the user icon on the bottom of sidebar, then select \u003cstrong\u003eAccount Integrations\u003c/strong\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou will see a list of connections along with the GitHub organizations they are associated with. Select \u003cb class=\"button\"\u003eDisconnect\u003c/b\u003e for the GitHub connection you wish to disconnect.\u003c/p\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eOnce disconnected, you will be redirected to the CircleCI login page. To reconnect your account, log in to CircleCI, navigate to user settings (icon at the bottom of the web app sidebar), and under \u003cstrong\u003eAccount Integrations\u003c/strong\u003e select \u003cb class=\"button\"\u003eConnect\u003c/b\u003e next to GitHub.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"deploy-keys-and-user-keys\"\u003eDeploy keys and user keys\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWhat is a deploy key?\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen you add a new project, CircleCI creates a deployment key on GitHub for your project. A deploy key is an SSH key-pair, one public, one private. GitHub stores the public key, and CircleCI stores the private key. The deployment key gives CircleCI access to a single repository. To prevent CircleCI from pushing to your repository, this deployment key is read-only.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you want to push to the repository from your builds, you will need a deployment key with write access. See the below section for GitHub-specific instructions to create a deployment key.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWhat is a user key?\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eA user key is user-specific an SSH key-pair. GitHub stores the public key, and CircleCI stores the private key. Possession of the private key gives the ability to act as that user, for purposes of 'git' access to projects.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eWhat is the difference between deploy keys and user keys?\u003c/strong\u003e\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eDeploy keys and user keys are the only key types that GitHub supports. Deploy keys are globally unique (for example, no mechanism exists to make a deploy key with access to multiple repositories) and user keys have no notion of \u003cem\u003escope\u003c/em\u003e separate from the user associated with them.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eTo achieve fine-grained access to more than one repository, consider creating what GitHub calls a \u003ca href=\"#controlling-access-via-a-machine-user\"\u003emachine user\u003c/a\u003e. Give this user exactly the permissions your build requires, and then associate its user key with your project on CircleCI.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"create-additional-github-ssh-keys\"\u003eCreate additional GitHub SSH keys\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you need additional SSH keys to access other services, you can create additional keys by following the steps below.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIn this example, the GitHub repository is \u003ccode\u003e\u003ca href=\"https://github.com/you/test-repo\" class=\"bare\"\u003ehttps://github.com/you/test-repo\u003c/a\u003e\u003c/code\u003e, and the CircleCI project is \u003ccode\u003e\u003ca href=\"https://app.circleci.com/pipelines/github/you/test-repo\" class=\"bare\"\u003ehttps://app.circleci.com/pipelines/github/you/test-repo\u003c/a\u003e\u003c/code\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eCreate an SSH key-pair by following the \u003ca href=\"https://help.github.com/articles/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent/\"\u003eGitHub instructions\u003c/a\u003e. When prompted to enter a passphrase, do \u003cstrong\u003enot\u003c/strong\u003e enter one (below is one example command to generate a key on macOS):\u003c/p\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e ssh-keygen -t ed25519 -C \"your_email@example.com\"\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eGo to \u003ccode\u003e\u003ca href=\"https://github.com/you/test-repo/settings/keys\" class=\"bare\"\u003ehttps://github.com/you/test-repo/settings/keys\u003c/a\u003e\u003c/code\u003e, and select \u003cstrong\u003eAdd Deploy Key\u003c/strong\u003e. Enter a title in the \"Title\" field, then copy and paste the public key you created in step 1. Check \u003cstrong\u003eAllow write access\u003c/strong\u003e, then select \u003cstrong\u003eAdd key\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eGo to your project settings in the CircleCI app, select \u003cstrong\u003eSSH Keys\u003c/strong\u003e, and \u003cstrong\u003eAdd SSH key\u003c/strong\u003e. In the \"hostname\" field, enter \u003ccode\u003egithub.com\u003c/code\u003e and add the private key you created in step 1. Then select \u003cstrong\u003eAdd SSH Key\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eIn your \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file, add the fingerprint to a job using the \u003ccode\u003eadd_ssh_keys\u003c/code\u003e key:\u003c/p\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-yaml\" data-lang=\"yaml\"\u003e version: 2.1\n\n jobs:\n deploy-job:\n steps:\n - add_ssh_keys:\n fingerprints:\n - \"SO:ME:FIN:G:ER:PR:IN:T\"\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen you push to your GitHub repository from a job, CircleCI will use the SSH key you added.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"how-are-private-keys-used\"\u003eHow are private keys used?\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen CircleCI builds your project, the private key is installed into the \u003ccode\u003e.ssh\u003c/code\u003e directory and SSH is subsequently configured to communicate with your version control provider. Therefore, the private key is used for:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eChecking out the main project\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eChecking out any GitHub-hosted submodules\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eChecking out any GitHub-hosted private dependencies\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAutomatic git merging/tagging/etc\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003ePrivate keys are also used to enable your project to \u003ca href=\"#enable-your-project-to-check-out-additional-private-repositories\"\u003echeck out additional private repositories\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"user-key-security\"\u003eUser key security\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI will never make your SSH keys public.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThe private keys of the checkout key-pairs CircleCI generates never leave the CircleCI systems (only the public key is transmitted to GitHub) and are safely encrypted in storage. However, since the keys are installed into your build containers, any code that you run in CircleCI can read them. Likewise, developers that can SSH in will have direct access to this key.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRemember that SSH keys should be shared only with trusted users. GitHub collaborators on projects employing user keys can access your repositories, therefore, only entrust a user key to someone with whom you would entrust your source code.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"user-key-access-related-error-messages\"\u003eUser key access-related error messages\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eHere are common errors that indicate you need to add a user key.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003ePython\u003c/strong\u003e: During the \u003ccode\u003epip install\u003c/code\u003e step:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode\u003eERROR: Repository not found.\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003cstrong\u003eRuby\u003c/strong\u003e: During the \u003ccode\u003ebundle install\u003c/code\u003e step:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode\u003ePermission denied (publickey).\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"add-a-circleci-config-file\"\u003eAdd a \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eAfter the necessary permissions have been set up, the next step is adding a \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file to the projects you would like to use with CircleCI. Add a \u003ccode\u003e.circleci\u003c/code\u003e directory to a repository you want to connect to CircleCI. Inside that directory, add a \u003ccode\u003econfig.yml\u003c/code\u003e file.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eAfter you create and commit a \u003ccode\u003e.circleci/config.yml\u003c/code\u003e file to your GitHub repository, CircleCI immediately checks your code out and runs your first job along with any configured tests.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eCircleCI runs your tests on a clean container every time so that your tests are fresh each time you push code, and so that your code is never accessible to other users. Watch your tests update in real-time on \u003ca href=\"https://circleci.com/dashboard\"\u003eyour dashboard\u003c/a\u003e. You can also get status updates through email notifications, or look for the status badges that appear on GitHub. Integrated statuses also appear on the pull request screen, to show that all tests have passed.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSee the \u003ca href=\"../config-intro/\"\u003eConfiguration tutorial\u003c/a\u003e page for a configuration walkthrough.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"enable-your-project-to-check-out-additional-private-repositories\"\u003eEnable your project to check out additional private repositories\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf your testing process refers to multiple repositories, CircleCI will need a GitHub user key in addition to the deploy key because each deploy key is valid for only \u003cem\u003eone\u003c/em\u003e repository, while a GitHub user key has access to \u003cem\u003eall\u003c/em\u003e of your GitHub repositories.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eProvide CircleCI with a GitHub user key in your project\u0026#8217;s \u003cstrong\u003eProject Settings\u003c/strong\u003e \u0026gt; \u003cstrong\u003eSSH keys\u003c/strong\u003e. Scroll down the page to \u003cstrong\u003eUser Key\u003c/strong\u003e and select \u003cstrong\u003eAuthorize with GitHub\u003c/strong\u003e. CircleCI creates and associates this new SSH key with your GitHub user account for access to all your repositories.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"best-practice-for-keys\"\u003eBest practices for keys\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eUse Deploy Keys whenever possible.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eWhen Deploy Keys cannot be used, \u003ca href=\"#controlling-access-via-a-machine-user\"\u003eMachine user keys\u003c/a\u003e must be used, and have their access restricted to the most limited set of repository and permissions necessary.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eNever use non-Machine user keys (keys should be associated with the build, not with a specific person).\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou must rotate the Deploy or User key as part of revoking user access to that repository.\u003c/p\u003e \u003cdiv class=\"olist loweralpha\"\u003e \u003col class=\"loweralpha\" type=\"a\"\u003e \u003cli\u003e \u003cp\u003eAfter revoking the user’s access in GitHub, delete keys in GitHub.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eDelete the keys in the CircleCI project.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eRegenerate the keys in CircleCI project.\u003c/p\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eEnsure no developer has access to a build in a repository with a User Key that requires more access than they have.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"establish-the-authenticity-of-an-ssh-host\"\u003eEstablish the authenticity of an SSH host\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eWhen using SSH keys to check out repositories, it may be necessary to add the fingerprints for GitHub to a \"known hosts\" file (\u003ccode\u003e~/.ssh/known_hosts\u003c/code\u003e) so that the executor can verify that the host it is connecting to is authentic. The \u003ca href=\"../configuration-reference/#checkout\"\u003e\u003ccode\u003echeckout\u003c/code\u003e job step\u003c/a\u003e does this automatically, so you will need to run the following commands if you opt to use a custom checkout command:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003emkdir -p ~/.ssh\n\necho 'github.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=\n' \u0026gt;\u0026gt; ~/.ssh/known_hosts\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSSH keys for servers can be fetched by running \u003ccode\u003essh-keyscan \u0026lt;host\u0026gt;\u003c/code\u003e, then adding the key that is prefixed with \u003ccode\u003essh-rsa\u003c/code\u003e to the \u003ccode\u003eknown_hosts\u003c/code\u003e file of your job. You can see this in action here:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e➜ ~ ssh-keyscan github.com\n# github.com:22 SSH-2.0-babeld-439edbdb\ngithub.com ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCj7ndNxQowgcQnjshcLrqPEiiphnt+VTTvDP6mHBL9j1aNUkY4Ue1gvwnGLVlOhGeYrnZaMgRK6+PKCUXaDbC7qtbW8gIkhL7aGCsOr/C56SJMy/BCZfxd1nWzAOxSDPgVsmerOBYfNqltV9/hWCqBywINIR+5dIg6JTJ72pcEpEjcYgXkE2YEFXV1JHnsKgbLWNlhScqb2UmyRkQyytRLtL+38TGxkxCflmO+5Z8CSSNY7GidjMIZ7Q4zMjA2n1nGrlTDkzwDCsw+wqFPGQA179cnfGWOWRVruj16z6XyvxvjJwbz0wQZ75XK5tKSb7FNyeIEs4TT4jk+S4dhPeAUC5y+bDYirYgM4GC7uEnztnZyaVWQ7B381AK4Qdrwt51ZqExKbQpTUNn+EjqoTwvqNj4kqx5QUCI0ThS/YkOxJCXmPUWZbhjpCg56i+2aB6CmK2JGhn57K5mj0MNdBXA4/WnwH6XoPWJzK5Nyu2zB3nAZp+S5hpQs+p1vN1/wsjk=\n# github.com:22 SSH-2.0-babeld-439edbdb\n# github.com:22 SSH-2.0-babeld-439edbdb\n➜ ~ ✗\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eYou can add the key to \u003ccode\u003eknown_hosts\u003c/code\u003e by running the following command:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"listingblock\"\u003e \u003cdiv class=\"content\"\u003e \u003cpre class=\"highlight\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003essh-keyscan github.com \u0026gt;\u0026gt; ~/.ssh/known_hosts\u003c/code\u003e\u003c/pre\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"controlling-access-via-a-machine-user\"\u003eControlling access via a machine user\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eFor fine-grained access to multiple repositories, it is best practice to create a machine user for your CircleCI projects. A \u003ca href=\"https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users\"\u003emachine user\u003c/a\u003e is a GitHub user that you create for running automated tasks. By using the SSH key of a machine user, you allow anyone with repository access to build, test, and deploy the project. Creating a machine user also reduces the risk of losing credentials linked to a single user.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eTo use the SSH key of a machine user, follow the steps below.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e To perform these steps, the machine user must have admin access. When you have finished adding projects, you can revert the machine user to read-only access. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"olist arabic\"\u003e \u003col class=\"arabic\"\u003e \u003cli\u003e \u003cp\u003eCreate a machine user by following the \u003ca href=\"https://developer.github.com/v3/guides/managing-deploy-keys/#machine-users\"\u003einstructions on GitHub\u003c/a\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eLog in to GitHub as the machine user.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eLog in to the \u003ca href=\"https://circleci.com/login\"\u003eCircleCI web app\u003c/a\u003e. When GitHub prompts you to authorize CircleCI, select \u003cstrong\u003eAuthorize application\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eFrom the \u003cstrong\u003eProjects\u003c/strong\u003e page, follow all projects you want the machine user to have access to.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eOn the \u003cstrong\u003eProject Settings \u0026gt; SSH keys\u003c/strong\u003e page, under the \u003cstrong\u003eUser Key\u003c/strong\u003e section, select \u003cstrong\u003eAuthorize With GitHub\u003c/strong\u003e. This gives CircleCI permission to create and upload SSH keys to GitHub on behalf of the machine user.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eAfter authorizing, navigate to the \u003cstrong\u003eSSH keys\u003c/strong\u003e page again, go to the \u003cstrong\u003eUser Key\u003c/strong\u003e section, and select \u003cstrong\u003eAdd User Key\u003c/strong\u003e, then \u003cstrong\u003eConfirm User\u003c/strong\u003e.\u003c/p\u003e \u003c/li\u003e \u003c/ol\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eNow, CircleCI will use the machine user\u0026#8217;s SSH key for any Git commands that run during your builds.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"third-party-applications\"\u003eThird party applications\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eGitHub recently added the ability to approve third party application access on a \u003ca href=\"https://help.github.com/articles/about-third-party-application-restrictions/\"\u003eper-organization level\u003c/a\u003e. Before this change, any member of an organization could authorize an application (generating an OAuth token associated with their GitHub user account), and the application could use that OAuth token to act on behalf of the user via the API, with whatever permissions were granted during the OAuth flow.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eNow OAuth tokens will, by default, \u003cem\u003enot\u003c/em\u003e have access to organization data when third party access restrictions are enabled. You must specifically request access on a per organization basis, either during the OAuth process or later, and an organization admin must approve the request.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you are an owner or admin, you can enable third party access restrictions by visiting the \u003ca href=\"https://github.com/settings/organizations\"\u003eOrganization settings\u003c/a\u003e page on GitHub, and clicking the \u003cstrong\u003eSettings\u003c/strong\u003e button for that organization. Under the \u003cstrong\u003eThird-party application access policy\u003c/strong\u003e section, you can select the \u003cstrong\u003eSetup application access restrictions\u003c/strong\u003e button if you want to set up restrictions for third party applications.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eYou can read more about these settings and how to configure them in the \u003ca href=\"https://docs.github.com/en/organizations/restricting-access-to-your-organizations-data/enabling-oauth-app-access-restrictions-for-your-organization\"\u003eGitHub documentation\u003c/a\u003e.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"admonitionblock note\"\u003e \u003ctable\u003e \u003ctr\u003e \u003ctd class=\"icon\"\u003e \u003ci class=\"fa icon-note\" title=\"Note\"\u003e\u003c/i\u003e \u003c/td\u003e \u003ctd class=\"content\"\u003e If you enable these restrictions on an organization for which CircleCI has been running builds, CircleCI will stop receiving push event hooks from GitHub, and will not build new pushes. API calls will also be denied, causing, for instance, re-builds of old builds to fail the source checkout. To get CircleCI working again, you will need to grant access to the CircleCI application. \u003c/td\u003e \u003c/tr\u003e \u003c/table\u003e \u003c/div\u003e \u003cdiv class=\"sect2\"\u003e \u003ch3 id=\"how-to-re-enable-circlecip-for-a-github-organization\"\u003eHow to re-enable CircleCI for a GitHub organization\u003c/h3\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eThis section describes how to re-enable CircleCI after enabling third-party application restrictions for a GitHub organization. Go to \u003ca href=\"https://github.com/settings/connections/applications/78a2ba87f071c28e65bb\"\u003eGitHub Settings\u003c/a\u003e, and in the \u003cstrong\u003eOrganization access\u003c/strong\u003e section, you will have the option to request access if you are not an admin, or grant access if you are an admin.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"sect3\"\u003e \u003ch4 id=\"non-admin-member-workflow\"\u003eNon-admin member workflow\u003c/h4\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eIf you are member of a GitHub organization (not an admin), select \u003cstrong\u003eRequest\u003c/strong\u003e and a message will be sent to an admin of your organization. An admin will have to approve the request.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eSelect \u003cstrong\u003eRequest approval from owners\u003c/strong\u003e to send an email to your organization’s owners.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eWhile waiting for approval, you will see \u003cstrong\u003eAccess request pending\u003c/strong\u003e next to your organization’s name.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eIf CircleCI has been approved by your organization, you will see a checkmark next to your organization’s name.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect3\"\u003e \u003ch4 id=\"admin-owner-workflow\"\u003eAdmin owner workflow\u003c/h4\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eIf you are an owner of your organization (an admin), you may grant access to CircleCI by clicking on the \u003cstrong\u003eGrant\u003c/strong\u003e button.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eYou may be asked to confirm your password in order to authorize our app.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eOnce you’ve approved CircleCI, you will see a checkmark next to your organization’s name.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eAfter access is granted, CircleCI should behave normally again.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"rename-organizations-and-repositories\"\u003eRename organizations and repositories\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eIf you would like to rename your organization or repository, follow the \u003ca href=\"../rename-organizations-and-repositories/\"\u003eRename organizations and repositories\u003c/a\u003e guide to make sure you do not lose access to environment variables or contexts in the process.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"using-github-app-functionality\"\u003eUsing GitHub App functionality alongside the GitHub OAuth app\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003e\u003ca href=\"../github-apps-integration/\"\u003eCircleCI’s GitHub App integration\u003c/a\u003e offers increased control over which resources in your VCS CircleCI can access, and lets CircleCI access those resources in a more secure manner. Specifically:\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003eYou can choose to only allow the CircleCI GitHub App access to specific repositories within your GitHub organization.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eThe CircleCI GitHub App only asks for fine-grained permissions to access your resources.\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003eThe CircleCI GitHub App uses short-lived tokens when accessing your resources.\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eSome existing and future functionality on CircleCI, such as triggering a pipeline via a \u003ca href=\"../webhooks/#custom-webhooks\"\u003ecustom webhook\u003c/a\u003e, will only be available when using the more secure GitHub App integration. Despite only being available when using the GitHub App, this functionality \u003cstrong\u003eis still usable by organizations that currently integrate with CircleCI’s GitHub OAuth App\u003c/strong\u003e. The GitHub App and OAuth app \u003cstrong\u003ecan co-exist side-by-side in the same organization\u003c/strong\u003e without needing to sacrifice any functionality that is \u003ca href=\"../github-apps-integration/#currently-not-supported\"\u003enot yet available\u003c/a\u003e to the GitHub App integration (such as \u003ca href=\"../scheduled-pipelines/\"\u003escheduled pipelines\u003c/a\u003e) or needing to set up and migrate to a new organization.\u003c/p\u003e \u003c/div\u003e \u003cdiv class=\"paragraph\"\u003e \u003cp\u003eRefer to our \u003ca href=\"https://discuss.circleci.com/t/product-update-trigger-pipelines-from-anywhere-custom-webhooks/49864\"\u003ecommunity forum\u003c/a\u003e for an example and known limitations.\u003c/p\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e \u003cdiv class=\"sect1\"\u003e \u003ch2 id=\"next-steps\"\u003eNext steps\u003c/h2\u003e \u003cdiv class=\"sectionbody\"\u003e \u003cdiv class=\"ulist\"\u003e \u003cul\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../config-intro/\"\u003eConfiguration tutorial\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003cli\u003e \u003cp\u003e\u003ca href=\"../hello-world/\"\u003eHello world\u003c/a\u003e\u003c/p\u003e \u003c/li\u003e \u003c/ul\u003e \u003c/div\u003e \u003c/div\u003e \u003c/div\u003e","file_name":"_cci2/github-integration.adoc"}},"__lang":"en","__namespaces":{"common":{"appName":"Docs","metaTitle":"Welcome to CircleCI Documentation","metaDescription":"Welcome to CircleCI Documentation"},"header":{"loginButton":{"loggedIn":{"text":"Go to Application","href":"https://app.circleci.com/"},"loggedOut":{"text":"Start Building for Free","href":"https://circleci.com/signup/"}}},"search":{"searchBarPlaceholder":"Search Documentation","docsTab":{"long":"Documentation","short":"Docs"},"orbsTab":{"long":"Orbs","short":"Orbs"},"imagesTab":{"long":"Convenience Images","short":"Images"},"noResults":"No {{type}} results"},"content":{"copyLink":{"copy":"Copy link","copied":"Copied!"},"pageMeta":{"lastUpdateReadTime":"Last updated • Read time","cloudServer":"This document is applicable to CircleCI {{platform}}"},"pageFooter":{"editTitle":"Suggest an edit to this page","makeContribution":"Make a contribution","learnContribution":"Learn how to contribute","helpTitle":"Still need help?","askCommunity":"Ask the CircleCI community","researchCommunity":"Join the research community","support":"Visit our Support site"},"on_this_page":"On This Page","translationInProgress":"This page is in the process of being translated."}},"__N_SSP":true},"page":"/[...slug]","query":{"slug":["github-integration"]},"buildId":"9e2f0ef33c33cd80cc959c1747acd17d270b8bd8","assetPrefix":"https://assets-docs.circleci.com/docs","runtimeConfig":{"basePath":"/docs","exceptionLoggerClientToken":"ca1befe4db724589813fc4a2a9642d4d","analyticsKey":"AbgkrgN4cbRhAVEwlzMkHbwvrXnxHh35","datadogRumApplicationId":"2a3e19ca-297e-4a53-a2cf-082e827d13d3","datadogRumClientToken":"pubdffb4b4dd07f1f43b42276901d58da91","isPreviewSite":false},"isFallback":false,"isExperimentalCompile":false,"gssp":true,"appGip":true,"locale":"en","locales":["en","ja"],"defaultLocale":"en","scriptLoader":[]}</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10