diff --git a/engineering fiston data cash flow b/engineering fiston data cash flow new file mode 100644 index 0000000..e11ee0a --- /dev/null +++ b/engineering fiston data cash flow @@ -0,0 +1,5997 @@ +Attachment engineering tshingombe data microsoft alu skill.docx added. +None selected + +Skip to content +Using Gmail with screen readers +27 of 4,479 +[t5h2i0tadi/engineering-tshing-binair-archfile-] Run failed at startup: CodeQL - main (671f5fc) +Inbox +tshingombe + +Mar 19, 2024, 9:49 PM (15 hours ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile-, Ci + +GitHub +[t5h2i0tadi/engineering-tshing-binair-archfile-] CodeQL workflow run + + +CodeQL: No jobs were run + +View workflow run + + + + +— +You are receiving this because you are subscribed to this thread. +Manage your GitHub Actions notifications + + +GitHub, Inc. ・88 Colin P Kelly Jr Street ・San Francisco, CA 94107 +tshingombe fiston + +12:53 PM (12 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +# This is a basic workflow to help you get started with Actions + +name: CI + +# Controls when the workflow will run +on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. +tshingombe fiston + +12:54 PM (11 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +Skip to content + + tshingombe-engineering / + engin-data-exam-tshingomb + + + + Settings + +Creating a new workflow file in engin-data-exam-tshingomb +Breadcrumbs + + engin-data-exam-tshingomb + /.github + /workflows + +/ +in +main + + +Indent mode +Indent sizeLine wrap mode +Editing blank.yml file contents +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 +24 +25 +26 +27 +28 +29 +30 +31 +32 +33 +34 +35 +36 +Use Control + Shift + m to toggle the tab key moving focus. Alternatively, use esc then tab to move to the next interactive element on the page. +Use Control + Space to trigger autocomplete in most situations. +Help Panel navigation + + Marketplace + Documentation + +/ Cache +Cache +By actions +v4.0.2 +4.2k + +Cache artifacts like dependencies and build outputs to improve workflow execution time +View full Marketplace listing +Installation + +Copy and paste the following snippet into your .yml file. +Version: v4.0.2 + + - name: Cache + uses: actions/cache@v4.0.2 + with: + # A list of files, directories, and wildcard patterns to cache and restore + path: + # An explicit key for restoring and saving the cache + key: + # An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case. + restore-keys: # optional + # The chunk size used to split up large files during upload, in bytes + upload-chunk-size: # optional + # An optional boolean when enabled, allows windows runners to save or restore caches that can be restored or saved respectively on other platforms + enableCrossOsArchive: # optional, default is false + # Fail the workflow if cache entry is not found + fail-on-cache-miss: # optional, default is false + # Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache + lookup-only: # optional, default is false + # Run the post step to save the cache even if another step before fails + save-always: # optional, default is false + + + Code + Issues + Pull requests + Actions + Projects + Security + Insights + +tshingombe fiston + +12:55 PM (10 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +Skip to content + + Marketplace + Actions + Cache + +GitHub Action +Cache +v4.0.2 Latest version +Cache action + +This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + +Tests +Documentation + +See "Caching dependencies to speed up workflows". +What's New +v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + +v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + +See the v2 README.md for older updates. +Usage +Pre-requisites + +Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + +If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + +If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. +Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + +Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + +Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + +See Skipping steps based on cache-hit for info on using this output +Cache scopes + +The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + +See Matching a cache key for more info. +Example cache workflow +Restoring and saving cache using a single action + +name: Caching Primes + +on: push + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + +The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. +Using a combination of restore and save actions + +name: Caching Primes + +on: push + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + +Caching Strategies + +With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. +Implementation Examples + +Every programming language and framework has its own way of caching. + +See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + +Creating a cache key + +A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + +For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + +Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + +See Using contexts to create cache keys +Cache Limits + +A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. +Skipping steps based on cache-hit + +Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + +Example: + +steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + +Cache Version + +Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + +Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. +Known practices and workarounds + +There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + +Windows environment variables + +Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. +Contributing + +We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. +License + +The scripts and documentation in this project are released under the MIT License +Verified creator + +GitHub has verified that this action was created by actions. + +Learn more about verified Actions. +Stars +Contributors +@vsvipul @kotewar @joshmgross @dhadka @lvpx @Phantsure @aiqiaoy @bishal-pdMSFT @takost @bethanyj28 @t-dedah @magnetikonline +Categories +Dependency management Utilities +Links +actions/cache Open issues 92 Pull requests 41 +Report abuse +Footer +© 2024 GitHub, Inc. +Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + +tshingombe fiston + +12:58 PM (7 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +Skip to content + + actions / + cache + + + Insights + +Owner avatar cache Public + + + + +actions/cache +Use this GitHub action with your project +Add this Action to an existing workflow or create a new one +t +Add file +Folders and files +Name +Last commit message + +Last commit date +Latest commit +bethanyj28bethanyj28 +Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss +0c45773 · +History + + +.devcontainer + +GA for granular cache (#1035) + + + +.github + +add release action + + + +.licenses/npm + +licensed cache + + + +.vscode + +Initial commit + + + +__tests__ + +Add test case for process exit + + + +dist + +Fix fail-on-cache-miss not working + + + +restore + +Update "only-" actions to node20 + + + +save + +Update "only-" actions to node20 + + + +src + +Fix fail-on-cache-miss not working + + + +.eslintrc.json + +Update eslint and prettier + + + +.gitattributes + +Fix line ending for windows test + + + +.gitignore + +test e2e during workflow (#185) + + + +.licensed.yml + +Add Licensed to attribute third party licenses + + + +.prettierrc.json + +Initial commit + + + +CODE_OF_CONDUCT.md + +Fix repo name in contact email (#41) + + + +CONTRIBUTING.md + +Update contributing.md + + + +LICENSE + +Initial commit + + + +README.md + +Update examples + + + +RELEASES.md + +Bump version + + + +action.yml + +Merge branch 'main' into main + + + +caching-strategies.md + +Fixing paths for OSes (#1101) + + + +examples.md + +Clarify that macos-latest image has bazelisk + + + +jest.config.js + +Resolve dependabot alerts + + + +package-lock.json + +Bump version + + + +package.json + +Bump version + + + +tips-and-workarounds.md + +Merge branch 'main' into pdotl-patch-1 + + + +tsconfig.json + +Initial commit + + +Repository files navigation + + + Security + +Cache action + +This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + +Tests +Documentation + +See "Caching dependencies to speed up workflows". +What's New +v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + +v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + +See the v2 README.md for older updates. +Usage +Pre-requisites + +Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + +If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + +If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. +Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + +Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + +Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + +See Skipping steps based on cache-hit for info on using this output +Cache scopes + +The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + +See Matching a cache key for more info. +Example cache workflow +Restoring and saving cache using a single action + +name: Caching Primes + +on: push + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + +The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. +Using a combination of restore and save actions + +name: Caching Primes + +on: push + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + +Caching Strategies + +With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. +Implementation Examples + +Every programming language and framework has its own way of caching. + +See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + +Creating a cache key + +A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + +For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + +Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + +See Using contexts to create cache keys +Cache Limits + +A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. +Skipping steps based on cache-hit + +Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + +Example: + +steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + +Cache Version + +Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + +Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. +Known practices and workarounds + +There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + +Windows environment variables + +Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. +Contributing + +We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. +License + +The scripts and documentation in this project are released under the MIT License +About + +Cache dependencies and build outputs in GitHub Actions +Resources +Readme +License +MIT license +Code of conduct +Code of conduct +Security policy +Security policy +Activity +Custom properties +Stars +4.2k stars +Watchers +85 watching +Forks +1.1k forks +Report repository +Releases 51 +v4.0.2 Latest +Mar 19, 2024 ++ 50 releases +Packages +No packages published +Used by 905k + + @remomax + @linhh-phv + @thibs12 + @NeptuneX-Aggregator + @tnikFi + @skyrych + @VincentKobz + @kanandev2024 + ++ 905,172 +Contributors 131 + + @vsvipul + @kotewar + @joshmgross + @dhadka + @lvpx + @Phantsure + @aiqiaoy + @bishal-pdMSFT + @takost + @bethanyj28 + @t-dedah + @magnetikonline + @ashwinsangem + @konradpabjan + ++ 117 contributors +Deployments 2 + + + releaseNewActionVersion March 19, 2024 17:55 + +Languages + + + JavaScript 0.9% + +Footer +© 2024 GitHub, Inc. +Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + +actions/cache: Cache dependencies and build outputs in GitHub Actions + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + README + Code of conduct + MIT license + TypeScript 97.9% + Shell 1.2% + + +On Wed, Mar 20, 2024 at 12:55 PM tshingombe fiston wrote: + + Skip to content + + Marketplace + Actions + Cache + + GitHub Action + Cache + v4.0.2 Latest version + Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + + Tests + Documentation + + See "Caching dependencies to speed up workflows". + What's New + v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + + v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the v2 README.md for older updates. + Usage + Pre-requisites + + Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + + If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + + If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. + Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + + Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + + Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + + See Skipping steps based on cache-hit for info on using this output + Cache scopes + + The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + + See Matching a cache key for more info. + Example cache workflow + Restoring and saving cache using a single action + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + + The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. + Using a combination of restore and save actions + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + Caching Strategies + + With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. + Implementation Examples + + Every programming language and framework has its own way of caching. + + See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + + Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + + See Using contexts to create cache keys + Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + Skipping steps based on cache-hit + + Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + + Example: + + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + + Cache Version + + Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + + Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + + Windows environment variables + + Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. + Contributing + + We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. + License + + The scripts and documentation in this project are released under the MIT License + Verified creator + + GitHub has verified that this action was created by actions. + + Learn more about verified Actions. + Stars + Contributors + @vsvipul @kotewar @joshmgross @dhadka @lvpx @Phantsure @aiqiaoy @bishal-pdMSFT @takost @bethanyj28 @t-dedah @magnetikonline + Categories + Dependency management Utilities + Links + actions/cache Open issues 92 Pull requests 41 + Report abuse + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + + On Wed, Mar 20, 2024 at 12:54 PM tshingombe fiston wrote: + + Skip to content + + tshingombe-engineering / + engin-data-exam-tshingomb + + + + Settings + + Creating a new workflow file in engin-data-exam-tshingomb + Breadcrumbs + + engin-data-exam-tshingomb + /.github + /workflows + + / + in + main + + + Indent mode + Indent sizeLine wrap mode + Editing blank.yml file contents + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + Use Control + Shift + m to toggle the tab key moving focus. Alternatively, use esc then tab to move to the next interactive element on the page. + Use Control + Space to trigger autocomplete in most situations. + Help Panel navigation + + Marketplace + Documentation + + / Cache + Cache + By actions + v4.0.2 + 4.2k + + Cache artifacts like dependencies and build outputs to improve workflow execution time + View full Marketplace listing + Installation + + Copy and paste the following snippet into your .yml file. + Version: v4.0.2 + + - name: Cache + uses: actions/cache@v4.0.2 + with: + # A list of files, directories, and wildcard patterns to cache and restore + path: + # An explicit key for restoring and saving the cache + key: + # An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case. + restore-keys: # optional + # The chunk size used to split up large files during upload, in bytes + upload-chunk-size: # optional + # An optional boolean when enabled, allows windows runners to save or restore caches that can be restored or saved respectively on other platforms + enableCrossOsArchive: # optional, default is false + # Fail the workflow if cache entry is not found + fail-on-cache-miss: # optional, default is false + # Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache + lookup-only: # optional, default is false + # Run the post step to save the cache even if another step before fails + save-always: # optional, default is false + + + Code + Issues + Pull requests + Actions + Projects + Security + Insights + + + On Wed, Mar 20, 2024 at 12:53 PM tshingombe fiston wrote: + + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + On Tue, Mar 19, 2024 at 9:49 PM tshingombe wrote: + + + GitHub + [t5h2i0tadi/engineering-tshing-binair-archfile-] CodeQL workflow run + + + CodeQL: No jobs were run + + View workflow run + + + + + — + You are receiving this because you are subscribed to this thread. + Manage your GitHub Actions notifications + + + GitHub, Inc. ・88 Colin P Kelly Jr Street ・San Francisco, CA 94107 + +... + +[Message clipped] View entire message +tshingombe fiston + +12:59 PM (6 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +# Cache action + +This action allows caching dependencies and build outputs to improve workflow execution time. + +>Two other actions are available in addition to the primary `cache` action: +>* [Restore action](./restore/README.md) +>* [Save action](./save/README.md) + +[![Tests](https://github.com/actions/cache/actions/workflows/workflow.yml/badge.svg)](https://github.com/actions/cache/actions/workflows/workflow.yml) + +## Documentation + +See ["Caching dependencies to speed up workflows"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows). + +## What's New + +### v4 + +* Updated to node 20 +* Added a `save-always` flag to save the cache even if a prior step fails + +### v3 + +* Added support for caching in GHES 3.5+. +* Fixed download issue for files > 2GB during restore. +* Updated the minimum runner version support from node 12 -> node 16. +* Fixed avoiding empty cache save when no files are available for caching. +* Fixed tar creation error while trying to create tar with path as `~/` home folder on `ubuntu-latest`. +* Fixed zstd failing on amazon linux 2.0 runners. +* Fixed cache not working with github workspace directory or current directory. +* Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. +* Fix zstd not working for windows on gnu tar in issues. +* Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MINS`. Default is 10 minutes. +* New actions are available for granular control over caches - [restore](restore/action.yml) and [save](save/action.yml). +* Support cross-os caching as an opt-in feature. See [Cross OS caching](./tips-and-workarounds.md#cross-os-cache) for more info. +* Added option to fail job on cache miss. See [Exit workflow on cache miss](./restore/README.md#exit-workflow-on-cache-miss) for more info. +* Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners +* Added option to lookup cache without downloading it. +* Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + +See the [v2 README.md](https://github.com/actions/cache/blob/v2/README.md) for older updates. + +## Usage + +### Pre-requisites + +Create a workflow `.yml` file in your repository's `.github/workflows` directory. An [example workflow](#example-cache-workflow) is available below. For more information, see the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file). + +If you are using this inside a container, a POSIX-compliant `tar` needs to be included and accessible from the execution path. + +If you are using a `self-hosted` Windows runner, `GNU tar` and `zstd` are required for [Cross-OS caching](https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cross-os-cache) to work. They are also recommended to be installed in general so the performance is on par with `hosted` Windows runners. + +### Inputs + +* `key` - An explicit key for a cache entry. See [creating a cache key](#creating-a-cache-key). +* `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns. +* `restore-keys` - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. +* `enableCrossOsArchive` - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: `false` +* `fail-on-cache-miss` - Fail the workflow if cache entry is not found. Default: `false` +* `lookup-only` - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: `false` + +#### Environment Variables + +* `SEGMENT_DOWNLOAD_TIMEOUT_MINS` - Segment download timeout (in minutes, default `10`) to abort download of the segment if not completed in the defined number of minutes. [Read more](https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout) + +### Outputs + +* `cache-hit` - A boolean value to indicate an exact match was found for the key. + + > **Note** `cache-hit` will only be set to `true` when a cache hit occurs for the exact `key` match. For a partial key match via `restore-keys` or a cache miss, it will be set to `false`. + +See [Skipping steps based on cache-hit](#skipping-steps-based-on-cache-hit) for info on using this output + +### Cache scopes + +The cache is scoped to the key, [version](#cache-version), and branch. The default branch cache is available to other branches. + +See [Matching a cache key](https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key) for more info. + +### Example cache workflow + +#### Restoring and saving cache using a single action + +```yaml +name: Caching Primes + +on: push + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers +``` + +The `cache` action provides a `cache-hit` output which is set to `true` when the cache is restored using the primary `key` and `false` when the cache is restored using `restore-keys` or no cache is restored. + +#### Using a combination of restore and save actions + +```yaml +name: Caching Primes + +on: push + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} +``` + +> **Note** +> You must use the `cache` or `restore` action in your workflow before you need to use the files that might be restored from the cache. If the provided `key` matches an existing cache, a new cache is not created and if the provided `key` doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + +## Caching Strategies + +With the introduction of the `restore` and `save` actions, a lot of caching use cases can now be achieved. Please see the [caching strategies](./caching-strategies.md) document for understanding how you can use the actions strategically to achieve the desired goal. + +## Implementation Examples + +Every programming language and framework has its own way of caching. + +See [Examples](examples.md) for a list of `actions/cache` implementations for use with: + +* [C# - NuGet](./examples.md#c---nuget) +* [Clojure - Lein Deps](./examples.md#clojure---lein-deps) +* [D - DUB](./examples.md#d---dub) +* [Deno](./examples.md#deno) +* [Elixir - Mix](./examples.md#elixir---mix) +* [Go - Modules](./examples.md#go---modules) +* [Haskell - Cabal](./examples.md#haskell---cabal) +* [Haskell - Stack](./examples.md#haskell---stack) +* [Java - Gradle](./examples.md#java---gradle) +* [Java - Maven](./examples.md#java---maven) +* [Node - npm](./examples.md#node---npm) +* [Node - Lerna](./examples.md#node---lerna) +* [Node - Yarn](./examples.md#node---yarn) +* [OCaml/Reason - esy](./examples.md#ocamlreason---esy) +* [PHP - Composer](./examples.md#php---composer) +* [Python - pip](./examples.md#python---pip) +* [Python - pipenv](./examples.md#python---pipenv) +* [R - renv](./examples.md#r---renv) +* [Ruby - Bundler](./examples.md#ruby---bundler) +* [Rust - Cargo](./examples.md#rust---cargo) +* [Scala - SBT](./examples.md#scala---sbt) +* [Swift, Objective-C - Carthage](./examples.md#swift-objective-c---carthage) +* [Swift, Objective-C - CocoaPods](./examples.md#swift-objective-c---cocoapods) +* [Swift - Swift Package Manager](./examples.md#swift---swift-package-manager) +* [Swift - Mint](./examples.md#swift---mint) + +## Creating a cache key + +A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + +For example, using the [`hashFiles`](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles) function allows you to create a new cache when dependencies change. + +```yaml + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} +``` + +Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + +```yaml + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} +``` + +See [Using contexts to create cache keys](https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#using-contexts-to-create-cache-keys) + +## Cache Limits + +A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + +## Skipping steps based on cache-hit + +Using the `cache-hit` output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the `hash` of the package file. + +Example: + +```yaml +steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh +``` + +> **Note** The `id` defined in `actions/cache` must match the `id` in the `if` statement (i.e. `steps.[ID].outputs.cache-hit`) + +## Cache Version + +Cache version is a hash [generated](https://github.com/actions/toolkit/blob/500d0b42fee2552ae9eeb5933091fe2fbf14e72d/packages/cache/src/internal/cacheHttpClient.ts#L73-L90) for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the `path` of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a `windows-latest` runner can't be restored on `ubuntu-latest` as cache `Version`s are different. + +> Pro tip: The [list caches](https://docs.github.com/en/rest/actions/cache#list-github-actions-caches-for-a-repository) API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + +
+ Example +The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + +```yaml +jobs: + build-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: ./generate-primes.sh -d prime-numbers + + - name: Cache Numbers + id: cache-numbers + uses: actions/cache@v4 + with: + path: numbers + key: primes + + - name: Generate Numbers + if: steps.cache-numbers.outputs.cache-hit != 'true' + run: ./generate-primes.sh -d numbers + + build-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: ./generate-primes -d prime-numbers +``` + +
+ +## Known practices and workarounds + +There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + +* [Cache segment restore timeout](./tips-and-workarounds.md#cache-segment-restore-timeout) +* [Update a cache](./tips-and-workarounds.md#update-a-cache) +* [Use cache across feature branches](./tips-and-workarounds.md#use-cache-across-feature-branches) +* [Cross OS cache](./tips-and-workarounds.md#cross-os-cache) +* [Force deletion of caches overriding default cache eviction policy](./tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy) + +### Windows environment variables + +Please note that Windows environment variables (like `%LocalAppData%`) will NOT be expanded by this action. Instead, prefer using `~` in your paths which will expand to the HOME directory. For example, instead of `%LocalAppData%`, use `~\AppData\Local`. For a list of supported default environment variables, see the [Learn GitHub Actions: Variables](https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables) page. + +## Contributing + +We would love for you to contribute to `actions/cache`. Pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + +## License + +The scripts and documentation in this project are released under the [MIT License](LICENSE) + +On Wed, Mar 20, 2024 at 12:58 PM tshingombe fiston wrote: + + Skip to content + + actions / + cache + + + Insights + + Owner avatar cache Public + + + + + actions/cache + Use this GitHub action with your project + Add this Action to an existing workflow or create a new one + t + Add file + Folders and files + Name + Last commit message + + Last commit date + Latest commit + bethanyj28bethanyj28 + Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss + 0c45773 · + History + + + .devcontainer + + GA for granular cache (#1035) + + + + .github + + add release action + + + + .licenses/npm + + licensed cache + + + + .vscode + + Initial commit + + + + __tests__ + + Add test case for process exit + + + + dist + + Fix fail-on-cache-miss not working + + + + restore + + Update "only-" actions to node20 + + + + save + + Update "only-" actions to node20 + + + + src + + Fix fail-on-cache-miss not working + + + + .eslintrc.json + + Update eslint and prettier + + + + .gitattributes + + Fix line ending for windows test + + + + .gitignore + + test e2e during workflow (#185) + + + + .licensed.yml + + Add Licensed to attribute third party licenses + + + + .prettierrc.json + + Initial commit + + + + CODE_OF_CONDUCT.md + + Fix repo name in contact email (#41) + + + + CONTRIBUTING.md + + Update contributing.md + + + + LICENSE + + Initial commit + + + + README.md + + Update examples + + + + RELEASES.md + + Bump version + + + + action.yml + + Merge branch 'main' into main + + + + caching-strategies.md + + Fixing paths for OSes (#1101) + + + + examples.md + + Clarify that macos-latest image has bazelisk + + + + jest.config.js + + Resolve dependabot alerts + + + + package-lock.json + + Bump version + + + + package.json + + Bump version + + + + tips-and-workarounds.md + + Merge branch 'main' into pdotl-patch-1 + + + + tsconfig.json + + Initial commit + + + Repository files navigation + + + Security + + Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + + Tests + Documentation + + See "Caching dependencies to speed up workflows". + What's New + v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + + v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the v2 README.md for older updates. + Usage + Pre-requisites + + Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + + If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + + If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. + Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + + Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + + Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + + See Skipping steps based on cache-hit for info on using this output + Cache scopes + + The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + + See Matching a cache key for more info. + Example cache workflow + Restoring and saving cache using a single action + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + + The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. + Using a combination of restore and save actions + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + Caching Strategies + + With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. + Implementation Examples + + Every programming language and framework has its own way of caching. + + See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + + Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + + See Using contexts to create cache keys + Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + Skipping steps based on cache-hit + + Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + + Example: + + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + + Cache Version + + Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + + Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + + Windows environment variables + + Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. + Contributing + + We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. + License + + The scripts and documentation in this project are released under the MIT License + About + + Cache dependencies and build outputs in GitHub Actions + Resources + Readme + License + MIT license + Code of conduct + Code of conduct + Security policy + Security policy + Activity + Custom properties + Stars + 4.2k stars + Watchers + 85 watching + Forks + 1.1k forks + Report repository + Releases 51 + v4.0.2 Latest + Mar 19, 2024 + + 50 releases + Packages + No packages published + Used by 905k + + @remomax + @linhh-phv + @thibs12 + @NeptuneX-Aggregator + @tnikFi + @skyrych + @VincentKobz + @kanandev2024 + + + 905,172 + Contributors 131 + + @vsvipul + @kotewar + @joshmgross + @dhadka + @lvpx + @Phantsure + @aiqiaoy + @bishal-pdMSFT + @takost + @bethanyj28 + @t-dedah + @magnetikonline + @ashwinsangem + @konradpabjan + + + 117 contributors + Deployments 2 + + + releaseNewActionVersion March 19, 2024 17:55 + + Languages + + + JavaScript 0.9% + + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + actions/cache: Cache dependencies and build outputs in GitHub Actions + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + README + Code of conduct + MIT license + TypeScript 97.9% + Shell 1.2% + + + On Wed, Mar 20, 2024 at 12:55 PM tshingombe fiston wrote: + + Skip to content + + Marketplace + Actions + Cache + + GitHub Action + Cache + v4.0.2 Latest version + Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + + Tests + Documentation + + See "Caching dependencies to speed up workflows". + What's New + v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + + v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the v2 README.md for older updates. + Usage + Pre-requisites + + Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + + If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + + If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. + Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + + Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + + Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + + See Skipping steps based on cache-hit for info on using this output + Cache scopes + + The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + + See Matching a cache key for more info. + Example cache workflow + Restoring and saving cache using a single action + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + + The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. + Using a combination of restore and save actions + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + Caching Strategies + + With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. + Implementation Examples + + Every programming language and framework has its own way of caching. + + See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + + Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + + See Using contexts to create cache keys + Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + Skipping steps based on cache-hit + + Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + + Example: + + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + + Cache Version + + Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + + Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + + Windows environment variables + + Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. + Contributing + + We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. + License + + The scripts and documentation in this project are released under the MIT License + Verified creator + + GitHub has verified that this action was created by actions. + + Learn more about verified Actions. + Stars + Contributors + @vsvipul @kotewar @joshmgross @dhadka @lvpx @Phantsure @aiqiaoy @bishal-pdMSFT @takost @bethanyj28 @t-dedah @magnetikonline + Categories + Dependency management Utilities + Links + actions/cache Open issues 92 Pull requests 41 + Report abuse + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + + On Wed, Mar 20, 2024 at 12:54 PM tshingombe fiston wrote: + + Skip to content + + tshingombe-engineering / + engin-data-exam-tshingomb + + + + Settings + + Creating a new workflow file in engin-data-exam-tshingomb + Breadcrumbs + + engin-data-exam-tshingomb + /.github + /workflows + + / + in + main + + + Indent mode + Indent sizeLine wrap mode + Editing blank.yml file contents + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + Use Control + Shift + m to toggle the tab key moving focus. Alternatively, use esc then tab to move to the next interactive element on the page. + Use Control + Space to trigger autocomplete in most situations. + Help Panel navigation + + Marketplace + Documentation + + / Cache + Cache + By actions + v4.0.2 + 4.2k + + Cache artifacts like dependencies and build outputs to improve workflow execution time + View full Marketplace listing + Installation + + Copy and paste the following snippet into your .yml file. + Version: v4.0.2 + + - name: Cache + uses: actions/cache@v4.0.2 + with: + # A list of files, directories, and wildcard patterns to cache and restore + path: + # An explicit key for restoring and saving the cache + key: + # An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case. + restore-keys: # optional + # The chunk size used to split up large files during upload, in bytes + upload-chunk-size: # optional + # An optional boolean when enabled, allows windows runners to save or restore caches that can be restored or saved respectively on other platforms + enableCrossOsArchive: # optional, default is false + # Fail the workflow if cache entry is not found + fail-on-cache-miss: # optional, default is false + # Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache + lookup-only: # optional, default is false + # Run the post step to save the cache even if another step before fails + save-always: # optional, default is false + + + Code + Issues + Pull requests + Actions + Projects + Security + Insights + + + On Wed, Mar 20, 2024 at 12:53 PM tshingombe fiston wrote: + + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + On Tue, Mar 19, 2024 at 9:49 PM tshingombe wrote: + + + GitHub + [t5h2i0tadi/engineering-tshing-binair-archfile-] CodeQL workflow run + + + CodeQL: No jobs were run + + View workflow run + + + + + — + You are receiving this because you are subscribed to this thread. + Manage your GitHub Actions notifications + + + GitHub, Inc. ・88 Colin P Kelly Jr Street ・San Francisco, CA 94107 + +... + +[Message clipped] View entire message +tshingombe fiston + +1:00 PM (5 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +Skip to content + + actions / + cache + + + Insights + +Comparing changes +Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also +or learn more about diff comparisons. +... +Able to merge. These branches can be automatically merged. +Discuss and review the changes in this comparison with others. Learn about pull requests + + + 1 contributor + +Commits on Mar 20, 2024 + + Update README.md + +@t5h2i0tadi +t5h2i0tadi committed Mar 20, 2024 + + + +Showing +with 1 addition and 1 deletion. +2 changes: 1 addition & 1 deletion 2 README.md +@@ -14,7 +14,7 @@ See ["Caching dependencies to speed up workflows"](https://docs.github.com/en/ac + + +## What's New +## What's New + + +### v4 +### v4 g + + +* Updated to node 20 +* Updated to node 20 +* Added a `save-always` flag to save the cache even if a prior step fails +* Added a `save-always` flag to save the cache even if a prior step fails + +Footer +© 2024 GitHub, Inc. +Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + +Comparing actions:main...t5h2i0tadi:patch-1 · actions/cache + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + 1 commit + 1 file changed + + +On Wed, Mar 20, 2024 at 12:59 PM tshingombe fiston wrote: + + # Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + >Two other actions are available in addition to the primary `cache` action: + >* [Restore action](./restore/README.md) + >* [Save action](./save/README.md) + + [![Tests](https://github.com/actions/cache/actions/workflows/workflow.yml/badge.svg)](https://github.com/actions/cache/actions/workflows/workflow.yml) + + ## Documentation + + See ["Caching dependencies to speed up workflows"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows). + + ## What's New + + ### v4 + + * Updated to node 20 + * Added a `save-always` flag to save the cache even if a prior step fails + + ### v3 + + * Added support for caching in GHES 3.5+. + * Fixed download issue for files > 2GB during restore. + * Updated the minimum runner version support from node 12 -> node 16. + * Fixed avoiding empty cache save when no files are available for caching. + * Fixed tar creation error while trying to create tar with path as `~/` home folder on `ubuntu-latest`. + * Fixed zstd failing on amazon linux 2.0 runners. + * Fixed cache not working with github workspace directory or current directory. + * Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + * Fix zstd not working for windows on gnu tar in issues. + * Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MINS`. Default is 10 minutes. + * New actions are available for granular control over caches - [restore](restore/action.yml) and [save](save/action.yml). + * Support cross-os caching as an opt-in feature. See [Cross OS caching](./tips-and-workarounds.md#cross-os-cache) for more info. + * Added option to fail job on cache miss. See [Exit workflow on cache miss](./restore/README.md#exit-workflow-on-cache-miss) for more info. + * Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + * Added option to lookup cache without downloading it. + * Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the [v2 README.md](https://github.com/actions/cache/blob/v2/README.md) for older updates. + + ## Usage + + ### Pre-requisites + + Create a workflow `.yml` file in your repository's `.github/workflows` directory. An [example workflow](#example-cache-workflow) is available below. For more information, see the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file). + + If you are using this inside a container, a POSIX-compliant `tar` needs to be included and accessible from the execution path. + + If you are using a `self-hosted` Windows runner, `GNU tar` and `zstd` are required for [Cross-OS caching](https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cross-os-cache) to work. They are also recommended to be installed in general so the performance is on par with `hosted` Windows runners. + + ### Inputs + + * `key` - An explicit key for a cache entry. See [creating a cache key](#creating-a-cache-key). + * `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns. + * `restore-keys` - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + * `enableCrossOsArchive` - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: `false` + * `fail-on-cache-miss` - Fail the workflow if cache entry is not found. Default: `false` + * `lookup-only` - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: `false` + + #### Environment Variables + + * `SEGMENT_DOWNLOAD_TIMEOUT_MINS` - Segment download timeout (in minutes, default `10`) to abort download of the segment if not completed in the defined number of minutes. [Read more](https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout) + + ### Outputs + + * `cache-hit` - A boolean value to indicate an exact match was found for the key. + + > **Note** `cache-hit` will only be set to `true` when a cache hit occurs for the exact `key` match. For a partial key match via `restore-keys` or a cache miss, it will be set to `false`. + + See [Skipping steps based on cache-hit](#skipping-steps-based-on-cache-hit) for info on using this output + + ### Cache scopes + + The cache is scoped to the key, [version](#cache-version), and branch. The default branch cache is available to other branches. + + See [Matching a cache key](https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key) for more info. + + ### Example cache workflow + + #### Restoring and saving cache using a single action + + ```yaml + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + ``` + + The `cache` action provides a `cache-hit` output which is set to `true` when the cache is restored using the primary `key` and `false` when the cache is restored using `restore-keys` or no cache is restored. + + #### Using a combination of restore and save actions + + ```yaml + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + ``` + + > **Note** + > You must use the `cache` or `restore` action in your workflow before you need to use the files that might be restored from the cache. If the provided `key` matches an existing cache, a new cache is not created and if the provided `key` doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + ## Caching Strategies + + With the introduction of the `restore` and `save` actions, a lot of caching use cases can now be achieved. Please see the [caching strategies](./caching-strategies.md) document for understanding how you can use the actions strategically to achieve the desired goal. + + ## Implementation Examples + + Every programming language and framework has its own way of caching. + + See [Examples](examples.md) for a list of `actions/cache` implementations for use with: + + * [C# - NuGet](./examples.md#c---nuget) + * [Clojure - Lein Deps](./examples.md#clojure---lein-deps) + * [D - DUB](./examples.md#d---dub) + * [Deno](./examples.md#deno) + * [Elixir - Mix](./examples.md#elixir---mix) + * [Go - Modules](./examples.md#go---modules) + * [Haskell - Cabal](./examples.md#haskell---cabal) + * [Haskell - Stack](./examples.md#haskell---stack) + * [Java - Gradle](./examples.md#java---gradle) + * [Java - Maven](./examples.md#java---maven) + * [Node - npm](./examples.md#node---npm) + * [Node - Lerna](./examples.md#node---lerna) + * [Node - Yarn](./examples.md#node---yarn) + * [OCaml/Reason - esy](./examples.md#ocamlreason---esy) + * [PHP - Composer](./examples.md#php---composer) + * [Python - pip](./examples.md#python---pip) + * [Python - pipenv](./examples.md#python---pipenv) + * [R - renv](./examples.md#r---renv) + * [Ruby - Bundler](./examples.md#ruby---bundler) + * [Rust - Cargo](./examples.md#rust---cargo) + * [Scala - SBT](./examples.md#scala---sbt) + * [Swift, Objective-C - Carthage](./examples.md#swift-objective-c---carthage) + * [Swift, Objective-C - CocoaPods](./examples.md#swift-objective-c---cocoapods) + * [Swift - Swift Package Manager](./examples.md#swift---swift-package-manager) + * [Swift - Mint](./examples.md#swift---mint) + + ## Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the [`hashFiles`](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles) function allows you to create a new cache when dependencies change. + + ```yaml + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + ``` + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + ```yaml + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + ``` + + See [Using contexts to create cache keys](https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#using-contexts-to-create-cache-keys) + + ## Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + + ## Skipping steps based on cache-hit + + Using the `cache-hit` output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the `hash` of the package file. + + Example: + + ```yaml + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + ``` + + > **Note** The `id` defined in `actions/cache` must match the `id` in the `if` statement (i.e. `steps.[ID].outputs.cache-hit`) + + ## Cache Version + + Cache version is a hash [generated](https://github.com/actions/toolkit/blob/500d0b42fee2552ae9eeb5933091fe2fbf14e72d/packages/cache/src/internal/cacheHttpClient.ts#L73-L90) for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the `path` of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a `windows-latest` runner can't be restored on `ubuntu-latest` as cache `Version`s are different. + + > Pro tip: The [list caches](https://docs.github.com/en/rest/actions/cache#list-github-actions-caches-for-a-repository) API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + +
+ Example + The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + + ```yaml + jobs: + build-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: ./generate-primes.sh -d prime-numbers + + - name: Cache Numbers + id: cache-numbers + uses: actions/cache@v4 + with: + path: numbers + key: primes + + - name: Generate Numbers + if: steps.cache-numbers.outputs.cache-hit != 'true' + run: ./generate-primes.sh -d numbers + + build-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: ./generate-primes -d prime-numbers + ``` + +
+ + ## Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + * [Cache segment restore timeout](./tips-and-workarounds.md#cache-segment-restore-timeout) + * [Update a cache](./tips-and-workarounds.md#update-a-cache) + * [Use cache across feature branches](./tips-and-workarounds.md#use-cache-across-feature-branches) + * [Cross OS cache](./tips-and-workarounds.md#cross-os-cache) + * [Force deletion of caches overriding default cache eviction policy](./tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy) + + ### Windows environment variables + + Please note that Windows environment variables (like `%LocalAppData%`) will NOT be expanded by this action. Instead, prefer using `~` in your paths which will expand to the HOME directory. For example, instead of `%LocalAppData%`, use `~\AppData\Local`. For a list of supported default environment variables, see the [Learn GitHub Actions: Variables](https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables) page. + + ## Contributing + + We would love for you to contribute to `actions/cache`. Pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + + ## License + + The scripts and documentation in this project are released under the [MIT License](LICENSE) + + On Wed, Mar 20, 2024 at 12:58 PM tshingombe fiston wrote: + + Skip to content + + actions / + cache + + + Insights + + Owner avatar cache Public + + + + + actions/cache + Use this GitHub action with your project + Add this Action to an existing workflow or create a new one + t + Add file + Folders and files + Name + Last commit message + + Last commit date + Latest commit + bethanyj28bethanyj28 + Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss + 0c45773 · + History + + + .devcontainer + + GA for granular cache (#1035) + + + + .github + + add release action + + + + .licenses/npm + + licensed cache + + + + .vscode + + Initial commit + + + + __tests__ + + Add test case for process exit + + + + dist + + Fix fail-on-cache-miss not working + + + + restore + + Update "only-" actions to node20 + + + + save + + Update "only-" actions to node20 + + + + src + + Fix fail-on-cache-miss not working + + + + .eslintrc.json + + Update eslint and prettier + + + + .gitattributes + + Fix line ending for windows test + + + + .gitignore + + test e2e during workflow (#185) + + + + .licensed.yml + + Add Licensed to attribute third party licenses + + + + .prettierrc.json + + Initial commit + + + + CODE_OF_CONDUCT.md + + Fix repo name in contact email (#41) + + + + CONTRIBUTING.md + + Update contributing.md + + + + LICENSE + + Initial commit + + + + README.md + + Update examples + + + + RELEASES.md + + Bump version + + + + action.yml + + Merge branch 'main' into main + + + + caching-strategies.md + + Fixing paths for OSes (#1101) + + + + examples.md + + Clarify that macos-latest image has bazelisk + + + + jest.config.js + + Resolve dependabot alerts + + + + package-lock.json + + Bump version + + + + package.json + + Bump version + + + + tips-and-workarounds.md + + Merge branch 'main' into pdotl-patch-1 + + + + tsconfig.json + + Initial commit + + + Repository files navigation + + + Security + + Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + + Tests + Documentation + + See "Caching dependencies to speed up workflows". + What's New + v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + + v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the v2 README.md for older updates. + Usage + Pre-requisites + + Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + + If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + + If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. + Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + + Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + + Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + + See Skipping steps based on cache-hit for info on using this output + Cache scopes + + The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + + See Matching a cache key for more info. + Example cache workflow + Restoring and saving cache using a single action + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + + The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. + Using a combination of restore and save actions + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + Caching Strategies + + With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. + Implementation Examples + + Every programming language and framework has its own way of caching. + + See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + + Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + + See Using contexts to create cache keys + Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + Skipping steps based on cache-hit + + Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + + Example: + + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + + Cache Version + + Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + + Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + + Windows environment variables + + Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. + Contributing + + We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. + License + + The scripts and documentation in this project are released under the MIT License + About + + Cache dependencies and build outputs in GitHub Actions + Resources + Readme + License + MIT license + Code of conduct + Code of conduct + Security policy + Security policy + Activity + Custom properties + Stars + 4.2k stars + Watchers + 85 watching + Forks + 1.1k forks + Report repository + Releases 51 + v4.0.2 Latest + Mar 19, 2024 + + 50 releases + Packages + No packages published + Used by 905k + + @remomax + @linhh-phv + @thibs12 + @NeptuneX-Aggregator + @tnikFi + @skyrych + @VincentKobz + @kanandev2024 + + + 905,172 + Contributors 131 + + @vsvipul + @kotewar + @joshmgross + @dhadka + @lvpx + @Phantsure + @aiqiaoy + @bishal-pdMSFT + @takost + @bethanyj28 + @t-dedah + @magnetikonline + @ashwinsangem + @konradpabjan + + + 117 contributors + Deployments 2 + + + releaseNewActionVersion March 19, 2024 17:55 + + Languages + + + JavaScript 0.9% + + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + actions/cache: Cache dependencies and build outputs in GitHub Actions + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + README + Code of conduct + MIT license + TypeScript 97.9% + Shell 1.2% + + + On Wed, Mar 20, 2024 at 12:55 PM tshingombe fiston wrote: + + Skip to content + + Marketplace + Actions + Cache + + GitHub Action + Cache + v4.0.2 Latest version + Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + + Tests + Documentation + + See "Caching dependencies to speed up workflows". + What's New + v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + + v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the v2 README.md for older updates. + Usage + Pre-requisites + + Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + + If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + + If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. + Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + + Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + + Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + + See Skipping steps based on cache-hit for info on using this output + Cache scopes + + The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + + See Matching a cache key for more info. + Example cache workflow + Restoring and saving cache using a single action + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + + The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. + Using a combination of restore and save actions + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + Caching Strategies + + With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. + Implementation Examples + + Every programming language and framework has its own way of caching. + + See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + + Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + + See Using contexts to create cache keys + Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + Skipping steps based on cache-hit + + Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + + Example: + + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + + Cache Version + + Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + + Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + + Windows environment variables + + Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. + Contributing + + We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. + License + + The scripts and documentation in this project are released under the MIT License + Verified creator + + GitHub has verified that this action was created by actions. + + Learn more about verified Actions. + Stars + Contributors + @vsvipul @kotewar @joshmgross @dhadka @lvpx @Phantsure @aiqiaoy @bishal-pdMSFT @takost @bethanyj28 @t-dedah @magnetikonline + Categories + Dependency management Utilities + Links + actions/cache Open issues 92 Pull requests 41 + Report abuse + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + + On Wed, Mar 20, 2024 at 12:54 PM tshingombe fiston wrote: + + Skip to content + + tshingombe-engineering / + engin-data-exam-tshingomb + + + + Settings + + Creating a new workflow file in engin-data-exam-tshingomb + Breadcrumbs + + engin-data-exam-tshingomb + /.github + /workflows + + / + in + main + + + Indent mode + Indent sizeLine wrap mode + Editing blank.yml file contents + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + Use Control + Shift + m to toggle the tab key moving focus. Alternatively, use esc then tab to move to the next interactive element on the page. + Use Control + Space to trigger autocomplete in most situations. + Help Panel navigation + + Marketplace + Documentation + + / Cache + Cache + By actions + v4.0.2 + 4.2k + + Cache artifacts like dependencies and build outputs to improve workflow execution time + View full Marketplace listing + Installation + + Copy and paste the following snippet into your .yml file. + Version: v4.0.2 + + - name: Cache + uses: actions/cache@v4.0.2 + with: + # A list of files, directories, and wildcard patterns to cache and restore + path: + # An explicit key for restoring and saving the cache + key: + # An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case. + restore-keys: # optional + # The chunk size used to split up large files during upload, in bytes + upload-chunk-size: # optional + # An optional boolean when enabled, allows windows runners to save or restore caches that can be restored or saved respectively on other platforms + enableCrossOsArchive: # optional, default is false + # Fail the workflow if cache entry is not found + fail-on-cache-miss: # optional, default is false + # Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache + lookup-only: # optional, default is false + # Run the post step to save the cache even if another step before fails + save-always: # optional, default is false + + + Code + Issues + Pull requests + Actions + Projects + Security + Insights + + + On Wed, Mar 20, 2024 at 12:53 PM tshingombe fiston wrote: + + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + On Tue, Mar 19, 2024 at 9:49 PM tshingombe wrote: + + + GitHub + [t5h2i0tadi/engineering-tshing-binair-archfile-] CodeQL workflow run + + + CodeQL: No jobs were run + + View workflow run + + + + + — + You are receiving this because you are subscribed to this thread. + Manage your GitHub Actions notifications + + + GitHub, Inc. ・88 Colin P Kelly Jr Street ・San Francisco, CA 94107 + +... + +[Message clipped] View entire message +tshingombe fiston + +1:02 PM (4 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +Skip to content + + actions / + cache + + + Insights + +Actions: actions/cache +Actions + + +All workflows +Showing runs from all workflows +1,190 workflow runs +Close inactive issues Close inactive issues #819: Scheduled +main +March 20, 2024 10:30 +13s +cache restore on versions 3 and 4 not working Assign issue #174: Issue #1361 opened by mark-jordanovic-lewis +March 19, 2024 19:19 +13s +v4.0.2 Release new action version #2: Release v4.0.2 released by bethanyj28 +March 19, 2024 17:55 +10m 24s +Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss Code scanning - action #1974: Commit 0c45773 pushed by bethanyj28 +v4.0.2 +March 19, 2024 17:55 +2m 56s +Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss Check dist/ #509: Commit 0c45773 pushed by bethanyj28 +main +March 19, 2024 15:31 +44s +Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss Licensed #908: Commit 0c45773 pushed by bethanyj28 +main +March 19, 2024 15:31 +26s +Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss Tests #1219: Commit 0c45773 pushed by bethanyj28 +main +March 19, 2024 15:31 +1m 38s +Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss Code scanning - action #1973: Commit 0c45773 pushed by bethanyj28 +main +March 19, 2024 15:31 +4m 6s +Close inactive issues Close inactive issues #818: Scheduled +main +March 19, 2024 10:30 +15s +Fix fail-on-cache-miss not working Check dist/ #508: Pull request #1327 synchronize by cdce8p +cdce8p:fix-fail-on-cache-miss +March 19, 2024 10:29 +45s +Fix fail-on-cache-miss not working Licensed #907: Pull request #1327 synchronize by cdce8p +cdce8p:fix-fail-on-cache-miss +March 19, 2024 10:29 +28s +Fix fail-on-cache-miss not working Tests #1218: Pull request #1327 synchronize by cdce8p +cdce8p:fix-fail-on-cache-miss +March 19, 2024 10:29 +1m 30s +Fix fail-on-cache-miss not working Code scanning - action #1972: Pull request #1327 synchronize by cdce8p +cdce8p:fix-fail-on-cache-miss +March 19, 2024 10:29 +2m 18s +Close inactive issues Close inactive issues #817: Scheduled +main +March 18, 2024 10:30 +17s +Code scanning - action Code scanning - action #1971: Scheduled +main +March 17, 2024 21:00 +3m 12s +Close inactive issues Close inactive issues #816: Scheduled +main +March 17, 2024 10:30 +13s +Close inactive issues Close inactive issues #815: Scheduled +main +March 16, 2024 10:30 +16s +Hhiih Assign issue #173: Issue #1360 opened by Ghoifuoffigccty +March 16, 2024 09:16 +12s +Close inactive issues Close inactive issues #814: Scheduled +main +March 15, 2024 10:31 +17s +Close inactive issues Close inactive issues #813: Scheduled +main +March 14, 2024 10:30 +17s +Running actions/cache in a composite action and setting the path via input does not save the cache Assign issue #172: Issue #1359 opened by dreinhardt-terminus +March 13, 2024 23:19 +13s +Close inactive issues Close inactive issues #812: Scheduled +main +March 13, 2024 10:30 +12s +Close inactive issues Close inactive issues #811: Scheduled +main +March 12, 2024 10:30 +13s +Cache Hit / Miss Rate Information Assign issue #171: Issue #1357 opened by edhgoose +March 11, 2024 11:56 +12s +Close inactive issues Close inactive issues #810: Scheduled +main +March 11, 2024 10:30 +13s +Footer +© 2024 GitHub, Inc. +Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + +Workflow runs · actions/cache + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + Workflows + Management + + +On Wed, Mar 20, 2024 at 1:00 PM tshingombe fiston wrote: + + Skip to content + + actions / + cache + + + Insights + + Comparing changes + Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also + or learn more about diff comparisons. + ... + Able to merge. These branches can be automatically merged. + Discuss and review the changes in this comparison with others. Learn about pull requests + + + 1 contributor + + Commits on Mar 20, 2024 + + Update README.md + + @t5h2i0tadi + t5h2i0tadi committed Mar 20, 2024 + + + + Showing + with 1 addition and 1 deletion. + 2 changes: 1 addition & 1 deletion 2 README.md + @@ -14,7 +14,7 @@ See ["Caching dependencies to speed up workflows"](https://docs.github.com/en/ac + + + ## What's New + ## What's New + + + ### v4 + ### v4 g + + + * Updated to node 20 + * Updated to node 20 + * Added a `save-always` flag to save the cache even if a prior step fails + * Added a `save-always` flag to save the cache even if a prior step fails + + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + Comparing actions:main...t5h2i0tadi:patch-1 · actions/cache + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + 1 commit + 1 file changed + + + On Wed, Mar 20, 2024 at 12:59 PM tshingombe fiston wrote: + + # Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + >Two other actions are available in addition to the primary `cache` action: + >* [Restore action](./restore/README.md) + >* [Save action](./save/README.md) + + [![Tests](https://github.com/actions/cache/actions/workflows/workflow.yml/badge.svg)](https://github.com/actions/cache/actions/workflows/workflow.yml) + + ## Documentation + + See ["Caching dependencies to speed up workflows"](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows). + + ## What's New + + ### v4 + + * Updated to node 20 + * Added a `save-always` flag to save the cache even if a prior step fails + + ### v3 + + * Added support for caching in GHES 3.5+. + * Fixed download issue for files > 2GB during restore. + * Updated the minimum runner version support from node 12 -> node 16. + * Fixed avoiding empty cache save when no files are available for caching. + * Fixed tar creation error while trying to create tar with path as `~/` home folder on `ubuntu-latest`. + * Fixed zstd failing on amazon linux 2.0 runners. + * Fixed cache not working with github workspace directory or current directory. + * Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + * Fix zstd not working for windows on gnu tar in issues. + * Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MINS`. Default is 10 minutes. + * New actions are available for granular control over caches - [restore](restore/action.yml) and [save](save/action.yml). + * Support cross-os caching as an opt-in feature. See [Cross OS caching](./tips-and-workarounds.md#cross-os-cache) for more info. + * Added option to fail job on cache miss. See [Exit workflow on cache miss](./restore/README.md#exit-workflow-on-cache-miss) for more info. + * Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + * Added option to lookup cache without downloading it. + * Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the [v2 README.md](https://github.com/actions/cache/blob/v2/README.md) for older updates. + + ## Usage + + ### Pre-requisites + + Create a workflow `.yml` file in your repository's `.github/workflows` directory. An [example workflow](#example-cache-workflow) is available below. For more information, see the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file). + + If you are using this inside a container, a POSIX-compliant `tar` needs to be included and accessible from the execution path. + + If you are using a `self-hosted` Windows runner, `GNU tar` and `zstd` are required for [Cross-OS caching](https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cross-os-cache) to work. They are also recommended to be installed in general so the performance is on par with `hosted` Windows runners. + + ### Inputs + + * `key` - An explicit key for a cache entry. See [creating a cache key](#creating-a-cache-key). + * `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns. + * `restore-keys` - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + * `enableCrossOsArchive` - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: `false` + * `fail-on-cache-miss` - Fail the workflow if cache entry is not found. Default: `false` + * `lookup-only` - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: `false` + + #### Environment Variables + + * `SEGMENT_DOWNLOAD_TIMEOUT_MINS` - Segment download timeout (in minutes, default `10`) to abort download of the segment if not completed in the defined number of minutes. [Read more](https://github.com/actions/cache/blob/main/tips-and-workarounds.md#cache-segment-restore-timeout) + + ### Outputs + + * `cache-hit` - A boolean value to indicate an exact match was found for the key. + + > **Note** `cache-hit` will only be set to `true` when a cache hit occurs for the exact `key` match. For a partial key match via `restore-keys` or a cache miss, it will be set to `false`. + + See [Skipping steps based on cache-hit](#skipping-steps-based-on-cache-hit) for info on using this output + + ### Cache scopes + + The cache is scoped to the key, [version](#cache-version), and branch. The default branch cache is available to other branches. + + See [Matching a cache key](https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#matching-a-cache-key) for more info. + + ### Example cache workflow + + #### Restoring and saving cache using a single action + + ```yaml + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + ``` + + The `cache` action provides a `cache-hit` output which is set to `true` when the cache is restored using the primary `key` and `false` when the cache is restored using `restore-keys` or no cache is restored. + + #### Using a combination of restore and save actions + + ```yaml + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + ``` + + > **Note** + > You must use the `cache` or `restore` action in your workflow before you need to use the files that might be restored from the cache. If the provided `key` matches an existing cache, a new cache is not created and if the provided `key` doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + ## Caching Strategies + + With the introduction of the `restore` and `save` actions, a lot of caching use cases can now be achieved. Please see the [caching strategies](./caching-strategies.md) document for understanding how you can use the actions strategically to achieve the desired goal. + + ## Implementation Examples + + Every programming language and framework has its own way of caching. + + See [Examples](examples.md) for a list of `actions/cache` implementations for use with: + + * [C# - NuGet](./examples.md#c---nuget) + * [Clojure - Lein Deps](./examples.md#clojure---lein-deps) + * [D - DUB](./examples.md#d---dub) + * [Deno](./examples.md#deno) + * [Elixir - Mix](./examples.md#elixir---mix) + * [Go - Modules](./examples.md#go---modules) + * [Haskell - Cabal](./examples.md#haskell---cabal) + * [Haskell - Stack](./examples.md#haskell---stack) + * [Java - Gradle](./examples.md#java---gradle) + * [Java - Maven](./examples.md#java---maven) + * [Node - npm](./examples.md#node---npm) + * [Node - Lerna](./examples.md#node---lerna) + * [Node - Yarn](./examples.md#node---yarn) + * [OCaml/Reason - esy](./examples.md#ocamlreason---esy) + * [PHP - Composer](./examples.md#php---composer) + * [Python - pip](./examples.md#python---pip) + * [Python - pipenv](./examples.md#python---pipenv) + * [R - renv](./examples.md#r---renv) + * [Ruby - Bundler](./examples.md#ruby---bundler) + * [Rust - Cargo](./examples.md#rust---cargo) + * [Scala - SBT](./examples.md#scala---sbt) + * [Swift, Objective-C - Carthage](./examples.md#swift-objective-c---carthage) + * [Swift, Objective-C - CocoaPods](./examples.md#swift-objective-c---cocoapods) + * [Swift - Swift Package Manager](./examples.md#swift---swift-package-manager) + * [Swift - Mint](./examples.md#swift---mint) + + ## Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the [`hashFiles`](https://docs.github.com/en/actions/learn-github-actions/expressions#hashfiles) function allows you to create a new cache when dependencies change. + + ```yaml + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + ``` + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + ```yaml + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + ``` + + See [Using contexts to create cache keys](https://help.github.com/en/actions/configuring-and-managing-workflows/caching-dependencies-to-speed-up-workflows#using-contexts-to-create-cache-keys) + + ## Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + + ## Skipping steps based on cache-hit + + Using the `cache-hit` output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the `hash` of the package file. + + Example: + + ```yaml + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + ``` + + > **Note** The `id` defined in `actions/cache` must match the `id` in the `if` statement (i.e. `steps.[ID].outputs.cache-hit`) + + ## Cache Version + + Cache version is a hash [generated](https://github.com/actions/toolkit/blob/500d0b42fee2552ae9eeb5933091fe2fbf14e72d/packages/cache/src/internal/cacheHttpClient.ts#L73-L90) for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the `path` of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a `windows-latest` runner can't be restored on `ubuntu-latest` as cache `Version`s are different. + + > Pro tip: The [list caches](https://docs.github.com/en/rest/actions/cache#list-github-actions-caches-for-a-repository) API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + +
+ Example + The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + + ```yaml + jobs: + build-linux: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: ./generate-primes.sh -d prime-numbers + + - name: Cache Numbers + id: cache-numbers + uses: actions/cache@v4 + with: + path: numbers + key: primes + + - name: Generate Numbers + if: steps.cache-numbers.outputs.cache-hit != 'true' + run: ./generate-primes.sh -d numbers + + build-windows: + runs-on: windows-latest + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: ./generate-primes -d prime-numbers + ``` + +
+ + ## Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + * [Cache segment restore timeout](./tips-and-workarounds.md#cache-segment-restore-timeout) + * [Update a cache](./tips-and-workarounds.md#update-a-cache) + * [Use cache across feature branches](./tips-and-workarounds.md#use-cache-across-feature-branches) + * [Cross OS cache](./tips-and-workarounds.md#cross-os-cache) + * [Force deletion of caches overriding default cache eviction policy](./tips-and-workarounds.md#force-deletion-of-caches-overriding-default-cache-eviction-policy) + + ### Windows environment variables + + Please note that Windows environment variables (like `%LocalAppData%`) will NOT be expanded by this action. Instead, prefer using `~` in your paths which will expand to the HOME directory. For example, instead of `%LocalAppData%`, use `~\AppData\Local`. For a list of supported default environment variables, see the [Learn GitHub Actions: Variables](https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables) page. + + ## Contributing + + We would love for you to contribute to `actions/cache`. Pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information. + + ## License + + The scripts and documentation in this project are released under the [MIT License](LICENSE) + + On Wed, Mar 20, 2024 at 12:58 PM tshingombe fiston wrote: + + Skip to content + + actions / + cache + + + Insights + + Owner avatar cache Public + + + + + actions/cache + Use this GitHub action with your project + Add this Action to an existing workflow or create a new one + t + Add file + Folders and files + Name + Last commit message + + Last commit date + Latest commit + bethanyj28bethanyj28 + Merge pull request #1327 from cdce8p/fix-fail-on-cache-miss + 0c45773 · + History + + + .devcontainer + + GA for granular cache (#1035) + + + + .github + + add release action + + + + .licenses/npm + + licensed cache + + + + .vscode + + Initial commit + + + + __tests__ + + Add test case for process exit + + + + dist + + Fix fail-on-cache-miss not working + + + + restore + + Update "only-" actions to node20 + + + + save + + Update "only-" actions to node20 + + + + src + + Fix fail-on-cache-miss not working + + + + .eslintrc.json + + Update eslint and prettier + + + + .gitattributes + + Fix line ending for windows test + + + + .gitignore + + test e2e during workflow (#185) + + + + .licensed.yml + + Add Licensed to attribute third party licenses + + + + .prettierrc.json + + Initial commit + + + + CODE_OF_CONDUCT.md + + Fix repo name in contact email (#41) + + + + CONTRIBUTING.md + + Update contributing.md + + + + LICENSE + + Initial commit + + + + README.md + + Update examples + + + + RELEASES.md + + Bump version + + + + action.yml + + Merge branch 'main' into main + + + + caching-strategies.md + + Fixing paths for OSes (#1101) + + + + examples.md + + Clarify that macos-latest image has bazelisk + + + + jest.config.js + + Resolve dependabot alerts + + + + package-lock.json + + Bump version + + + + package.json + + Bump version + + + + tips-and-workarounds.md + + Merge branch 'main' into pdotl-patch-1 + + + + tsconfig.json + + Initial commit + + + Repository files navigation + + + Security + + Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + + Tests + Documentation + + See "Caching dependencies to speed up workflows". + What's New + v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + + v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the v2 README.md for older updates. + Usage + Pre-requisites + + Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + + If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + + If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. + Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + + Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + + Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + + See Skipping steps based on cache-hit for info on using this output + Cache scopes + + The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + + See Matching a cache key for more info. + Example cache workflow + Restoring and saving cache using a single action + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + + The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. + Using a combination of restore and save actions + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + Caching Strategies + + With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. + Implementation Examples + + Every programming language and framework has its own way of caching. + + See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + + Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + + See Using contexts to create cache keys + Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + Skipping steps based on cache-hit + + Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + + Example: + + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + + Cache Version + + Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + + Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + + Windows environment variables + + Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. + Contributing + + We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. + License + + The scripts and documentation in this project are released under the MIT License + About + + Cache dependencies and build outputs in GitHub Actions + Resources + Readme + License + MIT license + Code of conduct + Code of conduct + Security policy + Security policy + Activity + Custom properties + Stars + 4.2k stars + Watchers + 85 watching + Forks + 1.1k forks + Report repository + Releases 51 + v4.0.2 Latest + Mar 19, 2024 + + 50 releases + Packages + No packages published + Used by 905k + + @remomax + @linhh-phv + @thibs12 + @NeptuneX-Aggregator + @tnikFi + @skyrych + @VincentKobz + @kanandev2024 + + + 905,172 + Contributors 131 + + @vsvipul + @kotewar + @joshmgross + @dhadka + @lvpx + @Phantsure + @aiqiaoy + @bishal-pdMSFT + @takost + @bethanyj28 + @t-dedah + @magnetikonline + @ashwinsangem + @konradpabjan + + + 117 contributors + Deployments 2 + + + releaseNewActionVersion March 19, 2024 17:55 + + Languages + + + JavaScript 0.9% + + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + actions/cache: Cache dependencies and build outputs in GitHub Actions + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + README + Code of conduct + MIT license + TypeScript 97.9% + Shell 1.2% + + + On Wed, Mar 20, 2024 at 12:55 PM tshingombe fiston wrote: + + Skip to content + + Marketplace + Actions + Cache + + GitHub Action + Cache + v4.0.2 Latest version + Cache action + + This action allows caching dependencies and build outputs to improve workflow execution time. + + Two other actions are available in addition to the primary cache action: + + Restore action + Save action + + Tests + Documentation + + See "Caching dependencies to speed up workflows". + What's New + v4 + + Updated to node 20 + Added a save-always flag to save the cache even if a prior step fails + + v3 + + Added support for caching in GHES 3.5+. + Fixed download issue for files > 2GB during restore. + Updated the minimum runner version support from node 12 -> node 16. + Fixed avoiding empty cache save when no files are available for caching. + Fixed tar creation error while trying to create tar with path as ~/ home folder on ubuntu-latest. + Fixed zstd failing on amazon linux 2.0 runners. + Fixed cache not working with github workspace directory or current directory. + Fixed the download stuck problem by introducing a timeout of 1 hour for cache downloads. + Fix zstd not working for windows on gnu tar in issues. + Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable SEGMENT_DOWNLOAD_TIMEOUT_MINS. Default is 10 minutes. + New actions are available for granular control over caches - restore and save. + Support cross-os caching as an opt-in feature. See Cross OS caching for more info. + Added option to fail job on cache miss. See Exit workflow on cache miss for more info. + Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners + Added option to lookup cache without downloading it. + Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. + + See the v2 README.md for older updates. + Usage + Pre-requisites + + Create a workflow .yml file in your repository's .github/workflows directory. An example workflow is available below. For more information, see the GitHub Help Documentation for Creating a workflow file. + + If you are using this inside a container, a POSIX-compliant tar needs to be included and accessible from the execution path. + + If you are using a self-hosted Windows runner, GNU tar and zstd are required for Cross-OS caching to work. They are also recommended to be installed in general so the performance is on par with hosted Windows runners. + Inputs + + key - An explicit key for a cache entry. See creating a cache key. + path - A list of files, directories, and wildcard patterns to cache and restore. See @actions/glob for supported patterns. + restore-keys - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. + enableCrossOsArchive - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: false + fail-on-cache-miss - Fail the workflow if cache entry is not found. Default: false + lookup-only - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: false + + Environment Variables + + SEGMENT_DOWNLOAD_TIMEOUT_MINS - Segment download timeout (in minutes, default 10) to abort download of the segment if not completed in the defined number of minutes. Read more + + Outputs + + cache-hit - A boolean value to indicate an exact match was found for the key. + + Note cache-hit will only be set to true when a cache hit occurs for the exact key match. For a partial key match via restore-keys or a cache miss, it will be set to false. + + See Skipping steps based on cache-hit for info on using this output + Cache scopes + + The cache is scoped to the key, version, and branch. The default branch cache is available to other branches. + + See Matching a cache key for more info. + Example cache workflow + Restoring and saving cache using a single action + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Cache Primes + id: cache-primes + uses: actions/cache@v4 + with: + path: prime-numbers + key: ${{ runner.os }}-primes + + - name: Generate Prime Numbers + if: steps.cache-primes.outputs.cache-hit != 'true' + run: /generate-primes.sh -d prime-numbers + + - name: Use Prime Numbers + run: /primes.sh -d prime-numbers + + The cache action provides a cache-hit output which is set to true when the cache is restored using the primary key and false when the cache is restored using restore-keys or no cache is restored. + Using a combination of restore and save actions + + name: Caching Primes + + on: push + + jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + + - name: Restore cached Primes + id: cache-primes-restore + uses: actions/cache/restore@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-primes + . + . //intermediate workflow steps + . + - name: Save Primes + id: cache-primes-save + uses: actions/cache/save@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ steps.cache-primes-restore.outputs.cache-primary-key }} + + Note You must use the cache or restore action in your workflow before you need to use the files that might be restored from the cache. If the provided key matches an existing cache, a new cache is not created and if the provided key doesn't match an existing cache, a new cache is automatically created provided the job completes successfully. + + Caching Strategies + + With the introduction of the restore and save actions, a lot of caching use cases can now be achieved. Please see the caching strategies document for understanding how you can use the actions strategically to achieve the desired goal. + Implementation Examples + + Every programming language and framework has its own way of caching. + + See Examples for a list of actions/cache implementations for use with: + + C# - NuGet + Clojure - Lein Deps + D - DUB + Deno + Elixir - Mix + Go - Modules + Haskell - Cabal + Haskell - Stack + Java - Gradle + Java - Maven + Node - npm + Node - Lerna + Node - Yarn + OCaml/Reason - esy + PHP - Composer + Python - pip + Python - pipenv + R - renv + Ruby - Bundler + Rust - Cargo + Scala - SBT + Swift, Objective-C - Carthage + Swift, Objective-C - CocoaPods + Swift - Swift Package Manager + Swift - Mint + + Creating a cache key + + A cache key can include any of the contexts, functions, literals, and operators supported by GitHub Actions. + + For example, using the hashFiles function allows you to create a new cache when dependencies change. + + - uses: actions/cache@v4 + with: + path: | + path/to/dependencies + some/other/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + Additionally, you can use arbitrary command output in a cache key, such as a date or software version: + + # http://man7.org/linux/man-pages/man1/date.1.html + - name: Get Date + id: get-date + run: | + echo "date=$(/bin/date -u "+%Y%m%d")" >> $GITHUB_OUTPUT + shell: bash + + - uses: actions/cache@v4 + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ steps.get-date.outputs.date }}-${{ hashFiles('**/lockfiles') }} + + See Using contexts to create cache keys + Cache Limits + + A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted. + Skipping steps based on cache-hit + + Using the cache-hit output, subsequent steps (such as install or build) can be skipped when a cache hit occurs on the key. It is recommended to install missing/updated dependencies in case of a partial key match when the key is dependent on the hash of the package file. + + Example: + + steps: + - uses: actions/checkout@v3 + + - uses: actions/cache@v4 + id: cache + with: + path: path/to/dependencies + key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }} + + - name: Install Dependencies + if: steps.cache.outputs.cache-hit != 'true' + run: /install.sh + + Note The id defined in actions/cache must match the id in the if statement (i.e. steps.[ID].outputs.cache-hit) + + Cache Version + + Cache version is a hash generated for a combination of compression tool used (Gzip, Zstd, etc. based on the runner OS) and the path of directories being cached. If two caches have different versions, they are identified as unique caches while matching. This, for example, means that a cache created on a windows-latest runner can't be restored on ubuntu-latest as cache Versions are different. + + Pro tip: The list caches API can be used to get the version of a cache. This can be helpful to troubleshoot cache miss due to version. + + Example The workflow will create 3 unique caches with same keys. Ubuntu and windows runners will use different compression technique and hence create two different caches. And `build-linux` will create two different caches as the `paths` are different. + Known practices and workarounds + + There are a number of community practices/workarounds to fulfill specific requirements. You may choose to use them if they suit your use case. Note these are not necessarily the only solution or even a recommended solution. + + Cache segment restore timeout + Update a cache + Use cache across feature branches + Cross OS cache + Force deletion of caches overriding default cache eviction policy + + Windows environment variables + + Please note that Windows environment variables (like %LocalAppData%) will NOT be expanded by this action. Instead, prefer using ~ in your paths which will expand to the HOME directory. For example, instead of %LocalAppData%, use ~\AppData\Local. For a list of supported default environment variables, see the Learn GitHub Actions: Variables page. + Contributing + + We would love for you to contribute to actions/cache. Pull requests are welcome! Please see the CONTRIBUTING.md for more information. + License + + The scripts and documentation in this project are released under the MIT License + Verified creator + + GitHub has verified that this action was created by actions. + + Learn more about verified Actions. + Stars + Contributors + @vsvipul @kotewar @joshmgross @dhadka @lvpx @Phantsure @aiqiaoy @bishal-pdMSFT @takost @bethanyj28 @t-dedah @magnetikonline + Categories + Dependency management Utilities + Links + actions/cache Open issues 92 Pull requests 41 + Report abuse + Footer + © 2024 GitHub, Inc. + Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + + + On Wed, Mar 20, 2024 at 12:54 PM tshingombe fiston wrote: + + Skip to content + + tshingombe-engineering / + engin-data-exam-tshingomb + + + + Settings + + Creating a new workflow file in engin-data-exam-tshingomb + Breadcrumbs + + engin-data-exam-tshingomb + /.github + /workflows + + / + in + main + + + Indent mode + Indent sizeLine wrap mode + Editing blank.yml file contents + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 + 11 + 12 + 13 + 14 + 15 + 16 + 17 + 18 + 19 + 20 + 21 + 22 + 23 + 24 + 25 + 26 + 27 + 28 + 29 + 30 + 31 + 32 + 33 + 34 + 35 + 36 + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + Use Control + Shift + m to toggle the tab key moving focus. Alternatively, use esc then tab to move to the next interactive element on the page. + Use Control + Space to trigger autocomplete in most situations. + Help Panel navigation + + Marketplace + Documentation + + / Cache + Cache + By actions + v4.0.2 + 4.2k + + Cache artifacts like dependencies and build outputs to improve workflow execution time + View full Marketplace listing + Installation + + Copy and paste the following snippet into your .yml file. + Version: v4.0.2 + + - name: Cache + uses: actions/cache@v4.0.2 + with: + # A list of files, directories, and wildcard patterns to cache and restore + path: + # An explicit key for restoring and saving the cache + key: + # An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case. + restore-keys: # optional + # The chunk size used to split up large files during upload, in bytes + upload-chunk-size: # optional + # An optional boolean when enabled, allows windows runners to save or restore caches that can be restored or saved respectively on other platforms + enableCrossOsArchive: # optional, default is false + # Fail the workflow if cache entry is not found + fail-on-cache-miss: # optional, default is false + # Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache + lookup-only: # optional, default is false + # Run the post step to save the cache even if another step before fails + save-always: # optional, default is false + + + Code + Issues + Pull requests + Actions + Projects + Security + Insights + + + On Wed, Mar 20, 2024 at 12:53 PM tshingombe fiston wrote: + + # This is a basic workflow to help you get started with Actions + + name: CI + + # Controls when the workflow will run + on: + # Triggers the workflow on push or pull request events but only for the "main" branch + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + + # A workflow run is made up of one or more jobs that can run sequentially or in parallel + jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Runs a single command using the runners shell + - name: Run a one-line script + run: echo Hello, world! + + # Runs a set of commands using the runners shell + - name: Run a multi-line script + run: | + echo Add other actions to build, + echo test, and deploy your project. + + On Tue, Mar 19, 2024 at 9:49 PM tshingombe wrote: + + + GitHub + [t5h2i0tadi/engineering-tshing-binair-archfile-] CodeQL workflow run + + + CodeQL: No jobs were run + + View workflow run + + + + + — + You are receiving this because you are subscribed to this thread. + Manage your GitHub Actions notifications + + + GitHub, Inc. ・88 Colin P Kelly Jr Street ・San Francisco, CA 94107 + +... + +[Message clipped] View entire message +tshingombe fiston + +1:03 PM (2 minutes ago) + +to t5h2i0tadi/engineering-tshing-binair-archfile- +Skip to content + + actions / + cache + + + Insights + +Actions: actions/cache +Actions + + +Caches +Showing caches from all workflows. Learn more about managing caches. +16 caches +codeql-trap-1-2.16.4-javascript-0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 87 MB cached March 19, 2024 06:34 +main +Last used March 19, 2024 08:56 +node-cache-Windows-npm-406f79a9138a96d98486e00bf340617c9a5915a3f7107682f8ac70d9540a19d5 29 MB cached March 19, 2024 06:33 +main +Last used March 19, 2024 06:33 +node-cache-macOS-npm-406f79a9138a96d98486e00bf340617c9a5915a3f7107682f8ac70d9540a19d5 29 MB cached March 19, 2024 06:32 +main +Last used March 19, 2024 06:32 +node-cache-Linux-npm-406f79a9138a96d98486e00bf340617c9a5915a3f7107682f8ac70d9540a19d5 29 MB cached March 19, 2024 06:32 +main +Last used March 19, 2024 06:32 +test-Windows-8343936870 367 Bytes cached March 19, 2024 06:32 +main +Last used March 19, 2024 06:32 +test-proxy-8343936870 286 Bytes cached March 19, 2024 06:32 +main +Last used March 19, 2024 06:32 +test-macOS-8343936870 382 Bytes cached March 19, 2024 06:32 +main +Last used March 19, 2024 06:32 +test-Linux-8343936870 368 Bytes cached March 19, 2024 06:32 +main +Last used March 19, 2024 06:32 +node-cache-Windows-npm-406f79a9138a96d98486e00bf340617c9a5915a3f7107682f8ac70d9540a19d5 29 MB cached March 19, 2024 01:31 +refs/pull/1327/merge +Last used March 19, 2024 01:31 +node-cache-macOS-npm-406f79a9138a96d98486e00bf340617c9a5915a3f7107682f8ac70d9540a19d5 29 MB cached March 19, 2024 01:30 +refs/pull/1327/merge +Last used March 19, 2024 01:30 +codeql-trap-1-2.16.4-javascript-ab5e6d0c87105b4c9c2047343972218f562e4319 87 MB cached March 17, 2024 12:02 +main +Last used March 19, 2024 01:30 +node-cache-Linux-npm-406f79a9138a96d98486e00bf340617c9a5915a3f7107682f8ac70d9540a19d5 29 MB cached March 19, 2024 01:30 +refs/pull/1327/merge +Last used March 19, 2024 01:30 +test-Windows-8339832816 336 Bytes cached March 19, 2024 01:30 +refs/pull/1327/merge +Last used March 19, 2024 01:30 +test-proxy-8339832816 284 Bytes cached March 19, 2024 01:30 +refs/pull/1327/merge +Last used March 19, 2024 01:30 +test-Linux-8339832816 391 Bytes cached March 19, 2024 01:30 +refs/pull/1327/merge +Last used March 19, 2024 01:30 +test-macOS-8339832816 415 Bytes cached March 19, 2024 01:30 +refs/pull/1327/merge +Last used March 19, 2024 01:30 +Footer +© 2024 GitHub, Inc. +Footer navigation + + Terms + Privacy + Security + Status + Docs + Contact + + +Workflow runs · actions/cache + + Code + Issues 92 + Pull requests 41 + Discussions + Actions + Security + Workflows + Management + +... + +[Message clipped] View entire message +