How do I cache steps in GitHub actions?

后端 未结 6 1814
野趣味
野趣味 2021-01-30 10:54

Say I have a GitHub actions workflow with 2 steps.

  1. Download and compile my application\'s dependencies.
  2. Compile and test my application

My

6条回答
  •  再見小時候
    2021-01-30 11:03

    Caching is now natively supported via the cache action. It works across both jobs and workflows within a repository. See also: https://help.github.com/en/actions/automating-your-workflow-with-github-actions/caching-dependencies-to-speed-up-workflows.

    Consider the following example:

    name: GitHub Actions Workflow with NPM cache
    
    on: [push]
    
    jobs:
      build:
    
        runs-on: ubuntu-latest
    
        steps:
        - uses: actions/checkout@v1
    
        - name: Cache NPM dependencies
          uses: actions/cache@v1
          with:
            path: ~/.npm
            key: ${{ runner.OS }}-npm-cache-${{ hashFiles('**/package-lock.json') }}
            restore-keys: |
              ${{ runner.OS }}-npm-cache-
    
        - name: Install NPM dependencies
          run: npm install
    

    Where the path and key parameters of the cache action is used to identify the cache.

    The optional restore-keys is used for a possible fallback to a partial match (i.e. if package-lock.json changes the previous cache will be used).

    Prefixing the keys with some id (npm-cache in this example) is useful when the restore-keys fallback is used and there're multiple different caches (e.g. for JS packages and for system packages). Otherwise, one cache could fall back to the other unrelated cache. Similarly, an OS prefix useful when using matrix builds so caches of different systems don't get mixed up.

    You can also build your own reusable caching logic with @actions/cache such as:

    • 1-liner NPM cache
    • 1-liner Yarn cache

    Old answer:

    Native caching is not currently possible, expected to be implemented by mid-November 2019.

    You can use artifacts (1, 2) to move directories between jobs (within 1 workflow) as proposed on the GH Community board. This, however, doesn't work across workflows.

提交回复
热议问题