Merge pull request #1833 from marcosnils/fix/todoapp_cache

WIP: Add node_modules mount to improve caching times
This commit is contained in:
Solomon Hykes 2022-03-24 11:53:19 -07:00 committed by GitHub
commit c800cb5a3a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 47 additions and 32 deletions

View File

@ -88,16 +88,16 @@ I change this line to `What must be done today?` and run the build locally again
dagger do build dagger do build
[✔] client.filesystem.".".read 0.0s [✔] client.filesystem.".".read 0.0s
[✔] actions.deps 40.8s [✔] actions.deps 7.5s
[✔] actions.test.script 0.0s [✔] actions.test.script 0.0s
[✔] actions.test 6.3s [✔] actions.test 6.0s
[✔] actions.build.run.script 0.0s [✔] actions.build.run.script 0.0s
[✔] actions.build.run 43.6s [✔] actions.build.run 29.2s
[✔] actions.build.contents 0.4s [✔] actions.build.contents 0.0s
[✔] client.filesystem.build.write 0.1s [✔] client.filesystem.build.write 0.1s
``` ```
The total `84.4` time is macOS specific, since the Linux alternative is more than 5x quicker. The total `42.8` time is macOS specific, since the Linux alternative is more than 8x quicker.
Either way, this local test & build loop is likely to change our approach to iterating on changes. Either way, this local test & build loop is likely to change our approach to iterating on changes.
It becomes even more obvious when the change is not as straightforward as knowing _exactly_ which line to edit. It becomes even more obvious when the change is not as straightforward as knowing _exactly_ which line to edit.
@ -168,17 +168,17 @@ I change this line to `What must be done today?` and run the build locally again
```shell ```shell
dagger do build dagger do build
[✔] client.filesystem.".".read 0.1s [✔] client.filesystem.".".read 0.0s
[✔] actions.deps 13.3s [✔] actions.deps 1.1s
[✔] actions.test.script 0.0s [✔] actions.test.script 0.0s
[✔] actions.test 1.8s [✔] actions.test 0.0s
[✔] actions.build.run.script 0.0s [✔] actions.build.run.script 0.8s
[✔] actions.build.run 10.1s [✔] actions.build.run 2.9s
[✔] actions.build.contents 0.6s [✔] actions.build.contents 0.0s
[✔] client.filesystem.build.write 0.1s [✔] client.filesystem.build.write 0.0s
``` ```
Being able to re-run the test & build loop locally in `26.7s`, without adding any extra dependencies to our host, is likely to change our approach to iterating on changes. Being able to re-run the test & build loop locally in `4.8s`, at the same speed as running `yarn` scripts locally and without adding any extra dependencies to our host, is likely to change our approach to iterating on changes.
It becomes even more obvious when the change is not as straightforward as knowing _exactly_ which line to edit. It becomes even more obvious when the change is not as straightforward as knowing _exactly_ which line to edit.
</TabItem> </TabItem>
@ -225,14 +225,15 @@ dagger do build
With an empty cache, installing all dependencies, then testing & generating a build for this example app completes in just under a minute: With an empty cache, installing all dependencies, then testing & generating a build for this example app completes in just under a minute:
```shell ```shell
[✔] client.filesystem.".".read 0.2s [✔] actions.deps 62.1s
[✔] actions.deps 55.2s [✔] actions.build.run.script 0.4s
[✔] actions.test.script 0.1s [✔] actions.test.script 0.5s
[✔] actions.test 1.8s [✔] client.filesystem.".".read 0.6s
[✔] actions.build.run.script 0.1s [✔] actions.test 2.0s
[✔] actions.build.run 8.6s [✔] actions.build.run 12.4s
[✔] actions.build.contents 0.4s [✔] actions.build.contents 0.1s
[✔] client.filesystem.build.write 0.2s [✔] client.filesystem.build.write 0.2s
[✔] client.filesystem.".".read 0.2s
``` ```
Since this is a static application, we can open the files which are generated in `actions.build.contents` in a browser. Since this is a static application, we can open the files which are generated in `actions.build.contents` in a browser.
@ -256,17 +257,18 @@ I change this line to `What must be done today?` and run the build locally again
```shell ```shell
dagger do build dagger do build
INF upgrading buildkit have host network=true version=v0.10.0 INF upgrading buildkit have host network=true version=v0.10.0
[✔] client.filesystem.".".read 0.1s [✔] actions.build.run.script 0.0s
[✔] actions.deps 15.0s [✔] actions.deps 3.4s
[✔] client.filesystem.".".read 0.2s
[✔] actions.test.script 0.0s [✔] actions.test.script 0.0s
[✔] actions.test 1.8s [✔] actions.test 1.8s
[✔] actions.build.run.script 0.0s [✔] actions.build.run 7.7s
[✔] actions.build.run 8.9s [✔] actions.build.contents 0.2s
[✔] actions.build.contents 0.4s [✔] client.filesystem.build.write 0.2s
[✔] client.filesystem.build.write 0.1s [✔] client.filesystem.".".read 0.1s
``` ```
Being able to re-run the test & build loop locally in `26.3s`, without adding any extra dependencies to our host, is likely to change our approach to iterating on changes. Being able to re-run the test & build loop locally in `13.6s`, without adding any extra dependencies to our host, is likely to change our approach to iterating on changes.
It becomes even more obvious when the change is not as straightforward as knowing _exactly_ which line to edit. It becomes even more obvious when the change is not as straightforward as knowing _exactly_ which line to edit.
</TabItem> </TabItem>

View File

@ -9,6 +9,14 @@ import (
) )
dagger.#Plan & { dagger.#Plan & {
_nodeModulesMount: "/src/node_modules": dagger.#Mount & {
dest: "/src/node_modules"
type: "cache"
contents: dagger.#CacheDir & {
id: "todoapp-modules-cache"
}
}
client: { client: {
filesystem: { filesystem: {
".": read: { ".": read: {
@ -46,13 +54,16 @@ dagger.#Plan & {
// install yarn dependencies // install yarn dependencies
bash.#Run & { bash.#Run & {
workdir: "/src" workdir: "/src"
mounts: "/cache/yarn": dagger.#Mount & { mounts: {
"/cache/yarn": dagger.#Mount & {
dest: "/cache/yarn" dest: "/cache/yarn"
type: "cache" type: "cache"
contents: dagger.#CacheDir & { contents: dagger.#CacheDir & {
id: "todoapp-yarn-cache" id: "todoapp-yarn-cache"
} }
} }
_nodeModulesMount
}
script: contents: #""" script: contents: #"""
yarn config set cache-folder /cache/yarn yarn config set cache-folder /cache/yarn
yarn install yarn install
@ -64,6 +75,7 @@ dagger.#Plan & {
test: bash.#Run & { test: bash.#Run & {
input: deps.output input: deps.output
workdir: "/src" workdir: "/src"
mounts: _nodeModulesMount
script: contents: #""" script: contents: #"""
yarn run test yarn run test
"""# """#
@ -72,6 +84,7 @@ dagger.#Plan & {
build: { build: {
run: bash.#Run & { run: bash.#Run & {
input: test.output input: test.output
mounts: _nodeModulesMount
workdir: "/src" workdir: "/src"
script: contents: #""" script: contents: #"""
yarn run build yarn run build