1"use strict";(self.webpackChunkinfracost_docs=self.webpackChunkinfracost_docs||[]).push([[9483],{70801(e,t,o){o.r(t),o.d(t,{CIBox:()=>l,Grid:()=>u,assets:()=>a,contentTitle:()=>c,default:()=>g,frontMatter:()=>i,metadata:()=>s,toc:()=>d});const s=JSON.parse('{"id":"integrations/source_control","title":"Source control integrations","description":"Connect Infracost directly to GitHub, GitLab, or Azure Repos to post cloud cost estimates and FinOps best practices on every pull request.","source":"@site/docs/integrations/source_control.mdx","sourceDirName":"integrations","slug":"/integrations/source_control","permalink":"/docs/integrations/source_control","draft":false,"unlisted":false,"tags":[],"version":"current","frontMatter":{"slug":"source_control","title":"Source control integrations","description":"Connect Infracost directly to GitHub, GitLab, or Azure Repos to post cloud cost estimates and FinOps best practices on every pull request."},"sidebar":"someSidebar","previous":{"title":"Scenarios","permalink":"/docs/infracost_ai/scenarios"},"next":{"title":"GitHub App","permalink":"/docs/integrations/github_app"}}');var n=o(74848),r=o(28453);o(86025);const i={slug:"source_control",title:"Source control integrations",description:"Connect Infracost directly to GitHub, GitLab, or Azure Repos to post cloud cost estimates and FinOps best practices on every pull request."},c=void 0,a={},l=({image:e,link:t,maxHeight:o,newWindow:s,text:r})=>(0,n.jsxs)("a",{className:"ci-box",href:t,children:[(0,n.jsx)("img",{src:e,target:s?"_blank":null,style:{margin:"0 auto",maxHeight:o||"2rem"}}),r&&(0,n.jsx)("div",{className:"ci-subtitle",children:r})]}),u=({logos:e})=>(0,n.jsx)("div",{className:"ci-grid",children:e.map((e,t)=>(0,n.jsx)(l,{...e},t))}),d=[];function p(e){const t={a:"a",p:"p",...(0,r.R)(),...e.components};return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)(t.p,{children:["Infracost can be installed directly into your source control provider \u2014 no CI/CD pipeline required. These integrations are simpler to set up and faster to run than the ",(0,n.jsx)(t.a,{href:"/docs/integrations/cicd_integrations/",children:"CI/CD integrations"}),", and we recommend them wherever possible."]}),"\n",(0,n.jsx)(u,{logos:[{image:"/docs/img/services/github.svg",text:"GitHub.com, Enterprise Cloud & Enterprise Server",link:"/docs/integrations/github_app/",newWindow:!1},{image:"/docs/img/services/azure-repos.svg",text:"Azure Repos (Azure DevOps Services)",link:"/docs/integrations/azure_repos_app/",newWindow:!1},{image:"/docs/img/services/gitlab.svg",text:"GitLab.com & self-managed",link:"/docs/integrations/gitlab_app/",newWindow:!1}]})]})}function g(e={}){const{wrapper:t}={...(0,r.R)(),...e.components};return t?(0,n.jsx)(t,{...e,children:(0,n.jsx)(p,{...e})}):p(e)}},28453(e,t,o){o.d(t,{R:()=>i,x:()=>c});var s=o(96540);const n={},r=s.createContext(n);function i(e){const t=s.useContext(r);return s.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function c(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(n):e.components||n:i(e.components),s.createElement(r.Provider,{value:t},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.