Daz DeBoer
717db318c1
Fix logging of cache key for Gradle User Home
2021-10-31 20:49:29 -06:00
Daz DeBoer
472ac8a356
Report sizes of cache entries
...
Using the patched version of @actions/cache, we now report the total
size of cache entries restored/saved, as well as details of each one.
2021-10-30 13:45:39 -06:00
Daz DeBoer
d785346c8c
Use cache.description
2021-10-30 13:44:22 -06:00
Daz DeBoer
6ca4d4ade2
Improve formatting for caching report
2021-10-30 12:15:00 -06:00
Daz DeBoer
75cec40e58
Rename 'report' classes to 'listener'
...
- `CachingReport` -> `CacheListener`
- `CacheEntryReport` -> `CacheEntryListener`
2021-10-30 12:15:00 -06:00
Daz DeBoer
c317ccac62
Refactor: extract cache-base out of cache-utils
2021-10-30 12:15:00 -06:00
Daz DeBoer
a74bb0fad6
Monitor cache saves and add basic caching report
...
- Restore `CachingReport` instance in 'post' action
- Record keys for any entries saved
- Report caching activity as JSON in post action
2021-10-30 12:14:59 -06:00
Daz DeBoer
727b4612ba
Fix early return from bundle processing
2021-10-30 12:11:59 -06:00
Daz DeBoer
f0f68e07c3
Better handling of .cache files that are not restored
...
- Remove any .cache file that is not restored
- Report on any .cache file that exists but has no config
2021-10-30 06:28:20 -06:00
Daz DeBoer
8ba5a0033b
Track 'fully-restored' by tracking each cache restore
...
Instead of tracking a single 'fully-restored' flag, track the restore status of each
cache entry restore. If any of these are requested but not restored, then the overall
Gradle User Home cache is not fully restored.
Added special handling for the case when zero artifact bundles are set: this is used
in tests to simulate a not-fully-restored state.
2021-10-30 06:05:21 -06:00
Daz DeBoer
9edc2a11bd
Only restore configuration-cache if Gradle Home is fully restored
...
Fixes #107
2021-10-29 09:34:36 -06:00
Daz DeBoer
4ebd000afd
Bundle all downloaded dependency files
...
Previously, only .jar files were bundled, with other files (modules, POMs, zips, etc)
being left in Gradle User Home. All downloaded files are now included in the bundle.
Fixes #100
2021-10-29 08:03:03 -06:00
Daz DeBoer
063fc6a872
Allow source files to contain lines up to 120 characters
...
This avoids excessive line-feeds when reformatting code to 80 char lines.
2021-10-29 07:50:06 -06:00
Daz DeBoer
e3ada7e5c2
Use multiline input parameters instead of JSON input
...
The `gradle-home-cache-includes` and `gradle-home-cache-excludes` parameters were initially implemented
as JSON string inputs. This makes these inputs non-idiomatic and easier to get wrong.
This change converts them to multi-line input parameters.
Fixes #106
2021-10-29 07:29:57 -06:00
Daz DeBoer
27f2dc276c
Rename and document parameters for clarity
...
- cache-paths -> gradle-home-cache-includes
- cache-exclude-paths -> gradle-home-cache-excludes
- CACHE_DEBUG_ENABLED -> GRADLE_BUILD_ACTION_CACHE_DEBUG_ENABLED
2021-10-27 16:05:07 -06:00
Daz DeBoer
39db90e99b
Include build scan link in failure notice
2021-10-21 12:04:25 -06:00
Daz DeBoer
4cf255df10
Move bundle metadata files out of caches
directory
...
Instead, use a separate '.gradle-build-action' directory for bundle
metadata files. This directory is always part of the cache-path.
2021-10-21 11:13:09 -06:00
Daz DeBoer
1113cb87cb
Allow cache-exclude-paths to be configured for action
...
All excluded paths are deleted prior to caching the Gradle User Home.
2021-10-21 11:13:09 -06:00
Daz DeBoer
9c95294209
Allow cache-paths to be set via action config
2021-10-21 11:13:08 -06:00
Daz DeBoer
f901ec9c20
Bump cache-protocol version
2021-10-20 15:04:14 -06:00
Daz DeBoer
a94b9252d5
Improve cache logging
2021-10-16 10:15:40 -06:00
Daz DeBoer
cb6a0acca4
Use precise matching for artifact bundles
...
This should fix the warnings issued when saving artifact bundles.
2021-10-16 09:49:15 -06:00
Daz DeBoer
aa2ed2e033
Use cache protocol version for bundle keys too
2021-10-16 09:49:14 -06:00
Daz DeBoer
263f84178a
Prefix cache key with protocol version
...
This will ensure that incompatiblee cache entries generated by previous action releases
will not be used.
2021-10-16 08:33:42 -06:00
Daz DeBoer
709ded51a5
Treat directory for instrumented jar as single artifact
...
Leaving the `.lock` and `.receipt` files lying around was causing
issues when the actual jar files were not restored. Now the entire
directory will either be missing, or completely restored.
2021-10-15 14:54:29 -06:00
Daz DeBoer
da64595ccc
Make artifact bundle definitions an input parameter
2021-10-15 13:21:13 -06:00
Daz DeBoer
29b14c7fca
Refactor: rename methods for 'bundle' concept
2021-10-15 12:34:38 -06:00
Daz DeBoer
53ccc3e0d7
Add more cache debug logging
2021-10-15 11:45:15 -06:00
Daz DeBoer
8ab7c9d8dd
Do not fail action on cache errors
...
Ensure that we catch and log errors in `beforeSave` and `afterRestore`,
and do not fail the entire workflow in these cases.
2021-10-14 12:19:24 -06:00
Daz DeBoer
4968d2280b
Allow time for processes to release file locks on windows
2021-10-04 23:59:08 +02:00
Daz DeBoer
60b1ffac6b
Fix build-scan-init script to work with build-in build-scan plugins
2021-09-29 14:39:48 -06:00
Daz DeBoer
0918f5f2a4
Rename source file for clarity
2021-09-28 00:04:50 -06:00
Daz DeBoer
a7174b82a2
Use init script to capture build scan URL
...
Instead of parsing the log output, we instead register a
buildScanPublished listener and record the build scan URL
to a file. This file is subsequently read to report the
build scan URL.
Fixes #30
2021-09-28 00:04:41 -06:00
Daz DeBoer
5a5a5b4387
Normalize paths to Gradle User Home when calculating cache keys
...
Fixes #77
2021-09-27 21:52:03 -06:00
Daz DeBoer
cc5cdb7fe0
Adapt caching for GRADLE_USER_HOME env var
...
Fixes #74
2021-09-27 21:50:14 -06:00
Daz DeBoer
bebb162342
Usability improvements:
...
- Include bundle name in cache key
- Emit a few more messages at 'info'
2021-09-15 17:50:53 -06:00
Daz DeBoer
6084a4eb65
Cache artifacts with single entry per type
...
When caching is too fine-grained, an excessive number of cache
requests can result in HTTP 429 errors due to rate limiting.
By caching all artifacts of a particular type in a single entry
we hope to mitigate this, at the expense of some reduction in
cache space optimization.
This change also adds caching for all dependency jars, as well as
instrumented jars in the 'caches/jars-X' directory.
2021-09-15 17:45:47 -06:00
Daz DeBoer
dbb485d80d
Only perform post-restore and pre-save cache actions when required
2021-09-15 17:45:47 -06:00
Daz DeBoer
fe64d05f86
Do not cache dependency jars individually
...
Unfortunately, doing this overloads the GitHub actions cache infrastructure
leading to failures and unpredictable results.
A later solution may re-implement artifact sharing for dependency jars
as well as jars within the `caches/jars-9` directory. But for now these
will be duplicated across each Gradle User Home cache entry.
2021-09-14 18:07:28 -06:00
Daz DeBoer
decca791c5
Consolidate error handling for cache restore/save
2021-09-14 13:39:37 -06:00
Daz DeBoer
bd08e7b7cd
Do not fail build on error restoring artifact for marker
...
Instead, catch and report these errors before continuing.
2021-09-14 13:38:48 -06:00
Daz DeBoer
cca55d0890
Fail action execution on unhandled errors
...
Without this, the error logs contain an "UnhandledPromiseRejectionError"
but the action is reported as succeeding.
2021-09-14 07:48:06 -06:00
Daz DeBoer
bbe1574290
Add some TODOs to the code for future reference
2021-09-13 11:50:07 -06:00
Daz DeBoer
4264cda558
Group log messages generated when provisioning Gradle
2021-09-13 11:50:07 -06:00
Daz DeBoer
3390540145
Simplify setting caches to disabled or read-only
2021-09-13 11:04:42 -06:00
Daz DeBoer
1c72a31463
Allow cache debug logging to be selectively enabled
...
- Move more messages out of main 'info' log
- Only log cache entry size when debugging
- Process cache entries sequentially when debugging
2021-09-13 10:52:09 -06:00
Daz DeBoer
7dfbe33bba
Improve formatting for cache entry size reporting
2021-09-13 10:51:24 -06:00
Daz DeBoer
e63ddf9c00
Avoid warning for cache reservation errors
...
We have no way of knowing if another build has already cached these
artifacts, so CacheReservationError is expected.
2021-09-13 10:50:47 -06:00
Daz DeBoer
cae99bf6d9
Tidy up cache entry de-duplication
...
- Rename feature to "common artifact caching"
- Cleanup logging
- Refactor/rename for clarity
2021-09-12 10:31:52 -06:00
Daz DeBoer
5a90152b1f
Restore/cache deduplicated files in parallel
2021-09-12 10:31:52 -06:00
Daz DeBoer
4b92b8d013
Cache downloaded dependency jars separately
...
This will further remove common files out the the Gradle User Home
cache entries, reducing cache usage by removing redundancy.
2021-09-12 10:31:51 -06:00
Daz DeBoer
693293c29a
Consolidate logic for separate artifact file caching
...
Making this functionality more general will make it easier to add other
artifacts to the set that we cache separately.
2021-09-12 10:31:51 -06:00
Daz DeBoer
ac5d8920dd
Cache generated-gradle-jars separately from Gradle User Home
...
Similar to wrapper distributions, these large files are common
to many Gradle User Home cache entries. Storing them separately removes
this redundancy from the Gradle User Home cache.
2021-09-12 10:31:51 -06:00
Daz DeBoer
e833360307
Cache downloaded wrapper dists separately
...
In the current model, each cached Gradle User Home could contain
a copy of one or more downloaded wrapper distributions. This results
in large cache entries which could easily lead to premature eviction.
With this change, wrapper dists are cached separately from the rest
of the Gradle User Home directory. The artifact file is replaced by
a marker file which allows the action to restore the artifact from
cache when the Gradle user Home cache is restored.
2021-09-12 10:31:51 -06:00
Daz DeBoer
9b3abaad52
Use current matrix values for workflow job context
2021-09-07 16:26:28 -06:00
Daz DeBoer
d20d631365
Cleanup code to resolve Gradle wrapper script
2021-09-07 15:17:39 -06:00
Daz DeBoer
378bd0b6f8
Save and restore caches in parallel
2021-09-07 15:17:39 -06:00
Daz DeBoer
6d1455a33e
Tidy-up caching code
...
- Extracted common code for Gradle User Home and Project .gradle caches
into abstract supertype.
- Improve error handling by checking error types
2021-09-07 15:17:39 -06:00
Daz DeBoer
c44ebadf6f
Add build scan link as a notice annotation
...
- Use 'notice' method introduced in @actions/core v1.5.0
2021-09-05 21:38:34 -06:00
Daz DeBoer
4d37378696
Consolidate cache-enabled options
2021-09-05 21:38:33 -06:00
Daz DeBoer
777a6fc967
Generate cache key based on Job invocation
...
Attempt to capture as much context as possible about the job run
to generate a unique cache key. Unfortunately much of the matrix context
is not available to the action implementation.
2021-09-05 21:35:17 -06:00
Daz DeBoer
d7ed6d7e8d
Extract cache key generation into common function
2021-09-05 17:11:50 -06:00
Daz DeBoer
0ecbac99f3
Group log messsages for restore/save cache
2021-09-03 11:34:22 -06:00
Daz DeBoer
b85ac67c9a
Seed the cache key with workflow id in CI
...
This will eliminate cache entries from previous workflow runs, allowing
us to test cache functionality in isolation. If the `CACHE_KEY_SEED` environment
variable is not set, this will have no impact.
2021-08-27 12:52:01 -06:00
Daz DeBoer
fa0c026e07
Always execute Gradle with --no-daemon
...
The Gradle daemon is not useful for ephemeral builds, and the process
can hold file locks which interfere with cache entry generation.
In the case where multiple Gradle invocations occur in the same job,
we could provide a way for users to override this behaviour, taking care
of stopping any daemon process at the end of the job.
2021-08-27 12:21:46 -06:00
Daz DeBoer
6fca6b3929
Add support for read-only caching in v2
2021-08-26 17:25:49 -06:00
Daz DeBoer
d9cc0aeccf
Remove old caching code
2021-08-24 12:54:21 -06:00
Daz DeBoer
5340f6e816
Add cache for project .gradle dir
...
- For now, this is limited to configuration-cache directory
2021-08-24 12:52:51 -06:00
Daz DeBoer
c211be411e
Use monolithic cache for Gradle User Home
...
- Do not restore cache when GUH exists
- Include RUNNER_OS in the cache key
- Do not save cache on exact hit
- Only save cache in the final post action
- Log before saving cache
2021-08-24 12:52:51 -06:00
Daz DeBoer
b3afdc78a7
Truncate Gradle args when constructing cache key ( #71 )
...
Cache keys have a hard limit of 512 characters, so we need to ensure that we don't generate a key longer than this.
- Remove excess whitespace
- Truncate to 400 characters
Fixes #70
2021-08-24 12:46:48 -06:00
Daz DeBoer
e0c2736e35
Include Gradle invocation arguments in cache keys ( #69 )
...
This permits a new cache entry to be persisted when a subsequent Gradle invocation does more work that an earlier invocation.
Fixes #68
2021-08-22 17:11:05 -06:00
Daz DeBoer
a63892c289
Log cache entry on save
2021-08-22 14:58:36 -06:00
Daz DeBoer
a693ccda4b
Allow use of caches 'read-only'
...
To avoid evicting useful entries, some pipeline may benefit from using existing
cache entries without writing any changes back to the cache.
Fixes #62
2021-08-22 14:28:34 -06:00
Daz DeBoer
88af98fab4
Fail if configuration-cache is enabled without dependencies cache
...
Fixes #61
2021-08-07 16:13:35 -07:00
Daz DeBoer
01bfa29846
Update metadata and docs for repository move/rename
...
Fixes #60
2021-08-07 16:13:35 -07:00
Daz DeBoer
02d4f46354
Use core functionality to access action inputs
...
- Specify default values in action.yaml definition where appropriate
- Replace custom methods with core functions:
- getInputBoolean() with core.getBooleanInput()
- inputOrNull() with core.getInput()
- inputArrayOrNull() with core.getMultilineInput()
- Remove github-utils.js
2021-07-26 14:54:59 -06:00
Daz DeBoer
b9684c0cf5
Prefer ‘release-candidate’ instead of ‘rc’
...
This makes the version alias match other places where we reference a release candidate version.
The 'rc' alias is still supported, but emits a deprecation warning.
2021-07-26 14:54:59 -06:00
Daz DeBoer
33e91b639d
Cache Gradle distributions downloaded for a particular version ( #58 )
...
- Cache is separate from (but similar to) the wrapper distribution cache
- New 'distributions-cache-enabled' flag controls caching of all downloaded distributions
(including wrapper distributions)
- Deprecated the 'wrapper-cache-enabled' flag for removal in v2
2021-07-08 12:22:48 -06:00
Daz DeBoer
e4ec586f46
Only cache the wrapper ZIP, not the exploded dir
...
Prior to this change, the wrapper cache contained both the downloaded zip
file as well as the exploded wrapper dir. Only the zip file is required,
as Gradle will automatically detect and unpack.
2021-07-08 08:01:44 -06:00
Daz DeBoer
15a8123fbc
Validate presense of gradle wrapper to provide better feedback
...
- Provide a more useful error message when no Gradle wrapper can be located,
and 'gradle-version' or 'gradle-executable' is not used.
- Add test for case where wrapper is missing.
This isn't really a "test" per-se, but this failing build invocation makes it
easy to verify the GitHub action behaviour when the build is misconfigured.
2021-07-08 08:01:44 -06:00
Daz DeBoer
18c8a679dc
Look for gradle wrapper in build-root-directory by default
...
This removes the need to specify `wrapper-directory` when using a Gradle
project that is not located in the root of the workspace.
Fixes #44 .
2021-07-06 09:56:27 -06:00
Daz DeBoer
738bda9866
Use built-in library functions in preference to custom implementations
...
- Use built-in `hashFiles` function included in '@actions/globv0.2.0'
- Use `downloadTool` and `extractZip` functions from '@actions/tool-cache'
2021-07-05 13:57:22 -06:00
Paul Merlin
2efcc22ff5
Replace typed-rest-client with @actions/http-client
2020-09-13 14:17:37 +02:00
Paul Merlin
cb2742a00b
Protect RC provisioning from network problems and add logging
2020-09-13 13:30:54 +02:00
Paul Merlin
55871cbb47
Simplify build scan url extraction
2020-09-13 13:09:14 +02:00
Paul Merlin
e3d60b3873
Protect wrapper cache restore against tar errors
2020-09-13 13:06:00 +02:00
Paul Merlin
f11e7d60d7
Short-circuit dependencies and configuration caching if cache dir already exists
...
This is relevant if you run this action several times in a single job.
This prevent doing unnecessary work starting with the second job using the action.
This prevent droping dependencies downloaded by the first job using the action.
This prevent Windows agents to fail unlinking already existing files.
2020-06-22 16:40:58 +02:00
Paul Merlin
466a737d16
Only restore wrapper cache if dir doesn't exist
2020-06-15 19:33:04 +02:00
Paul Merlin
4c7d97cca4
Add caching of Gradle build configuration cache
2020-06-15 15:58:20 +02:00
Paul Merlin
2afa86ca9f
Disable dependencies cache by default
2020-06-15 15:57:09 +02:00
Paul Merlin
ae50675399
Better warning message
2020-06-15 15:43:21 +02:00
Paul Merlin
d7a54a26c7
Don't drop gc.properties in dependencies cache
...
because it would disable Gradle cache cleanup
2020-06-15 15:41:53 +02:00
Paul Merlin
02a8a21e55
Add input to disable wrapper caching
2020-06-15 15:41:09 +02:00
Paul Merlin
3abad5567a
Add input to disable dependencies caching altogether
2020-06-15 14:32:54 +02:00
Paul Merlin
355e9c1f86
Try delete dependencies lock files and disable caching if not possible
2020-06-15 14:22:41 +02:00
Paul Merlin
26dd4cb9bb
Make file hashing more robust
2020-06-15 14:09:44 +02:00
Paul Merlin
317ca35dca
Refine dependencies caching
2020-06-15 13:16:51 +02:00
Paul Merlin
053762c1c1
Add input to make the dependencies caching strict
2020-06-15 13:05:36 +02:00
Paul Merlin
95e20daa83
Automatic caching of dependencies
...
in a best effort manner by default
allowing to specify files to hash for computing the cache key
2020-06-15 13:04:42 +02:00
Paul Merlin
fcc1683d01
Extract github actions utils
2020-06-14 19:05:03 +02:00
Paul Merlin
059f2e7791
Rename cache.ts to cache-wrapper.ts
2020-06-14 19:04:18 +02:00
Paul Merlin
692fda9de7
Cache wrapper install when gradle-executable points to a wrapper
2020-06-14 18:01:54 +02:00
Paul Merlin
c839ac993c
Locate user home in an OS agnostic way
2020-06-14 12:28:17 +02:00
Paul Merlin
1c1db193aa
Cache wrapper installation
2020-06-13 16:15:53 +02:00
Paul Merlin
9675f09de6
Compute wrapper cache key
2020-06-13 15:51:58 +02:00
Paul Merlin
392bcac1c1
Fix state
2020-06-13 15:03:30 +02:00
Paul Merlin
a2ba1beedb
Debugging
2020-06-13 15:01:08 +02:00
Paul Merlin
42e2fed267
Cache wrapper dist, step 1
2020-06-13 14:48:54 +02:00
Paul Merlin
8e2fd532f1
Fix dist download
2020-06-13 14:37:12 +02:00
Paul Merlin
4a9a0a05a3
Lint 3
2020-06-13 14:30:57 +02:00
Paul Merlin
1647b85e82
Lint 2
2020-06-13 14:21:54 +02:00
Paul Merlin
6cee865aea
Lint
2020-06-13 13:58:25 +02:00
Paul Merlin
a31de8476d
Format
2020-06-13 13:44:30 +02:00
Paul Merlin
a188e7cd61
Debug logging
2020-06-13 13:36:11 +02:00
Paul Merlin
e0644c97f9
Split action, step 2
2020-06-13 13:34:07 +02:00
Frieder Bluemle
ae5079ecac
Fix GitHub spelling
2020-03-17 22:36:04 +01:00
Vladimir Orany
bf26498bc4
ignore version called "wrapper"
...
fixes #5
2019-12-09 10:44:21 +01:00
Paul Merlin
15e064da79
Add missing await
2019-10-28 13:30:27 +01:00
Paul Merlin
c5e1979a6b
Fix relative paths issues when using build-root-directory
2019-10-28 13:26:37 +01:00
Paul Merlin
38eaee068d
polish src/provision.ts
2019-09-23 12:12:03 +02:00
Paul Merlin
0a56b592f2
capture build scan url on failed build
2019-09-23 12:11:18 +02:00
Paul Merlin
091093ee61
polish src/gradlew.ts
2019-09-23 12:10:49 +02:00
Paul Merlin
bc921df1ec
Initial impl
2019-09-21 16:01:53 +02:00
Paul Merlin
8ba9907b46
Initial commit
2019-09-20 23:06:59 +02:00