CINXE.COM
Caching dependencies to speed up workflows - GitHub Docs
<!DOCTYPE html><html data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="icon" type="image/png" href="/assets/cb-345/images/site/favicon.png"/><link href="/manifest.json" rel="manifest"/><meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY"/><title>Caching dependencies to speed up workflows - GitHub Docs</title><meta name="description" content="To make your workflows faster and more efficient, you can create and use caches for dependencies and other commonly reused files."/><link rel="alternate" hrefLang="zh-Hans" href="https://docs.github.com/zh/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><link rel="alternate" hrefLang="es" href="https://docs.github.com/es/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><link rel="alternate" hrefLang="pt" href="https://docs.github.com/pt/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><link rel="alternate" hrefLang="ru" href="https://docs.github.com/ru/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><link rel="alternate" hrefLang="ja" href="https://docs.github.com/ja/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><link rel="alternate" hrefLang="fr" href="https://docs.github.com/fr/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><link rel="alternate" hrefLang="de" href="https://docs.github.com/de/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><link rel="alternate" hrefLang="ko" href="https://docs.github.com/ko/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><meta name="keywords" content="Workflows"/><meta name="path-language" content="en"/><meta name="path-version" content="free-pro-team@latest"/><meta name="path-product" content="actions"/><meta name="path-article" content="actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><meta name="page-type" content="tutorial"/><meta name="page-document-type" content="article"/><meta name="status" content="200"/><meta property="og:site_name" content="GitHub Docs"/><meta property="og:title" content="Caching dependencies to speed up workflows - GitHub Docs"/><meta property="og:type" content="article"/><meta property="og:url" content="https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"/><meta property="og:image" content="https://github.githubassets.com/images/modules/open_graph/github-logo.png"/><meta name="next-head-count" content="28"/><link rel="preload" href="/_next/static/css/87cea936052d1d95.css" as="style"/><link rel="stylesheet" href="/_next/static/css/87cea936052d1d95.css" data-n-g=""/><link rel="preload" href="/_next/static/css/66757a3783028467.css" as="style"/><link rel="stylesheet" href="/_next/static/css/66757a3783028467.css" data-n-p=""/><noscript data-n-css=""></noscript><script defer="" nomodule="" src="/_next/static/chunks/polyfills-78c92fac7aa8fdd8.js"></script><script src="/_next/static/chunks/webpack-ec48c0d94b7da59f.js" defer=""></script><script src="/_next/static/chunks/framework-945b357d4a851f4b.js" defer=""></script><script src="/_next/static/chunks/main-c95ae151e287e458.js" defer=""></script><script src="/_next/static/chunks/pages/_app-797fa94dba278176.js" defer=""></script><script src="/_next/static/chunks/727f57db-570e92d04a1cf153.js" defer=""></script><script src="/_next/static/chunks/4432-e0b0889138923fc7.js" defer=""></script><script src="/_next/static/chunks/6066-8d61a14f5f75720a.js" defer=""></script><script src="/_next/static/chunks/5293-274846982f5b82bb.js" defer=""></script><script src="/_next/static/chunks/2689-e7cc4d533fabe066.js" defer=""></script><script src="/_next/static/chunks/9418-89747b124934b544.js" defer=""></script><script src="/_next/static/chunks/5343-0a36d3df57062eb5.js" defer=""></script><script src="/_next/static/chunks/pages/%5BversionId%5D/%5BproductId%5D/%5B...restPage%5D-d93d7776ab1c3347.js" defer=""></script><script src="/_next/static/LU1a4V_oZAzyRc7RojISL/_buildManifest.js" defer=""></script><script src="/_next/static/LU1a4V_oZAzyRc7RojISL/_ssgManifest.js" defer=""></script><style data-styled="" data-styled-version="5.3.5">.cEhRXB{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .dmdEgz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;pointer-events:none;}/*!sc*/ .Ywlla{list-style:none;}/*!sc*/ .hROlum{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;min-width:0;}/*!sc*/ .cUxMoC{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}/*!sc*/ .bmseMA{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-weight:400;word-break:break-word;}/*!sc*/ .lmYNOb{height:20px;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));margin-left:8px;font-weight:initial;}/*!sc*/ [data-variant="danger"]:hover .Box-sc-g0xbh4-0,[data-variant="danger"]:active .lmYNOb{color:var(--fgColor-default,var(--color-fg-default,#1F2328));}/*!sc*/ .gMkIpo{padding:0;margin:0;display:none;}/*!sc*/ .gMkIpo *{font-size:14px;}/*!sc*/ .enEvIH{padding:0;margin:0;display:block;}/*!sc*/ .enEvIH *{font-size:14px;}/*!sc*/ .ivpQTm{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;font-weight:600;word-break:break-word;}/*!sc*/ .eQiQea{grid-area:topper;}/*!sc*/ .ijSsTo{grid-area:intro;}/*!sc*/ .giVcWX{-webkit-align-self:flex-start;-ms-flex-item-align:start;align-self:flex-start;grid-area:sidebar;}/*!sc*/ .kohLxz{grid-area:content;}/*!sc*/ data-styled.g3[id="Box-sc-g0xbh4-0"]{content:"cEhRXB,dmdEgz,Ywlla,hROlum,cUxMoC,bmseMA,lmYNOb,gMkIpo,enEvIH,ivpQTm,eQiQea,ijSsTo,giVcWX,kohLxz,"}/*!sc*/ .hXCKEr{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;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-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:transparent;box-shadow:none;}/*!sc*/ .hXCKEr:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hXCKEr:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .hXCKEr:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hXCKEr[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .hXCKEr[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .hXCKEr:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .hXCKEr:active{-webkit-transition:none;transition:none;}/*!sc*/ .hXCKEr[data-inactive]{cursor:auto;}/*!sc*/ .hXCKEr:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .hXCKEr:disabled [data-component=ButtonCounter],.hXCKEr:disabled [data-component="leadingVisual"],.hXCKEr:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.hXCKEr:focus{outline:solid 1px transparent;}}/*!sc*/ .hXCKEr [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .hXCKEr[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .hXCKEr[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .hXCKEr[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .hXCKEr[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .hXCKEr[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .hXCKEr[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .hXCKEr[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .hXCKEr[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hXCKEr[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .hXCKEr[data-block="block"]{width:100%;}/*!sc*/ .hXCKEr[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .hXCKEr[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .hXCKEr[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .hXCKEr[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .hXCKEr[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .hXCKEr[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .hXCKEr [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .hXCKEr [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .hXCKEr [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .hXCKEr [data-component="trailingAction"]{margin-right:-4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .hXCKEr [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .hXCKEr [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hXCKEr [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .hXCKEr [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .hXCKEr:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .hXCKEr:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .hXCKEr[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .hXCKEr[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .hXCKEr[data-no-visuals]{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));}/*!sc*/ .hXCKEr:has([data-component="ButtonCounter"]){color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));}/*!sc*/ .hXCKEr:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .hXCKEr:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ .hXCKEr{height:auto;text-align:left;}/*!sc*/ .hXCKEr span:first-child{display:inline;}/*!sc*/ .jOdgLl{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;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-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .jOdgLl:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jOdgLl:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .jOdgLl:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jOdgLl[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .jOdgLl[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .jOdgLl:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .jOdgLl:active{-webkit-transition:none;transition:none;}/*!sc*/ .jOdgLl[data-inactive]{cursor:auto;}/*!sc*/ .jOdgLl:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .jOdgLl:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.jOdgLl:focus{outline:solid 1px transparent;}}/*!sc*/ .jOdgLl [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .jOdgLl[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .jOdgLl[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .jOdgLl[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .jOdgLl[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .jOdgLl[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .jOdgLl[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .jOdgLl[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .jOdgLl[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jOdgLl[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .jOdgLl[data-block="block"]{width:100%;}/*!sc*/ .jOdgLl[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .jOdgLl[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .jOdgLl[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .jOdgLl[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .jOdgLl[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .jOdgLl[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .jOdgLl [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .jOdgLl [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .jOdgLl [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .jOdgLl [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .jOdgLl [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .jOdgLl [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jOdgLl [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .jOdgLl [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .jOdgLl:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .jOdgLl:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .jOdgLl[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .jOdgLl [data-component="leadingVisual"],.jOdgLl [data-component="trailingVisual"],.jOdgLl [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .jOdgLl[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jOdgLl[data-no-visuals]{border-top-left-radius:unset;border-bottom-left-radius:unset;}/*!sc*/ .hmWbvh{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;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-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .hmWbvh:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hmWbvh:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .hmWbvh:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .hmWbvh[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .hmWbvh[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .hmWbvh:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .hmWbvh:active{-webkit-transition:none;transition:none;}/*!sc*/ .hmWbvh[data-inactive]{cursor:auto;}/*!sc*/ .hmWbvh:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .hmWbvh:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.hmWbvh:focus{outline:solid 1px transparent;}}/*!sc*/ .hmWbvh [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .hmWbvh[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .hmWbvh[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .hmWbvh[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .hmWbvh[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .hmWbvh[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .hmWbvh[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .hmWbvh[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .hmWbvh[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hmWbvh[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .hmWbvh[data-block="block"]{width:100%;}/*!sc*/ .hmWbvh[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .hmWbvh[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .hmWbvh[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .hmWbvh[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .hmWbvh[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .hmWbvh[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .hmWbvh [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .hmWbvh [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .hmWbvh [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .hmWbvh [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .hmWbvh [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .hmWbvh [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .hmWbvh [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .hmWbvh [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .hmWbvh:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .hmWbvh:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .hmWbvh[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .hmWbvh [data-component="leadingVisual"],.hmWbvh [data-component="trailingVisual"],.hmWbvh [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .hmWbvh[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .lkeyoI{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;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-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .lkeyoI:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .lkeyoI:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .lkeyoI:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .lkeyoI[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .lkeyoI[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .lkeyoI:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .lkeyoI:active{-webkit-transition:none;transition:none;}/*!sc*/ .lkeyoI[data-inactive]{cursor:auto;}/*!sc*/ .lkeyoI:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .lkeyoI:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.lkeyoI:focus{outline:solid 1px transparent;}}/*!sc*/ .lkeyoI [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .lkeyoI[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .lkeyoI[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .lkeyoI[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .lkeyoI[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .lkeyoI[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .lkeyoI[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .lkeyoI[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .lkeyoI[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .lkeyoI[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .lkeyoI[data-block="block"]{width:100%;}/*!sc*/ .lkeyoI[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .lkeyoI[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .lkeyoI[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .lkeyoI[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .lkeyoI[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .lkeyoI[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .lkeyoI [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .lkeyoI [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .lkeyoI [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .lkeyoI [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .lkeyoI [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .lkeyoI [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .lkeyoI [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .lkeyoI [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .lkeyoI:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .lkeyoI:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .lkeyoI[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .lkeyoI [data-component="leadingVisual"],.lkeyoI [data-component="trailingVisual"],.lkeyoI [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .lkeyoI[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .lkeyoI[data-no-visuals]{display:none;}/*!sc*/ .htZXvk{border-radius:6px;border:1px solid;border-color:var(--button-default-borderColor-rest,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;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-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:var(--button-default-bgColor-rest,var(--color-btn-bg,#f6f8fa));box-shadow:var(--button-default-shadow-resting,var(--color-btn-shadow,0 1px 0 rgba(31,35,40,0.04))),var(--button-default-shadow-inset,var(--color-btn-inset-shadow,inset 0 1px 0 rgba(255,255,255,0.25)));}/*!sc*/ .htZXvk:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .htZXvk:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .htZXvk:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .htZXvk[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .htZXvk[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .htZXvk:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .htZXvk:active{-webkit-transition:none;transition:none;}/*!sc*/ .htZXvk[data-inactive]{cursor:auto;}/*!sc*/ .htZXvk:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));border-color:var(--button-default-borderColor-disabled,var(--button-default-borderColor-rest,var(--color-btn-border,rgba(31,35,40,0.15))));background-color:var(--button-default-bgColor-disabled,var(--control-bgColor-disabled,var(--color-input-disabled-bg,rgba(175,184,193,0.2))));}/*!sc*/ .htZXvk:disabled [data-component=ButtonCounter]{color:inherit;}/*!sc*/ @media (forced-colors:active){.htZXvk:focus{outline:solid 1px transparent;}}/*!sc*/ .htZXvk [data-component=ButtonCounter]{font-size:12px;background-color:var(--buttonCounter-default-bgColor-rest,var(--color-btn-counter-bg,rgba(31,35,40,0.08)));}/*!sc*/ .htZXvk[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .htZXvk[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .htZXvk[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .htZXvk[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .htZXvk[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .htZXvk[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .htZXvk[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .htZXvk[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .htZXvk[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .htZXvk[data-block="block"]{width:100%;}/*!sc*/ .htZXvk[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .htZXvk[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .htZXvk[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .htZXvk[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .htZXvk[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .htZXvk[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .htZXvk [data-component="leadingVisual"]{grid-area:leadingVisual;}/*!sc*/ .htZXvk [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .htZXvk [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .htZXvk [data-component="trailingAction"]{margin-right:-4px;}/*!sc*/ .htZXvk [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .htZXvk [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .htZXvk [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .htZXvk [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .htZXvk:hover:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-hover,var(--color-btn-hover-bg,#f3f4f6));border-color:var(--button-default-borderColor-hover,var(--button-default-borderColor-hover,var(--color-btn-hover-border,rgba(31,35,40,0.15))));}/*!sc*/ .htZXvk:active:not([disabled]):not([data-inactive]){background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .htZXvk[aria-expanded=true]{background-color:var(--button-default-bgColor-active,var(--color-btn-active-bg,hsla(220,14%,93%,1)));border-color:var(--button-default-borderColor-active,var(--button-default-borderColor-active,var(--color-btn-active-border,rgba(31,35,40,0.15))));}/*!sc*/ .htZXvk [data-component="leadingVisual"],.htZXvk [data-component="trailingVisual"],.htZXvk [data-component="trailingAction"]{color:var(--button-color,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .htZXvk[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .htZXvk[data-no-visuals]{margin-left:16px;}/*!sc*/ @media (min-width:768px){.htZXvk[data-no-visuals]{margin-left:0;}}/*!sc*/ @media (min-width:1012px){.htZXvk[data-no-visuals]{display:none;}}/*!sc*/ .jCopKa{border-radius:6px;border:1px solid;border-color:transparent;font-family:inherit;font-weight:500;font-size:14px;cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-text-decoration:none;text-decoration:none;text-align:center;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-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;height:32px;padding:0 12px;gap:8px;min-width:-webkit-max-content;min-width:-moz-max-content;min-width:max-content;-webkit-transition:80ms cubic-bezier(0.65,0,0.35,1);transition:80ms cubic-bezier(0.65,0,0.35,1);-webkit-transition-property:color,fill,background-color,border-color;transition-property:color,fill,background-color,border-color;color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));background-color:transparent;box-shadow:none;}/*!sc*/ .jCopKa:focus:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jCopKa:focus:not(:disabled):not(:focus-visible){outline:solid 1px transparent;}/*!sc*/ .jCopKa:focus-visible:not(:disabled){box-shadow:none;outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-2px;}/*!sc*/ .jCopKa[href]{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;}/*!sc*/ .jCopKa[href]:hover{-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .jCopKa:hover{-webkit-transition-duration:80ms;transition-duration:80ms;}/*!sc*/ .jCopKa:active{-webkit-transition:none;transition:none;}/*!sc*/ .jCopKa[data-inactive]{cursor:auto;}/*!sc*/ .jCopKa:disabled{cursor:not-allowed;box-shadow:none;color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .jCopKa:disabled [data-component=ButtonCounter],.jCopKa:disabled [data-component="leadingVisual"],.jCopKa:disabled [data-component="trailingAction"]{color:inherit;}/*!sc*/ @media (forced-colors:active){.jCopKa:focus{outline:solid 1px transparent;}}/*!sc*/ .jCopKa [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .jCopKa[data-component=IconButton]{display:inline-grid;padding:unset;place-content:center;width:32px;min-width:unset;}/*!sc*/ .jCopKa[data-size="small"]{padding:0 8px;height:28px;gap:4px;font-size:12px;}/*!sc*/ .jCopKa[data-size="small"] [data-component="text"]{line-height:calc(20 / 12);}/*!sc*/ .jCopKa[data-size="small"] [data-component=ButtonCounter]{font-size:12px;}/*!sc*/ .jCopKa[data-size="small"] [data-component="buttonContent"] > :not(:last-child){margin-right:4px;}/*!sc*/ .jCopKa[data-size="small"][data-component=IconButton]{width:28px;padding:unset;}/*!sc*/ .jCopKa[data-size="large"]{padding:0 16px;height:40px;gap:8px;}/*!sc*/ .jCopKa[data-size="large"] [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jCopKa[data-size="large"][data-component=IconButton]{width:40px;padding:unset;}/*!sc*/ .jCopKa[data-block="block"]{width:100%;}/*!sc*/ .jCopKa[data-label-wrap="true"]{min-width:-webkit-fit-content;min-width:-moz-fit-content;min-width:fit-content;height:unset;min-height:var(--control-medium-size,2rem);}/*!sc*/ .jCopKa[data-label-wrap="true"] [data-component="buttonContent"]{-webkit-flex:1 1 auto;-ms-flex:1 1 auto;flex:1 1 auto;-webkit-align-self:stretch;-ms-flex-item-align:stretch;align-self:stretch;padding-block:calc(var(--control-medium-paddingBlock,0.375rem) - 2px);}/*!sc*/ .jCopKa[data-label-wrap="true"] [data-component="text"]{white-space:unset;word-break:break-word;}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="small"]{height:unset;min-height:var(--control-small-size,1.75rem);}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="small"] [data-component="buttonContent"]{padding-block:calc(var(--control-small-paddingBlock,0.25rem) - 2px);}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="large"]{height:unset;min-height:var(--control-large-size,2.5rem);padding-inline:var(--control-large-paddingInline-spacious,1rem);}/*!sc*/ .jCopKa[data-label-wrap="true"][data-size="large"] [data-component="buttonContent"]{padding-block:calc(var(--control-large-paddingBlock,0.625rem) - 2px);}/*!sc*/ .jCopKa[data-inactive]:not([disabled]){background-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));border-color:var(--button-inactive-bgColor,var(--button-inactive-bgColor-rest,var(--color-btn-inactive-bg,#eaeef2)));color:var(--button-inactive-fgColor,var(--button-inactive-fgColor-rest,var(--color-btn-inactive-text,#57606a)));}/*!sc*/ .jCopKa[data-inactive]:not([disabled]):focus-visible{box-shadow:none;}/*!sc*/ .jCopKa [data-component="leadingVisual"]{grid-area:leadingVisual;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jCopKa [data-component="text"]{grid-area:text;line-height:calc(20/14);white-space:nowrap;}/*!sc*/ .jCopKa [data-component="trailingVisual"]{grid-area:trailingVisual;}/*!sc*/ .jCopKa [data-component="trailingAction"]{margin-right:-4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jCopKa [data-component="buttonContent"]{-webkit-flex:1 0 auto;-ms-flex:1 0 auto;flex:1 0 auto;display:grid;grid-template-areas:"leadingVisual text trailingVisual";grid-template-columns:min-content minmax(0,auto) min-content;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}/*!sc*/ .jCopKa [data-component="buttonContent"] > :not(:last-child){margin-right:8px;}/*!sc*/ .jCopKa [data-component="loadingSpinner"]{grid-area:text;margin-right:0px !important;place-self:center;}/*!sc*/ .jCopKa [data-component="loadingSpinner"] + [data-component="text"]{visibility:hidden;}/*!sc*/ .jCopKa:hover:not([disabled]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));}/*!sc*/ .jCopKa:active:not([disabled]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));}/*!sc*/ .jCopKa[aria-expanded=true]{background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .jCopKa[data-component="IconButton"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jCopKa[data-no-visuals]{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));}/*!sc*/ .jCopKa:has([data-component="ButtonCounter"]){color:var(--button-default-fgColor-rest,var(--color-btn-text,#24292f));}/*!sc*/ .jCopKa:disabled[data-no-visuals]{color:var(--fgColor-disabled,var(--color-primer-fg-disabled,#8c959f));}/*!sc*/ .jCopKa:disabled[data-no-visuals] [data-component=ButtonCounter]{color:inherit;}/*!sc*/ data-styled.g4[id="types__StyledButton-sc-ws60qy-0"]{content:"hXCKEr,jOdgLl,hmWbvh,lkeyoI,htZXvk,jCopKa,"}/*!sc*/ .eiGLpS{display:none;}/*!sc*/ .eiGLpS[popover]{position:absolute;padding:0.5em 0.75em;width:-webkit-max-content;width:-moz-max-content;width:max-content;margin:auto;-webkit-clip:auto;clip:auto;white-space:normal;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff));text-align:center;word-wrap:break-word;background:var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f));border-radius:6px;border:0;opacity:0;max-width:250px;inset:auto;overflow:visible;}/*!sc*/ .eiGLpS[popover]:popover-open{display:block;}/*!sc*/ .eiGLpS[popover].\:popover-open{display:block;}/*!sc*/ @media (forced-colors:active){.eiGLpS{outline:1px solid transparent;}}/*!sc*/ .eiGLpS::after{position:absolute;display:block;right:0;left:0;height:var(--overlay-offset,0.25rem);content:'';}/*!sc*/ .eiGLpS[data-direction='n']::after,.eiGLpS[data-direction='ne']::after,.eiGLpS[data-direction='nw']::after{top:100%;}/*!sc*/ .eiGLpS[data-direction='s']::after,.eiGLpS[data-direction='se']::after,.eiGLpS[data-direction='sw']::after{bottom:100%;}/*!sc*/ .eiGLpS[data-direction='w']::after{position:absolute;display:block;height:100%;width:8px;content:'';bottom:0;left:100%;}/*!sc*/ .eiGLpS[data-direction='e']::after{position:absolute;display:block;height:100%;width:8px;content:'';bottom:0;right:100%;margin-left:-8px;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .eiGLpS:popover-open,.eiGLpS:popover-open::before{-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .eiGLpS.\:popover-open,.eiGLpS.\:popover-open::before{-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ data-styled.g8[id="Tooltip__StyledTooltip-sc-e45c7z-0"]{content:"eiGLpS,"}/*!sc*/ .daAEFx{-webkit-transform:rotate(0deg);-ms-transform:rotate(0deg);transform:rotate(0deg);}/*!sc*/ .gzcJGA{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg);}/*!sc*/ data-styled.g11[id="Octicon-sc-9kayk9-0"]{content:"daAEFx,gzcJGA,"}/*!sc*/ .bebFBv{font-weight:600;font-size:32px;margin:0;font-size:14px;}/*!sc*/ @media (min-width:1012px) and (max-width:1400px){.bebFBv{margin-top:2rem;}}/*!sc*/ data-styled.g28[id="Heading__StyledHeading-sc-1c1dgg0-0"]{content:"bebFBv,"}/*!sc*/ .hgjakc{margin:0;padding-inline-start:0;padding-top:8px;padding-bottom:8px;}/*!sc*/ data-styled.g29[id="List__ListBox-sc-1x7olzq-0"]{content:"hgjakc,"}/*!sc*/ .itjSOb{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;padding-right:8px;padding-top:6px;padding-bottom:6px;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;}/*!sc*/ .itjSOb[data-loading]{cursor:default;}/*!sc*/ .itjSOb[aria-disabled],.itjSOb[data-inactive]{cursor:not-allowed;}/*!sc*/ .itjSOb[aria-disabled] [data-component="ActionList.Checkbox"],.itjSOb[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.itjSOb:focus,.itjSOb:focus-visible,.itjSOb > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .itjSOb [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .itjSOb [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .itjSOb:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .itjSOb:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.itjSOb[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .itjSOb:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.itjSOb[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ @media (hover:hover) and (pointer:fine){.itjSOb:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.itjSOb:focus-visible,.itjSOb > a.focus-visible,.itjSOb:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.itjSOb:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ .lnYQME{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;padding-right:0;font-size:14px;padding-top:0;padding-bottom:0;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;}/*!sc*/ .lnYQME[data-loading]{cursor:default;}/*!sc*/ .lnYQME[aria-disabled],.lnYQME[data-inactive]{cursor:not-allowed;}/*!sc*/ .lnYQME[aria-disabled] [data-component="ActionList.Checkbox"],.lnYQME[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.lnYQME:focus,.lnYQME:focus-visible,.lnYQME > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .lnYQME [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .lnYQME [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .lnYQME:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .lnYQME:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.lnYQME[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .lnYQME:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.lnYQME[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ @media (hover:hover) and (pointer:fine){.lnYQME:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.lnYQME:focus-visible,.lnYQME > a.focus-visible,.lnYQME:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.lnYQME:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ .kXKjOF{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:16px;padding-right:8px;font-size:12px;padding-top:6px;padding-bottom:6px;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;}/*!sc*/ .kXKjOF[data-loading]{cursor:default;}/*!sc*/ .kXKjOF[aria-disabled],.kXKjOF[data-inactive]{cursor:not-allowed;}/*!sc*/ .kXKjOF[aria-disabled] [data-component="ActionList.Checkbox"],.kXKjOF[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.kXKjOF:focus,.kXKjOF:focus-visible,.kXKjOF > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .kXKjOF [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .kXKjOF [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .kXKjOF:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .kXKjOF:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.kXKjOF[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .kXKjOF:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.kXKjOF[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ @media (hover:hover) and (pointer:fine){.kXKjOF:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.kXKjOF:focus-visible,.kXKjOF > a.focus-visible,.kXKjOF:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.kXKjOF:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ .hTSEii{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:0;padding-right:0;font-size:14px;padding-top:0;padding-bottom:0;line-height:20px;min-height:5px;margin-left:8px;margin-right:8px;border-radius:6px;-webkit-transition:background 33.333ms linear;transition:background 33.333ms linear;color:var(--fgColor-default,var(--color-fg-default,#1F2328));cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;background:unset;border:unset;width:calc(100% - 16px);font-family:unset;text-align:unset;margin-top:unset;margin-bottom:unset;font-weight:600;background-color:var(--control-transparent-bgColor-selected,var(--color-action-list-item-default-selected-bg,rgba(208,215,222,0.24)));}/*!sc*/ .hTSEii[data-loading]{cursor:default;}/*!sc*/ .hTSEii[aria-disabled],.hTSEii[data-inactive]{cursor:not-allowed;}/*!sc*/ .hTSEii[aria-disabled] [data-component="ActionList.Checkbox"],.hTSEii[data-inactive] [data-component="ActionList.Checkbox"]{cursor:not-allowed;background-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));border-color:var(--color-input-disabled-bg,rgba(175,184,193,0.2));}/*!sc*/ @media (forced-colors:active){.hTSEii:focus,.hTSEii:focus-visible,.hTSEii > a.focus-visible{outline:solid 1px transparent !important;}}/*!sc*/ .hTSEii [data-component="ActionList.Item--DividerContainer"]{position:relative;}/*!sc*/ .hTSEii [data-component="ActionList.Item--DividerContainer"]::before{content:" ";display:block;position:absolute;width:100%;top:-7px;border:0 solid;border-top-width:0;border-color:var(--divider-color,transparent);}/*!sc*/ .hTSEii:not(:first-of-type){--divider-color:var(--borderColor-muted,var(--color-action-list-item-inline-divider,rgba(208,215,222,0.48)));}/*!sc*/ [data-component="ActionList.Divider"] + .Item__LiBox-sc-yeql7o-0{--divider-color:transparent !important;}/*!sc*/ .hTSEii:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]),.hTSEii[data-focus-visible-added]:not([aria-disabled]):not([data-inactive]){--divider-color:transparent;}/*!sc*/ .hTSEii:hover:not([aria-disabled]):not([data-inactive]):not([data-loading]) + .Item__LiBox-sc-yeql7o-0,.hTSEii[data-focus-visible-added] + li{--divider-color:transparent;}/*!sc*/ .hTSEii::after{position:absolute;top:calc(50% - 12px);left:-8px;width:4px;height:24px;content:"";background-color:var(--fgColor-accent,var(--color-accent-fg,#0969da));border-radius:6px;}/*!sc*/ @media (hover:hover) and (pointer:fine){.hTSEii:hover:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-hover,var(--color-action-list-item-default-hover-bg,rgba(208,215,222,0.32)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));box-shadow:inset 0 0 0 max(1px,0.0625rem) var(--control-transparent-borderColor-active,var(--color-action-list-item-default-active-border,transparent));}.hTSEii:focus-visible,.hTSEii > a.focus-visible,.hTSEii:focus.focus-visible{outline:none;border:2 solid;box-shadow:0 0 0 2px var(--bgColor-accent-emphasis,var(--color-accent-emphasis,#0969da));}.hTSEii:active:not([aria-disabled]):not([data-inactive]){background-color:var(--control-transparent-bgColor-active,var(--color-action-list-item-default-active-bg,rgba(208,215,222,0.48)));color:var(--fgColor-default,var(--color-fg-default,#1F2328));}}/*!sc*/ data-styled.g31[id="Item__LiBox-sc-yeql7o-0"]{content:"itjSOb,lnYQME,kXKjOF,hTSEii,"}/*!sc*/ .fuIgwR{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));-webkit-text-decoration:none;text-decoration:none;padding-left:16px;padding-right:8px;padding-top:6px;padding-bottom:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-radius:6px;color:inherit;font-size:12px;font-weight:400;}/*!sc*/ [data-a11y-link-underlines='true'] .Link__StyledLink-sc-14289xe-0[data-inline='true']{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .fuIgwR:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .fuIgwR:is(button){display:inline-block;padding:0;font-size:inherit;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}/*!sc*/ .fuIgwR:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .dibTck{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));-webkit-text-decoration:none;text-decoration:none;padding-left:24px;padding-right:8px;padding-top:6px;padding-bottom:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-radius:6px;color:inherit;font-size:12px;font-weight:400;}/*!sc*/ [data-a11y-link-underlines='true'] .Link__StyledLink-sc-14289xe-0[data-inline='true']{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .dibTck:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .dibTck:is(button){display:inline-block;padding:0;font-size:inherit;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}/*!sc*/ .dibTck:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ .cJbOew{color:var(--fgColor-accent,var(--color-accent-fg,#0969da));-webkit-text-decoration:none;text-decoration:none;padding-left:8px;padding-right:8px;padding-top:6px;padding-bottom:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-radius:6px;color:inherit;}/*!sc*/ [data-a11y-link-underlines='true'] .Link__StyledLink-sc-14289xe-0[data-inline='true']{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .cJbOew:hover{-webkit-text-decoration:underline;text-decoration:underline;}/*!sc*/ .cJbOew:is(button){display:inline-block;padding:0;font-size:inherit;white-space:nowrap;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;}/*!sc*/ .cJbOew:hover{color:inherit;-webkit-text-decoration:none;text-decoration:none;}/*!sc*/ data-styled.g32[id="Link__StyledLink-sc-14289xe-0"]{content:"fuIgwR,dibTck,cJbOew,"}/*!sc*/ .cnCOhW{font-size:14px;line-height:20px;color:var(--fgColor-default,var(--color-fg-default,#1F2328));vertical-align:middle;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));border:1px solid var(--control-borderColor-rest,var(--borderColor-default,var(--color-border-default,#d0d7de)));border-radius:6px;outline:none;box-shadow:var(--shadow-inset,var(--color-primer-shadow-inset,inset 0 1px 0 rgba(208,215,222,0.2)));display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:stretch;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;min-height:32px;overflow:hidden;width:100%;height:2rem;-webkit-transition:width 0.3s ease-in-out;transition:width 0.3s ease-in-out;border-bottom-right-radius:unset;border-top-right-radius:unset;border-right:none;min-width:15rem;}/*!sc*/ .cnCOhW input,.cnCOhW textarea{cursor:text;}/*!sc*/ .cnCOhW select{cursor:pointer;}/*!sc*/ .cnCOhW input::-webkit-input-placeholder,.cnCOhW textarea::-webkit-input-placeholder,.cnCOhW select::-webkit-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW input::-moz-placeholder,.cnCOhW textarea::-moz-placeholder,.cnCOhW select::-moz-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW input:-ms-input-placeholder,.cnCOhW textarea:-ms-input-placeholder,.cnCOhW select:-ms-input-placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW input::placeholder,.cnCOhW textarea::placeholder,.cnCOhW select::placeholder{color:var(---control-fgColor-placeholder,var(--fgColor-muted,var(--color-fg-muted,#656d76)));}/*!sc*/ .cnCOhW:focus-within{border-color:var(--fgColor-accent,var(--color-accent-fg,#0969da));outline:2px solid var(--fgColor-accent,var(--color-accent-fg,#0969da));outline-offset:-1px;}/*!sc*/ .cnCOhW > textarea{padding:12px;}/*!sc*/ @media (min-width:768px){.cnCOhW{font-size:14px;}}/*!sc*/ data-styled.g34[id="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0"]{content:"cnCOhW,"}/*!sc*/ .hmJNAM{background-repeat:no-repeat;background-position:right 8px center;padding-left:0;padding-right:0;width:100%;height:2rem;-webkit-transition:width 0.3s ease-in-out;transition:width 0.3s ease-in-out;border-bottom-right-radius:unset;border-top-right-radius:unset;border-right:none;min-width:15rem;}/*!sc*/ .hmJNAM > :not(:last-child){margin-right:8px;}/*!sc*/ .hmJNAM .TextInput-icon,.hmJNAM .TextInput-action{-webkit-align-self:center;-ms-flex-item-align:center;align-self:center;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;}/*!sc*/ .hmJNAM > input,.hmJNAM > select{padding-left:12px;padding-right:12px;}/*!sc*/ data-styled.g35[id="TextInputWrapper-sc-1mqhpbi-1"]{content:"hmJNAM,"}/*!sc*/ .jvumlb{border:0;font-size:inherit;font-family:inherit;background-color:transparent;-webkit-appearance:none;color:inherit;width:100%;}/*!sc*/ .jvumlb:focus{outline:0;}/*!sc*/ data-styled.g36[id="UnstyledTextInput-sc-14ypya-0"]{content:"jvumlb,"}/*!sc*/ </style></head><body><div id="__next"><a href="#main-content" class="visually-hidden skip-button color-bg-accent-emphasis color-fg-on-emphasis">Skip to main content</a><div data-container="header" class="border-bottom d-unset color-border-muted no-print z-3 color-bg-default Header_header__frpqb"><div data-container="notifications"></div><header class="color-bg-default p-2 position-sticky top-0 z-1 border-bottom" role="banner" aria-label="Main"><div class="d-flex flex-justify-between p-2 flex-items-center flex-wrap" data-testid="desktop-header"><div tabindex="-1" class="Header_logoWithClosedSearch__zhF6Q" id="github-logo"><a rel="" class="d-flex flex-items-center color-fg-default no-underline mr-3" href="/en"><svg aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path></svg><span class="h4 text-semibold ml-2 mr-3">GitHub Docs</span></a><div class="hide-sm border-left pl-3"><div data-testid="version-picker" class=""><button type="button" aria-label="Select GitHub product version: current version is free-pro-team@latest" class="types__StyledButton-sc-ws60qy-0 hXCKEr color-fg-default width-full p-1 pl-2 pr-2" aria-haspopup="true" aria-expanded="false" tabindex="0" data-loading="false" aria-describedby=":Ripn6:-loading-announcement" id=":Ripn6:"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 cEhRXB"><span data-component="text"><span style="white-space:pre-wrap">Version: </span><span class="f5 color-fg-muted text-normal" data-testid="field">Free, Pro, & Team</span></span></span><span data-component="trailingAction" class="Box-sc-g0xbh4-0 dmdEgz"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></button></div></div></div><div class="d-flex flex-items-center"><div class="Header_searchContainerWithClosedSearch__h372b mr-3"><div data-testid="search"><div class="position-relative z-2"><form role="search" class="width-full d-flex"><meta name="viewport" content="width=device-width initial-scale=1"/><label class="text-normal width-full"><span class="visually-hidden" aria-describedby="Enter a search term to find it in the GitHub Docs.">Search GitHub Docs</span><span class="TextInputWrapper__TextInputBaseWrapper-sc-1mqhpbi-0 TextInputWrapper-sc-1mqhpbi-1 cnCOhW hmJNAM TextInput-wrapper" aria-busy="false"><input type="search" aria-required="true" data-testid="site-search-input" placeholder="Search GitHub Docs" autoComplete="off" autoCorrect="off" autoCapitalize="off" spellcheck="false" maxLength="512" aria-label="Search GitHub Docs" aria-describedby="Enter a search term to find it in the GitHub Docs." data-component="input" class="UnstyledTextInput-sc-14ypya-0 jvumlb" value=""/></span></label><button data-component="IconButton" type="submit" data-loading="false" data-no-visuals="true" aria-describedby=":Rucpn6:-loading-announcement" aria-labelledby=":R6cpn6:" class="types__StyledButton-sc-ws60qy-0 jOdgLl"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":R6cpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Search</span></form></div></div></div><div class="d-none d-lg-flex flex-items-center"><div data-testid="language-picker" class="d-flex"><button data-component="IconButton" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" data-loading="false" data-no-visuals="true" aria-describedby=":Rkpn6:-loading-announcement" aria-labelledby=":Rukpn6:" id=":Rkpn6:" class="types__StyledButton-sc-ws60qy-0 hmWbvh"><svg aria-hidden="true" focusable="false" class="octicon octicon-globe" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":Rukpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Select language: current language is English</span></div></div><button data-component="IconButton" type="button" class="types__StyledButton-sc-ws60qy-0 hmWbvh hide-lg hide-xl d-flex flex-items-center" data-testid="mobile-search-button" aria-expanded="false" data-loading="false" data-no-visuals="true" aria-describedby=":R74pn6:-loading-announcement" aria-labelledby=":R14pn6:"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":R14pn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Open Search Bar</span><button data-component="IconButton" type="button" class="types__StyledButton-sc-ws60qy-0 lkeyoI px-3" data-testid="mobile-search-button" aria-expanded="false" data-loading="false" data-no-visuals="true" aria-describedby=":R7cpn6:-loading-announcement" aria-labelledby=":R1cpn6:"><svg aria-hidden="true" focusable="false" class="octicon octicon-x" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":R1cpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Close Search Bar</span><div><button data-component="IconButton" type="button" data-testid="mobile-menu" aria-haspopup="true" aria-expanded="false" tabindex="0" data-loading="false" data-no-visuals="true" aria-describedby=":R1kpn6:-loading-announcement" aria-labelledby=":Rvkpn6:" id=":R1kpn6:" class="types__StyledButton-sc-ws60qy-0 htZXvk"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":Rvkpn6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Open Menu</span></div></div></div><div class="d-flex flex-items-center d-xxl-none mt-2" data-testid="header-subnav"><div class="mr-2" data-testid="header-subnav-hamburger"><button data-component="IconButton" type="button" data-testid="sidebar-hamburger" class="types__StyledButton-sc-ws60qy-0 jCopKa color-fg-muted" data-loading="false" data-no-visuals="true" aria-describedby=":R3b9n6:-loading-announcement" aria-labelledby=":Rb9n6:"><svg aria-hidden="true" focusable="false" class="octicon octicon-three-bars" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1 2.75A.75.75 0 0 1 1.75 2h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 2.75Zm0 5A.75.75 0 0 1 1.75 7h12.5a.75.75 0 0 1 0 1.5H1.75A.75.75 0 0 1 1 7.75ZM1.75 12h12.5a.75.75 0 0 1 0 1.5H1.75a.75.75 0 0 1 0-1.5Z"></path></svg></button><span data-direction="s" aria-hidden="true" id=":Rb9n6:" class="Tooltip__StyledTooltip-sc-e45c7z-0 eiGLpS">Open Sidebar</span></div><div class="mr-auto width-full" data-search="breadcrumbs"><nav data-testid="breadcrumbs-header" class="f5 breadcrumbs Breadcrumbs_breadcrumbs__xAC4i" aria-label="Breadcrumb" data-container="breadcrumbs"><ul><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="GitHub Actions" class="Link--primary mr-2 color-fg-muted" href="/en/actions">GitHub Actions</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Write workflows" class="Link--primary mr-2 color-fg-muted" href="/en/actions/writing-workflows">Write workflows</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Choose what workflows do" class="Link--primary mr-2 color-fg-muted" href="/en/actions/writing-workflows/choosing-what-your-workflow-does">Choose what workflows do</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Cache dependencies" class="Link--primary mr-2 color-fg-muted" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows">Cache dependencies</a></li></ul></nav></div></div></header></div><div class="d-lg-flex"><div data-container="nav" class="position-sticky d-none border-right d-xxl-block" style="width:326px;height:calc(100vh - 65px);top:65px"><nav aria-labelledby="allproducts-menu"><div class="d-none px-4 pb-3 border-bottom d-xxl-block"><div class="mt-3"><a rel="" class="f6 pl-2 pr-5 ml-n1 pb-1 Link--primary color-fg-default" href="/en"><svg aria-hidden="true" focusable="false" class="mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg>Home</a></div><div class="mt-3" id="allproducts-menu"><a rel="" data-testid="sidebar-product-xl" class="d-block pl-1 mb-2 h3 color-fg-default no-underline _product-title" href="/en/actions">GitHub Actions</a></div></div><div class="border-right d-none d-xxl-block bg-primary overflow-y-auto flex-shrink-0" style="width:326px;height:calc(100vh - 175px);padding-bottom:185px"><div data-testid="sidebar" style="overflow-y:auto" class="pt-3"><div class="ml-3" data-testid="product-sidebar"><nav aria-label="Product sidebar" class="NavList__NavBox-sc-1c8ygf7-0"><ul class="List__ListBox-sc-1x7olzq-0 hgjakc"><li aria-labelledby=":R3b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R3b6n6:--label " id=":R3b6n6:" aria-expanded="false" aria-controls=":R3b6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R3b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About GitHub Actions</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R3b6n6H1:" aria-labelledby=":R3b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rd3b6n6:--label " id=":Rd3b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/about-github-actions/understanding-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rd3b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Understand GitHub Actions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rl3b6n6:--label " id=":Rl3b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/about-github-actions/about-continuous-integration-with-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rl3b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Continuous integration</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rt3b6n6:--label " id=":Rt3b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/about-github-actions/about-continuous-deployment-with-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rt3b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Continuous deployment</span></div></a></li></ul></div></li><li aria-labelledby=":R5b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R5b6n6:--label " id=":R5b6n6:" aria-expanded="true" aria-controls=":R5b6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Write workflows</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 gzcJGA" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R5b6n6H1:" aria-labelledby=":R5b6n6:" class="Box-sc-g0xbh4-0 enEvIH"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rd5b6n6:--label " id=":Rd5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/writing-workflows/quickstart"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rd5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Quickstart</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rl5b6n6:--label " id=":Rl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/writing-workflows/about-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About workflows</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rt5b6n6:--label " id=":Rt5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/writing-workflows/using-workflow-templates"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rt5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Use workflow templates</span></div></a></li><li aria-labelledby=":R155b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R155b6n6:--label " id=":R155b6n6:" aria-expanded="false" aria-controls=":R155b6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R155b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Choose when workflows run</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R155b6n6H1:" aria-labelledby=":R155b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rr55b6n6:--label " id=":Rr55b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-when-your-workflow-runs/triggering-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rr55b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Trigger a workflow</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1b55b6n6:--label " id=":R1b55b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-when-your-workflow-runs/using-conditions-to-control-job-execution"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1b55b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Use conditions to control job execution</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1r55b6n6:--label " id=":R1r55b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1r55b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Events that trigger workflows</span></div></a></li></ul></div></li><li aria-labelledby=":R1d5b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1d5b6n6:--label " id=":R1d5b6n6:" aria-expanded="false" aria-controls=":R1d5b6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1d5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Choose where workflows run</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1d5b6n6H1:" aria-labelledby=":R1d5b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rrd5b6n6:--label " id=":Rrd5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rrd5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Choose the runner for a job</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1bd5b6n6:--label " id=":R1bd5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-where-your-workflow-runs/running-jobs-in-a-container"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1bd5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Run jobs in a container</span></div></a></li></ul></div></li><li aria-labelledby=":R1l5b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1l5b6n6:--label " id=":R1l5b6n6:" aria-expanded="true" aria-controls=":R1l5b6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1l5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Choose what workflows do</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 gzcJGA" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1l5b6n6H1:" aria-labelledby=":R1l5b6n6:" class="Box-sc-g0xbh4-0 enEvIH"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rrl5b6n6:--label " id=":Rrl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/using-jobs-in-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rrl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Use jobs in a workflow</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1bl5b6n6:--label " id=":R1bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/using-pre-written-building-blocks-in-your-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Find and customize actions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1rl5b6n6:--label " id=":R1rl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/using-github-cli-in-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1rl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub CLI in workflows</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2bl5b6n6:--label " id=":R2bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Workflow commands</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2rl5b6n6:--label " id=":R2rl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/adding-scripts-to-your-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2rl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Add scripts</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3bl5b6n6:--label " id=":R3bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Permissions for `GITHUB_TOKEN`</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3rl5b6n6:--label " id=":R3rl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/evaluate-expressions-in-workflows-and-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3rl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Expressions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4bl5b6n6:--label " id=":R4bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Variables</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4rl5b6n6:--label " id=":R4rl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4rl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Contexts</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5bl5b6n6:--label " id=":R5bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/passing-information-between-jobs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Pass information</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5rl5b6n6:--label " id=":R5rl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/setting-a-default-shell-and-working-directory"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5rl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Set default values for jobs</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6bl5b6n6:--label " id=":R6bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/using-environments-for-deployment"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Environments</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6rl5b6n6:--label " id=":R6rl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/control-the-concurrency-of-workflows-and-jobs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6rl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Concurrency</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R7bl5b6n6:--label " id=":R7bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/running-variations-of-jobs-in-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R7bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Run job variations</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 hTSEii"><a sx="[object Object]" tabindex="0" aria-labelledby=":R7rl5b6n6:--label " id=":R7rl5b6n6:" aria-current="page" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R7rl5b6n6:--label" class="Box-sc-g0xbh4-0 ivpQTm">Cache dependencies</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R8bl5b6n6:--label " id=":R8bl5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/storing-and-sharing-data-from-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R8bl5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Store artifacts</span></div></a></li></ul></div></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1t5b6n6:--label " id=":R1t5b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/writing-workflows/workflow-syntax-for-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1t5b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Workflow syntax</span></div></a></li></ul></div></li><li aria-labelledby=":R7b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R7b6n6:--label " id=":R7b6n6:" aria-expanded="false" aria-controls=":R7b6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage workflows and deployments</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R7b6n6H1:" aria-labelledby=":R7b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rd7b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rd7b6n6:--label " id=":Rd7b6n6:" aria-expanded="false" aria-controls=":Rd7b6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rd7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage workflow runs</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rd7b6n6H1:" aria-labelledby=":Rd7b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdd7b6n6:--label " id=":Rdd7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdd7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manually run a workflow</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rld7b6n6:--label " id=":Rld7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/re-running-workflows-and-jobs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rld7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Re-run workflows and jobs</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtd7b6n6:--label " id=":Rtd7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/canceling-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtd7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Cancel a workflow</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15d7b6n6:--label " id=":R15d7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/disabling-and-enabling-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15d7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Disable & enable a workflow</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1dd7b6n6:--label " id=":R1dd7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/skipping-workflow-runs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1dd7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Skip workflow runs</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ld7b6n6:--label " id=":R1ld7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/deleting-a-workflow-run"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ld7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Delete a workflow run</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1td7b6n6:--label " id=":R1td7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/downloading-workflow-artifacts"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1td7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Download workflow artifacts</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R25d7b6n6:--label " id=":R25d7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/removing-workflow-artifacts"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R25d7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Remove workflow artifacts</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2dd7b6n6:--label " id=":R2dd7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/approving-workflow-runs-from-public-forks"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2dd7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Approve public fork runs</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2ld7b6n6:--label " id=":R2ld7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/approving-workflow-runs-from-private-forks"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2ld7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Approve private fork runs</span></div></a></li></ul></div></li><li aria-labelledby=":Rl7b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rl7b6n6:--label " id=":Rl7b6n6:" aria-expanded="false" aria-controls=":Rl7b6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rl7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage deployments</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rl7b6n6H1:" aria-labelledby=":Rl7b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdl7b6n6:--label " id=":Rdl7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-deployments/viewing-deployment-history"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdl7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deployment history</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rll7b6n6:--label " id=":Rll7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-deployments/managing-environments-for-deployment"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rll7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage environments</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtl7b6n6:--label " id=":Rtl7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-deployments/reviewing-deployments"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtl7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Review deployments</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15l7b6n6:--label " id=":R15l7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-deployments/creating-custom-deployment-protection-rules"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15l7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create custom protection rules</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1dl7b6n6:--label " id=":R1dl7b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/managing-workflow-runs-and-deployments/managing-deployments/configuring-custom-deployment-protection-rules"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1dl7b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Configure custom protection rules</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":R9b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R9b6n6:--label " id=":R9b6n6:" aria-expanded="false" aria-controls=":R9b6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Share automations</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R9b6n6H1:" aria-labelledby=":R9b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rd9b6n6:--label " id=":Rd9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/sharing-automations/avoiding-duplication"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rd9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Avoid duplication</span></div></a></li><li aria-labelledby=":Rl9b6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rl9b6n6:--label " id=":Rl9b6n6:" aria-expanded="false" aria-controls=":Rl9b6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rl9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create actions</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rl9b6n6H1:" aria-labelledby=":Rl9b6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rql9b6n6:--label " id=":Rql9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/about-custom-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rql9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About custom actions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1al9b6n6:--label " id=":R1al9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/creating-a-docker-container-action"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1al9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create a Docker container action</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ql9b6n6:--label " id=":R1ql9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/creating-a-javascript-action"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ql9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create a JavaScript action</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2al9b6n6:--label " id=":R2al9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/creating-a-composite-action"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2al9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create a composite action</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2ql9b6n6:--label " id=":R2ql9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/metadata-syntax-for-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2ql9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Metadata syntax</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3al9b6n6:--label " id=":R3al9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/dockerfile-support-for-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3al9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Dockerfile support</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3ql9b6n6:--label " id=":R3ql9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/setting-exit-codes-for-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3ql9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Set exit codes</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4al9b6n6:--label " id=":R4al9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/releasing-and-maintaining-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4al9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Release and maintain actions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4ql9b6n6:--label " id=":R4ql9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/publishing-actions-in-github-marketplace"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4ql9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Publish in GitHub Marketplace</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5al9b6n6:--label " id=":R5al9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/sharing-automations/creating-actions/developing-a-third-party-cli-action"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5al9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">CLI setup action</span></div></a></li></ul></div></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rt9b6n6:--label " id=":Rt9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/sharing-automations/reusing-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rt9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Reuse workflows</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R159b6n6:--label " id=":R159b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/sharing-automations/creating-workflow-templates-for-your-organization"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R159b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create workflow templates</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1d9b6n6:--label " id=":R1d9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/sharing-automations/sharing-actions-and-workflows-from-your-private-repository"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1d9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Share from your private repository</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1l9b6n6:--label " id=":R1l9b6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/sharing-automations/sharing-actions-and-workflows-with-your-organization"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1l9b6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Share with your organization</span></div></a></li></ul></div></li><li aria-labelledby=":Rbb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rbb6n6:--label " id=":Rbb6n6:" aria-expanded="false" aria-controls=":Rbb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Monitor & troubleshoot</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rbb6n6H1:" aria-labelledby=":Rbb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rdbb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rdbb6n6:--label " id=":Rdbb6n6:" aria-expanded="false" aria-controls=":Rdbb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rdbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Monitor</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rdbb6n6H1:" aria-labelledby=":Rdbb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rddbb6n6:--label " id=":Rddbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/about-monitoring-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rddbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About monitoring</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rldbb6n6:--label " id=":Rldbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/notifications-for-workflow-runs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rldbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Notifications for workflow runs</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtdbb6n6:--label " id=":Rtdbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/using-the-visualization-graph"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtdbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Visualization graph</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15dbb6n6:--label " id=":R15dbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/viewing-workflow-run-history"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15dbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Workflow run history</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ddbb6n6:--label " id=":R1ddbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/viewing-job-execution-time"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ddbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">View job execution time</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ldbb6n6:--label " id=":R1ldbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/adding-a-workflow-status-badge"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ldbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Add a status badge</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1tdbb6n6:--label " id=":R1tdbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/using-workflow-run-logs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1tdbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Workflow run logs</span></div></a></li></ul></div></li><li aria-labelledby=":Rlbb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rlbb6n6:--label " id=":Rlbb6n6:" aria-expanded="false" aria-controls=":Rlbb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rlbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Troubleshoot</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rlbb6n6H1:" aria-labelledby=":Rlbb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdlbb6n6:--label " id=":Rdlbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows/about-troubleshooting-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdlbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About troubleshooting</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rllbb6n6:--label " id=":Rllbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows/enabling-debug-logging"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rllbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Enable debug logging</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtlbb6n6:--label " id=":Rtlbb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows/working-with-support-for-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtlbb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Working with GitHub Support</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":Rdb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rdb6n6:--label " id=":Rdb6n6:" aria-expanded="false" aria-controls=":Rdb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rdb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub-hosted runners</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rdb6n6H1:" aria-labelledby=":Rdb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rddb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rddb6n6:--label " id=":Rddb6n6:" aria-expanded="false" aria-controls=":Rddb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rddb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About GitHub-hosted runners</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rddb6n6H1:" aria-labelledby=":Rddb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdddb6n6:--label " id=":Rdddb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdddb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About GitHub-hosted runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rlddb6n6:--label " id=":Rlddb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/using-github-hosted-runners/monitoring-your-current-jobs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rlddb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Monitor current jobs</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtddb6n6:--label " id=":Rtddb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/using-github-hosted-runners/customizing-github-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtddb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Customize runners</span></div></a></li></ul></div></li><li aria-labelledby=":Rldb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rldb6n6:--label " id=":Rldb6n6:" aria-expanded="false" aria-controls=":Rldb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rldb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using larger runners</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rldb6n6H1:" aria-labelledby=":Rldb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdldb6n6:--label " id=":Rdldb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/using-larger-runners/about-larger-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdldb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About larger runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rlldb6n6:--label " id=":Rlldb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/using-larger-runners/managing-larger-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rlldb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage larger runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtldb6n6:--label " id=":Rtldb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/using-larger-runners/controlling-access-to-larger-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtldb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Control access to larger runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15ldb6n6:--label " id=":R15ldb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/using-larger-runners/running-jobs-on-larger-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15ldb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Run jobs on larger runners</span></div></a></li></ul></div></li><li aria-labelledby=":Rtdb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rtdb6n6:--label " id=":Rtdb6n6:" aria-expanded="false" aria-controls=":Rtdb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rtdb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Private networking</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rtdb6n6H1:" aria-labelledby=":Rtdb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdtdb6n6:--label " id=":Rdtdb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/connecting-to-a-private-network/about-private-networking-with-github-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdtdb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About private networking</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rltdb6n6:--label " id=":Rltdb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/connecting-to-a-private-network/using-an-api-gateway-with-oidc"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rltdb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using OIDC</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rttdb6n6:--label " id=":Rttdb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/using-github-hosted-runners/connecting-to-a-private-network/using-wireguard-to-create-a-network-overlay"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rttdb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using WireGuard</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":Rfb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rfb6n6:--label " id=":Rfb6n6:" aria-expanded="false" aria-controls=":Rfb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Self-hosted runners</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rfb6n6H1:" aria-labelledby=":Rfb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rdfb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rdfb6n6:--label " id=":Rdfb6n6:" aria-expanded="false" aria-controls=":Rdfb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rdfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage self-hosted runners</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rdfb6n6H1:" aria-labelledby=":Rdfb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rddfb6n6:--label " id=":Rddfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rddfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About self-hosted runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rldfb6n6:--label " id=":Rldfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rldfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Add self-hosted runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtdfb6n6:--label " id=":Rtdfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/autoscaling-with-self-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtdfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Autoscale self-hosted runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15dfb6n6:--label " id=":R15dfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/running-scripts-before-or-after-a-job"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15dfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Run a script before or after a job</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ddfb6n6:--label " id=":R1ddfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/customizing-the-containers-used-by-jobs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ddfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Customize containers used by jobs</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ldfb6n6:--label " id=":R1ldfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ldfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Run the runner app as a service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1tdfb6n6:--label " id=":R1tdfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-a-proxy-server-with-self-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1tdfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Proxy servers</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R25dfb6n6:--label " id=":R25dfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R25dfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Label runners</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2ddfb6n6:--label " id=":R2ddfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-self-hosted-runners-in-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2ddfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Use runners in a workflow</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2ldfb6n6:--label " id=":R2ldfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2ldfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manage access with runner groups</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2tdfb6n6:--label " id=":R2tdfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2tdfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Monitor & troubleshoot</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R35dfb6n6:--label " id=":R35dfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R35dfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Remove self-hosted runners</span></div></a></li></ul></div></li><li aria-labelledby=":Rlfb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rlfb6n6:--label " id=":Rlfb6n6:" aria-expanded="false" aria-controls=":Rlfb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rlfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Actions Runner Controller</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rlfb6n6H1:" aria-labelledby=":Rlfb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdlfb6n6:--label " id=":Rdlfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/about-actions-runner-controller"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdlfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About ARC</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rllfb6n6:--label " id=":Rllfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/quickstart-for-actions-runner-controller"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rllfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Quickstart</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtlfb6n6:--label " id=":Rtlfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/authenticating-to-the-github-api"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtlfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Authenticating</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15lfb6n6:--label " id=":R15lfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/deploying-runner-scale-sets-with-actions-runner-controller"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15lfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying runner scale sets</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1dlfb6n6:--label " id=":R1dlfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/using-actions-runner-controller-runners-in-a-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1dlfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using ARC in a workflow</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1llfb6n6:--label " id=":R1llfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/troubleshooting-actions-runner-controller-errors"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1llfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Troubleshoot</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1tlfb6n6:--label " id=":R1tlfb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/about-support-for-actions-runner-controller"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1tlfb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About Support for ARC</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":Rhb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rhb6n6:--label " id=":Rhb6n6:" aria-expanded="false" aria-controls=":Rhb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Security</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rhb6n6H1:" aria-labelledby=":Rhb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rdhb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rdhb6n6:--label " id=":Rdhb6n6:" aria-expanded="false" aria-controls=":Rdhb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rdhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Security guides</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rdhb6n6H1:" aria-labelledby=":Rdhb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rddhb6n6:--label " id=":Rddhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rddhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Security hardening</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rldhb6n6:--label " id=":Rldhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rldhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using secrets</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtdhb6n6:--label " id=":Rtdhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-guides/automatic-token-authentication"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtdhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Automatic token authentication</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15dhb6n6:--label " id=":R15dhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-guides/using-githubs-security-features-to-secure-your-use-of-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15dhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub security features</span></div></a></li></ul></div></li><li aria-labelledby=":Rlhb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rlhb6n6:--label " id=":Rlhb6n6:" aria-expanded="false" aria-controls=":Rlhb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rlhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Artifact attestations</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rlhb6n6H1:" aria-labelledby=":Rlhb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdlhb6n6:--label " id=":Rdlhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-to-establish-provenance-for-builds"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdlhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Artifact attestations</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rllhb6n6:--label " id=":Rllhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-and-reusable-workflows-to-achieve-slsa-v1-build-level-3"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rllhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Attest with reusable workflows</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtlhb6n6:--label " id=":Rtlhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/using-artifact-attestations/enforcing-artifact-attestations-with-a-kubernetes-admission-controller"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtlhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Artifact attestations Kubernetes admission controller</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15lhb6n6:--label " id=":R15lhb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/using-artifact-attestations/verifying-attestations-offline"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15lhb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Verifying attestations offline</span></div></a></li></ul></div></li><li aria-labelledby=":Rthb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rthb6n6:--label " id=":Rthb6n6:" aria-expanded="false" aria-controls=":Rthb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Security harden deployments</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rthb6n6H1:" aria-labelledby=":Rthb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdthb6n6:--label " id=":Rdthb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/about-security-hardening-with-openid-connect"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Security hardening with OpenID Connect</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rlthb6n6:--label " id=":Rlthb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rlthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect in AWS</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtthb6n6:--label " id=":Rtthb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-azure"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect in Azure</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15thb6n6:--label " id=":R15thb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-google-cloud-platform"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15thb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect in Google Cloud Platform</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1dthb6n6:--label " id=":R1dthb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-hashicorp-vault"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1dthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect in HashiCorp Vault</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1lthb6n6:--label " id=":R1lthb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-jfrog"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1lthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect in JFrog</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1tthb6n6:--label " id=":R1tthb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-pypi"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1tthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect in PyPI</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R25thb6n6:--label " id=":R25thb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-cloud-providers"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R25thb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect in cloud providers</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2dthb6n6:--label " id=":R2dthb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/security-for-github-actions/security-hardening-your-deployments/using-openid-connect-with-reusable-workflows"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2dthb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">OpenID Connect with reusable workflows</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":Rjb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rjb6n6:--label " id=":Rjb6n6:" aria-expanded="false" aria-controls=":Rjb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Use cases and examples</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rjb6n6H1:" aria-labelledby=":Rjb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdjb6n6:--label " id=":Rdjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/use-cases-and-examples/creating-an-example-workflow"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create an example workflow</span></div></a></li><li aria-labelledby=":Rljb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rljb6n6:--label " id=":Rljb6n6:" aria-expanded="false" aria-controls=":Rljb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build and test</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rljb6n6H1:" aria-labelledby=":Rljb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqljb6n6:--label " id=":Rqljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-go"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Go</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1aljb6n6:--label " id=":R1aljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-ant"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1aljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Java & Ant</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1qljb6n6:--label " id=":R1qljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-gradle"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1qljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Java & Gradle</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2aljb6n6:--label " id=":R2aljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-maven"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2aljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Java with Maven</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2qljb6n6:--label " id=":R2qljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-net"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2qljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test .NET</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3aljb6n6:--label " id=":R3aljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-nodejs"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3aljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Node.js</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3qljb6n6:--label " id=":R3qljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-powershell"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3qljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test PowerShell</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4aljb6n6:--label " id=":R4aljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-python"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4aljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Python</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4qljb6n6:--label " id=":R4qljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-ruby"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4qljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Ruby</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5aljb6n6:--label " id=":R5aljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-swift"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5aljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Swift</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5qljb6n6:--label " id=":R5qljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-xamarin-applications"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5qljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Build & test Xamarin apps</span></div></a></li></ul></div></li><li aria-labelledby=":Rtjb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rtjb6n6:--label " id=":Rtjb6n6:" aria-expanded="false" aria-controls=":Rtjb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rtjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deployment</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rtjb6n6H1:" aria-labelledby=":Rtjb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rqtjb6n6:--label " id=":Rqtjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-with-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rqtjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploy with GitHub Actions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1atjb6n6:--label " id=":R1atjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-nodejs-to-azure-app-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1atjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying Node.js to Azure App Service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1qtjb6n6:--label " id=":R1qtjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-python-to-azure-app-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1qtjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying Python to Azure App Service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2atjb6n6:--label " id=":R2atjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-java-to-azure-app-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2atjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying Java to Azure App Service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2qtjb6n6:--label " id=":R2qtjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-net-to-azure-app-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2qtjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying .NET to Azure App Service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3atjb6n6:--label " id=":R3atjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-php-to-azure-app-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3atjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying PHP to Azure App Service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R3qtjb6n6:--label " id=":R3qtjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-docker-to-azure-app-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3qtjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying Docker to Azure App Service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4atjb6n6:--label " id=":R4atjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4atjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying to Azure Static Web App</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R4qtjb6n6:--label " id=":R4qtjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-to-azure-kubernetes-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R4qtjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploying to Azure Kubernetes Service</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5atjb6n6:--label " id=":R5atjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-to-amazon-elastic-container-service"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5atjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploy to Amazon ECS</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R5qtjb6n6:--label " id=":R5qtjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/deploying-to-google-kubernetes-engine"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R5qtjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Deploy to Google Kubernetes Engine</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R6atjb6n6:--label " id=":R6atjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/deploying/installing-an-apple-certificate-on-macos-runners-for-xcode-development"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R6atjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Sign Xcode applications</span></div></a></li></ul></div></li><li aria-labelledby=":R15jb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R15jb6n6:--label " id=":R15jb6n6:" aria-expanded="false" aria-controls=":R15jb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R15jb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Publish packages</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R15jb6n6H1:" aria-labelledby=":R15jb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rr5jb6n6:--label " id=":Rr5jb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/publishing-packages/about-packaging-with-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rr5jb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Packaging with GitHub Actions</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1b5jb6n6:--label " id=":R1b5jb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/publishing-packages/publishing-docker-images"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1b5jb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Publish Docker images</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1r5jb6n6:--label " id=":R1r5jb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/publishing-packages/publishing-java-packages-with-gradle"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1r5jb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Publish Java packages with Gradle</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2b5jb6n6:--label " id=":R2b5jb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/publishing-packages/publishing-java-packages-with-maven"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2b5jb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Publish Java packages with Maven</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2r5jb6n6:--label " id=":R2r5jb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/publishing-packages/publishing-nodejs-packages"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2r5jb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Publish Node.js packages</span></div></a></li></ul></div></li><li aria-labelledby=":R1djb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1djb6n6:--label " id=":R1djb6n6:" aria-expanded="false" aria-controls=":R1djb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1djb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Project management</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1djb6n6H1:" aria-labelledby=":R1djb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rrdjb6n6:--label " id=":Rrdjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/project-management/using-github-actions-for-project-management"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rrdjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Actions for project management</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1bdjb6n6:--label " id=":R1bdjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/project-management/adding-labels-to-issues"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1bdjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Add labels to issues</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1rdjb6n6:--label " id=":R1rdjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/project-management/closing-inactive-issues"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1rdjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Close inactive issues</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2bdjb6n6:--label " id=":R2bdjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/project-management/commenting-on-an-issue-when-a-label-is-added"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2bdjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Add label to comment on issue</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2rdjb6n6:--label " id=":R2rdjb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/project-management/scheduling-issue-creation"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2rdjb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Schedule issue creation</span></div></a></li></ul></div></li><li aria-labelledby=":R1ljb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":R1ljb6n6:--label " id=":R1ljb6n6:" aria-expanded="false" aria-controls=":R1ljb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":R1ljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Containerized services</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":R1ljb6n6H1:" aria-labelledby=":R1ljb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rrljb6n6:--label " id=":Rrljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/using-containerized-services/about-service-containers"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rrljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">About service containers</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1bljb6n6:--label " id=":R1bljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/using-containerized-services/creating-postgresql-service-containers"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1bljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create PostgreSQL service containers</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1rljb6n6:--label " id=":R1rljb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/use-cases-and-examples/using-containerized-services/creating-redis-service-containers"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1rljb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Create Redis service containers</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":Rlb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rlb6n6:--label " id=":Rlb6n6:" aria-expanded="false" aria-controls=":Rlb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Migrate to GitHub Actions</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rlb6n6H1:" aria-labelledby=":Rlb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li aria-labelledby=":Rdlb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rdlb6n6:--label " id=":Rdlb6n6:" aria-expanded="false" aria-controls=":Rdlb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rdlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Automated migrations</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rdlb6n6H1:" aria-labelledby=":Rdlb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rddlb6n6:--label " id=":Rddlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/automating-migration-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rddlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Automate migration with GitHub Actions Importer</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rldlb6n6:--label " id=":Rldlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/extending-github-actions-importer-with-custom-transformers"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rldlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Extending GitHub Actions Importer</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtdlb6n6:--label " id=":Rtdlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/supplemental-arguments-and-settings"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtdlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Supplemental arguments and settings</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15dlb6n6:--label " id=":R15dlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-azure-devops-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15dlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Azure DevOps migration</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ddlb6n6:--label " id=":R1ddlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-bamboo-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ddlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Bamboo migration</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1ldlb6n6:--label " id=":R1ldlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-bitbucket-pipelines-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1ldlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Bitbucket Pipelines migration</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1tdlb6n6:--label " id=":R1tdlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-circleci-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1tdlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">CircleCI migration</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R25dlb6n6:--label " id=":R25dlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-gitlab-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R25dlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitLab migration</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2ddlb6n6:--label " id=":R2ddlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-jenkins-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2ddlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Jenkins migration</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R2ldlb6n6:--label " id=":R2ldlb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-travis-ci-with-github-actions-importer"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2ldlb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Travis CI migration</span></div></a></li></ul></div></li><li aria-labelledby=":Rllb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rllb6n6:--label " id=":Rllb6n6:" aria-expanded="false" aria-controls=":Rllb6n6H1:" class="Item__LiBox-sc-yeql7o-0 kXKjOF"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rllb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Manual migrations</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rllb6n6H1:" aria-labelledby=":Rllb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdllb6n6:--label " id=":Rdllb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-azure-pipelines-to-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdllb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Migrate from Azure Pipelines</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rlllb6n6:--label " id=":Rlllb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-circleci-to-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rlllb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Migrate from CircleCI</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtllb6n6:--label " id=":Rtllb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-gitlab-cicd-to-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtllb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Migrate from GitLab CI/CD</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R15llb6n6:--label " id=":R15llb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-jenkins-to-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R15llb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Migrate from Jenkins</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":R1dllb6n6:--label " id=":R1dllb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 dibTck" href="/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-travis-ci-to-github-actions"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R1dllb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Migrate from Travis CI</span></div></a></li></ul></div></li></ul></div></li><li aria-labelledby=":Rnb6n6:" class="Box-sc-g0xbh4-0 Ywlla"><button tabindex="0" aria-labelledby=":Rnb6n6:--label " id=":Rnb6n6:" aria-expanded="false" aria-controls=":Rnb6n6H1:" class="Item__LiBox-sc-yeql7o-0 itjSOb"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><div class="Box-sc-g0xbh4-0 cUxMoC"><span id=":Rnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Administer GitHub Actions</span><span class="Box-sc-g0xbh4-0 lmYNOb"><svg aria-hidden="true" focusable="false" class="Octicon-sc-9kayk9-0 daAEFx" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path></svg></span></div></div></button><div><ul id=":Rnb6n6H1:" aria-labelledby=":Rnb6n6:" class="Box-sc-g0xbh4-0 gMkIpo"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rdnb6n6:--label " id=":Rdnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/administering-github-actions/usage-limits-billing-and-administration"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rdnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Workflow billing & limits</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rlnb6n6:--label " id=":Rlnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/administering-github-actions/viewing-github-actions-metrics"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rlnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">GitHub Actions metrics</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rtnb6n6:--label " id=":Rtnb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 fuIgwR" href="/en/actions/administering-github-actions/sharing-workflows-secrets-and-runners-with-your-organization"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rtnb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Share workflows with your organization</span></div></a></li></ul></div></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a sx="[object Object]" tabindex="0" aria-labelledby=":Rpb6n6:--label " id=":Rpb6n6:" aria-current="false" class="Link__StyledLink-sc-14289xe-0 cJbOew" href="/en/actions/guides"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":Rpb6n6:--label" class="Box-sc-g0xbh4-0 bmseMA">Guides for GitHub Actions</span></div></a></li></ul></nav></div></div></div></nav></div><div class="flex-column flex-1 min-width-0"><main id="main-content" style="scroll-margin-top:5rem"><div class="container-xl px-3 px-md-6 my-4"><div class="d-none d-xxl-block mt-3 mr-auto width-full"><nav data-testid="breadcrumbs-in-article" class="f5 breadcrumbs Breadcrumbs_breadcrumbs__xAC4i" aria-label="Breadcrumb" data-container="breadcrumbs"><ul><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="GitHub Actions" class="Link--primary mr-2 color-fg-muted" href="/en/actions">GitHub Actions</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Write workflows" class="Link--primary mr-2 color-fg-muted" href="/en/actions/writing-workflows">Write workflows</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Choose what workflows do" class="Link--primary mr-2 color-fg-muted" href="/en/actions/writing-workflows/choosing-what-your-workflow-does">Choose what workflows do</a><span class="color-fg-muted pr-2">/</span></li><li class="d-inline-block"><a rel="" data-testid="breadcrumb-link" title="Cache dependencies" class="Link--primary mr-2 color-fg-muted d-none" href="/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows">Cache dependencies</a></li></ul></nav></div><div class="ArticleGridLayout_containerBox__lLLio"><div class="Box-sc-g0xbh4-0 eQiQea"><div class="d-flex flex-items-baseline flex-justify-between" data-container="title"><h1 id="title-h1" class="border-bottom-0">Caching dependencies to speed up workflows</h1></div></div><div id="article-intro" class="Box-sc-g0xbh4-0 ijSsTo f4 pb-4"><div class="f2 color-fg-muted mb-3 Lead_container__m3L5f _page-intro" data-container="lead" data-testid="lead" data-search="lead"><p>To make your workflows faster and more efficient, you can create and use caches for dependencies and other commonly reused files.</p></div></div><div data-container="toc" class="Box-sc-g0xbh4-0 giVcWX ArticleGridLayout_sidebarBox__Cj_03 border-bottom border-lg-0 pb-4 mb-5 pb-xl-0 mb-xl-0"><h2 id="in-this-article" class="Heading__StyledHeading-sc-1c1dgg0-0 bebFBv mb-1 ml-3" aria-label="In this article">In this article</h2><nav data-testid="minitoc" class="NavList__NavBox-sc-1c8ygf7-0 Minitocs_miniToc__NaGol my-2" aria-labelledby="in-this-article"><ul class="List__ListBox-sc-1x7olzq-0 hgjakc"><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R2dkteqn6:--label " id=":R2dkteqn6:" aria-current="false" href="#about-caching-workflow-dependencies" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2dkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">About caching workflow dependencies</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R2lkteqn6:--label " id=":R2lkteqn6:" aria-current="false" href="#comparing-artifacts-and-dependency-caching" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2lkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Comparing artifacts and dependency caching</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R2tkteqn6:--label " id=":R2tkteqn6:" aria-current="false" href="#restrictions-for-accessing-a-cache" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R2tkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Restrictions for accessing a cache</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R35kteqn6:--label " id=":R35kteqn6:" aria-current="false" href="#using-the-cache-action" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R35kteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Using the cache action</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R3dkteqn6:--label " id=":R3dkteqn6:" aria-current="false" href="#matching-a-cache-key" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3dkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Matching a cache key</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R3lkteqn6:--label " id=":R3lkteqn6:" aria-current="false" href="#usage-limits-and-eviction-policy" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3lkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Usage limits and eviction policy</span></div></a></li><li class="Item__LiBox-sc-yeql7o-0 lnYQME"><a tabindex="0" aria-labelledby=":R3tkteqn6:--label " id=":R3tkteqn6:" aria-current="false" href="#managing-caches" class="Link__StyledLink-sc-14289xe-0 cJbOew Minitocs_nested__JSAov"><div data-component="ActionList.Item--DividerContainer" class="Box-sc-g0xbh4-0 hROlum"><span id=":R3tkteqn6:--label" class="Box-sc-g0xbh4-0 bmseMA">Managing caches</span></div></a></li></ul></nav></div><div data-container="article" data-search="article-body" class="Box-sc-g0xbh4-0 kohLxz"><div id="article-contents"><div class="MarkdownContent_markdownBody__v5MYy markdown-body"><h2 id="about-caching-workflow-dependencies" tabindex="-1"><a class="heading-link" href="#about-caching-workflow-dependencies">About caching workflow dependencies<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>Workflow runs often reuse the same outputs or downloaded dependencies from one run to another. For example, package and dependency management tools such as Maven, Gradle, npm, and Yarn keep a local cache of downloaded dependencies.</p> <p>Jobs on GitHub-hosted runners start in a clean runner image and must download dependencies each time, causing increased network utilization, longer runtime, and increased cost. To help speed up the time it takes to recreate files like dependencies, GitHub can cache files you frequently use in workflows.</p> <p>To cache dependencies for a job, you can use GitHub's <a href="https://github.com/actions/cache"><code>cache</code> action</a>. The action creates and restores a cache identified by a unique key. Alternatively, if you are caching the package managers listed below, using their respective setup-* actions requires minimal configuration and will create and restore dependency caches for you.</p> <table><thead><tr><th scope="col">Package managers</th><th scope="col">setup-* action for caching</th></tr></thead><tbody><tr><td>npm, Yarn, pnpm</td><td><a href="https://github.com/actions/setup-node#caching-global-packages-data">setup-node</a></td></tr><tr><td>pip, pipenv, Poetry</td><td><a href="https://github.com/actions/setup-python#caching-packages-dependencies">setup-python</a></td></tr><tr><td>Gradle, Maven</td><td><a href="https://github.com/actions/setup-java#caching-packages-dependencies">setup-java</a></td></tr><tr><td>RubyGems</td><td><a href="https://github.com/ruby/setup-ruby#caching-bundle-install-automatically">setup-ruby</a></td></tr><tr><td>Go <code>go.sum</code></td><td><a href="https://github.com/actions/setup-go#caching-dependency-files-and-build-outputs">setup-go</a></td></tr><tr><td>.NET NuGet</td><td><a href="https://github.com/actions/setup-dotnet?tab=readme-ov-file#caching-nuget-packages">setup-dotnet</a></td></tr></tbody></table> <div class="ghd-alert ghd-alert-attention"><p class="ghd-alert-title"><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon mr-2" aria-hidden><path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path></svg>Warning</p> <p> Be mindful of the following when using caching with GitHub Actions:</p> <ul> <li>We recommend that you don't store any sensitive information in the cache. For example, sensitive information can include access tokens or login credentials stored in a file in the cache path. Also, command line interface (CLI) programs like <code>docker login</code> can save access credentials in a configuration file. Anyone with read access can create a pull request on a repository and access the contents of a cache. Forks of a repository can also create pull requests on the base branch and access caches on the base branch.</li> <li>When using self-hosted runners, caches from workflow runs are stored on GitHub-owned cloud storage. A customer-owned storage solution is only available with GitHub Enterprise Server.</li> </ul> </div> <h2 id="comparing-artifacts-and-dependency-caching" tabindex="-1"><a class="heading-link" href="#comparing-artifacts-and-dependency-caching">Comparing artifacts and dependency caching<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>Artifacts and caching are similar because they provide the ability to store files on GitHub, but each feature offers different use cases and cannot be used interchangeably.</p> <ul> <li>Use caching when you want to reuse files that don't change often between jobs or workflow runs, such as build dependencies from a package management system.</li> <li>Use artifacts when you want to save files produced by a job to view after a workflow run has ended, such as built binaries or build logs.</li> </ul> <p>For more information on workflow run artifacts, see "<a href="/en/actions/using-workflows/storing-workflow-data-as-artifacts" _originalHref="/actions/using-workflows/storing-workflow-data-as-artifacts">Storing and sharing data from a workflow</a>."</p> <h2 id="restrictions-for-accessing-a-cache" tabindex="-1"><a class="heading-link" href="#restrictions-for-accessing-a-cache">Restrictions for accessing a cache<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>Access restrictions provide cache isolation and security by creating a logical boundary between different branches or tags. Workflow runs can restore caches created in either the current branch or the default branch (usually <code>main</code>). If a workflow run is triggered for a pull request, it can also restore caches created in the base branch, including base branches of forked repositories. For example, if the branch <code>feature-b</code> has the base branch <code>feature-a</code>, a workflow run triggered on a pull request would have access to caches created in the default <code>main</code> branch, the base <code>feature-a</code> branch, and the current <code>feature-b</code> branch.</p> <p>Workflow runs cannot restore caches created for child branches or sibling branches. For example, a cache created for the child <code>feature-b</code> branch would not be accessible to a workflow run triggered on the parent <code>main</code> branch. Similarly, a cache created for the <code>feature-a</code> branch with the base <code>main</code> would not be accessible to its sibling <code>feature-c</code> branch with the base <code>main</code>. Workflow runs also cannot restore caches created for different tag names. For example, a cache created for the tag <code>release-a</code> with the base <code>main</code> would not be accessible to a workflow run triggered for the tag <code>release-b</code> with the base <code>main</code>.</p> <p>When a cache is created by a workflow run triggered on a pull request, the cache is created for the merge ref (<code>refs/pull/.../merge</code>). Because of this, the cache will have a limited scope and can only be restored by re-runs of the pull request. It cannot be restored by the base branch or other pull requests targeting that base branch.</p> <p>Multiple workflow runs in a repository can share caches. A cache created for a branch in a workflow run can be accessed and restored from another workflow run for the same repository and branch.</p> <h2 id="using-the-cache-action" tabindex="-1"><a class="heading-link" href="#using-the-cache-action">Using the <code>cache</code> action<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>The <a href="https://github.com/actions/cache"><code>cache</code> action</a> will attempt to restore a cache based on the <code>key</code> you provide. When the action finds a cache that <em>exactly</em> matches the key, the action restores the cached files to the <code>path</code> you configure. You can optionally provide a list of <code>restore-keys</code> to use in case the <code>key</code> doesn't match an existing cache. A list of <code>restore-keys</code> is useful when you are restoring a cache from another branch because <code>restore-keys</code> can <em>partially</em> match cache keys. For more information about matching <code>restore-keys</code>, see "<a href="#matching-a-cache-key">Matching a cache key</a>."</p> <p>If there is an exact match to the provided <code>key</code>, this is considered a cache hit. If no cache exactly matches the provided <code>key</code>, this is considered a cache miss. On a cache miss, the action automatically creates a new cache if the job completes successfully. The new cache will use the <code>key</code> you provided and contains the files you specify in <code>path</code>. For more information about how this is handled, see "<a href="#cache-hits-and-misses">Cache hits and misses</a>."</p> <p>You cannot change the contents of an existing cache. Instead, you can create a new cache with a new key.</p> <h3 id="input-parameters-for-the-cache-action" tabindex="-1"><a class="heading-link" href="#input-parameters-for-the-cache-action">Input parameters for the <code>cache</code> action<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <ul> <li> <p><code>key</code>: <strong>Required</strong> The key created when saving a cache and the key used to search for a cache. It can be any combination of variables, context values, static strings, and functions. Keys have a maximum length of 512 characters, and keys longer than the maximum length will cause the action to fail.</p> </li> <li> <p><code>path</code>: <strong>Required</strong> The path(s) on the runner to cache or restore.</p> <ul> <li> <p>You can specify a single path, or you can add multiple paths on separate lines. For example:</p> <pre><code class="hljs language-yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Cache</span> <span class="hljs-string">Gradle</span> <span class="hljs-string">packages</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/cache@v3</span> <span class="hljs-attr">with:</span> <span class="hljs-attr">path:</span> <span class="hljs-string">| ~/.gradle/caches ~/.gradle/wrapper </span></code></pre> </li> <li> <p>You can specify either directories or single files, and glob patterns are supported.</p> </li> <li> <p>You can specify absolute paths, or paths relative to the workspace directory.</p> </li> </ul> </li> <li> <p><code>restore-keys</code>: <strong>Optional</strong> A string containing alternative restore keys, with each restore key placed on a new line. If no cache hit occurs for <code>key</code>, these restore keys are used sequentially in the order provided to find and restore a cache. For example:</p> <pre><code class="hljs language-yaml"><span class="hljs-attr">restore-keys:</span> <span class="hljs-string">| npm-feature-${{ hashFiles('package-lock.json') }} npm-feature- npm- </span></code></pre> </li> <li> <p><code>enableCrossOsArchive</code>: <strong>Optional</strong> A boolean value that when enabled, allows Windows runners to save or restore caches independent of the operating system the cache was created on. If this parameter is not set, it defaults to <code>false</code>. For more information, see <a href="https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cross-os-cache">Cross OS cache</a> in the Actions Cache documentation.</p> </li> </ul> <h3 id="output-parameters-for-the-cache-action" tabindex="-1"><a class="heading-link" href="#output-parameters-for-the-cache-action">Output parameters for the <code>cache</code> action<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <ul> <li><code>cache-hit</code>: A boolean value to indicate an exact match was found for the key.</li> </ul> <h3 id="cache-hits-and-misses" tabindex="-1"><a class="heading-link" href="#cache-hits-and-misses">Cache hits and misses<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>When <code>key</code> exactly matches an existing cache, it's called a <em>cache hit</em>, and the action restores the cached files to the <code>path</code> directory.</p> <p>When <code>key</code> doesn't match an existing cache, it's called a <em>cache miss</em>, and a new cache is automatically created if the job completes successfully.</p> <p>When a cache miss occurs, the action also searches your specified <code>restore-keys</code> for any matches:</p> <ol> <li>If you provide <code>restore-keys</code>, the <code>cache</code> action sequentially searches for any caches that match the list of <code>restore-keys</code>. <ul> <li>When there is an exact match, the action restores the files in the cache to the <code>path</code> directory.</li> <li>If there are no exact matches, the action searches for partial matches of the restore keys. When the action finds a partial match, the most recent cache is restored to the <code>path</code> directory.</li> </ul> </li> <li>The <code>cache</code> action completes and the next step in the job runs.</li> <li>If the job completes successfully, the action automatically creates a new cache with the contents of the <code>path</code> directory.</li> </ol> <p>For a more detailed explanation of the cache matching process, see "<a href="#matching-a-cache-key">Matching a cache key</a>."</p> <h3 id="example-using-the-cache-action" tabindex="-1"><a class="heading-link" href="#example-using-the-cache-action">Example using the <code>cache</code> action<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>This example creates a new cache when the packages in <code>package-lock.json</code> file change, or when the runner's operating system changes. The cache key uses contexts and expressions to generate a key that includes the runner's operating system and a SHA-256 hash of the <code>package-lock.json</code> file.</p> <div class="code-example"><header class="d-flex flex-items-center flex-justify-between p-2 text-small rounded-top-1 border-top border-left border-right"><span class="flex-1">YAML</span><button class="js-btn-copy btn btn-sm tooltipped tooltipped-nw" aria-label="Copy YAML code to clipboard" data-clipboard="400808321"><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-copy" aria-hidden="true"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><pre hidden data-clipboard="400808321">name: Caching with npm on: push jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Cache node modules id: cache-npm uses: actions/cache@v3 env: cache-name: cache-node-modules with: # npm cache files are stored in `~/.npm` on Linux/macOS path: ~/.npm key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- - if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }} name: List the state of node modules continue-on-error: true run: npm list - name: Install dependencies run: npm install - name: Build run: npm run build - name: Test run: npm test </pre></header><pre><code class="hljs language-yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">Caching</span> <span class="hljs-string">with</span> <span class="hljs-string">npm</span> <span class="hljs-attr">on:</span> <span class="hljs-string">push</span> <span class="hljs-attr">jobs:</span> <span class="hljs-attr">build:</span> <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span> <span class="hljs-attr">steps:</span> <span class="hljs-bullet">-</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/checkout@v4</span> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Cache</span> <span class="hljs-string">node</span> <span class="hljs-string">modules</span> <span class="hljs-attr">id:</span> <span class="hljs-string">cache-npm</span> <span class="hljs-attr">uses:</span> <span class="hljs-string">actions/cache@v3</span> <span class="hljs-attr">env:</span> <span class="hljs-attr">cache-name:</span> <span class="hljs-string">cache-node-modules</span> <span class="hljs-attr">with:</span> <span class="hljs-comment"># npm cache files are stored in `~/.npm` on Linux/macOS</span> <span class="hljs-attr">path:</span> <span class="hljs-string">~/.npm</span> <span class="hljs-attr">key:</span> <span class="hljs-string">${{</span> <span class="hljs-string">runner.os</span> <span class="hljs-string">}}-build-${{</span> <span class="hljs-string">env.cache-name</span> <span class="hljs-string">}}-${{</span> <span class="hljs-string">hashFiles('**/package-lock.json')</span> <span class="hljs-string">}}</span> <span class="hljs-attr">restore-keys:</span> <span class="hljs-string">| ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- </span> <span class="hljs-bullet">-</span> <span class="hljs-attr">if:</span> <span class="hljs-string">${{</span> <span class="hljs-string">steps.cache-npm.outputs.cache-hit</span> <span class="hljs-type">!=</span> <span class="hljs-string">'true'</span> <span class="hljs-string">}}</span> <span class="hljs-attr">name:</span> <span class="hljs-string">List</span> <span class="hljs-string">the</span> <span class="hljs-string">state</span> <span class="hljs-string">of</span> <span class="hljs-string">node</span> <span class="hljs-string">modules</span> <span class="hljs-attr">continue-on-error:</span> <span class="hljs-literal">true</span> <span class="hljs-attr">run:</span> <span class="hljs-string">npm</span> <span class="hljs-string">list</span> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Install</span> <span class="hljs-string">dependencies</span> <span class="hljs-attr">run:</span> <span class="hljs-string">npm</span> <span class="hljs-string">install</span> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Build</span> <span class="hljs-attr">run:</span> <span class="hljs-string">npm</span> <span class="hljs-string">run</span> <span class="hljs-string">build</span> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Test</span> <span class="hljs-attr">run:</span> <span class="hljs-string">npm</span> <span class="hljs-string">test</span> </code></pre></div> <h3 id="using-contexts-to-create-cache-keys" tabindex="-1"><a class="heading-link" href="#using-contexts-to-create-cache-keys">Using contexts to create cache keys<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. For more information, see "<a href="/en/actions/learn-github-actions/contexts" _originalHref="/actions/learn-github-actions/contexts">Accessing contextual information about workflow runs</a>" and "<a href="/en/actions/learn-github-actions/expressions" _originalHref="/actions/learn-github-actions/expressions">Evaluate expressions in workflows and actions</a>."</p> <p>Using expressions to create a <code>key</code> allows you to automatically create a new cache when dependencies change.</p> <p>For example, you can create a <code>key</code> using an expression that calculates the hash of an npm <code>package-lock.json</code> file. So, when the dependencies that make up the <code>package-lock.json</code> file change, the cache key changes and a new cache is automatically created.</p> <pre><code class="hljs language-yaml"><span class="hljs-string">npm-${{</span> <span class="hljs-string">hashFiles('package-lock.json')</span> <span class="hljs-string">}}</span> </code></pre> <p>GitHub evaluates the expression <code>hash "package-lock.json"</code> to derive the final <code>key</code>.</p> <pre><code class="hljs language-yaml"><span class="hljs-string">npm-d5ea0750</span> </code></pre> <h3 id="using-the-output-of-the-cache-action" tabindex="-1"><a class="heading-link" href="#using-the-output-of-the-cache-action">Using the output of the <code>cache</code> action<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>You can use the output of the <code>cache</code> action to do something based on whether a cache hit or miss occurred. When an exact match is found for a cache for the specified <code>key</code>, the <code>cache-hit</code> output is set to <code>true</code>.</p> <p>In the example workflow above, there is a step that lists the state of the Node modules if a cache miss occurred:</p> <pre><code class="hljs language-yaml"><span class="hljs-bullet">-</span> <span class="hljs-attr">if:</span> <span class="hljs-string">${{</span> <span class="hljs-string">steps.cache-npm.outputs.cache-hit</span> <span class="hljs-type">!=</span> <span class="hljs-string">'true'</span> <span class="hljs-string">}}</span> <span class="hljs-attr">name:</span> <span class="hljs-string">List</span> <span class="hljs-string">the</span> <span class="hljs-string">state</span> <span class="hljs-string">of</span> <span class="hljs-string">node</span> <span class="hljs-string">modules</span> <span class="hljs-attr">continue-on-error:</span> <span class="hljs-literal">true</span> <span class="hljs-attr">run:</span> <span class="hljs-string">npm</span> <span class="hljs-string">list</span> </code></pre> <h2 id="matching-a-cache-key" tabindex="-1"><a class="heading-link" href="#matching-a-cache-key">Matching a cache key<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>The <code>cache</code> action first searches for cache hits for <code>key</code> and the cache <em>version</em> in the branch containing the workflow run. If there is no hit, it searches for <code>restore-keys</code> and the <em>version</em>. If there are still no hits in the current branch, the <code>cache</code> action retries same steps on the default branch. Please note that the scope restrictions apply during the search. For more information, see "<a href="#restrictions-for-accessing-a-cache">Restrictions for accessing a cache</a>."</p> <p>Cache version is a way to stamp a cache with metadata of the <code>path</code> and the compression tool used while creating the cache. This ensures that the consuming workflow run uniquely matches a cache it can actually decompress and use. For more information, see <a href="https://github.com/actions/cache#cache-version">Cache Version</a> in the Actions Cache documentation.</p> <p><code>restore-keys</code> allows you to specify a list of alternate restore keys to use when there is a cache miss on <code>key</code>. You can create multiple restore keys ordered from the most specific to least specific. The <code>cache</code> action searches the <code>restore-keys</code> in sequential order. When a key doesn't match directly, the action searches for keys prefixed with the restore key. If there are multiple partial matches for a restore key, the action returns the most recently created cache.</p> <h3 id="example-using-multiple-restore-keys" tabindex="-1"><a class="heading-link" href="#example-using-multiple-restore-keys">Example using multiple restore keys<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <pre><code class="hljs language-yaml"><span class="hljs-attr">restore-keys:</span> <span class="hljs-string">| npm-feature-${{ hashFiles('package-lock.json') }} npm-feature- npm- </span></code></pre> <p>The runner evaluates the expressions, which resolve to these <code>restore-keys</code>:</p> <pre><code class="hljs language-yaml"><span class="hljs-attr">restore-keys:</span> <span class="hljs-string">| npm-feature-d5ea0750 npm-feature- npm- </span></code></pre> <p>The restore key <code>npm-feature-</code> matches any key that starts with the string <code>npm-feature-</code>. For example, both of the keys <code>npm-feature-fd3052de</code> and <code>npm-feature-a9b253ff</code> match the restore key. The cache with the most recent creation date would be used. The keys in this example are searched in the following order:</p> <ol> <li><strong><code>npm-feature-d5ea0750</code></strong> matches a specific hash.</li> <li><strong><code>npm-feature-</code></strong> matches cache keys prefixed with <code>npm-feature-</code>.</li> <li><strong><code>npm-</code></strong> matches any keys prefixed with <code>npm-</code>.</li> </ol> <h4 id="example-of-search-priority" tabindex="-1"><a class="heading-link" href="#example-of-search-priority">Example of search priority<span class="heading-link-symbol" aria-hidden="true"></span></a></h4> <pre><code class="hljs language-yaml"><span class="hljs-attr">key:</span> <span class="hljs-string">npm-feature-d5ea0750</span> <span class="hljs-attr">restore-keys:</span> <span class="hljs-string">| npm-feature- npm- </span></code></pre> <p>For example, if a pull request contains a <code>feature</code> branch and targets the default branch (<code>main</code>), the action searches for <code>key</code> and <code>restore-keys</code> in the following order:</p> <ol> <li>Key <code>npm-feature-d5ea0750</code> in the <code>feature</code> branch</li> <li>Key <code>npm-feature-</code> in the <code>feature</code> branch</li> <li>Key <code>npm-</code> in the <code>feature</code> branch</li> <li>Key <code>npm-feature-d5ea0750</code> in the <code>main</code> branch</li> <li>Key <code>npm-feature-</code> in the <code>main</code> branch</li> <li>Key <code>npm-</code> in the <code>main</code> branch</li> </ol> <h2 id="usage-limits-and-eviction-policy" tabindex="-1"><a class="heading-link" href="#usage-limits-and-eviction-policy">Usage limits and eviction policy<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>GitHub will remove any cache entries that have not been accessed in over 7 days. There is no limit on the number of caches you can store, but the total size of all caches in a repository is limited to 10 GB. Once a repository has reached its maximum cache storage, the cache eviction policy will create space by deleting the oldest caches in the repository.</p> <p>If you exceed the limit, GitHub will save the new cache but will begin evicting caches until the total size is less than the repository limit. The cache eviction process may cause cache thrashing, where caches are created and deleted at a high frequency. To reduce this, you can review the caches for a repository and take corrective steps, such as removing caching from specific workflows. For more information, see "<a href="#managing-caches">Managing caches</a>."</p> <h2 id="managing-caches" tabindex="-1"><a class="heading-link" href="#managing-caches">Managing caches<span class="heading-link-symbol" aria-hidden="true"></span></a></h2> <p>To manage caches created from your workflows, you can:</p> <ul> <li>View a list of all cache entries for a repository.</li> <li>Filter and sort the list of caches using specific metadata such as cache size, creation time, or last accessed time.</li> <li>Delete cache entries from a repository.</li> <li>Monitor aggregate cache usage for repositories and organizations.</li> </ul> <p>There are multiple ways to manage caches for your repositories:</p> <ul> <li> <p>Using the GitHub web interface, as shown below.</p> </li> <li> <p>Using the REST API. For more information, see "<a href="/en/rest/actions/cache" _originalHref="/rest/actions/cache">REST API endpoints for GitHub Actions cache</a>."</p> </li> <li> <p>Installing the <code>gh cache</code> subcommand to manage your caches from the command line. For more information, see the <a href="https://cli.github.com/manual/gh_cache">GitHub CLI documentation</a>.</p> <div class="ghd-alert ghd-alert-accent"><p class="ghd-alert-title"><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon mr-2" aria-hidden><path d="M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg>Note</p> <p> If you are doing this manually, ensure you have version 2.32.0 or higher of the CLI installed.</p> </div> </li> </ul> <h3 id="viewing-cache-entries" tabindex="-1"><a class="heading-link" href="#viewing-cache-entries">Viewing cache entries<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>You can use the web interface to view a list of cache entries for a repository. In the cache list, you can see how much disk space each cache is using, when the cache was created, and when the cache was last used.</p> <ol> <li> <p>On GitHub, navigate to the main page of the repository.</p> </li> <li> <p>Under your repository name, click <strong><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-play" aria-hidden="true"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg> Actions</strong>.</p> <p><div class="procedural-image-wrapper"><picture><source srcset="/assets/cb-12958/mw-1440/images/help/repository/actions-tab-global-nav-update.webp 1x" type="image/webp"><img src="/assets/cb-12958/images/help/repository/actions-tab-global-nav-update.png" alt="Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline."></picture></div></p> </li> <li> <p>In the left sidebar, under the "Management" section, click <strong><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-cache" aria-hidden="true"><path d="M2.5 5.724V8c0 .248.238.7 1.169 1.159.874.43 2.144.745 3.62.822a.75.75 0 1 1-.078 1.498c-1.622-.085-3.102-.432-4.204-.975a5.565 5.565 0 0 1-.507-.28V12.5c0 .133.058.318.282.551.227.237.591.483 1.101.707 1.015.447 2.47.742 4.117.742.406 0 .802-.018 1.183-.052a.751.751 0 1 1 .134 1.494C8.89 15.98 8.45 16 8 16c-1.805 0-3.475-.32-4.721-.869-.623-.274-1.173-.619-1.579-1.041-.408-.425-.7-.964-.7-1.59v-9c0-.626.292-1.165.7-1.591.406-.42.956-.766 1.579-1.04C4.525.32 6.195 0 8 0c1.806 0 3.476.32 4.721.869.623.274 1.173.619 1.579 1.041.408.425.7.964.7 1.59 0 .626-.292 1.165-.7 1.591-.406.42-.956.766-1.578 1.04C11.475 6.68 9.805 7 8 7c-1.805 0-3.475-.32-4.721-.869a6.15 6.15 0 0 1-.779-.407Zm0-2.224c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 5.205 6.353 5.5 8 5.5c1.646 0 3.101-.295 4.118-.742.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55 0-.133-.058-.318-.282-.551-.227-.237-.591-.483-1.101-.707C11.102 1.795 9.647 1.5 8 1.5c-1.646 0-3.101.295-4.118.742-.508.224-.873.471-1.1.708-.224.232-.282.417-.282.55Z"></path><path d="M14.49 7.582a.375.375 0 0 0-.66-.313l-3.625 4.625a.375.375 0 0 0 .295.606h2.127l-.619 2.922a.375.375 0 0 0 .666.304l3.125-4.125A.375.375 0 0 0 15.5 11h-1.778l.769-3.418Z"></path></svg> Caches</strong>.</p> </li> <li> <p>Review the list of cache entries for the repository.</p> <ul> <li>To search for cache entries used for a specific branch, click the <strong>Branch</strong> dropdown menu and select a branch. The cache list will display all of the caches used for the selected branch.</li> <li>To search for cache entries with a specific cache key, use the syntax <code>key: key-name</code> in the <strong>Filter caches</strong> field. The cache list will display caches from all branches where the key was used.</li> </ul> <p><div class="procedural-image-wrapper"><picture><source srcset="/assets/cb-33052/mw-1440/images/help/repository/actions-cache-entry-list.webp 2x" type="image/webp"><img src="/assets/cb-33052/images/help/repository/actions-cache-entry-list.png" alt="Screenshot of the list of cache entries."></picture></div></p> </li> </ol> <h3 id="deleting-cache-entries" tabindex="-1"><a class="heading-link" href="#deleting-cache-entries">Deleting cache entries<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>Users with <code>write</code> access to a repository can use the GitHub web interface to delete cache entries.</p> <ol> <li> <p>On GitHub, navigate to the main page of the repository.</p> </li> <li> <p>Under your repository name, click <strong><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-play" aria-hidden="true"><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path></svg> Actions</strong>.</p> <p><div class="procedural-image-wrapper"><picture><source srcset="/assets/cb-12958/mw-1440/images/help/repository/actions-tab-global-nav-update.webp 1x" type="image/webp"><img src="/assets/cb-12958/images/help/repository/actions-tab-global-nav-update.png" alt="Screenshot of the tabs for the "github/docs" repository. The "Actions" tab is highlighted with an orange outline."></picture></div></p> </li> <li> <p>In the left sidebar, under the "Management" section, click <strong><svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-cache" aria-hidden="true"><path d="M2.5 5.724V8c0 .248.238.7 1.169 1.159.874.43 2.144.745 3.62.822a.75.75 0 1 1-.078 1.498c-1.622-.085-3.102-.432-4.204-.975a5.565 5.565 0 0 1-.507-.28V12.5c0 .133.058.318.282.551.227.237.591.483 1.101.707 1.015.447 2.47.742 4.117.742.406 0 .802-.018 1.183-.052a.751.751 0 1 1 .134 1.494C8.89 15.98 8.45 16 8 16c-1.805 0-3.475-.32-4.721-.869-.623-.274-1.173-.619-1.579-1.041-.408-.425-.7-.964-.7-1.59v-9c0-.626.292-1.165.7-1.591.406-.42.956-.766 1.579-1.04C4.525.32 6.195 0 8 0c1.806 0 3.476.32 4.721.869.623.274 1.173.619 1.579 1.041.408.425.7.964.7 1.59 0 .626-.292 1.165-.7 1.591-.406.42-.956.766-1.578 1.04C11.475 6.68 9.805 7 8 7c-1.805 0-3.475-.32-4.721-.869a6.15 6.15 0 0 1-.779-.407Zm0-2.224c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 5.205 6.353 5.5 8 5.5c1.646 0 3.101-.295 4.118-.742.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55 0-.133-.058-.318-.282-.551-.227-.237-.591-.483-1.101-.707C11.102 1.795 9.647 1.5 8 1.5c-1.646 0-3.101.295-4.118.742-.508.224-.873.471-1.1.708-.224.232-.282.417-.282.55Z"></path><path d="M14.49 7.582a.375.375 0 0 0-.66-.313l-3.625 4.625a.375.375 0 0 0 .295.606h2.127l-.619 2.922a.375.375 0 0 0 .666.304l3.125-4.125A.375.375 0 0 0 15.5 11h-1.778l.769-3.418Z"></path></svg> Caches</strong>.</p> </li> <li> <p>To the right of the cache entry you want to delete, click <svg version="1.1" width="16" height="16" viewBox="0 0 16 16" class="octicon octicon-trash" aria-label="Delete cache" role="img"><path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path></svg>.</p> <p><div class="procedural-image-wrapper"><picture><source srcset="/assets/cb-33457/mw-1440/images/help/repository/actions-cache-delete.webp 2x" type="image/webp"><img src="/assets/cb-33457/images/help/repository/actions-cache-delete.png" alt="Screenshot of the list of cache entries. A trash can icon, used to delete a cache, is highlighted with a dark orange outline."></picture></div></p> </li> </ol> <h3 id="force-deleting-cache-entries" tabindex="-1"><a class="heading-link" href="#force-deleting-cache-entries">Force deleting cache entries<span class="heading-link-symbol" aria-hidden="true"></span></a></h3> <p>Caches have branch scope restrictions in place, which means some caches have limited usage options. For more information on cache scope restrictions, see "<a href="#restrictions-for-accessing-a-cache">Restrictions for accessing a cache</a>," earlier in this article. If caches limited to a specific branch are using a lot of storage quota, it may cause caches from the <code>default</code> branch to be created and deleted at a high frequency.</p> <p>For example, a repository could have many new pull requests opened, each with their own caches that are restricted to that branch. These caches could take up the majority of the cache storage for that repository. Once a repository has reached its maximum cache storage, the cache eviction policy will create space by deleting the oldest caches in the repository. In order to prevent cache thrashing when this happens, you can set up workflows to delete caches on a faster cadence than the cache eviction policy will. You can use the GitHub CLI to delete caches for specific branches.</p> <p>The following example workflow uses <code>gh cache</code> to delete up to 100 caches created by a branch once a pull request is closed.</p> <p>To run the following example on cross-repository pull requests or pull requests from forks, you can trigger the workflow with the <code>pull_request_target</code> event. If you do use <code>pull_request_target</code> to trigger the workflow, there are security considerations to keep in mind. For more information, see "<a href="/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target" _originalHref="/actions/using-workflows/events-that-trigger-workflows#pull_request_target">Events that trigger workflows</a>."</p> <pre><code class="hljs language-yaml"><span class="hljs-attr">name:</span> <span class="hljs-string">cleanup</span> <span class="hljs-string">caches</span> <span class="hljs-string">by</span> <span class="hljs-string">a</span> <span class="hljs-string">branch</span> <span class="hljs-attr">on:</span> <span class="hljs-attr">pull_request:</span> <span class="hljs-attr">types:</span> <span class="hljs-bullet">-</span> <span class="hljs-string">closed</span> <span class="hljs-attr">jobs:</span> <span class="hljs-attr">cleanup:</span> <span class="hljs-attr">runs-on:</span> <span class="hljs-string">ubuntu-latest</span> <span class="hljs-attr">steps:</span> <span class="hljs-bullet">-</span> <span class="hljs-attr">name:</span> <span class="hljs-string">Cleanup</span> <span class="hljs-attr">run:</span> <span class="hljs-string">| echo "Fetching list of cache key" cacheKeysForPR=$(gh cache list --ref $BRANCH --limit 100 --json id --jq '.[].id') </span> <span class="hljs-comment">## Setting this to not fail the workflow while deleting cache keys.</span> <span class="hljs-string">set</span> <span class="hljs-string">+e</span> <span class="hljs-string">echo</span> <span class="hljs-string">"Deleting caches..."</span> <span class="hljs-string">for</span> <span class="hljs-string">cacheKey</span> <span class="hljs-string">in</span> <span class="hljs-string">$cacheKeysForPR</span> <span class="hljs-string">do</span> <span class="hljs-string">gh</span> <span class="hljs-string">cache</span> <span class="hljs-string">delete</span> <span class="hljs-string">$cacheKey</span> <span class="hljs-string">done</span> <span class="hljs-string">echo</span> <span class="hljs-string">"Done"</span> <span class="hljs-attr">env:</span> <span class="hljs-attr">GH_TOKEN:</span> <span class="hljs-string">${{</span> <span class="hljs-string">secrets.GITHUB_TOKEN</span> <span class="hljs-string">}}</span> <span class="hljs-attr">GH_REPO:</span> <span class="hljs-string">${{</span> <span class="hljs-string">github.repository</span> <span class="hljs-string">}}</span> <span class="hljs-attr">BRANCH:</span> <span class="hljs-string">refs/pull/${{</span> <span class="hljs-string">github.event.pull_request.number</span> <span class="hljs-string">}}/merge</span> </code></pre> <p>Alternatively, you can use the API to automatically list or delete all caches on your own cadence. For more information, see "<a href="/en/rest/actions/cache#about-the-cache-in-github-actions" _originalHref="/rest/actions/cache#about-the-cache-in-github-actions">REST API endpoints for GitHub Actions cache</a>."</p></div></div></div></div></div></main><footer data-container="footer"><section class="container-xl mt-lg-8 mt-6 px-3 px-md-6 no-print mx-auto"><h2 class="f3">Help and support</h2><div class="container-xl mx-auto py-6 py-lg-6 clearfix border-top border-color-secondary"><div class="float-left pr-4 mb-6 mb-xl-0 col-12 col-lg-6 col-xl-3"><form class="f5" data-testid="survey-form" aria-live="polite"><h3 id="survey-title" class="f4 mb-3">Did you find what you needed?</h3><input type="text" class="d-none" name="survey-token" value=""/><div class="mb-2" role="radiogroup" aria-labelledby="survey-title"><input class="Survey_visuallyHidden__Xh_nl Survey_customRadio__aNqUl" id="survey-yes" type="radio" name="survey-vote" aria-label="Yes" value="Y"/><label class="btn mr-1" for="survey-yes"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8.834.066c.763.087 1.5.295 2.01.884.505.581.656 1.378.656 2.3 0 .467-.087 1.119-.157 1.637L11.328 5h1.422c.603 0 1.174.085 1.668.333.508.254.911.679 1.137 1.2.453.998.438 2.447.188 4.316l-.04.306c-.105.79-.195 1.473-.313 2.033-.131.63-.315 1.209-.668 1.672C13.97 15.847 12.706 16 11 16c-1.848 0-3.234-.333-4.388-.653-.165-.045-.323-.09-.475-.133-.658-.186-1.2-.34-1.725-.415A1.75 1.75 0 0 1 2.75 16h-1A1.75 1.75 0 0 1 0 14.25v-7.5C0 5.784.784 5 1.75 5h1a1.75 1.75 0 0 1 1.514.872c.258-.105.59-.268.918-.508C5.853 4.874 6.5 4.079 6.5 2.75v-.5c0-1.202.994-2.337 2.334-2.184ZM4.5 13.3c.705.088 1.39.284 2.072.478l.441.125c1.096.305 2.334.598 3.987.598 1.794 0 2.28-.223 2.528-.549.147-.193.276-.505.394-1.07.105-.502.188-1.124.295-1.93l.04-.3c.25-1.882.189-2.933-.068-3.497a.921.921 0 0 0-.442-.48c-.208-.104-.52-.174-.997-.174H11c-.686 0-1.295-.577-1.206-1.336.023-.192.05-.39.076-.586.065-.488.13-.97.13-1.328 0-.809-.144-1.15-.288-1.316-.137-.158-.402-.304-1.048-.378C8.357 1.521 8 1.793 8 2.25v.5c0 1.922-.978 3.128-1.933 3.825a5.831 5.831 0 0 1-1.567.81ZM2.75 6.5h-1a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h1a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg> <!-- -->Yes</label><input class="Survey_visuallyHidden__Xh_nl Survey_customRadio__aNqUl" id="survey-no" type="radio" name="survey-vote" aria-label="No" value="N"/><label class="btn" for="survey-no"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M7.083 15.986c-.763-.087-1.499-.295-2.011-.884-.504-.581-.655-1.378-.655-2.299 0-.468.087-1.12.157-1.638l.015-.112H3.167c-.603 0-1.174-.086-1.669-.334a2.415 2.415 0 0 1-1.136-1.2c-.454-.998-.438-2.447-.188-4.316l.04-.306C.32 4.108.41 3.424.526 2.864c.132-.63.316-1.209.669-1.672C1.947.205 3.211.053 4.917.053c1.848 0 3.234.332 4.388.652l.474.133c.658.187 1.201.341 1.726.415a1.75 1.75 0 0 1 1.662-1.2h1c.966 0 1.75.784 1.75 1.75v7.5a1.75 1.75 0 0 1-1.75 1.75h-1a1.75 1.75 0 0 1-1.514-.872c-.259.105-.59.268-.919.508-.671.491-1.317 1.285-1.317 2.614v.5c0 1.201-.994 2.336-2.334 2.183Zm4.334-13.232c-.706-.089-1.39-.284-2.072-.479l-.441-.125c-1.096-.304-2.335-.597-3.987-.597-1.794 0-2.28.222-2.529.548-.147.193-.275.505-.393 1.07-.105.502-.188 1.124-.295 1.93l-.04.3c-.25 1.882-.19 2.933.067 3.497a.923.923 0 0 0 .443.48c.208.104.52.175.997.175h1.75c.685 0 1.295.577 1.205 1.335-.022.192-.049.39-.075.586-.066.488-.13.97-.13 1.329 0 .808.144 1.15.288 1.316.137.157.401.303 1.048.377.307.035.664-.237.664-.693v-.5c0-1.922.978-3.127 1.932-3.825a5.878 5.878 0 0 1 1.568-.809Zm1.75 6.798h1a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25h-1a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25Z"></path></svg> <!-- -->No</label></div><a rel="" class="f6 text-underline" target="_blank" href="/en/site-policy/privacy-policies/github-privacy-statement">Privacy policy</a></form></div><div class="float-left pr-4 mb-6 mb-xl-0 col-12 col-lg-6 col-xl-4 offset-xl-1"><div class="f5 contribution"><h3 class="f4 mb-3">Help us make these docs great!</h3><p class="max-w-xs color-fg-muted mb-3">All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.</p><a class="btn" href="https://github.com/github/docs/blob/main/content/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows.md"><svg aria-hidden="true" focusable="false" class="octicon mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path></svg>Make a contribution</a><p class="color-fg-muted f6 mt-2"><a class="text-underline" href="/contributing" target="_blank" rel="noopener">Learn how to contribute</a></p></div></div><div class="float-left pr-4 mb-6 mb-xl-0 col-12 col-lg-6 col-xl-3 offset-xl-1"><div><h3 class="mb-3 f4">Still need help?</h3><div class="mb-2"><a id="ask-community" href="https://github.com/orgs/community/discussions" class="text-underline"><svg aria-hidden="true" focusable="false" class="octicon mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path></svg>Ask the GitHub community</a></div><div><a id="support" href="https://support.github.com" class="text-underline"><svg aria-hidden="true" focusable="false" class="octicon mr-1" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Contact support</a></div></div></div></div></section><section class="container-xl px-3 mt-6 pb-8 px-md-6 color-fg-muted"><h2 class="f4 mb-2 col-12">Legal</h2><ul class="d-flex flex-wrap list-style-none"><li class="mr-3">© <!-- -->2024<!-- --> GitHub, Inc.</li><li class="mr-3"><a class="text-underline" href="/en/site-policy/github-terms/github-terms-of-service">Terms</a></li><li class="mr-3"><a class="text-underline" href="/en/site-policy/privacy-policies/github-privacy-statement">Privacy</a></li><li class="mr-3"><a class="text-underline" href="https://www.githubstatus.com/">Status</a></li><li class="mr-3"><a class="text-underline" href="https://github.com/pricing">Pricing</a></li><li class="mr-3"><a class="text-underline" href="https://services.github.com">Expert services</a></li><li class="mr-3"><a class="text-underline" href="https://github.blog">Blog</a></li></ul></section><div role="tooltip" class="position-fixed bottom-0 mb-4 right-0 mr-4 z-1 ScrollButton_transition200__rLxBo ScrollButton_opacity0__vjKQD"><button class="ghd-scroll-to-top tooltipped tooltipped-n tooltipped-no-delay btn circle border-1 d-flex flex-items-center flex-justify-center ScrollButton_customFocus__L3FsX" style="width:40px;height:40px" aria-label="Scroll to top"><svg aria-hidden="true" focusable="false" class="octicon octicon-chevron-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M3.22 10.53a.749.749 0 0 1 0-1.06l4.25-4.25a.749.749 0 0 1 1.06 0l4.25 4.25a.749.749 0 1 1-1.06 1.06L8 6.811 4.28 10.53a.749.749 0 0 1-1.06 0Z"></path></svg></button></div></footer></div></div><script type="application/json" id="__PRIMER_DATA_:R16:__">{"resolvedServerColorMode":"day"}</script></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"mainContext":{"breadcrumbs":[{"href":"/en/actions","title":"GitHub Actions"},{"href":"/en/actions/writing-workflows","title":"Write workflows"},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does","title":"Choose what workflows do"},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows","title":"Cache dependencies"}],"communityRedirect":{},"currentProduct":{"id":"actions","name":"{% data variables.product.prodname_actions %}","href":"/actions","dir":"content/actions","toc":"content/actions/index.md","wip":false,"hidden":false,"versions":["free-pro-team@latest","enterprise-cloud@latest","enterprise-server@3.15","enterprise-server@3.14","enterprise-server@3.13","enterprise-server@3.12","enterprise-server@3.11","enterprise-server@3.10"]},"currentProductName":"GitHub Actions","isHomepageVersion":false,"error":"","data":{"ui":{"alerts":{"NOTE":"Note","IMPORTANT":"Important","WARNING":"Warning","TIP":"Tip","CAUTION":"Caution"},"header":{"github_docs":"GitHub Docs","contact":"Contact","notices":{"release_candidate":" is currently available as a \u003ca href=\"/admin/overview/about-upgrades-to-new-releases\"\u003erelease candidate\u003c/a\u003e.","early_access":"📣 Please \u003cb\u003edo not share\u003c/b\u003e this URL publicly. This page contains content about a private preview feature.","release_notes_use_latest":"Please use the latest release for the latest security, performance, and bug fixes.","ghes_release_notes_upgrade_patch_only":"📣 This is not the \u003ca href=\"#{{ latestPatch }}\"\u003elatest patch release\u003c/a\u003e of Enterprise Server.","ghes_release_notes_upgrade_release_only":"📣 This is not the \u003ca href=\"/enterprise-server@{{ latestRelease }}/admin/release-notes\"\u003elatest release\u003c/a\u003e of Enterprise Server.","ghes_release_notes_upgrade_patch_and_release":"📣 This is not the \u003ca href=\"#{{ latestPatch }}\"\u003elatest patch release\u003c/a\u003e of this release series, and this is not the \u003ca href=\"/enterprise-server@{{ latestRelease }}/admin/release-notes\"\u003elatest release\u003c/a\u003e of Enterprise Server."},"sign_up_cta":"Sign up","menu":"Menu","go_home":"Home"},"search":{"description":"Enter a search term to find it in the GitHub Docs.","placeholder":"Search GitHub Docs","label":"Search GitHub Docs"},"survey":{"able_to_find":"Did you find what you needed?","yes":"Yes","no":"No","cancel":"Cancel","additional_feedback":"Can you tell us more about your rating? (Optional)","optional":"Optional","required":"Required","email_label":"Leave your email if we can contact you. (Optional)","email_validation":"Please enter a valid email address","send":"Send","feedback":"Thank you! We received your feedback.","not_support":"If you need a reply, please contact \u003ca href=\"https://support.github.com/\"\u003esupport\u003c/a\u003e.","privacy_policy":"Privacy policy","server_error":"Unable to process comment at the moment. Please try again."},"toc":{"getting_started":"Getting started","popular":"Popular","startHere":"Start here","whats_new":"What's new","videos":"Videos","all_changelogs":"All changelog posts"},"meta":{"default_description":"Get started, troubleshoot, and make the most of GitHub. Documentation for new users, developers, administrators, and all of GitHub's products."},"scroll_button":{"scroll_to_top":"Scroll to top"},"pages":{"article_version":"Article version","miniToc":"In this article","all_enterprise_releases":"All Enterprise Server releases","about_versions":"About versions","permissions_callout_title":"Who can use this feature?","video_from_transcript":"See video for this transcript"},"picker":{"language_picker_label":"Language","product_picker_default_text":"All products","version_picker_default_text":"Choose a version"},"footer":{"support_heading":"Help and support","legal_heading":"Legal","imprint":"Imprint","terms":"Terms","privacy":"Privacy","status":"Status","pricing":"Pricing","expert_services":"Expert services","blog":"Blog"},"contribution_cta":{"title":"Help us make these docs great!","body":"All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.","button":"Make a contribution","to_guidelines":"Learn how to contribute"},"support":{"still_need_help":"Still need help?","contact_support":"Contact support","ask_community":"Ask the GitHub community"},"rest":{"banner":{"api_versioned":"The REST API is now versioned.","api_version_info":"For more information, see \"\u003ca href=\"{{ versionWithApiVersion }}/rest/overview/api-versions\"\u003eAbout API versioning\u003c/a\u003e.\"","ghes_api_versioned":"After a site administrator upgrades your Enterprise Server instance to {{ firstGhesReleaseWithApiVersions.versionTitle }} or later, the REST API will be versioned. To learn how to find your instance's version, see \"\u003ca href=\"/{{ currentVersion }}/get-started/learning-about-github/about-versions-of-github-docs#github-enterprise-server\"\u003eAbout versions of GitHub Docs\u003c/a\u003e\".","redirect_notice":"We've recently moved some of the REST API documentation.","redirect_repo":"If you can't find what you're looking for, you might try the new {{ newRestPagesLinks }} REST API pages.","redirect_enterprise":"If you can't find what you're looking for, you might try the {{ actionsPageLink }} REST API page.","actions_api_title":"Actions"},"versioning":{"about_versions":"About REST API versions"},"overview":{"permissions":{"access":"Access","endpoints":"Endpoint","tokens":"Token types","additionalPermissions":"Additional permissions","uat":"UAT","iat":"IAT"}},"screen_reader_text_checkmark_icon":"Multiple permissions are required, or a different permission may be used. For more information about the permissions, see the documentation for this endpoint."},"domain_edit":{"name":"Domain name","edit":"Edit","edit_your":"Edit your domain name","experimental":"Experimental","your_name":"Your domain name","cancel":"Cancel","save":"Save","snippet_about":"Updating will include the new domain name in all code snippets across GitHub Docs.","learn_more":"Learn more","submission_failed":"Submission failed. Please try again in a minute."},"popovers":{"role_description":"hovercard link"}},"reusables":{},"variables":{"release_candidate":{"version":"enterprise-server@3.15"}}},"currentCategory":"writing-workflows","currentPathWithoutLanguage":"/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows","page":{"documentType":"article","type":"tutorial","title":"Caching dependencies to speed up workflows","fullTitle":"Caching dependencies to speed up workflows - GitHub Docs","topics":["Workflows"],"introPlainText":"To make your workflows faster and more efficient, you can create and use caches for dependencies and other commonly reused files.","applicableVersions":["free-pro-team@latest","enterprise-cloud@latest","enterprise-server@3.15","enterprise-server@3.14","enterprise-server@3.13","enterprise-server@3.12","enterprise-server@3.11","enterprise-server@3.10"],"hidden":false,"noEarlyAccessBanner":false},"enterpriseServerReleases":{"isOldestReleaseDeprecated":true,"oldestSupported":"3.10","nextDeprecationDate":"2024-09-25","supported":["3.15","3.14","3.13","3.12","3.11","3.10"]},"enterpriseServerVersions":["enterprise-server@3.15","enterprise-server@3.14","enterprise-server@3.13","enterprise-server@3.12","enterprise-server@3.11","enterprise-server@3.10"],"allVersions":{"free-pro-team@latest":{"version":"free-pro-team@latest","versionTitle":"Free, Pro, \u0026 Team","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28"},"enterprise-cloud@latest":{"version":"enterprise-cloud@latest","versionTitle":"Enterprise Cloud","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28"},"enterprise-server@3.15":{"version":"enterprise-server@3.15","versionTitle":"Enterprise Server 3.15","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.14":{"version":"enterprise-server@3.14","versionTitle":"Enterprise Server 3.14","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.13":{"version":"enterprise-server@3.13","versionTitle":"Enterprise Server 3.13","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.12":{"version":"enterprise-server@3.12","versionTitle":"Enterprise Server 3.12","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.11":{"version":"enterprise-server@3.11","versionTitle":"Enterprise Server 3.11","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true},"enterprise-server@3.10":{"version":"enterprise-server@3.10","versionTitle":"Enterprise Server 3.10","apiVersions":["2022-11-28"],"latestApiVersion":"2022-11-28","isGHES":true}},"currentVersion":"free-pro-team@latest","currentProductTree":null,"sidebarTree":{"href":"/en/actions","title":"GitHub Actions","childPages":[{"href":"/en/actions/about-github-actions","title":"About GitHub Actions","childPages":[{"href":"/en/actions/about-github-actions/understanding-github-actions","title":"Understand GitHub Actions","childPages":[]},{"href":"/en/actions/about-github-actions/about-continuous-integration-with-github-actions","title":"Continuous integration","childPages":[]},{"href":"/en/actions/about-github-actions/about-continuous-deployment-with-github-actions","title":"Continuous deployment","childPages":[]}]},{"href":"/en/actions/writing-workflows","title":"Write workflows","childPages":[{"href":"/en/actions/writing-workflows/quickstart","title":"Quickstart","childPages":[]},{"href":"/en/actions/writing-workflows/about-workflows","title":"About workflows","childPages":[]},{"href":"/en/actions/writing-workflows/using-workflow-templates","title":"Use workflow templates","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-when-your-workflow-runs","title":"Choose when workflows run","childPages":[{"href":"/en/actions/writing-workflows/choosing-when-your-workflow-runs/triggering-a-workflow","title":"Trigger a workflow","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-when-your-workflow-runs/using-conditions-to-control-job-execution","title":"Use conditions to control job execution","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-when-your-workflow-runs/events-that-trigger-workflows","title":"Events that trigger workflows","childPages":[]}]},{"href":"/en/actions/writing-workflows/choosing-where-your-workflow-runs","title":"Choose where workflows run","childPages":[{"href":"/en/actions/writing-workflows/choosing-where-your-workflow-runs/choosing-the-runner-for-a-job","title":"Choose the runner for a job","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-where-your-workflow-runs/running-jobs-in-a-container","title":"Run jobs in a container","childPages":[]}]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does","title":"Choose what workflows do","childPages":[{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/using-jobs-in-a-workflow","title":"Use jobs in a workflow","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/using-pre-written-building-blocks-in-your-workflow","title":"Find and customize actions","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/using-github-cli-in-workflows","title":"GitHub CLI in workflows","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions","title":"Workflow commands","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/adding-scripts-to-your-workflow","title":"Add scripts","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token","title":"Permissions for `GITHUB_TOKEN`","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/evaluate-expressions-in-workflows-and-actions","title":"Expressions","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables","title":"Variables","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/accessing-contextual-information-about-workflow-runs","title":"Contexts","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/passing-information-between-jobs","title":"Pass information","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/setting-a-default-shell-and-working-directory","title":"Set default values for jobs","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/using-environments-for-deployment","title":"Environments","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/control-the-concurrency-of-workflows-and-jobs","title":"Concurrency","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/running-variations-of-jobs-in-a-workflow","title":"Run job variations","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows","title":"Cache dependencies","childPages":[]},{"href":"/en/actions/writing-workflows/choosing-what-your-workflow-does/storing-and-sharing-data-from-a-workflow","title":"Store artifacts","childPages":[]}]},{"href":"/en/actions/writing-workflows/workflow-syntax-for-github-actions","title":"Workflow syntax","childPages":[]}]},{"href":"/en/actions/managing-workflow-runs-and-deployments","title":"Manage workflows and deployments","childPages":[{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs","title":"Manage workflow runs","childPages":[{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow","title":"Manually run a workflow","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/re-running-workflows-and-jobs","title":"Re-run workflows and jobs","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/canceling-a-workflow","title":"Cancel a workflow","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/disabling-and-enabling-a-workflow","title":"Disable \u0026 enable a workflow","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/skipping-workflow-runs","title":"Skip workflow runs","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/deleting-a-workflow-run","title":"Delete a workflow run","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/downloading-workflow-artifacts","title":"Download workflow artifacts","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/removing-workflow-artifacts","title":"Remove workflow artifacts","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/approving-workflow-runs-from-public-forks","title":"Approve public fork runs","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/approving-workflow-runs-from-private-forks","title":"Approve private fork runs","childPages":[]}]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-deployments","title":"Manage deployments","childPages":[{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-deployments/viewing-deployment-history","title":"Deployment history","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-deployments/managing-environments-for-deployment","title":"Manage environments","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-deployments/reviewing-deployments","title":"Review deployments","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-deployments/creating-custom-deployment-protection-rules","title":"Create custom protection rules","childPages":[]},{"href":"/en/actions/managing-workflow-runs-and-deployments/managing-deployments/configuring-custom-deployment-protection-rules","title":"Configure custom protection rules","childPages":[]}]}]},{"href":"/en/actions/sharing-automations","title":"Share automations","childPages":[{"href":"/en/actions/sharing-automations/avoiding-duplication","title":"Avoid duplication","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions","title":"Create actions","childPages":[{"href":"/en/actions/sharing-automations/creating-actions/about-custom-actions","title":"About custom actions","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/creating-a-docker-container-action","title":"Create a Docker container action","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/creating-a-javascript-action","title":"Create a JavaScript action","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/creating-a-composite-action","title":"Create a composite action","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/metadata-syntax-for-github-actions","title":"Metadata syntax","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/dockerfile-support-for-github-actions","title":"Dockerfile support","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/setting-exit-codes-for-actions","title":"Set exit codes","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/releasing-and-maintaining-actions","title":"Release and maintain actions","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/publishing-actions-in-github-marketplace","title":"Publish in GitHub Marketplace","childPages":[]},{"href":"/en/actions/sharing-automations/creating-actions/developing-a-third-party-cli-action","title":"CLI setup action","childPages":[]}]},{"href":"/en/actions/sharing-automations/reusing-workflows","title":"Reuse workflows","childPages":[]},{"href":"/en/actions/sharing-automations/creating-workflow-templates-for-your-organization","title":"Create workflow templates","childPages":[]},{"href":"/en/actions/sharing-automations/sharing-actions-and-workflows-from-your-private-repository","title":"Share from your private repository","childPages":[]},{"href":"/en/actions/sharing-automations/sharing-actions-and-workflows-with-your-organization","title":"Share with your organization","childPages":[]}]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows","title":"Monitor \u0026 troubleshoot","childPages":[{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows","title":"Monitor","childPages":[{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/about-monitoring-workflows","title":"About monitoring","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/notifications-for-workflow-runs","title":"Notifications for workflow runs","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/using-the-visualization-graph","title":"Visualization graph","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/viewing-workflow-run-history","title":"Workflow run history","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/viewing-job-execution-time","title":"View job execution time","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/adding-a-workflow-status-badge","title":"Add a status badge","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/monitoring-workflows/using-workflow-run-logs","title":"Workflow run logs","childPages":[]}]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows","title":"Troubleshoot","childPages":[{"href":"/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows/about-troubleshooting-workflows","title":"About troubleshooting","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows/enabling-debug-logging","title":"Enable debug logging","childPages":[]},{"href":"/en/actions/monitoring-and-troubleshooting-workflows/troubleshooting-workflows/working-with-support-for-github-actions","title":"Working with GitHub Support","childPages":[]}]}]},{"href":"/en/actions/using-github-hosted-runners","title":"GitHub-hosted runners","childPages":[{"href":"/en/actions/using-github-hosted-runners/using-github-hosted-runners","title":"About GitHub-hosted runners","childPages":[{"href":"/en/actions/using-github-hosted-runners/using-github-hosted-runners/about-github-hosted-runners","title":"About GitHub-hosted runners","childPages":[]},{"href":"/en/actions/using-github-hosted-runners/using-github-hosted-runners/monitoring-your-current-jobs","title":"Monitor current jobs","childPages":[]},{"href":"/en/actions/using-github-hosted-runners/using-github-hosted-runners/customizing-github-hosted-runners","title":"Customize runners","childPages":[]}]},{"href":"/en/actions/using-github-hosted-runners/using-larger-runners","title":"Using larger runners","childPages":[{"href":"/en/actions/using-github-hosted-runners/using-larger-runners/about-larger-runners","title":"About larger runners","childPages":[]},{"href":"/en/actions/using-github-hosted-runners/using-larger-runners/managing-larger-runners","title":"Manage larger runners","childPages":[]},{"href":"/en/actions/using-github-hosted-runners/using-larger-runners/controlling-access-to-larger-runners","title":"Control access to larger runners","childPages":[]},{"href":"/en/actions/using-github-hosted-runners/using-larger-runners/running-jobs-on-larger-runners","title":"Run jobs on larger runners","childPages":[]}]},{"href":"/en/actions/using-github-hosted-runners/connecting-to-a-private-network","title":"Private networking","childPages":[{"href":"/en/actions/using-github-hosted-runners/connecting-to-a-private-network/about-private-networking-with-github-hosted-runners","title":"About private networking","childPages":[]},{"href":"/en/actions/using-github-hosted-runners/connecting-to-a-private-network/using-an-api-gateway-with-oidc","title":"Using OIDC","childPages":[]},{"href":"/en/actions/using-github-hosted-runners/connecting-to-a-private-network/using-wireguard-to-create-a-network-overlay","title":"Using WireGuard","childPages":[]}]}]},{"href":"/en/actions/hosting-your-own-runners","title":"Self-hosted runners","childPages":[{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners","title":"Manage self-hosted runners","childPages":[{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners","title":"About self-hosted runners","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/adding-self-hosted-runners","title":"Add self-hosted runners","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/autoscaling-with-self-hosted-runners","title":"Autoscale self-hosted runners","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/running-scripts-before-or-after-a-job","title":"Run a script before or after a job","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/customizing-the-containers-used-by-jobs","title":"Customize containers used by jobs","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/configuring-the-self-hosted-runner-application-as-a-service","title":"Run the runner app as a service","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-a-proxy-server-with-self-hosted-runners","title":"Proxy servers","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-labels-with-self-hosted-runners","title":"Label runners","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/using-self-hosted-runners-in-a-workflow","title":"Use runners in a workflow","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/managing-access-to-self-hosted-runners-using-groups","title":"Manage access with runner groups","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/monitoring-and-troubleshooting-self-hosted-runners","title":"Monitor \u0026 troubleshoot","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners/removing-self-hosted-runners","title":"Remove self-hosted runners","childPages":[]}]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller","title":"Actions Runner Controller","childPages":[{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/about-actions-runner-controller","title":"About ARC","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/quickstart-for-actions-runner-controller","title":"Quickstart","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/authenticating-to-the-github-api","title":"Authenticating","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/deploying-runner-scale-sets-with-actions-runner-controller","title":"Deploying runner scale sets","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/using-actions-runner-controller-runners-in-a-workflow","title":"Using ARC in a workflow","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/troubleshooting-actions-runner-controller-errors","title":"Troubleshoot","childPages":[]},{"href":"/en/actions/hosting-your-own-runners/managing-self-hosted-runners-with-actions-runner-controller/about-support-for-actions-runner-controller","title":"About Support for ARC","childPages":[]}]}]},{"href":"/en/actions/security-for-github-actions","title":"Security","childPages":[{"href":"/en/actions/security-for-github-actions/security-guides","title":"Security guides","childPages":[{"href":"/en/actions/security-for-github-actions/security-guides/security-hardening-for-github-actions","title":"Security hardening","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-guides/using-secrets-in-github-actions","title":"Using secrets","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-guides/automatic-token-authentication","title":"Automatic token authentication","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-guides/using-githubs-security-features-to-secure-your-use-of-github-actions","title":"GitHub security features","childPages":[]}]},{"href":"/en/actions/security-for-github-actions/using-artifact-attestations","title":"Artifact attestations","childPages":[{"href":"/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-to-establish-provenance-for-builds","title":"Artifact attestations","childPages":[]},{"href":"/en/actions/security-for-github-actions/using-artifact-attestations/using-artifact-attestations-and-reusable-workflows-to-achieve-slsa-v1-build-level-3","title":"Attest with reusable workflows","childPages":[]},{"href":"/en/actions/security-for-github-actions/using-artifact-attestations/enforcing-artifact-attestations-with-a-kubernetes-admission-controller","title":"Artifact attestations Kubernetes admission controller","childPages":[]},{"href":"/en/actions/security-for-github-actions/using-artifact-attestations/verifying-attestations-offline","title":"Verifying attestations offline","childPages":[]}]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments","title":"Security harden deployments","childPages":[{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/about-security-hardening-with-openid-connect","title":"Security hardening with OpenID Connect","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-amazon-web-services","title":"OpenID Connect in AWS","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-azure","title":"OpenID Connect in Azure","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-google-cloud-platform","title":"OpenID Connect in Google Cloud Platform","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-hashicorp-vault","title":"OpenID Connect in HashiCorp Vault","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-jfrog","title":"OpenID Connect in JFrog","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-pypi","title":"OpenID Connect in PyPI","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/configuring-openid-connect-in-cloud-providers","title":"OpenID Connect in cloud providers","childPages":[]},{"href":"/en/actions/security-for-github-actions/security-hardening-your-deployments/using-openid-connect-with-reusable-workflows","title":"OpenID Connect with reusable workflows","childPages":[]}]}]},{"href":"/en/actions/use-cases-and-examples","title":"Use cases and examples","childPages":[{"href":"/en/actions/use-cases-and-examples/creating-an-example-workflow","title":"Create an example workflow","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing","title":"Build and test","childPages":[{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-go","title":"Build \u0026 test Go","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-ant","title":"Build \u0026 test Java \u0026 Ant","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-gradle","title":"Build \u0026 test Java \u0026 Gradle","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-java-with-maven","title":"Build \u0026 test Java with Maven","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-net","title":"Build \u0026 test .NET","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-nodejs","title":"Build \u0026 test Node.js","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-powershell","title":"Build \u0026 test PowerShell","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-python","title":"Build \u0026 test Python","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-ruby","title":"Build \u0026 test Ruby","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-swift","title":"Build \u0026 test Swift","childPages":[]},{"href":"/en/actions/use-cases-and-examples/building-and-testing/building-and-testing-xamarin-applications","title":"Build \u0026 test Xamarin apps","childPages":[]}]},{"href":"/en/actions/use-cases-and-examples/deploying","title":"Deployment","childPages":[{"href":"/en/actions/use-cases-and-examples/deploying/deploying-with-github-actions","title":"Deploy with GitHub Actions","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-nodejs-to-azure-app-service","title":"Deploying Node.js to Azure App Service","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-python-to-azure-app-service","title":"Deploying Python to Azure App Service","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-java-to-azure-app-service","title":"Deploying Java to Azure App Service","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-net-to-azure-app-service","title":"Deploying .NET to Azure App Service","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-php-to-azure-app-service","title":"Deploying PHP to Azure App Service","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-docker-to-azure-app-service","title":"Deploying Docker to Azure App Service","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app","title":"Deploying to Azure Static Web App","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-to-azure-kubernetes-service","title":"Deploying to Azure Kubernetes Service","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-to-amazon-elastic-container-service","title":"Deploy to Amazon ECS","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/deploying-to-google-kubernetes-engine","title":"Deploy to Google Kubernetes Engine","childPages":[]},{"href":"/en/actions/use-cases-and-examples/deploying/installing-an-apple-certificate-on-macos-runners-for-xcode-development","title":"Sign Xcode applications","childPages":[]}]},{"href":"/en/actions/use-cases-and-examples/publishing-packages","title":"Publish packages","childPages":[{"href":"/en/actions/use-cases-and-examples/publishing-packages/about-packaging-with-github-actions","title":"Packaging with GitHub Actions","childPages":[]},{"href":"/en/actions/use-cases-and-examples/publishing-packages/publishing-docker-images","title":"Publish Docker images","childPages":[]},{"href":"/en/actions/use-cases-and-examples/publishing-packages/publishing-java-packages-with-gradle","title":"Publish Java packages with Gradle","childPages":[]},{"href":"/en/actions/use-cases-and-examples/publishing-packages/publishing-java-packages-with-maven","title":"Publish Java packages with Maven","childPages":[]},{"href":"/en/actions/use-cases-and-examples/publishing-packages/publishing-nodejs-packages","title":"Publish Node.js packages","childPages":[]}]},{"href":"/en/actions/use-cases-and-examples/project-management","title":"Project management","childPages":[{"href":"/en/actions/use-cases-and-examples/project-management/using-github-actions-for-project-management","title":"Actions for project management","childPages":[]},{"href":"/en/actions/use-cases-and-examples/project-management/adding-labels-to-issues","title":"Add labels to issues","childPages":[]},{"href":"/en/actions/use-cases-and-examples/project-management/closing-inactive-issues","title":"Close inactive issues","childPages":[]},{"href":"/en/actions/use-cases-and-examples/project-management/commenting-on-an-issue-when-a-label-is-added","title":"Add label to comment on issue","childPages":[]},{"href":"/en/actions/use-cases-and-examples/project-management/scheduling-issue-creation","title":"Schedule issue creation","childPages":[]}]},{"href":"/en/actions/use-cases-and-examples/using-containerized-services","title":"Containerized services","childPages":[{"href":"/en/actions/use-cases-and-examples/using-containerized-services/about-service-containers","title":"About service containers","childPages":[]},{"href":"/en/actions/use-cases-and-examples/using-containerized-services/creating-postgresql-service-containers","title":"Create PostgreSQL service containers","childPages":[]},{"href":"/en/actions/use-cases-and-examples/using-containerized-services/creating-redis-service-containers","title":"Create Redis service containers","childPages":[]}]}]},{"href":"/en/actions/migrating-to-github-actions","title":"Migrate to GitHub Actions","childPages":[{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations","title":"Automated migrations","childPages":[{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/automating-migration-with-github-actions-importer","title":"Automate migration with GitHub Actions Importer","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/extending-github-actions-importer-with-custom-transformers","title":"Extending GitHub Actions Importer","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/supplemental-arguments-and-settings","title":"Supplemental arguments and settings","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-azure-devops-with-github-actions-importer","title":"Azure DevOps migration","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-bamboo-with-github-actions-importer","title":"Bamboo migration","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-bitbucket-pipelines-with-github-actions-importer","title":"Bitbucket Pipelines migration","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-circleci-with-github-actions-importer","title":"CircleCI migration","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-gitlab-with-github-actions-importer","title":"GitLab migration","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-jenkins-with-github-actions-importer","title":"Jenkins migration","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/using-github-actions-importer-to-automate-migrations/migrating-from-travis-ci-with-github-actions-importer","title":"Travis CI migration","childPages":[]}]},{"href":"/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions","title":"Manual migrations","childPages":[{"href":"/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-azure-pipelines-to-github-actions","title":"Migrate from Azure Pipelines","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-circleci-to-github-actions","title":"Migrate from CircleCI","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-gitlab-cicd-to-github-actions","title":"Migrate from GitLab CI/CD","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-jenkins-to-github-actions","title":"Migrate from Jenkins","childPages":[]},{"href":"/en/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-travis-ci-to-github-actions","title":"Migrate from Travis CI","childPages":[]}]}]},{"href":"/en/actions/administering-github-actions","title":"Administer GitHub Actions","childPages":[{"href":"/en/actions/administering-github-actions/usage-limits-billing-and-administration","title":"Workflow billing \u0026 limits","childPages":[]},{"href":"/en/actions/administering-github-actions/viewing-github-actions-metrics","title":"GitHub Actions metrics","childPages":[]},{"href":"/en/actions/administering-github-actions/sharing-workflows-secrets-and-runners-with-your-organization","title":"Share workflows with your organization","childPages":[]}]},{"href":"/en/actions/guides","title":"Guides for GitHub Actions","childPages":[]}]},"featureFlags":{},"nonEnterpriseDefaultVersion":"free-pro-team@latest","status":200,"fullUrl":"https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows","currentLayoutName":"default","relativePath":"actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows.md"},"articleContext":{"title":"Caching dependencies to speed up workflows","intro":"\u003cp\u003eTo make your workflows faster and more efficient, you can create and use caches for dependencies and other commonly reused files.\u003c/p\u003e","effectiveDate":"","renderedPage":"\u003ch2 id=\"about-caching-workflow-dependencies\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#about-caching-workflow-dependencies\"\u003eAbout caching workflow dependencies\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eWorkflow runs often reuse the same outputs or downloaded dependencies from one run to another. For example, package and dependency management tools such as Maven, Gradle, npm, and Yarn keep a local cache of downloaded dependencies.\u003c/p\u003e\n\u003cp\u003eJobs on GitHub-hosted runners start in a clean runner image and must download dependencies each time, causing increased network utilization, longer runtime, and increased cost. To help speed up the time it takes to recreate files like dependencies, GitHub can cache files you frequently use in workflows.\u003c/p\u003e\n\u003cp\u003eTo cache dependencies for a job, you can use GitHub's \u003ca href=\"https://github.com/actions/cache\"\u003e\u003ccode\u003ecache\u003c/code\u003e action\u003c/a\u003e. The action creates and restores a cache identified by a unique key. Alternatively, if you are caching the package managers listed below, using their respective setup-* actions requires minimal configuration and will create and restore dependency caches for you.\u003c/p\u003e\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\u003ctable\u003e\u003cthead\u003e\u003ctr\u003e\u003cth scope=\"col\"\u003ePackage managers\u003c/th\u003e\u003cth scope=\"col\"\u003esetup-* action for caching\u003c/th\u003e\u003c/tr\u003e\u003c/thead\u003e\u003ctbody\u003e\u003ctr\u003e\u003ctd\u003enpm, Yarn, pnpm\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://github.com/actions/setup-node#caching-global-packages-data\"\u003esetup-node\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003epip, pipenv, Poetry\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://github.com/actions/setup-python#caching-packages-dependencies\"\u003esetup-python\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eGradle, Maven\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://github.com/actions/setup-java#caching-packages-dependencies\"\u003esetup-java\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eRubyGems\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://github.com/ruby/setup-ruby#caching-bundle-install-automatically\"\u003esetup-ruby\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003eGo \u003ccode\u003ego.sum\u003c/code\u003e\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://github.com/actions/setup-go#caching-dependency-files-and-build-outputs\"\u003esetup-go\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e.NET NuGet\u003c/td\u003e\u003ctd\u003e\u003ca href=\"https://github.com/actions/setup-dotnet?tab=readme-ov-file#caching-nuget-packages\"\u003esetup-dotnet\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\n\u003cdiv class=\"ghd-alert ghd-alert-attention\"\u003e\u003cp class=\"ghd-alert-title\"\u003e\u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon mr-2\" aria-hidden\u003e\u003cpath d=\"M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z\"\u003e\u003c/path\u003e\u003c/svg\u003eWarning\u003c/p\u003e\n\u003cp\u003e\nBe mindful of the following when using caching with GitHub Actions:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eWe recommend that you don't store any sensitive information in the cache. For example, sensitive information can include access tokens or login credentials stored in a file in the cache path. Also, command line interface (CLI) programs like \u003ccode\u003edocker login\u003c/code\u003e can save access credentials in a configuration file. Anyone with read access can create a pull request on a repository and access the contents of a cache. Forks of a repository can also create pull requests on the base branch and access caches on the base branch.\u003c/li\u003e\n\u003cli\u003eWhen using self-hosted runners, caches from workflow runs are stored on GitHub-owned cloud storage. A customer-owned storage solution is only available with GitHub Enterprise Server.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/div\u003e\n\u003ch2 id=\"comparing-artifacts-and-dependency-caching\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#comparing-artifacts-and-dependency-caching\"\u003eComparing artifacts and dependency caching\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eArtifacts and caching are similar because they provide the ability to store files on GitHub, but each feature offers different use cases and cannot be used interchangeably.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eUse caching when you want to reuse files that don't change often between jobs or workflow runs, such as build dependencies from a package management system.\u003c/li\u003e\n\u003cli\u003eUse artifacts when you want to save files produced by a job to view after a workflow run has ended, such as built binaries or build logs.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eFor more information on workflow run artifacts, see \"\u003ca href=\"/en/actions/using-workflows/storing-workflow-data-as-artifacts\" _originalHref=\"/actions/using-workflows/storing-workflow-data-as-artifacts\"\u003eStoring and sharing data from a workflow\u003c/a\u003e.\"\u003c/p\u003e\n\u003ch2 id=\"restrictions-for-accessing-a-cache\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#restrictions-for-accessing-a-cache\"\u003eRestrictions for accessing a cache\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eAccess restrictions provide cache isolation and security by creating a logical boundary between different branches or tags.\nWorkflow runs can restore caches created in either the current branch or the default branch (usually \u003ccode\u003emain\u003c/code\u003e). If a workflow run is triggered for a pull request, it can also restore caches created in the base branch, including base branches of forked repositories. For example, if the branch \u003ccode\u003efeature-b\u003c/code\u003e has the base branch \u003ccode\u003efeature-a\u003c/code\u003e, a workflow run triggered on a pull request would have access to caches created in the default \u003ccode\u003emain\u003c/code\u003e branch, the base \u003ccode\u003efeature-a\u003c/code\u003e branch, and the current \u003ccode\u003efeature-b\u003c/code\u003e branch.\u003c/p\u003e\n\u003cp\u003eWorkflow runs cannot restore caches created for child branches or sibling branches. For example, a cache created for the child \u003ccode\u003efeature-b\u003c/code\u003e branch would not be accessible to a workflow run triggered on the parent \u003ccode\u003emain\u003c/code\u003e branch. Similarly, a cache created for the \u003ccode\u003efeature-a\u003c/code\u003e branch with the base \u003ccode\u003emain\u003c/code\u003e would not be accessible to its sibling \u003ccode\u003efeature-c\u003c/code\u003e branch with the base \u003ccode\u003emain\u003c/code\u003e. Workflow runs also cannot restore caches created for different tag names. For example, a cache created for the tag \u003ccode\u003erelease-a\u003c/code\u003e with the base \u003ccode\u003emain\u003c/code\u003e would not be accessible to a workflow run triggered for the tag \u003ccode\u003erelease-b\u003c/code\u003e with the base \u003ccode\u003emain\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eWhen a cache is created by a workflow run triggered on a pull request, the cache is created for the merge ref (\u003ccode\u003erefs/pull/.../merge\u003c/code\u003e). Because of this, the cache will have a limited scope and can only be restored by re-runs of the pull request. It cannot be restored by the base branch or other pull requests targeting that base branch.\u003c/p\u003e\n\u003cp\u003eMultiple workflow runs in a repository can share caches. A cache created for a branch in a workflow run can be accessed and restored from another workflow run for the same repository and branch.\u003c/p\u003e\n\u003ch2 id=\"using-the-cache-action\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#using-the-cache-action\"\u003eUsing the \u003ccode\u003ecache\u003c/code\u003e action\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe \u003ca href=\"https://github.com/actions/cache\"\u003e\u003ccode\u003ecache\u003c/code\u003e action\u003c/a\u003e will attempt to restore a cache based on the \u003ccode\u003ekey\u003c/code\u003e you provide. When the action finds a cache that \u003cem\u003eexactly\u003c/em\u003e matches the key, the action restores the cached files to the \u003ccode\u003epath\u003c/code\u003e you configure.\nYou can optionally provide a list of \u003ccode\u003erestore-keys\u003c/code\u003e to use in case the \u003ccode\u003ekey\u003c/code\u003e doesn't match an existing cache. A list of \u003ccode\u003erestore-keys\u003c/code\u003e is useful when you are restoring a cache from another branch because \u003ccode\u003erestore-keys\u003c/code\u003e can \u003cem\u003epartially\u003c/em\u003e match cache keys. For more information about matching \u003ccode\u003erestore-keys\u003c/code\u003e, see \"\u003ca href=\"#matching-a-cache-key\"\u003eMatching a cache key\u003c/a\u003e.\"\u003c/p\u003e\n\u003cp\u003eIf there is an exact match to the provided \u003ccode\u003ekey\u003c/code\u003e, this is considered a cache hit. If no cache exactly matches the provided \u003ccode\u003ekey\u003c/code\u003e, this is considered a cache miss. On a cache miss, the action automatically creates a new cache if the job completes successfully. The new cache will use the \u003ccode\u003ekey\u003c/code\u003e you provided and contains the files you specify in \u003ccode\u003epath\u003c/code\u003e. For more information about how this is handled, see \"\u003ca href=\"#cache-hits-and-misses\"\u003eCache hits and misses\u003c/a\u003e.\"\u003c/p\u003e\n\u003cp\u003eYou cannot change the contents of an existing cache. Instead, you can create a new cache with a new key.\u003c/p\u003e\n\u003ch3 id=\"input-parameters-for-the-cache-action\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#input-parameters-for-the-cache-action\"\u003eInput parameters for the \u003ccode\u003ecache\u003c/code\u003e action\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003ekey\u003c/code\u003e: \u003cstrong\u003eRequired\u003c/strong\u003e The key created when saving a cache and the key used to search for a cache. It can be any combination of variables, context values, static strings, and functions. Keys have a maximum length of 512 characters, and keys longer than the maximum length will cause the action to fail.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003epath\u003c/code\u003e: \u003cstrong\u003eRequired\u003c/strong\u003e The path(s) on the runner to cache or restore.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eYou can specify a single path, or you can add multiple paths on separate lines. For example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eCache\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eGradle\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003epackages\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003euses:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eactions/cache@v3\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ewith:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003epath:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e|\n ~/.gradle/caches\n ~/.gradle/wrapper\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eYou can specify either directories or single files, and glob patterns are supported.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eYou can specify absolute paths, or paths relative to the workspace directory.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003erestore-keys\u003c/code\u003e: \u003cstrong\u003eOptional\u003c/strong\u003e A string containing alternative restore keys, with each restore key placed on a new line. If no cache hit occurs for \u003ccode\u003ekey\u003c/code\u003e, these restore keys are used sequentially in the order provided to find and restore a cache. For example:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-attr\"\u003erestore-keys:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e|\n npm-feature-${{ hashFiles('package-lock.json') }}\n npm-feature-\n npm-\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eenableCrossOsArchive\u003c/code\u003e: \u003cstrong\u003eOptional\u003c/strong\u003e A boolean value that when enabled, allows Windows runners to save or restore caches independent of the operating system the cache was created on. If this parameter is not set, it defaults to \u003ccode\u003efalse\u003c/code\u003e. For more information, see \u003ca href=\"https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cross-os-cache\"\u003eCross OS cache\u003c/a\u003e in the Actions Cache documentation.\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"output-parameters-for-the-cache-action\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#output-parameters-for-the-cache-action\"\u003eOutput parameters for the \u003ccode\u003ecache\u003c/code\u003e action\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecache-hit\u003c/code\u003e: A boolean value to indicate an exact match was found for the key.\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"cache-hits-and-misses\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#cache-hits-and-misses\"\u003eCache hits and misses\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eWhen \u003ccode\u003ekey\u003c/code\u003e exactly matches an existing cache, it's called a \u003cem\u003ecache hit\u003c/em\u003e, and the action restores the cached files to the \u003ccode\u003epath\u003c/code\u003e directory.\u003c/p\u003e\n\u003cp\u003eWhen \u003ccode\u003ekey\u003c/code\u003e doesn't match an existing cache, it's called a \u003cem\u003ecache miss\u003c/em\u003e, and a new cache is automatically created if the job completes successfully.\u003c/p\u003e\n\u003cp\u003eWhen a cache miss occurs, the action also searches your specified \u003ccode\u003erestore-keys\u003c/code\u003e for any matches:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eIf you provide \u003ccode\u003erestore-keys\u003c/code\u003e, the \u003ccode\u003ecache\u003c/code\u003e action sequentially searches for any caches that match the list of \u003ccode\u003erestore-keys\u003c/code\u003e.\n\u003cul\u003e\n\u003cli\u003eWhen there is an exact match, the action restores the files in the cache to the \u003ccode\u003epath\u003c/code\u003e directory.\u003c/li\u003e\n\u003cli\u003eIf there are no exact matches, the action searches for partial matches of the restore keys. When the action finds a partial match, the most recent cache is restored to the \u003ccode\u003epath\u003c/code\u003e directory.\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eThe \u003ccode\u003ecache\u003c/code\u003e action completes and the next step in the job runs.\u003c/li\u003e\n\u003cli\u003eIf the job completes successfully, the action automatically creates a new cache with the contents of the \u003ccode\u003epath\u003c/code\u003e directory.\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003eFor a more detailed explanation of the cache matching process, see \"\u003ca href=\"#matching-a-cache-key\"\u003eMatching a cache key\u003c/a\u003e.\"\u003c/p\u003e\n\u003ch3 id=\"example-using-the-cache-action\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#example-using-the-cache-action\"\u003eExample using the \u003ccode\u003ecache\u003c/code\u003e action\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eThis example creates a new cache when the packages in \u003ccode\u003epackage-lock.json\u003c/code\u003e file change, or when the runner's operating system changes. The cache key uses contexts and expressions to generate a key that includes the runner's operating system and a SHA-256 hash of the \u003ccode\u003epackage-lock.json\u003c/code\u003e file.\u003c/p\u003e\n\u003cdiv class=\"code-example\"\u003e\u003cheader class=\"d-flex flex-items-center flex-justify-between p-2 text-small rounded-top-1 border-top border-left border-right\"\u003e\u003cspan class=\"flex-1\"\u003eYAML\u003c/span\u003e\u003cbutton class=\"js-btn-copy btn btn-sm tooltipped tooltipped-nw\" aria-label=\"Copy YAML code to clipboard\" data-clipboard=\"400808321\"\u003e\u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-copy\" aria-hidden=\"true\"\u003e\u003cpath d=\"M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z\"\u003e\u003c/path\u003e\u003cpath d=\"M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/button\u003e\u003cpre hidden data-clipboard=\"400808321\"\u003ename: Caching with npm\non: push\njobs:\n build:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Cache node modules\n id: cache-npm\n uses: actions/cache@v3\n env:\n cache-name: cache-node-modules\n with:\n # npm cache files are stored in `~/.npm` on Linux/macOS\n path: ~/.npm\n key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}\n restore-keys: |\n ${{ runner.os }}-build-${{ env.cache-name }}-\n ${{ runner.os }}-build-\n ${{ runner.os }}-\n\n - if: ${{ steps.cache-npm.outputs.cache-hit != 'true' }}\n name: List the state of node modules\n continue-on-error: true\n run: npm list\n\n - name: Install dependencies\n run: npm install\n\n - name: Build\n run: npm run build\n\n - name: Test\n run: npm test\n\u003c/pre\u003e\u003c/header\u003e\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eCaching\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ewith\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enpm\u003c/span\u003e\n\u003cspan class=\"hljs-attr\"\u003eon:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003epush\u003c/span\u003e\n\u003cspan class=\"hljs-attr\"\u003ejobs:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ebuild:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eruns-on:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eubuntu-latest\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003esteps:\u003c/span\u003e\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003euses:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eactions/checkout@v4\u003c/span\u003e\n\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eCache\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enode\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003emodules\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eid:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ecache-npm\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003euses:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eactions/cache@v3\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eenv:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ecache-name:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ecache-node-modules\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ewith:\u003c/span\u003e\n \u003cspan class=\"hljs-comment\"\u003e# npm cache files are stored in `~/.npm` on Linux/macOS\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003epath:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e~/.npm\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ekey:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003erunner.os\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}-build-${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eenv.cache-name\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}-${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ehashFiles('**/package-lock.json')\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003erestore-keys:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e|\n ${{ runner.os }}-build-${{ env.cache-name }}-\n ${{ runner.os }}-build-\n ${{ runner.os }}-\n\u003c/span\u003e\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003eif:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003esteps.cache-npm.outputs.cache-hit\u003c/span\u003e \u003cspan class=\"hljs-type\"\u003e!=\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e'true'\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eList\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ethe\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003estate\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eof\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enode\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003emodules\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003econtinue-on-error:\u003c/span\u003e \u003cspan class=\"hljs-literal\"\u003etrue\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003erun:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enpm\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003elist\u003c/span\u003e\n\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eInstall\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003edependencies\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003erun:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enpm\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003einstall\u003c/span\u003e\n\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eBuild\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003erun:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enpm\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003erun\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ebuild\u003c/span\u003e\n\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eTest\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003erun:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enpm\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003etest\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003ch3 id=\"using-contexts-to-create-cache-keys\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#using-contexts-to-create-cache-keys\"\u003eUsing contexts to create cache keys\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eA cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. For more information, see \"\u003ca href=\"/en/actions/learn-github-actions/contexts\" _originalHref=\"/actions/learn-github-actions/contexts\"\u003eAccessing contextual information about workflow runs\u003c/a\u003e\" and \"\u003ca href=\"/en/actions/learn-github-actions/expressions\" _originalHref=\"/actions/learn-github-actions/expressions\"\u003eEvaluate expressions in workflows and actions\u003c/a\u003e.\"\u003c/p\u003e\n\u003cp\u003eUsing expressions to create a \u003ccode\u003ekey\u003c/code\u003e allows you to automatically create a new cache when dependencies change.\u003c/p\u003e\n\u003cp\u003eFor example, you can create a \u003ccode\u003ekey\u003c/code\u003e using an expression that calculates the hash of an npm \u003ccode\u003epackage-lock.json\u003c/code\u003e file. So, when the dependencies that make up the \u003ccode\u003epackage-lock.json\u003c/code\u003e file change, the cache key changes and a new cache is automatically created.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-string\"\u003enpm-${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ehashFiles('package-lock.json')\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eGitHub evaluates the expression \u003ccode\u003ehash \"package-lock.json\"\u003c/code\u003e to derive the final \u003ccode\u003ekey\u003c/code\u003e.\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-string\"\u003enpm-d5ea0750\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"using-the-output-of-the-cache-action\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#using-the-output-of-the-cache-action\"\u003eUsing the output of the \u003ccode\u003ecache\u003c/code\u003e action\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eYou can use the output of the \u003ccode\u003ecache\u003c/code\u003e action to do something based on whether a cache hit or miss occurred. When an exact match is found for a cache for the specified \u003ccode\u003ekey\u003c/code\u003e, the \u003ccode\u003ecache-hit\u003c/code\u003e output is set to \u003ccode\u003etrue\u003c/code\u003e.\u003c/p\u003e\n\u003cp\u003eIn the example workflow above, there is a step that lists the state of the Node modules if a cache miss occurred:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003eif:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003esteps.cache-npm.outputs.cache-hit\u003c/span\u003e \u003cspan class=\"hljs-type\"\u003e!=\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e'true'\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eList\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ethe\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003estate\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eof\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enode\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003emodules\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003econtinue-on-error:\u003c/span\u003e \u003cspan class=\"hljs-literal\"\u003etrue\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003erun:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003enpm\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003elist\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"matching-a-cache-key\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#matching-a-cache-key\"\u003eMatching a cache key\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eThe \u003ccode\u003ecache\u003c/code\u003e action first searches for cache hits for \u003ccode\u003ekey\u003c/code\u003e and the cache \u003cem\u003eversion\u003c/em\u003e in the branch containing the workflow run. If there is no hit, it searches for \u003ccode\u003erestore-keys\u003c/code\u003e and the \u003cem\u003eversion\u003c/em\u003e. If there are still no hits in the current branch, the \u003ccode\u003ecache\u003c/code\u003e action retries same steps on the default branch. Please note that the scope restrictions apply during the search. For more information, see \"\u003ca href=\"#restrictions-for-accessing-a-cache\"\u003eRestrictions for accessing a cache\u003c/a\u003e.\"\u003c/p\u003e\n\u003cp\u003eCache version is a way to stamp a cache with metadata of the \u003ccode\u003epath\u003c/code\u003e and the compression tool used while creating the cache. This ensures that the consuming workflow run uniquely matches a cache it can actually decompress and use. For more information, see \u003ca href=\"https://github.com/actions/cache#cache-version\"\u003eCache Version\u003c/a\u003e in the Actions Cache documentation.\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003erestore-keys\u003c/code\u003e allows you to specify a list of alternate restore keys to use when there is a cache miss on \u003ccode\u003ekey\u003c/code\u003e. You can create multiple restore keys ordered from the most specific to least specific. The \u003ccode\u003ecache\u003c/code\u003e action searches the \u003ccode\u003erestore-keys\u003c/code\u003e in sequential order. When a key doesn't match directly, the action searches for keys prefixed with the restore key. If there are multiple partial matches for a restore key, the action returns the most recently created cache.\u003c/p\u003e\n\u003ch3 id=\"example-using-multiple-restore-keys\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#example-using-multiple-restore-keys\"\u003eExample using multiple restore keys\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-attr\"\u003erestore-keys:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e|\n npm-feature-${{ hashFiles('package-lock.json') }}\n npm-feature-\n npm-\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe runner evaluates the expressions, which resolve to these \u003ccode\u003erestore-keys\u003c/code\u003e:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-attr\"\u003erestore-keys:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e|\n npm-feature-d5ea0750\n npm-feature-\n npm-\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eThe restore key \u003ccode\u003enpm-feature-\u003c/code\u003e matches any key that starts with the string \u003ccode\u003enpm-feature-\u003c/code\u003e. For example, both of the keys \u003ccode\u003enpm-feature-fd3052de\u003c/code\u003e and \u003ccode\u003enpm-feature-a9b253ff\u003c/code\u003e match the restore key. The cache with the most recent creation date would be used. The keys in this example are searched in the following order:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003enpm-feature-d5ea0750\u003c/code\u003e\u003c/strong\u003e matches a specific hash.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003enpm-feature-\u003c/code\u003e\u003c/strong\u003e matches cache keys prefixed with \u003ccode\u003enpm-feature-\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003e\u003ccode\u003enpm-\u003c/code\u003e\u003c/strong\u003e matches any keys prefixed with \u003ccode\u003enpm-\u003c/code\u003e.\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch4 id=\"example-of-search-priority\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#example-of-search-priority\"\u003eExample of search priority\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-attr\"\u003ekey:\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003enpm-feature-d5ea0750\u003c/span\u003e\n\u003cspan class=\"hljs-attr\"\u003erestore-keys:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e|\n npm-feature-\n npm-\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eFor example, if a pull request contains a \u003ccode\u003efeature\u003c/code\u003e branch and targets the default branch (\u003ccode\u003emain\u003c/code\u003e), the action searches for \u003ccode\u003ekey\u003c/code\u003e and \u003ccode\u003erestore-keys\u003c/code\u003e in the following order:\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003eKey \u003ccode\u003enpm-feature-d5ea0750\u003c/code\u003e in the \u003ccode\u003efeature\u003c/code\u003e branch\u003c/li\u003e\n\u003cli\u003eKey \u003ccode\u003enpm-feature-\u003c/code\u003e in the \u003ccode\u003efeature\u003c/code\u003e branch\u003c/li\u003e\n\u003cli\u003eKey \u003ccode\u003enpm-\u003c/code\u003e in the \u003ccode\u003efeature\u003c/code\u003e branch\u003c/li\u003e\n\u003cli\u003eKey \u003ccode\u003enpm-feature-d5ea0750\u003c/code\u003e in the \u003ccode\u003emain\u003c/code\u003e branch\u003c/li\u003e\n\u003cli\u003eKey \u003ccode\u003enpm-feature-\u003c/code\u003e in the \u003ccode\u003emain\u003c/code\u003e branch\u003c/li\u003e\n\u003cli\u003eKey \u003ccode\u003enpm-\u003c/code\u003e in the \u003ccode\u003emain\u003c/code\u003e branch\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"usage-limits-and-eviction-policy\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#usage-limits-and-eviction-policy\"\u003eUsage limits and eviction policy\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eGitHub will remove any cache entries that have not been accessed in over 7 days. There is no limit on the number of caches you can store, but the total size of all caches in a repository is limited to 10 GB. Once a repository has reached its maximum cache storage, the cache eviction policy will create space by deleting the oldest caches in the repository.\u003c/p\u003e\n\u003cp\u003eIf you exceed the limit, GitHub will save the new cache but will begin evicting caches until the total size is less than the repository limit. The cache eviction process may cause cache thrashing, where caches are created and deleted at a high frequency. To reduce this, you can review the caches for a repository and take corrective steps, such as removing caching from specific workflows. For more information, see \"\u003ca href=\"#managing-caches\"\u003eManaging caches\u003c/a\u003e.\"\u003c/p\u003e\n\u003ch2 id=\"managing-caches\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#managing-caches\"\u003eManaging caches\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cp\u003eTo manage caches created from your workflows, you can:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eView a list of all cache entries for a repository.\u003c/li\u003e\n\u003cli\u003eFilter and sort the list of caches using specific metadata such as cache size, creation time, or last accessed time.\u003c/li\u003e\n\u003cli\u003eDelete cache entries from a repository.\u003c/li\u003e\n\u003cli\u003eMonitor aggregate cache usage for repositories and organizations.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eThere are multiple ways to manage caches for your repositories:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eUsing the GitHub web interface, as shown below.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUsing the REST API. For more information, see \"\u003ca href=\"/en/rest/actions/cache\" _originalHref=\"/rest/actions/cache\"\u003eREST API endpoints for GitHub Actions cache\u003c/a\u003e.\"\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eInstalling the \u003ccode\u003egh cache\u003c/code\u003e subcommand to manage your caches from the command line. For more information, see the \u003ca href=\"https://cli.github.com/manual/gh_cache\"\u003eGitHub CLI documentation\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"ghd-alert ghd-alert-accent\"\u003e\u003cp class=\"ghd-alert-title\"\u003e\u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon mr-2\" aria-hidden\u003e\u003cpath d=\"M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z\"\u003e\u003c/path\u003e\u003c/svg\u003eNote\u003c/p\u003e\n\u003cp\u003e\nIf you are doing this manually, ensure you have version 2.32.0 or higher of the CLI installed.\u003c/p\u003e\n\u003c/div\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"viewing-cache-entries\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#viewing-cache-entries\"\u003eViewing cache entries\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eYou can use the web interface to view a list of cache entries for a repository. In the cache list, you can see how much disk space each cache is using, when the cache was created, and when the cache was last used.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003eOn GitHub, navigate to the main page of the repository.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUnder your repository name, click \u003cstrong\u003e\u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-hidden=\"true\"\u003e\u003cpath d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"\u003e\u003c/path\u003e\u003c/svg\u003e Actions\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cdiv class=\"procedural-image-wrapper\"\u003e\u003cpicture\u003e\u003csource srcset=\"/assets/cb-12958/mw-1440/images/help/repository/actions-tab-global-nav-update.webp 1x\" type=\"image/webp\"\u003e\u003cimg src=\"/assets/cb-12958/images/help/repository/actions-tab-global-nav-update.png\" alt=\"Screenshot of the tabs for the \u0026#x22;github/docs\u0026#x22; repository. The \u0026#x22;Actions\u0026#x22; tab is highlighted with an orange outline.\"\u003e\u003c/picture\u003e\u003c/div\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the left sidebar, under the \"Management\" section, click \u003cstrong\u003e\u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-cache\" aria-hidden=\"true\"\u003e\u003cpath d=\"M2.5 5.724V8c0 .248.238.7 1.169 1.159.874.43 2.144.745 3.62.822a.75.75 0 1 1-.078 1.498c-1.622-.085-3.102-.432-4.204-.975a5.565 5.565 0 0 1-.507-.28V12.5c0 .133.058.318.282.551.227.237.591.483 1.101.707 1.015.447 2.47.742 4.117.742.406 0 .802-.018 1.183-.052a.751.751 0 1 1 .134 1.494C8.89 15.98 8.45 16 8 16c-1.805 0-3.475-.32-4.721-.869-.623-.274-1.173-.619-1.579-1.041-.408-.425-.7-.964-.7-1.59v-9c0-.626.292-1.165.7-1.591.406-.42.956-.766 1.579-1.04C4.525.32 6.195 0 8 0c1.806 0 3.476.32 4.721.869.623.274 1.173.619 1.579 1.041.408.425.7.964.7 1.59 0 .626-.292 1.165-.7 1.591-.406.42-.956.766-1.578 1.04C11.475 6.68 9.805 7 8 7c-1.805 0-3.475-.32-4.721-.869a6.15 6.15 0 0 1-.779-.407Zm0-2.224c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 5.205 6.353 5.5 8 5.5c1.646 0 3.101-.295 4.118-.742.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55 0-.133-.058-.318-.282-.551-.227-.237-.591-.483-1.101-.707C11.102 1.795 9.647 1.5 8 1.5c-1.646 0-3.101.295-4.118.742-.508.224-.873.471-1.1.708-.224.232-.282.417-.282.55Z\"\u003e\u003c/path\u003e\u003cpath d=\"M14.49 7.582a.375.375 0 0 0-.66-.313l-3.625 4.625a.375.375 0 0 0 .295.606h2.127l-.619 2.922a.375.375 0 0 0 .666.304l3.125-4.125A.375.375 0 0 0 15.5 11h-1.778l.769-3.418Z\"\u003e\u003c/path\u003e\u003c/svg\u003e Caches\u003c/strong\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eReview the list of cache entries for the repository.\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eTo search for cache entries used for a specific branch, click the \u003cstrong\u003eBranch\u003c/strong\u003e dropdown menu and select a branch. The cache list will display all of the caches used for the selected branch.\u003c/li\u003e\n\u003cli\u003eTo search for cache entries with a specific cache key, use the syntax \u003ccode\u003ekey: key-name\u003c/code\u003e in the \u003cstrong\u003eFilter caches\u003c/strong\u003e field. The cache list will display caches from all branches where the key was used.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cdiv class=\"procedural-image-wrapper\"\u003e\u003cpicture\u003e\u003csource srcset=\"/assets/cb-33052/mw-1440/images/help/repository/actions-cache-entry-list.webp 2x\" type=\"image/webp\"\u003e\u003cimg src=\"/assets/cb-33052/images/help/repository/actions-cache-entry-list.png\" alt=\"Screenshot of the list of cache entries.\"\u003e\u003c/picture\u003e\u003c/div\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"deleting-cache-entries\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#deleting-cache-entries\"\u003eDeleting cache entries\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eUsers with \u003ccode\u003ewrite\u003c/code\u003e access to a repository can use the GitHub web interface to delete cache entries.\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003eOn GitHub, navigate to the main page of the repository.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eUnder your repository name, click \u003cstrong\u003e\u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-play\" aria-hidden=\"true\"\u003e\u003cpath d=\"M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z\"\u003e\u003c/path\u003e\u003c/svg\u003e Actions\u003c/strong\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cdiv class=\"procedural-image-wrapper\"\u003e\u003cpicture\u003e\u003csource srcset=\"/assets/cb-12958/mw-1440/images/help/repository/actions-tab-global-nav-update.webp 1x\" type=\"image/webp\"\u003e\u003cimg src=\"/assets/cb-12958/images/help/repository/actions-tab-global-nav-update.png\" alt=\"Screenshot of the tabs for the \u0026#x22;github/docs\u0026#x22; repository. The \u0026#x22;Actions\u0026#x22; tab is highlighted with an orange outline.\"\u003e\u003c/picture\u003e\u003c/div\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eIn the left sidebar, under the \"Management\" section, click \u003cstrong\u003e\u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-cache\" aria-hidden=\"true\"\u003e\u003cpath d=\"M2.5 5.724V8c0 .248.238.7 1.169 1.159.874.43 2.144.745 3.62.822a.75.75 0 1 1-.078 1.498c-1.622-.085-3.102-.432-4.204-.975a5.565 5.565 0 0 1-.507-.28V12.5c0 .133.058.318.282.551.227.237.591.483 1.101.707 1.015.447 2.47.742 4.117.742.406 0 .802-.018 1.183-.052a.751.751 0 1 1 .134 1.494C8.89 15.98 8.45 16 8 16c-1.805 0-3.475-.32-4.721-.869-.623-.274-1.173-.619-1.579-1.041-.408-.425-.7-.964-.7-1.59v-9c0-.626.292-1.165.7-1.591.406-.42.956-.766 1.579-1.04C4.525.32 6.195 0 8 0c1.806 0 3.476.32 4.721.869.623.274 1.173.619 1.579 1.041.408.425.7.964.7 1.59 0 .626-.292 1.165-.7 1.591-.406.42-.956.766-1.578 1.04C11.475 6.68 9.805 7 8 7c-1.805 0-3.475-.32-4.721-.869a6.15 6.15 0 0 1-.779-.407Zm0-2.224c0 .133.058.318.282.551.227.237.591.483 1.101.707C4.898 5.205 6.353 5.5 8 5.5c1.646 0 3.101-.295 4.118-.742.508-.224.873-.471 1.1-.708.224-.232.282-.417.282-.55 0-.133-.058-.318-.282-.551-.227-.237-.591-.483-1.101-.707C11.102 1.795 9.647 1.5 8 1.5c-1.646 0-3.101.295-4.118.742-.508.224-.873.471-1.1.708-.224.232-.282.417-.282.55Z\"\u003e\u003c/path\u003e\u003cpath d=\"M14.49 7.582a.375.375 0 0 0-.66-.313l-3.625 4.625a.375.375 0 0 0 .295.606h2.127l-.619 2.922a.375.375 0 0 0 .666.304l3.125-4.125A.375.375 0 0 0 15.5 11h-1.778l.769-3.418Z\"\u003e\u003c/path\u003e\u003c/svg\u003e Caches\u003c/strong\u003e.\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eTo the right of the cache entry you want to delete, click \u003csvg version=\"1.1\" width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" class=\"octicon octicon-trash\" aria-label=\"Delete cache\" role=\"img\"\u003e\u003cpath d=\"M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z\"\u003e\u003c/path\u003e\u003c/svg\u003e.\u003c/p\u003e\n\u003cp\u003e\u003cdiv class=\"procedural-image-wrapper\"\u003e\u003cpicture\u003e\u003csource srcset=\"/assets/cb-33457/mw-1440/images/help/repository/actions-cache-delete.webp 2x\" type=\"image/webp\"\u003e\u003cimg src=\"/assets/cb-33457/images/help/repository/actions-cache-delete.png\" alt=\"Screenshot of the list of cache entries. A trash can icon, used to delete a cache, is highlighted with a dark orange outline.\"\u003e\u003c/picture\u003e\u003c/div\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch3 id=\"force-deleting-cache-entries\" tabindex=\"-1\"\u003e\u003ca class=\"heading-link\" href=\"#force-deleting-cache-entries\"\u003eForce deleting cache entries\u003cspan class=\"heading-link-symbol\" aria-hidden=\"true\"\u003e\u003c/span\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003cp\u003eCaches have branch scope restrictions in place, which means some caches have limited usage options. For more information on cache scope restrictions, see \"\u003ca href=\"#restrictions-for-accessing-a-cache\"\u003eRestrictions for accessing a cache\u003c/a\u003e,\" earlier in this article. If caches limited to a specific branch are using a lot of storage quota, it may cause caches from the \u003ccode\u003edefault\u003c/code\u003e branch to be created and deleted at a high frequency.\u003c/p\u003e\n\u003cp\u003eFor example, a repository could have many new pull requests opened, each with their own caches that are restricted to that branch. These caches could take up the majority of the cache storage for that repository. Once a repository has reached its maximum cache storage, the cache eviction policy will create space by deleting the oldest caches in the repository. In order to prevent cache thrashing when this happens, you can set up workflows to delete caches on a faster cadence than the cache eviction policy will. You can use the GitHub CLI to delete caches for specific branches.\u003c/p\u003e\n\u003cp\u003eThe following example workflow uses \u003ccode\u003egh cache\u003c/code\u003e to delete up to 100 caches created by a branch once a pull request is closed.\u003c/p\u003e\n\u003cp\u003eTo run the following example on cross-repository pull requests or pull requests from forks, you can trigger the workflow with the \u003ccode\u003epull_request_target\u003c/code\u003e event. If you do use \u003ccode\u003epull_request_target\u003c/code\u003e to trigger the workflow, there are security considerations to keep in mind. For more information, see \"\u003ca href=\"/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target\" _originalHref=\"/actions/using-workflows/events-that-trigger-workflows#pull_request_target\"\u003eEvents that trigger workflows\u003c/a\u003e.\"\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"hljs language-yaml\"\u003e\u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ecleanup\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ecaches\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eby\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ea\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ebranch\u003c/span\u003e\n\u003cspan class=\"hljs-attr\"\u003eon:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003epull_request:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003etypes:\u003c/span\u003e\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eclosed\u003c/span\u003e\n\n\u003cspan class=\"hljs-attr\"\u003ejobs:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003ecleanup:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eruns-on:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eubuntu-latest\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003esteps:\u003c/span\u003e\n \u003cspan class=\"hljs-bullet\"\u003e-\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003ename:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003eCleanup\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003erun:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e|\n echo \"Fetching list of cache key\"\n cacheKeysForPR=$(gh cache list --ref $BRANCH --limit 100 --json id --jq '.[].id')\n\u003c/span\u003e\n \u003cspan class=\"hljs-comment\"\u003e## Setting this to not fail the workflow while deleting cache keys.\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003eset\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e+e\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003eecho\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e\"Deleting caches...\"\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003efor\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ecacheKey\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ein\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e$cacheKeysForPR\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003edo\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003egh\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003ecache\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003edelete\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e$cacheKey\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003edone\u003c/span\u003e\n \u003cspan class=\"hljs-string\"\u003eecho\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e\"Done\"\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eenv:\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eGH_TOKEN:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003esecrets.GITHUB_TOKEN\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eGH_REPO:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003egithub.repository\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}\u003c/span\u003e\n \u003cspan class=\"hljs-attr\"\u003eBRANCH:\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003erefs/pull/${{\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003egithub.event.pull_request.number\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e}}/merge\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eAlternatively, you can use the API to automatically list or delete all caches on your own cadence. For more information, see \"\u003ca href=\"/en/rest/actions/cache#about-the-cache-in-github-actions\" _originalHref=\"/rest/actions/cache#about-the-cache-in-github-actions\"\u003eREST API endpoints for GitHub Actions cache\u003c/a\u003e.\"\u003c/p\u003e","miniTocItems":[{"contents":{"href":"#about-caching-workflow-dependencies","title":"About caching workflow dependencies"}},{"contents":{"href":"#comparing-artifacts-and-dependency-caching","title":"Comparing artifacts and dependency caching"}},{"contents":{"href":"#restrictions-for-accessing-a-cache","title":"Restrictions for accessing a cache"}},{"contents":{"href":"#using-the-cache-action","title":"Using the cache action"}},{"contents":{"href":"#matching-a-cache-key","title":"Matching a cache key"}},{"contents":{"href":"#usage-limits-and-eviction-policy","title":"Usage limits and eviction policy"}},{"contents":{"href":"#managing-caches","title":"Managing caches"}}],"permissions":"","includesPlatformSpecificContent":false,"includesToolSpecificContent":false,"defaultPlatform":"","defaultTool":"","product":"","productVideoUrl":"","currentLearningTrack":null,"detectedPlatforms":[],"detectedTools":[],"allTools":{"agents":"Agents","api":"API","azure_data_studio":"Azure Data Studio","bash":"Bash","cli":"GitHub CLI","codespaces":"Codespaces","curl":"curl","desktop":"Desktop","importer_cli":"GitHub Enterprise Importer CLI","javascript":"JavaScript","jetbrains":"JetBrains IDEs","jetbrains_beta":"JetBrains IDEs (Beta)","skillsets":"Skillsets","vimneovim":"Vim/Neovim","powershell":"PowerShell","visualstudio":"Visual Studio","vscode":"Visual Studio Code","webui":"Web browser","windowsterminal":"Windows Terminal","xcode":"Xcode"},"supportPortalVaIframeProps":{"supportPortalUrl":"https://support.github.com","vaFlowUrlParameter":""},"currentLayout":"default"}},"languagesContext":{"languages":{"en":{"name":"English","code":"en"},"zh":{"name":"Simplified Chinese","code":"zh","hreflang":"zh-Hans","nativeName":"简体中文"},"es":{"name":"Spanish","code":"es","nativeName":"Español"},"pt":{"name":"Portuguese","code":"pt","nativeName":"Português do Brasil"},"ru":{"name":"Russian","code":"ru","nativeName":"Русский"},"ja":{"name":"Japanese","code":"ja","nativeName":"日本語"},"fr":{"name":"French","code":"fr","nativeName":"Français"},"de":{"name":"German","code":"de","nativeName":"Deutsch"},"ko":{"name":"Korean","code":"ko","nativeName":"한국어"}}},"__N_SSP":true},"page":"/[versionId]/[productId]/[...restPage]","query":{"versionId":"free-pro-team@latest","productId":"actions","restPage":["writing-workflows","choosing-what-your-workflow-does","caching-dependencies-to-speed-up-workflows"]},"buildId":"LU1a4V_oZAzyRc7RojISL","isFallback":false,"isExperimentalCompile":false,"gssp":true,"appGip":true,"locale":"en","locales":["en","zh","es","pt","ru","ja","fr","de","ko"],"defaultLocale":"en","scriptLoader":[]}</script></body></html>