Commit Graph

222 Commits

Author SHA1 Message Date
Daz DeBoer 3fbe033aaa Retain 'set-output' command when GITHUB_OUTPUT is not set
This should maintain compatibility with older GitHub Enterprise versions
2022-10-22 08:20:16 -06:00
Daz DeBoer 3b959539de Remove use of deprecated 'set-output' command
- Use GITHUB_OUTPUT file in init script
- Write to a marker file in configuratiion-cache tests

Fixes #461
2022-10-20 14:09:12 -06:00
Daz DeBoer 394498f89f Avoid appending to existing build-results file
When configuration-cache is enabled, the invocationId may not be unique, which can result in
mulitple builds writing to the same file. Rather than failing the post-action, we simply
ignore any subsequent build results with the same ID.

Fixes #441
2022-09-26 11:03:26 -06:00
Daz DeBoer 0e4b100458 Use node to set file timestamps
Using `find` and `touch` will not work on windows, so this provides a
cross-platform mechanism.
2022-08-26 09:04:11 -06:00
Daz DeBoer 82bc72e1e7 Re-enable cache-cleanup on Windows 2022-08-26 09:03:58 -06:00
Daz DeBoer 531cc21aeb Clarify comment 2022-08-25 20:26:16 -06:00
Daz DeBoer cc60593845 Disable cache-cleanup on Windows
It does not seem possible to use `find .. -exec ..` on Windows,
so a node-only solution may be required.
2022-08-25 20:06:13 -06:00
Daz DeBoer fb549a8417 Avoid using GNU-specific touch options
This makes cache-cleaner work correctly on MacOS.
2022-08-25 20:03:04 -06:00
Daz DeBoer 25ec178747 Add integration test for cache cleanup 2022-08-22 14:08:28 -06:00
Daz DeBoer 3cc0a8f6bb Add some explanatory comments 2022-08-22 14:08:28 -06:00
Daz DeBoer 915123c493 Add experimental support for cache-cleanup
- Includes basic implementation as `CacheCleaner`
- Integration test that checks unused files are removed:
  - Downloaded dependencies
  - Local build cache entries
  - Wrapper distributions
2022-08-22 14:08:28 -06:00
Daz DeBoer eb22e65b5b Extract constant for Env Var name 2022-08-22 13:30:07 -06:00
Daz DeBoer 8a386f6915 Remove custom option for cache-read-timeout
Now that `@actions/cache` provides a env var override, we can remove our
custom configuration for setting the timeout on cache restore operations.

If the env var is NOT set, we continue to override the 60min default with 10mins.
2022-08-22 13:13:20 -06:00
Daz DeBoer f0ec7fb780 Remove 'followSymbolicLinks: false' flag for Globber
It appears that when restoring the Gradle User Home directory, certain empty
directories are being identified by Node as broken symlinks. This results in
`Error: ENOENT: No such file or directory` when attempting to resolve a Glob pattern.

By using the default behaviour of Globber (followSymbolicLinks && ignoreBrokenLinks),
these bad files no longer cause errors when saving the Gradle User Home to cache.

Fixes #408
2022-08-18 17:10:03 -06:00
Daz DeBoer 8f9b7c7d7f Add a configurable timeout for cache reads
Fixes #369
2022-08-16 17:37:41 -06:00
Daz DeBoer b49446f8e1 Improved cache reporting
- Fix count of saved entries
- Catch and report errors on save and restore
- Correctly report entries that are never requested
2022-08-16 16:37:17 -06:00
Daz DeBoer 792a93a5e3 Do not write build-results file outside GitHub Actions context
The init-scripts added to Gradle User Home were assuming the presence of certain
GitHub Actions environment variables. With this fix, these init scripts behave
better without these env vars.

Fixes #350
2022-07-11 15:09:56 -06:00
Daz DeBoer 6965e8ed4c Only stop Gradle Daemons when saving Gradle User Home state
Fixes #341
2022-06-22 16:41:03 -06:00
Daz DeBoer 884bca012f Extracted some classes and refactored for clarity 2022-06-22 16:35:55 -06:00
Daz DeBoer 4cb86e9712 Report when cache not available 2022-06-20 20:17:36 -06:00
Daz DeBoer eaed5520c4 Write job summary to logs when feature not available 2022-06-20 20:10:34 -06:00
Daz DeBoer ec939a8c10 Disable caching when feature not available 2022-06-20 18:11:11 -06:00
Daz DeBoer 67f42d16a1 Write Job Summary HTML directly
This allows more control over the table layout, including centering of column content.
2022-06-19 10:42:34 -06:00
Daz DeBoer 56036f8577 Improve rendering of Job Summary 2022-06-19 09:40:27 -06:00
Daz DeBoer df4c1902a6 Extract common functionality for recording build results 2022-06-15 08:29:55 -06:00
Daz DeBoer 132237ba05 Capture failure to publish build scan in results 2022-06-15 08:08:41 -06:00
Daz DeBoer 3d091fa7a8 Move initscripts into src/resources/init-scripts 2022-06-11 09:33:38 -06:00
Daz DeBoer f3e4903860 Check that job summary support is available
Fixes #319
2022-06-09 09:26:30 -06:00
Daz DeBoer 93c31ca3b5 Don't fail if the file-to-delete no longer exists
Fixes #308
2022-06-06 15:35:57 -06:00
Daz DeBoer 7a15005377 Avoid printing "reason unknown" for extract entries
This was happening when the main Gradle User Home entry was not saved due to
having an unchanged cache key.

Fixes #309
2022-06-06 15:07:13 -06:00
Daz DeBoer 8096e65e0a Better error reporting when file deletion fails
- Include file name in all logging
- Log inital attempts at debug to avoid noise
- Include output of 'jps -lm' when final attempt fails
2022-06-06 11:52:46 -06:00
Daz DeBoer 9cd70b5460 Report cache entry path for duplicate entry save 2022-06-06 08:48:03 -06:00
Daz DeBoer 63bcd47c1b Allow Job Summary generation to be disabled 2022-06-06 07:13:23 -06:00
Daz DeBoer 213bb63776 Use java to determine user.home dir
Although convenient, the os.homedir() function can return a different value
that the 'user.home' SystemProperty in Java. The latter is used to locate
the Gradle User Home directory.

By switching to use Java to determine the value for 'user.home', we can use
the same process as Gradle to determine Gradle User Home.

Fixes #207
2022-06-05 22:13:36 -06:00
Daz DeBoer 0b5047ec4d Prevent duplicate JSON being written to build-results 2022-06-05 21:55:11 -06:00
Daz DeBoer 52ebf2721a Allow daemons to run across workflow steps
Now that we are stopping all Gradle daemons in the post-job action,
we can allow daemon processes to be re-used across steps in a workflow job.

Fixes #113
2022-06-05 09:20:54 -06:00
Daz DeBoer aea6ddad5b Attempt to stop all daemons on Job completion 2022-06-05 09:07:34 -06:00
Daz DeBoer e644288a42 Use build-results file for root project dirs
Instead of using a separate mechanism and init script, reuse the information
captured in the build-results file.
2022-06-05 08:34:07 -06:00
Daz DeBoer e234151ec9 Add more information to captured build results
- Root project dir: will allow us to replace project-root-capture init script
- Gradle home dir: will allow us to stop all started daemons
2022-06-05 08:18:25 -06:00
Daz DeBoer 3f2d9cde44 Capture build results when GE plugin is applied but no build-scan is published 2022-06-05 00:32:29 -06:00
Daz DeBoer 6001bc9edc Improve build badgee for builds without scan links 2022-06-05 00:32:00 -06:00
Daz DeBoer 5203a0b09d Capture build results when config-cache is enabled
When enabled, the configuration-cache will cause the build to fail when a
`buildFinished` listener is added. Instead, use a BuildService to listen for task
failures and to write the results on build completion.
2022-06-05 00:29:42 -06:00
Daz DeBoer 500607bc35 Capture build-results without build-scan publication
The `buildScanPublished` is only called when a build scan is published by the build.
Support other invocations by adding a `buildFinished` listener.
2022-06-05 00:28:24 -06:00
Daz DeBoer 748dc30fdc Support and test Gradle 3.5.1
Fix build-scan-capture.init.gradle so that it applies to versions 3.+,
and include this version in test coverage.
2022-06-05 00:26:21 -06:00
Daz DeBoer ece69c52b2 Save project-root-list in RUNNER_TEMP dir
This feels better than saving in Gradle User Home and is consistent
with where the build results are written.
2022-06-05 00:24:57 -06:00
Daz DeBoer b02f4f1968 Disable cache-read-only when cache-write-only is set 2022-06-04 11:28:12 -06:00
Daz DeBoer 4fa0803854 Improve layout and formatting of Job Summary
- Move entire caching summary into details section
- Use core.summary.addTable for all table creation
- Include cache status in clickable description
2022-06-04 10:55:26 -06:00
Daz DeBoer dff0fe1b20 Remove debug output from init script 2022-06-03 13:51:36 -06:00
Daz DeBoer ae74c01440 Use a BuildService to always collect project root
Using `settingsEvaluated` meant that the project root was not recorded
when the build was run with a config-cache hit. This meant that the subsequent
build would not restore the config-cache, resulting in a cache miss.

In order to avoid issues running the init script on older versions of Gradle
the project-collection is extracted into a separate groovy file that is only
applied conditionally on Gradle 7 or higher.
2022-06-03 13:51:36 -06:00
Daz DeBoer cde0632795 Update comment for accuracy 2022-06-03 07:50:08 -06:00