Skip to content

Commit

Permalink
dra
Browse files Browse the repository at this point in the history
  • Loading branch information
maxim-lobanov committed Jul 13, 2021
1 parent 38d90ce commit d9aab2a
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 1 deletion.
2 changes: 1 addition & 1 deletion docs/adrs/0000-caching-dependencies.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# 0. Caching dependencies
Date: 2021-05-21

Status: Proposed
Status: Accepted

# Context
`actions/setup-node` is the 2nd most popular action in GitHub Actions. A lot of customers use it in conjunction with [actions/cache](https://github.com/actions/cache) to speed up dependencies installation.
Expand Down
48 changes: 48 additions & 0 deletions docs/adrs/0001-support-caching-deps-for-monorepos.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
# 0. Support caching dependencies for mono repos
Date: 2021-07-13

Status: Proposed

## Context
Currently, `actions/setup-node` supports caching dependencies for Npm and Yarn package managers.
For the first iteration, we have decided to not support cases where `package-lock.json` / `yarn.lock` are located outside of repository root.
Current implementation searches the following file patterns in the repository root: `package-lock.json`, `yarn.lock` (in order of resolving priorities)

Obviosly, it made build-in caching unusable for mono-repos and repos with complex structure.
We would like to revisit this decision and add customization for dependencies lock file location.

## Proposal
We have the following options:
1. Allow to specify directory where `package-lock.json` or `yarn.lock` are located
2. Allow to specify path to the dependencies lock file (including directory path and filename)

The second option looks more generic because it allows to:
- specify multiple dependencies files using file patterns like `**/package-lock.json` ([one of recommended approaches in actions/cache](https://github.com/actions/cache/blob/main/examples.md#macos-and-ubuntu))
- specify custom dependencies files like `src/npm-shrinkwrap.json`
- change default resolving priority if both `yarn.lock` and `package-lock.json` exist in repository

## Decision

Add `deps-lock-file` input that will accept path (relative to repository root) to dependencies lock file.
If path provided path contains wildcards, the action will search all maching files and calculate common hash like `${{ hashFiles('**/packages.lock.json') }}` YAML construction does.
The hash of privided matched files will be used as a part of cache key.

Yaml examples:
```yml
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14
cache: npm
deps-lock-file: 'sub-project/package-lock.json'
```
```yml
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: 14
cache: yarn
deps-lock-file: 'sub-project/**/yarn.lock'
```

0 comments on commit d9aab2a

Please sign in to comment.