diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 2d5a359..46aa368 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -11,27 +11,34 @@ on: - 'action.yml' jobs: - test-save: + generate-key: runs-on: ubuntu-latest outputs: cache-name: ${{ steps.name.outputs.cache-name }} steps: - - uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 - name: Generate random file shell: 'julia --color=yes {0}' run: 'write("random.txt", string(rand(10)))' + - name: Set cache-name as output + id: name + run: echo "::set-output name=cache-name::$(echo $CACHE_NAME)" + env: + CACHE_NAME: ${{ hashFiles('random.txt') }} + + test-save: + needs: generate-key + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + fail-fast: false + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 - name: Save cache id: cache uses: ./ with: - cache-name: ${{ hashFiles('random.txt') }} - - name: Set cache-name as output - id: name - run: | - echo "Setting outputs.cache-name to \"$CACHE_NAME\"" - echo "::set-output name=cache-name::$CACHE_NAME" - env: - CACHE_NAME: ${{ hashFiles('random.txt') }} + cache-name: ${{ needs.generate-key.outputs.cache-name }} - name: Check no artifacts dir shell: 'julia --color=yes {0}' run: | @@ -42,15 +49,19 @@ jobs: run: 'using Pkg; Pkg.add("pandoc_jll")' test-restore: - needs: test-save - runs-on: ubuntu-latest + needs: [generate-key, test-save] + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macOS-latest] + fail-fast: false + runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 - name: Restore cache id: cache uses: ./ with: - cache-name: ${{ needs.test-save.outputs.cache-name }} + cache-name: ${{ needs.generate-key.outputs.cache-name }} - name: Test cache-hit output shell: 'julia --color=yes {0}' run: | diff --git a/action.yml b/action.yml index 1890eac..31156d9 100644 --- a/action.yml +++ b/action.yml @@ -1,5 +1,5 @@ -name: 'Cache Julia Artifacts' -description: 'Cache Julia artifacts using actions/cache' +name: 'Cache Julia artifacts, packages and registry' +description: 'Cache Julia using actions/cache' author: 'Sascha Mann, Rik Huijzer, and contributors' branding: @@ -9,7 +9,16 @@ branding: inputs: cache-name: description: 'Name used as part of the cache keys' - default: 'cache-artifacts' + default: 'julia-cache' + cache-artifacts: + description: 'Whether to cache artifacts' + default: 'true' + cache-packages: + description: 'Whether to cache packages' + default: 'true' + cache-registry: + description: 'Whether to cache the registry' + default: 'false' outputs: cache-hit: @@ -19,11 +28,27 @@ outputs: runs: using: 'composite' steps: + - id: paths + run: | + PATHS="" + [ "$CACHE_ARTIFACTS" = "true" ] && PATHS="${PATHS}~/.julia/artifacts"$'\n' + [ "$CACHE_PACKAGES" = "true" ] && PATHS="${PATHS}~/.julia/packages"$'\n' + [ "$CACHE_REGISTRY" = "true" ] && PATHS="${PATHS}~/.julia/registry"$'\n' + if [ "$PATHS" = "" ]; then + echo "::error title=Invalid inputs::At least one of cache-artifacts, cache-packages or cache-registry has to be true" + exit 1 + fi + echo "::set-output name=cache-paths::$PATHS" + env: + CACHE_ARTIFACTS: ${{ inputs.cache-artifacts }} + CACHE_PACKAGES: ${{ inputs.cache-packages }} + CACHE_REGISTRY: ${{ inputs.cache-registry }} + shell: bash + - uses: actions/cache@937d24475381cd9c75ae6db12cb4e79714b926ed id: cache with: - path: | - ~/.julia/artifacts + path: ${{ steps.paths.outputs.cache-paths }} key: ${{ runner.os }}-test-${{ inputs.cache-name }}-${{ hashFiles('**/Project.toml') }} restore-keys: | ${{ runner.os }}-test-${{ inputs.cache-name }}-