Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix cache-hit output when cache missed #1404

Merged
merged 5 commits into from
Jul 31, 2024

Conversation

fchimpan
Copy link
Contributor

@fchimpan fchimpan commented May 22, 2024

Description

fix #1334

According to the README, if the cache was not found, the output should be 'false'. However, it actually returned an empty string. This seems to be due to the behavior of GitHub Actions to return an empty string if the output is not defined. Please see these conversations.

I would like to change the code to return 'false' when the cache is not found, per the README.

Motivation and Context

In PR #1263, a README correction is suggested. This is a great initiative, thank you. However, to avoid confusion, how about changing the implementation instead?

How Has This Been Tested?

The issue was caused by not defining an output for cache-hit when the cache was not found, and then returning. Therefore, I will set the output before returning.

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation (add or update README or docs)

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have read the CONTRIBUTING document.
  • I have added tests to cover my changes.
  • All new and existing tests passed.

@fchimpan fchimpan requested a review from a team as a code owner May 22, 2024 03:03
@fchimpan
Copy link
Contributor Author

fchimpan commented May 27, 2024

Hi, @bethanyj28
I would like to request a reviewer for this pull request. If you are not the reviewer, could you please recommend a suitable reviewer?

Thank you very much!

@fchimpan
Copy link
Contributor Author

@joshmgross
I would like to request a reviewer for this pull request. If you are not the reviewer, could you please recommend a suitable reviewer?

Thank you very much!

@@ -62,7 +62,7 @@ export async function restoreImpl(
...restoreKeys
].join(", ")}`
);

core.setOutput(Outputs.CacheHit, false.toString());
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we set this output before the if (failOnCacheMiss) case above?

That would ensure it's set even if fail-on-cache-miss is true.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, @joshmgross

Thanks for your response.

Indeed, since it applies even in the case of exceptions, it seems good to output before failOnCacheMiss. What do you think?
6f5b5ee

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @fchimpan!

Looks like the dist/ is out of date - could you re-run npm run build?

https://github.com/actions/cache/actions/runs/9599939755/job/26475812160?pr=1404

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @joshmgross !
8addae5
I have pushed the dist.

@fchimpan
Copy link
Contributor Author

fchimpan commented Jun 21, 2024

I tested the implementation of this PR by actually using it. As expected, it was confirmed that ‘false’ is returned when the cache is not found.

v4 test : https://github.com/fchimpan/cache-pr-1404-test/actions/runs/9606621627
This PR test : https://github.com/fchimpan/cache-pr-1404-test/actions/runs/9606621624
Please see cache-miss job's Check outputs step.

@fchimpan
Copy link
Contributor Author

Hi @joshmgross ,
I’ve made the necessary changes. Could you please review the code?

Thank you!

@joshmgross joshmgross self-assigned this Jul 31, 2024
@joshmgross joshmgross enabled auto-merge (squash) July 31, 2024 16:55
@joshmgross joshmgross merged commit 40c3b67 into actions:main Jul 31, 2024
14 checks passed
@joshmgross joshmgross mentioned this pull request Oct 3, 2024
siddhantdange pushed a commit to buildpulse/cache that referenced this pull request Oct 4, 2024
* fix: cache-hit output

* fix: Output chache hit timing

* fix: Output chache hit timing

---------

Co-authored-by: Josh Gross <joshmgross@github.com>
@v4hn
Copy link

v4hn commented Oct 7, 2024

Comment: The ternary logic which this patch removes was a useful (but -granted- undocumented and broken) API to detect whether restore-keys was used.
E.g.,

steps:
- name: Restore Cache
  id: restore
  uses: actions/cache/restore@v4
  with:
    path: ...
    key: abc-${{ github.sha }}-${{ github.run_id }}-${{ github.run_attempt }}
    restore-keys: |
      abc-${{ github.sha }}-${{ github.run_id }}
- name: Run if any cache was restored
  if: steps.restore.outputs.cache-hit != ''
  ...

The correct way to get the same check seems to be
if: steps.restore.outputs.cache-matched-key != ''.
Maybe it makes sense to add that use-case in the README?

@Jason3S
Copy link

Jason3S commented Oct 8, 2024

I think it would have been better to change the documentation. This was a major breaking change.

@Jason3S
Copy link

Jason3S commented Oct 8, 2024

Before landing this type of change, it would be useful to check how it is used:
https://github.com/search?q=.cache-hit+language%3AYaml+&type=code

@Ari-Kishon
Copy link

Ari-Kishon commented Oct 8, 2024

This was a major change and should have been released as such.

The change in return value cause several critical steps in our workflows to be skipped and caused them all to fail.

I understand that this behavior has technically a bug, but given how long it returned empty values this should have been considered valid behavior and taken into account.

This change could have potentially disrupted development for my whole team had I not caught it before going on vacation.

We rely heavily on actions from this organization because we perceive them be stable and professionally maintained.

@stof
Copy link

stof commented Oct 8, 2024

The readme says that chache-hit is a boolean value: https://github.com/actions/cache?tab=readme-ov-file#outputs

The string 'false' is not a boolean value (and it is a truthy value). Please revert this broken change

@v4hn
Copy link

v4hn commented Oct 8, 2024

The readme says that chache-hit is a boolean value: https://github.com/actions/cache?tab=readme-ov-file#outputs

The string 'false' is not a boolean value (and it is a truthy value). Please revert this broken change

In that sense the API was inconsistent with the docs already before.
When a restore-keys entry was found instead of the primary key, 'false' was already returned before and a falsy value was only returned in case neither key was found.

@stof
Copy link

stof commented Oct 8, 2024

Then the readme correction proposed in #1263 is still relevant, even though the description of this PR says that it is meant to fix the implementation instead of having to clarify the readme (the PR of course needs to be adapted to account for the change done here)

@nati-levi
Copy link

This broke our CI.
Should have been major release.
Its a breaking change.

@AnimMouse
Copy link

This basically broke all of my composite actions.
It's sad that it's 2024, and GitHub Actions still can't make their type system right!
true and false are booleans, not strings!

@joshmgross
Copy link
Member

👋 I will work on reverting this change

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

cache-hit undefined on cache miss?
9 participants