mirror of
https://github.com/actions/setup-go.git
synced 2026-06-30 10:26:39 +00:00
Compare commits
6 Commits
51c3ddf7d6
...
d42f44315b
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d42f44315b | ||
|
|
9b4533e484 | ||
|
|
ff99eca7af | ||
|
|
1ac9d654af | ||
|
|
57dc459658 | ||
|
|
3671db66cb |
62
README.md
62
README.md
@ -163,7 +163,7 @@ in different subdirectories. The input supports glob patterns.
|
||||
|
||||
If some problem that prevents success caching happens then the action issues the warning in the log and continues the execution of the pipeline.
|
||||
|
||||
**Caching in monorepos**
|
||||
### Caching in monorepos
|
||||
|
||||
```yaml
|
||||
steps:
|
||||
@ -171,16 +171,11 @@ steps:
|
||||
- uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.17'
|
||||
check-latest: true
|
||||
cache-dependency-path: |
|
||||
subdir/go.sum
|
||||
tools/go.sum
|
||||
# cache-dependency-path: "**/*.sum"
|
||||
|
||||
cache-dependency-path: subdir/go.sum
|
||||
- run: go run hello.go
|
||||
```
|
||||
|
||||
**Caching in multirepos**
|
||||
### Caching in multirepos
|
||||
`cache-dependency-path` input assepts glob patterns and multi-line values:
|
||||
|
||||
```yaml
|
||||
@ -205,10 +200,8 @@ steps:
|
||||
- run: go run hello.go
|
||||
```
|
||||
|
||||
## Multi-target builds
|
||||
`cache-dependency-path` input used to generate unuque cache key and it is not limited to only
|
||||
dependencies files. The common case is to add a file containing the extr info about the specific
|
||||
build, for example build target.
|
||||
### Multi-target builds
|
||||
The 'cache-dependency-path' input doesn't limit itself to dependency lock files only. It can also be used with additional files that contain details about the build settings. By using this method, caches for builds created for various operating systems, architectures, etc. can be separated.
|
||||
|
||||
```yaml
|
||||
env:
|
||||
@ -216,16 +209,18 @@ env:
|
||||
GOARCH: ...
|
||||
|
||||
steps:
|
||||
- run: echo "$GOOS $GOARCH"> /tmp/env
|
||||
- run: echo "$GOOS $GOARCH" > /tmp/env
|
||||
|
||||
- uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.17'
|
||||
cache-dependency-path: go.sum /tmp/env
|
||||
cache-dependency-path: |
|
||||
go.sum
|
||||
/tmp/env
|
||||
- run: go run hello.go
|
||||
```
|
||||
|
||||
## Invalidate cache when source code changes
|
||||
### Invalidate cache when source code changes
|
||||
Besides the dependencise the action caches the build outputs
|
||||
([GOCACHE](https://pkg.go.dev/cmd/go#hdr-Build_and_test_caching) directory) but by default this
|
||||
cache is not update in order to avoid unpredictable and frequent cache invaldation. Nevertheless
|
||||
@ -239,28 +234,15 @@ including the source code files into `cache-dependency-path` input.
|
||||
- run: go run hello.go
|
||||
```
|
||||
|
||||
But more practically to manage the cache with the text file manually updated according to the amount
|
||||
of changes made in the repo.
|
||||
### Caching with actions/cache
|
||||
The caching capabilities of setup-go are limited to the simplest and most popular use cases. If fine-grained tuning of caching is required, it's recommended to disable the built-in caching and use [actions/cache](https://github.com/actions/cache).
|
||||
|
||||
```yaml
|
||||
- uses: actions/setup-go@v4
|
||||
with:
|
||||
go-version: '1.17'
|
||||
cache-dependency-path: go.sum cache-version.txt
|
||||
- run: go run hello.go
|
||||
```
|
||||
|
||||
## Caching with actions/cache
|
||||
The caching capabilities of the action are limited for the simplest builds and can be ineffective in the real world
|
||||
use cases. If the build requires fine-grained turning the built-in caching should be disabled and
|
||||
[actions/cache](https://github.com/actions/cache) should be used.
|
||||
|
||||
Here the sample `actions/cache` configuration with the extending options allowing
|
||||
- configuring paths to cache
|
||||
- have different caches for rare changes dependencies and more often changed intermediate build files
|
||||
- use `restore-key` input to restore the previous cache even if the current key cache has changed
|
||||
- have different caches intermediate build files of different architectures
|
||||
- have custom cache key for parallel builds
|
||||
The example workflow below utilizes the `actions/cache` action and adds flexibility, for instance, it:
|
||||
- allows to configure cache path
|
||||
- allows to have different caches for rare changed dependencies and more often changed intermediate build files
|
||||
- uses the `restore-key` input to restore the previous cache even if the current key cache has changed
|
||||
- has different caches for the compiler's build outputs for different architectures
|
||||
- has custom cache keys for parallel builds
|
||||
|
||||
```yaml
|
||||
build:
|
||||
@ -285,8 +267,6 @@ build:
|
||||
path: |
|
||||
${{ env.cache }}
|
||||
key: setup-go-deps-${{ runner.os }}-go-${{ hashFiles('go.sum go.mod') }}
|
||||
restore-keys: |
|
||||
setup-go-deps-${{ runner.os }}-go-
|
||||
|
||||
- name:
|
||||
run: echo "$GOOS $GOARCH"> /tmp/env
|
||||
@ -302,16 +282,16 @@ build:
|
||||
|
||||
```
|
||||
|
||||
## Restore-only caches
|
||||
### Restore-only caches
|
||||
If there are several builds on the same repo it might make sense to create a cache in one build and use it in the
|
||||
others. The action [actions/cache/restore](https://github.com/marketplace/actions/cache-restore)
|
||||
should be used in this case.
|
||||
|
||||
## Generate different caches
|
||||
### Generate different caches
|
||||
This advanced use case assumes manual definition of cache key and requires the use of
|
||||
[actions/cache](https://github.com/actions/cache/blob/main/examples.md#go---modules)
|
||||
|
||||
## Parallel builds
|
||||
### Parallel builds
|
||||
To avoid race conditions during the parallel builds they should either
|
||||
[generate their own caches](#generate-different-caches), or create the cache
|
||||
for only one build and [restore](#restore-only-caches) that cache in the other builds.
|
||||
|
||||
Loading…
Reference in New Issue
Block a user