Compare commits

...

61 Commits
v1.5.1 ... main

Author SHA1 Message Date
dependabot[bot]
227b3767fc Bump pyTooling/Actions from 7.2.0 to 7.4.2 (#196)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 7.2.0 to 7.4.2.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](14db3bef61...370c306306)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 7.4.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-01 09:35:43 +01:00
dependabot[bot]
9a3120aab8 Bump actions/cache from 5.0.1 to 5.0.3 (#195)
Bumps [actions/cache](https://github.com/actions/cache) from 5.0.1 to 5.0.3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](9255dc7a25...cdf6c1fa76)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 5.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-01 08:37:30 +01:00
dependabot[bot]
43522e389d Bump actions/checkout from 6.0.1 to 6.0.2 (#194)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.1 to 6.0.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](8e8c483db8...de0fac2e45)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-01 08:10:20 +01:00
dependabot[bot]
e8472695fb Bump pyTooling/Actions from 6.7.0 to 7.2.0 (#193)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 6.7.0 to 7.2.0.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](c2282e4d63...14db3bef61)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-01 10:42:32 +00:00
dependabot[bot]
2061bcf01c Bump actions/cache from 4.3.0 to 5.0.1 (#192)
Bumps [actions/cache](https://github.com/actions/cache) from 4.3.0 to 5.0.1.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](0057852bfa...9255dc7a25)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 5.0.1
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-01 10:41:19 +00:00
dependabot[bot]
c4f371876b Bump actions/checkout from 6.0.0 to 6.0.1 (#191)
Bumps [actions/checkout](https://github.com/actions/checkout) from 6.0.0 to 6.0.1.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](1af3b93b68...8e8c483db8)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-01-01 09:04:09 +01:00
Viral B. Shah
38850d7b75 Update GitHub Actions checkout action version (#187) 2025-12-08 09:10:31 +00:00
dependabot[bot]
429bb24537 Bump pyTooling/Actions from 6.6.0 to 6.7.0 (#188)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 6.6.0 to 6.7.0.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](25c007b491...c2282e4d63)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 6.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-08 00:17:35 -05:00
dependabot[bot]
8af8844cd0 Bump actions/checkout from 5.0.0 to 6.0.0 (#189)
Bumps [actions/checkout](https://github.com/actions/checkout) from 5.0.0 to 6.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](08c6903cd8...1af3b93b68)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 6.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-12-01 08:42:04 +00:00
dependabot[bot]
424a20aa56 Bump pyTooling/Actions from 6.2.0 to 6.6.0 (#185)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 6.2.0 to 6.6.0.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](ae8a961e93...25c007b491)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 6.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-11-23 22:02:21 -05:00
Mosè Giordano
5dc38e58e3 Remove trailing whitespaces from README.md (#186)
[skip ci]
2025-11-07 19:42:28 +00:00
dependabot[bot]
05a577a682 Bump pyTooling/Actions from 5.4.0 to 6.2.0 (#183)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 5.4.0 to 6.2.0.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](d6342484cd...ae8a961e93)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 6.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Viral B. Shah <virals@gmail.com>
2025-10-21 11:45:39 -04:00
dependabot[bot]
8205b4547a Bump actions/cache from 4.2.4 to 4.3.0 (#184)
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.4 to 4.3.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](0400d5f644...0057852bfa)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-10-01 22:46:25 +02:00
dependabot[bot]
509404de2a Bump pyTooling/Actions from 4.3.0 to 5.4.0 (#181)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 4.3.0 to 5.4.0.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](33edd82e6f...d6342484cd)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 5.4.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-07 14:40:22 +01:00
dependabot[bot]
79b42d2cc0 Bump actions/checkout from 4.2.2 to 5.0.0 (#182)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.2 to 5.0.0.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](11bd71901b...08c6903cd8)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: 5.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-01 18:08:09 +02:00
dependabot[bot]
2d7a7cc445 Bump actions/cache from 4.2.3 to 4.2.4 (#180)
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.3 to 4.2.4.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](5a3ec84eff...0400d5f644)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 4.2.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-09-01 17:51:34 +02:00
dependabot[bot]
46d70a0fdf Bump dcarbone/install-jq-action from 3.1.1 to 3.2.0 (#178)
Bumps [dcarbone/install-jq-action](https://github.com/dcarbone/install-jq-action) from 3.1.1 to 3.2.0.
- [Release notes](https://github.com/dcarbone/install-jq-action/releases)
- [Commits](f0e10f46ff...b7ef57d46e)

---
updated-dependencies:
- dependency-name: dcarbone/install-jq-action
  dependency-version: 3.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-01 11:16:03 +02:00
dependabot[bot]
5aaa1e085e Bump pyTooling/Actions from 4.2.2 to 4.3.0 (#176)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 4.2.2 to 4.3.0.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](42e17fae05...33edd82e6f)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 09:11:02 +01:00
Ian Butterworth
2c5c26f9c8 Fix retry on failure/cancelled example (#174) 2025-04-15 22:00:01 -04:00
Penelope Yong
d9e495f279 Add manual cache save to README (#173) 2025-04-04 21:53:34 -04:00
dependabot[bot]
d10a6fd8f3 Bump pyTooling/Actions from 3.1.1 to 4.2.2 (#170)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 3.1.1 to 4.2.2.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/dev/doc/Releases.rst)
- [Commits](9ceefdbf5d...42e17fae05)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-version: 4.2.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 11:10:04 -04:00
dependabot[bot]
1f7b6e036e Bump dcarbone/install-jq-action from 3.0.1 to 3.1.1 (#171)
Bumps [dcarbone/install-jq-action](https://github.com/dcarbone/install-jq-action) from 3.0.1 to 3.1.1.
- [Release notes](https://github.com/dcarbone/install-jq-action/releases)
- [Commits](e397bd8743...f0e10f46ff)

---
updated-dependencies:
- dependency-name: dcarbone/install-jq-action
  dependency-version: 3.1.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 11:09:30 -04:00
dependabot[bot]
c1893486c9 Bump actions/cache from 4.2.2 to 4.2.3 (#172)
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](d4323d4df1...5a3ec84eff)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: 4.2.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-01 11:09:06 -04:00
Penelope Yong
c231b4e8c0 Output cache-paths and cache-key as well (#169) 2025-04-01 11:08:42 -04:00
John Omotani
e5a7946b4f Link to Github caching docs from README.md (#167)
This can be useful for non-expert users.
2025-03-13 20:59:46 -04:00
dependabot[bot]
9b3f75eff3 Bump actions/cache from 4.2.0 to 4.2.2 (#165)
Bumps [actions/cache](https://github.com/actions/cache) from 4.2.0 to 4.2.2.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](1bd1e32a3b...d4323d4df1)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-01 07:28:08 +00:00
Ian Butterworth
2b1bf4d8a1 fix slashes in windows depot path (#153) 2025-01-09 13:23:45 -06:00
dependabot[bot]
49fd7c4af0 Bump pyTooling/Actions from 1.0.5 to 3.1.1 (#157)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ian Butterworth <i.r.butterworth@gmail.com>
2025-01-09 13:06:18 -05:00
dependabot[bot]
d343189aad Bump actions/cache from 4.1.2 to 4.2.0 (#156)
Bumps [actions/cache](https://github.com/actions/cache) from 4.1.2 to 4.2.0.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](6849a64899...1bd1e32a3b)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-01 11:41:51 +01:00
dependabot[bot]
315c171d17 Bump actions/checkout from 4.1.7 to 4.2.2 (#150)
* Bump actions/checkout from 4.1.7 to 4.2.2

Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.7 to 4.2.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](692973e3d9...11bd71901b)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* Apply suggestions from code review

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mosè Giordano <765740+giordano@users.noreply.github.com>
2024-12-01 21:41:35 +00:00
dependabot[bot]
f4098e6050 Bump actions/cache from 4.0.2 to 4.1.2 (#151)
Bumps [actions/cache](https://github.com/actions/cache) from 4.0.2 to 4.1.2.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](0c45773b62...6849a64899)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-01 13:48:31 +00:00
dependabot[bot]
0c8892ce7f Bump dcarbone/install-jq-action from 2.1.0 to 3.0.1 (#155)
* Bump dcarbone/install-jq-action from 2.1.0 to 3.0.1

Bumps [dcarbone/install-jq-action](https://github.com/dcarbone/install-jq-action) from 2.1.0 to 3.0.1.
- [Release notes](https://github.com/dcarbone/install-jq-action/releases)
- [Commits](8867ddb478...e397bd8743)

---
updated-dependencies:
- dependency-name: dcarbone/install-jq-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Update action.yml

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Mosè Giordano <765740+giordano@users.noreply.github.com>
2024-12-01 13:47:49 +00:00
Ian Butterworth
824243901f fix windows depot path expansion (#146) 2024-09-23 13:30:40 -04:00
Ian Butterworth
8608484607 Soft fail registry update (#143) 2024-08-31 13:35:05 +02:00
Curtis Vogt
e662c42397 Expand paths which use tilde (#141) 2024-08-30 13:54:55 +01:00
Ian Butterworth
e7913c2cb9 update any cached registries (#140)
* update any cached registries

* add comment

* handle really old julia versions

* Update action.yml

Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com>

---------

Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com>
2024-08-12 10:01:44 -04:00
dependabot[bot]
9ec3abbd64 Bump actions/checkout from 4.1.6 to 4.1.7 (#137) 2024-07-01 07:56:06 -04:00
Curtis Vogt
580d2b69d8 Fix issues with custom cache eviction (#135)
* Keep latest and default branch cache entries

* Record skipped cache IDs
2024-06-26 16:54:10 -05:00
Dilum Aluthge
e00c08a89a README: document that Bash is required (#132)
* README: document that Bash is required

* Apply suggestions from code review

Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com>

* Update README.md

Co-authored-by: Dilum Aluthge <dilum@aluthge.com>

* Replace ordered list with unordered list

Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com>

---------

Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com>
2024-06-04 13:40:04 -04:00
Dilum Aluthge
bb4225b875 Devdocs: document the process for making a new release of this action (#128)
* Devdocs: document the process for making a new release of this action

* Apply suggestions from code review

Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com>

* Add another note

* Fix a typo

* Recommend creating the lightweight tag locally first

---------

Co-authored-by: Curtis Vogt <curtis.vogt@gmail.com>
2024-05-22 23:57:30 -04:00
dependabot[bot]
8dfc57d68c Bump actions/checkout from 4.1.4 to 4.1.6 (#133)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.4 to 4.1.6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](0ad4b8fada...a5ac7e51b4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-22 21:39:06 -04:00
Rik Huijzer
3190fc83db Fix typo in cache-name note (#130)
* Fix typo in `cache-name` note

* Update README.md

* Update README.md

Co-authored-by: Ian Butterworth <i.r.butterworth@gmail.com>

---------

Co-authored-by: Ian Butterworth <i.r.butterworth@gmail.com>
2024-05-21 11:06:50 -04:00
Dilum Aluthge
2185d31b12 Update README to recommend julia-actions/cache@v2 (instead of @v1) (#129) 2024-05-16 11:30:59 -04:00
dependabot[bot]
d48542bb7b Bump actions/cache from 3.3.3 to 4.0.2 (#123)
Bumps [actions/cache](https://github.com/actions/cache) from 3.3.3 to 4.0.2.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](e12d46a63a...0c45773b62)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dilum Aluthge <dilum@aluthge.com>
2024-05-01 12:53:50 -04:00
dependabot[bot]
caa655642c Bump pyTooling/Actions from 1.0.1 to 1.0.5 (#127)
Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 1.0.1 to 1.0.5.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/main/doc/Releases.rst)
- [Commits](60281e01e2...e9d0dc3dba)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Dilum Aluthge <dilum@aluthge.com>
2024-05-01 12:38:23 -04:00
dependabot[bot]
1c20782198 Bump actions/checkout from 4.1.2 to 4.1.4 (#126)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.2 to 4.1.4.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](9bb56186c3...0ad4b8fada)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-05-01 10:26:19 -04:00
Ian Butterworth
4b23ab708f update setup-julia to v2 in readme (#124) 2024-04-04 21:03:48 -04:00
dependabot[bot]
cc87ef305e Bump pyTooling/Actions from 0.4.6 to 1.0.1 (#117)
* Bump pyTooling/Actions from 0.4.6 to 1.0.1

Bumps [pyTooling/Actions](https://github.com/pytooling/actions) from 0.4.6 to 1.0.1.
- [Release notes](https://github.com/pytooling/actions/releases)
- [Changelog](https://github.com/pyTooling/Actions/blob/main/doc/Releases.rst)
- [Commits](adef08d3bd...60281e01e2)

---
updated-dependencies:
- dependency-name: pyTooling/Actions
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Apply suggestions from code review

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ian Butterworth <i.r.butterworth@gmail.com>
2024-04-04 20:56:26 -04:00
dependabot[bot]
c36389738b Bump actions/checkout from 4.1.1 to 4.1.2 (#118)
Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](b4ffde65f4...9bb56186c3)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-04 20:04:17 -04:00
dependabot[bot]
1b0706c0c7 Bump julia-actions/setup-julia from 1 to 2 (#116)
Bumps [julia-actions/setup-julia](https://github.com/julia-actions/setup-julia) from 1 to 2.
- [Release notes](https://github.com/julia-actions/setup-julia/releases)
- [Commits](https://github.com/julia-actions/setup-julia/compare/v1...v2)

---
updated-dependencies:
- dependency-name: julia-actions/setup-julia
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-04-04 19:47:11 -04:00
Ian Butterworth
8b63b4a15d Update actions/cache to v3.3.3 (#121) 2024-04-04 19:46:22 -04:00
Dilum Aluthge
0413f3b1ae Only run Dependabot once per month, but increase the PR limit (#115) 2024-04-03 11:00:28 -04:00
Mosè Giordano
e8521d4bd2 More accurate info about GitHub cache retion policy (#111) 2024-02-01 07:30:48 -05:00
Rik Huijzer
b1b004ffca Mention why the extra permissions are required (#108) 2024-01-20 11:35:32 -05:00
Sascha Mann
216aaef29a Pin third party action to hash (#106)
Third party actions should never not be pinned to a hash. Otherwise, in case the action repo is taken over by a malicious actor, they can change what runs in all of the workflows that julia-actions/cache is used in as well. Pinning to a hash prevents that.
2024-01-18 10:21:26 -05:00
nathan musoke
3e0649aaee fix: Attempt to install jq on all runners (#105) 2024-01-17 17:38:32 -05:00
Ian Butterworth
dc1a3cdeac make depot if not restored (#91) 2024-01-16 10:48:25 -05:00
Curtis Vogt
4491ed7a86 Pass cache-name between save/restore jobs (#103)
* Pass cache-name between save/restore

* Use save job name in cache-name

* Re-order test jobs

* Fix typo in registry warning
2024-01-16 09:40:31 -06:00
Curtis Vogt
b84ca24db8 Avoid corrupting existing cloned Julia registries (#102)
* Reproduce add-julia-registry issue

* Skip registries restore when already present

* Expand ~

* Refactor paths step to use bash array
2024-01-15 19:28:33 -06:00
Curtis Vogt
b3b34e3264 Test cache action against Julia 1.0 and nightly (#101)
* CI test action on Julia 1.0

* Avoid quoting Julia shell string

* Test against Julia nightly
2024-01-15 15:20:46 -06:00
Curtis Vogt
0c5d92d73a Delete cache entries only on the workflow branch (#97)
* Delete cache entries on the workflow branch

* Grant permissions for cache cleanup

* Add delete-old-caches required for testing purposes

* Revise help message

* Faster generate-key

* Use distinct cache-names for matrix/no-matrix jobs

* Remove redundant permissions

* Better fork detection logic
2024-01-15 10:15:36 -06:00
6 changed files with 438 additions and 148 deletions

View File

@@ -1,9 +1,10 @@
version: 2
updates:
# Keep dependencies for GitHub Actions up-to-date
- package-ecosystem: 'github-actions'
directory: '/'
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: 'daily'
interval: "monthly"
open-pull-requests-limit: 99
labels:
- "dependencies"
- "github-actions"

View File

@@ -20,138 +20,204 @@ permissions:
contents: read
jobs:
generate-key:
generate-prefix:
runs-on: ubuntu-latest
outputs:
cache-name: ${{ steps.name.outputs.cache-name }}
cache-prefix: ${{ steps.name.outputs.cache-prefix }}
steps:
- name: Generate random file
shell: 'julia --color=yes {0}'
run: 'write("random.txt", string(rand(10)))'
- name: Set cache-name as output
- name: Generate random cache-prefix
id: name
run: echo "cache-name=${{ hashFiles('random.txt') }}" >> $GITHUB_OUTPUT
run: |
cache_prefix=$(head -n 100 </dev/urandom | shasum -a 256 | cut -d ' ' -f 1)
echo "cache-prefix=$cache_prefix" >>"$GITHUB_OUTPUT"
test-save:
needs: generate-key
needs: generate-prefix
runs-on: ${{ matrix.os }}
outputs:
cache-name: ${{ steps.cache-name.outputs.cache-name }}
strategy:
matrix:
dep:
- name: pandoc_jll
version: "3"
nested:
- name: matrix
invalid-chars: "," # Use invalid characters in job matrix to ensure we escape them
version:
- "1.0"
- "1"
- "nightly"
os:
- ubuntu-latest
- windows-latest
- macOS-latest
exclude:
# Test Julia "1.0" on Linux only
- version: "1.0"
os: windows-latest
- version: "1.0"
os: macOS-latest
fail-fast: false
runs-on: ${{ matrix.os }}
env:
JULIA_DEPOT_PATH: /tmp/julia-depot
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set cache-name
id: cache-name
shell: bash
run: |
echo "cache-name=${{ needs.generate-prefix.outputs.cache-prefix }}-${{ github.job }}" >>"$GITHUB_OUTPUT"
- uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.version }}
- name: Save cache
id: cache
uses: ./
with:
cache-name: ${{ needs.generate-key.outputs.cache-name }}
cache-name: ${{ steps.cache-name.outputs.cache-name }}
delete-old-caches: required
- name: Check no artifacts dir
shell: 'julia --color=yes {0}'
shell: julia --color=yes {0}
run: |
dir = joinpath(first(DEPOT_PATH), "artifacts")
@assert !isdir(dir)
- name: Install a small binary
shell: 'julia --color=yes {0}'
run: 'using Pkg; Pkg.add(PackageSpec(name="${{ matrix.dep.name }}", version="${{ matrix.dep.version }}"))'
shell: julia --color=yes {0}
run: |
using Pkg
if VERSION >= v"1.3"
Pkg.add(PackageSpec(name="pandoc_jll", version="3"))
else
Pkg.add(PackageSpec(name="Scratch", version="1"))
using Scratch
get_scratch!("test")
end
test-restore:
needs: test-save
runs-on: ${{ matrix.os }}
strategy:
matrix:
nested:
- name: matrix
invalid-chars: "," # Use invalid characters in job matrix to ensure we escape them
version:
- "1.0"
- "1"
- "nightly"
os:
- ubuntu-latest
- windows-latest
- macOS-latest
exclude:
# Test Julia "1.0" on Linux only
- version: "1.0"
os: windows-latest
- version: "1.0"
os: macOS-latest
fail-fast: false
env:
JULIA_DEPOT_PATH: /tmp/julia-depot
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.version }}
- name: Restore cache
id: cache
uses: ./
with:
cache-name: ${{ needs.test-save.outputs.cache-name }}
# Cannot require a successful cache delete on forked PRs as the permissions for actions is limited to read
delete-old-caches: ${{ github.event.pull_request.head.repo.fork && 'false' || 'required' }}
- name: Test cache-hit output
shell: julia --color=yes {0}
run: |
@show ENV["cache-hit"]
@assert ENV["cache-hit"] == "true"
env:
cache-hit: ${{ steps.cache.outputs.cache-hit }}
- name: Check existance or emptiness of affected dirs
shell: julia --color=yes {0}
run: |
# These dirs should exist as they've been cached
artifacts_dir = joinpath(first(DEPOT_PATH), "artifacts")
if VERSION >= v"1.3"
@assert !isempty(readdir(artifacts_dir))
else
@assert !isdir(artifacts_dir)
end
packages_dir = joinpath(first(DEPOT_PATH), "packages")
@assert !isempty(readdir(packages_dir))
compiled_dir = joinpath(first(DEPOT_PATH), "compiled")
@assert !isempty(readdir(compiled_dir))
scratchspaces_dir = joinpath(first(DEPOT_PATH), "scratchspaces")
@assert !isempty(readdir(scratchspaces_dir))
logs_dir = joinpath(first(DEPOT_PATH), "logs")
@assert !isempty(readdir(logs_dir))
# Do tests with no matrix also given the matrix is auto-included in cache key
test-save-nomatrix:
needs: generate-key
needs: generate-prefix
runs-on: ubuntu-latest
outputs:
cache-name: ${{ steps.cache-name.outputs.cache-name }}
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set cache-name
id: cache-name
run: |
echo "cache-name=${{ needs.generate-prefix.outputs.cache-prefix }}-${{ github.job }}" >>"$GITHUB_OUTPUT"
- name: Save cache
id: cache
uses: ./
with:
cache-name: ${{ needs.generate-key.outputs.cache-name }}
cache-name: ${{ steps.cache-name.outputs.cache-name }}
delete-old-caches: required
- name: Check no artifacts dir
shell: 'julia --color=yes {0}'
shell: julia --color=yes {0}
run: |
dir = joinpath(first(DEPOT_PATH), "artifacts")
@assert !isdir(dir)
- name: Install a small binary
shell: 'julia --color=yes {0}'
run: 'using Pkg; Pkg.add("pandoc_jll")'
test-restore:
needs: [generate-key, test-save]
strategy:
matrix:
dep:
- name: pandoc_jll
version: "3"
invalid-chars: "," # Use invalid characters in job matrix to ensure we escape them
os:
- ubuntu-latest
- windows-latest
- macOS-latest
fail-fast: false
runs-on: ${{ matrix.os }}
env:
JULIA_DEPOT_PATH: /tmp/julia-depot
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- name: Restore cache
id: cache
uses: ./
with:
cache-name: ${{ needs.generate-key.outputs.cache-name }}
- name: Test cache-hit output
shell: 'julia --color=yes {0}'
shell: julia --color=yes {0}
run: |
@show ENV["cache-hit"]
@assert ENV["cache-hit"] == "true"
env:
cache-hit: ${{ steps.cache.outputs.cache-hit }}
- name: Check existance or emptiness of affected dirs
shell: 'julia --color=yes {0}'
run: |
# These dirs should exist as they've been cached
artifacts_dir = joinpath(first(DEPOT_PATH), "artifacts")
@assert !isempty(readdir(artifacts_dir))
packages_dir = joinpath(first(DEPOT_PATH), "packages")
@assert !isempty(readdir(packages_dir))
compiled_dir = joinpath(first(DEPOT_PATH), "compiled")
@assert !isempty(readdir(compiled_dir))
scratchspaces_dir = joinpath(first(DEPOT_PATH), "scratchspaces")
@assert !isempty(readdir(scratchspaces_dir))
logs_dir = joinpath(first(DEPOT_PATH), "logs")
@assert !isempty(readdir(logs_dir))
using Pkg
if VERSION >= v"1.3"
Pkg.add(PackageSpec(name="pandoc_jll", version="3"))
else
Pkg.add(PackageSpec(name="Scratch", version="1"))
using Scratch
get_scratch!("test")
end
test-restore-nomatrix:
needs: [generate-key, test-save-nomatrix]
needs: test-save-nomatrix
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Restore cache
id: cache
uses: ./
with:
cache-name: ${{ needs.generate-key.outputs.cache-name }}
cache-name: ${{ needs.test-save-nomatrix.outputs.cache-name }}
# Cannot require a successful cache delete on forked PRs as the permissions for actions is limited to read
delete-old-caches: ${{ github.event.pull_request.head.repo.fork && 'false' || 'required' }}
- name: Test cache-hit output
shell: 'julia --color=yes {0}'
shell: julia --color=yes {0}
run: |
@show ENV["cache-hit"]
@assert ENV["cache-hit"] == "true"
env:
cache-hit: ${{ steps.cache.outputs.cache-hit }}
- name: Check existance or emptiness of affected dirs
shell: 'julia --color=yes {0}'
shell: julia --color=yes {0}
run: |
# These dirs should exist as they've been cached
artifacts_dir = joinpath(first(DEPOT_PATH), "artifacts")
@assert !isempty(readdir(artifacts_dir))
if VERSION >= v"1.3"
@assert !isempty(readdir(artifacts_dir))
else
@assert !isdir(artifacts_dir)
end
packages_dir = joinpath(first(DEPOT_PATH), "packages")
@assert !isempty(readdir(packages_dir))
compiled_dir = joinpath(first(DEPOT_PATH), "compiled")
@@ -161,3 +227,54 @@ jobs:
logs_dir = joinpath(first(DEPOT_PATH), "logs")
@assert !isempty(readdir(logs_dir))
test-save-cloned-registry:
needs: generate-prefix
runs-on: ubuntu-latest
outputs:
cache-name: ${{ steps.cache-name.outputs.cache-name }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set cache-name
id: cache-name
run: |
echo "cache-name=${{ needs.generate-prefix.outputs.cache-prefix }}-${{ github.job }}" >>"$GITHUB_OUTPUT"
- name: Save cache
uses: ./
with:
cache-name: ${{ steps.cache-name.outputs.cache-name }}
# Cannot require a successful cache delete on forked PRs as the permissions for actions is limited to read
delete-old-caches: ${{ github.event.pull_request.head.repo.fork && 'false' || 'required' }}
- name: Add General registry clone
shell: julia --color=yes {0}
run: |
using Pkg
Pkg.Registry.add("General")
env:
JULIA_PKG_SERVER: ""
# Set the registry worktree to an older state to simulate the cache storing an old version of the registry.
- name: Use outdated General worktree
run: git -C ~/.julia/registries/General reset --hard HEAD~20
test-restore-cloned-registry:
needs: test-save-cloned-registry
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Add General registry clone
shell: julia --color=yes {0}
run: |
using Pkg
Pkg.Registry.add("General")
env:
JULIA_PKG_SERVER: ""
- name: Restore cache
uses: ./
with:
cache-name: ${{ needs.test-save-cloned-registry.outputs.cache-name }}
# Cannot require a successful cache delete on forked PRs as the permissions for actions is limited to read
delete-old-caches: ${{ github.event.pull_request.head.repo.fork && 'false' || 'required' }}
- name: Test registry is not corrupt
shell: julia --color=yes {0}
run: |
using Pkg
Pkg.Registry.update()

View File

@@ -20,15 +20,20 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v1
- uses: julia-actions/cache@v1
- uses: actions/checkout@v6
- uses: julia-actions/setup-julia@v2
- uses: julia-actions/cache@v2
- uses: julia-actions/julia-buildpkg@v1
- uses: julia-actions/julia-runtest@v1
```
By default all depot directories called out below are cached.
### Requirements
- `jq`: This action uses [`jq`](https://github.com/jqlang/jq) to parse JSON. For GitHub-hosted runners, `jq` is installed by default. On self-hosted runners and custom containers, if `jq` is not already available, this action will automatically use [`dcarbone/install-jq-action`](https://github.com/dcarbone/install-jq-action) to install `jq` (Note: `dcarbone/install-jq-action` requires that `curl` is installed; this may not always be the case in custom containers and self-hosted runners).
- `bash`: This action requires `bash`. For GitHub-hosted runners `bash` is installed by default. Self-hosted runners will need to ensure that `bash` is installed and available on the `PATH`.
### Optional Inputs
- `cache-name` - The cache key prefix. Defaults to `julia-cache;workflow=${{ github.workflow }};job=${{ github.job }}`. The key body automatically includes the OS and, unless disabled with `include-matrix`, the matrix vars. Include any other parameters/details in this prefix to ensure one unique cache key per concurrent job type.
@@ -46,6 +51,8 @@ By default all depot directories called out below are cached.
### Outputs
- `cache-hit` - A boolean value to indicate an exact match was found for the primary key. Returns \"\" when the key is new. Forwarded from actions/cache.
- `cache-paths` - A list of paths (as a newline-separated string) that were cached.
- `cache-key` - The cache key that was used for this run.
## How It Works
@@ -55,6 +62,13 @@ This cached file is then restored upon the second run, and afterwards resaved un
The benefit of caching is that downloading one big file is quicker than downloading many different files from many different locations
and precompiling them.
By default, this action removes caches that were previously made by jobs on the same branch with the same restore key.
GitHub automatically removes old caches after a certain period or when the repository cache allocation is full.
It is, however, more efficient to explicitly remove old caches to improve caching for less frequently run jobs.
For more information about GitHub caching generically, for example how to manually delete caches, see
[this GitHub documentation page](https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/caching-dependencies-to-speed-up-workflows#managing-caches).
### Cache keys
The cache key that the cache will be saved as is based on:
@@ -65,8 +79,8 @@ The cache key that the cache will be saved as is based on:
- The run attempt number
> [!NOTE]
> If in your workflow if you do not use a matrix for concurrency you should make `cache-name` such that it is unique for
> concurrent jobs, otherwise caching may not be effective.
> If there is job concurrency that is not fully defined by a matrix you should ensure that `cache-name` is
> unique for each concurrent job, otherwise caching may not be effective.
### Cache Retention
@@ -76,7 +90,7 @@ This action automatically deletes old caches that match the first 4 fields of th
- The `runner.os` (may be in the matrix too, but included for safety)
Which means your caches files will not grow needlessly. GitHub also deletes cache files after
[90 days which can be increased in private repos to up to 400 days](https://docs.github.com/en/organizations/managing-organization-settings/configuring-the-retention-period-for-github-actions-artifacts-and-logs-in-your-organization)
[7 days of not being accessed](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy), and there is a limit of 10 GB for the total size of cache files associated to each repository.
> [!NOTE]
> To allow deletion of caches you will likely need to [grant the following permissions](https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs)
@@ -92,6 +106,35 @@ Which means your caches files will not grow needlessly. GitHub also deletes cach
To disable deletion set input `delete-old-caches: 'false'`.
### Caching even if an intermediate job fails
Just like [the basic actions/cache workflow](https://github.com/actions/cache), this action has a cache restore step, and also a save step which runs after the workflow completes.
By default, if any job in the workflow fails, the entire workflow will be stopped, and the cache will not be saved.
Due to current limitations in GitHub Actions syntax, there is no built-in option for this action to save the cache even if the job fails.
However, it does output information which you can feed into `actions/cache` yourself to achieve the same effect.
For example, this workflow will ensure that the cache is saved if a step fails (but skipping it if the cache was hit, i.e. there's no need to cache it again).
```yaml
steps:
- uses: actions/checkout@v4
- name: Load Julia packages from cache
id: julia-cache
uses: julia-actions/cache@v2
# do whatever you want here (that might fail)
- name: Save Julia depot cache on cancel or failure
id: julia-cache-save
if: cancelled() || failure()
uses: actions/cache/save@v4
with:
path: |
${{ steps.julia-cache.outputs.cache-paths }}
key: ${{ steps.julia-cache.outputs.cache-key }}
```
### Cache Garbage Collection
Caches are restored and re-saved after every run, retaining the state of the depot throughout runs.

View File

@@ -47,15 +47,18 @@ outputs:
cache-hit:
description: A boolean value to indicate an exact match was found for the primary key. Returns "" when the key is new. Forwarded from actions/cache.
value: ${{ steps.hit.outputs.cache-hit }}
cache-paths:
description: The paths that were cached
value: ${{ steps.paths.outputs.cache-paths }}
cache-key:
description: The full cache key used
value: ${{ steps.keys.outputs.key }}
runs:
using: 'composite'
steps:
- name: Install jq
# Skip installation on GitHub-hosted runners:
# https://github.com/orgs/community/discussions/48359#discussioncomment-5323864
if: ${{ !startsWith(runner.name, 'GitHub Actions') }}
uses: dcarbone/install-jq-action@v2.1.0
uses: dcarbone/install-jq-action@b7ef57d46ece78760b4019dbc4080a1ba2a40b45 # v3.2.0
with:
force: false # Skip install when an existing `jq` is present
@@ -69,19 +72,38 @@ runs:
else
depot="~/.julia"
fi
echo "depot=$depot" >> $GITHUB_OUTPUT
[ "${{ inputs.cache-artifacts }}" = "true" ] && A_PATH="${depot}/artifacts"
echo "artifacts-path=$A_PATH" >> $GITHUB_OUTPUT
[ "${{ inputs.cache-packages }}" = "true" ] && P_PATH="${depot}/packages"
echo "packages-path=$P_PATH" >> $GITHUB_OUTPUT
[ "${{ inputs.cache-registries }}" = "true" ] && R_PATH="${depot}/registries"
echo "registries-path=$R_PATH" >> $GITHUB_OUTPUT
[ "${{ inputs.cache-compiled }}" = "true" ] && PCC_PATH="${depot}/compiled"
echo "compiled-path=$PCC_PATH" >> $GITHUB_OUTPUT
[ "${{ inputs.cache-scratchspaces }}" = "true" ] && S_PATH="${depot}/scratchspaces"
echo "scratchspaces-path=$S_PATH" >> $GITHUB_OUTPUT
[ "${{ inputs.cache-logs }}" = "true" ] && L_PATH="${depot}/logs"
echo "logs-path=$L_PATH" >> $GITHUB_OUTPUT
if [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" ]]; then
depot="${depot/#\~/$USERPROFILE}" # Windows paths
depot="${depot//\\//}" # Replace backslashes with forward slashes
else
depot="${depot/#\~/$HOME}" # Unix-like paths
fi
echo "depot=$depot" | tee -a "$GITHUB_OUTPUT"
cache_paths=()
artifacts_path="${depot}/artifacts"
[ "${{ inputs.cache-artifacts }}" = "true" ] && cache_paths+=("$artifacts_path")
packages_path="${depot}/packages"
[ "${{ inputs.cache-packages }}" = "true" ] && cache_paths+=("$packages_path")
registries_path="${depot}/registries"
if [ "${{ inputs.cache-registries }}" = "true" ]; then
if [ ! -d "${registries_path}" ]; then
cache_paths+=("$registries_path")
else
echo "::warning::Julia depot registries already exist. Skipping restoring of cached registries to avoid potential merge conflicts when updating. Please ensure that \`julia-actions/cache\` precedes any workflow steps which add registries."
fi
fi
compiled_path="${depot}/compiled"
[ "${{ inputs.cache-compiled }}" = "true" ] && cache_paths+=("$compiled_path")
scratchspaces_path="${depot}/scratchspaces"
[ "${{ inputs.cache-scratchspaces }}" = "true" ] && cache_paths+=("$scratchspaces_path")
logs_path="${depot}/logs"
[ "${{ inputs.cache-logs }}" = "true" ] && cache_paths+=("$logs_path")
{
echo "cache-paths<<EOF"
printf "%s\n" "${cache_paths[@]}"
echo "EOF"
} | tee -a "$GITHUB_OUTPUT"
shell: bash
env:
PATH_DELIMITER: ${{ runner.OS == 'Windows' && ';' || ':' }}
@@ -105,46 +127,77 @@ runs:
env:
MATRIX_JSON: ${{ toJSON(matrix) }}
- uses: actions/cache@4d4ae6ae148a43d0fd1eda1800170683e9882738
- uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
id: cache
with:
path: |
${{ steps.paths.outputs.artifacts-path }}
${{ steps.paths.outputs.packages-path }}
${{ steps.paths.outputs.registries-path }}
${{ steps.paths.outputs.scratchspaces-path }}
${{ steps.paths.outputs.compiled-path }}
${{ steps.paths.outputs.logs-path }}
${{ steps.paths.outputs.cache-paths }}
key: ${{ steps.keys.outputs.key }}
restore-keys: ${{ steps.keys.outputs.restore-key }}
enableCrossOsArchive: false
- name: list restored depot directory sizes
if: ${{ steps.cache.outputs.cache-hit == 'true' }}
run: du -shc ${{ steps.paths.outputs.depot }}/* || true
# if it wasn't restored make the depot anyway as a signal that this action ran
# for other julia actions to check, like https://github.com/julia-actions/julia-buildpkg/pull/41
- name: make depot if not restored, then list depot directory sizes
run: |
mkdir -p ${{ steps.paths.outputs.depot }}
du -shc ${{ steps.paths.outputs.depot }}/* || true
shell: bash
# github and actions/cache doesn't provide a way to update a cache at a given key, so we delete any
# that match the restore key just before saving the new cache
# issue https://github.com/julia-actions/cache/issues/110
# Pkg may not run `Registry.update()` if a manifest exists, which may exist because of a
# `Pkg.dev` call or because one is added to the repo. So be safe and update cached registries here.
# Older (~v1.0) versions of julia that don't have `Pkg.Registry.update()` seem to always update registries in
# Pkg operations. So this is only necessary for newer julia versions.
- name: Update any cached registries
if: ${{ inputs.cache-registries == 'true' }}
continue-on-error: true
run: |
if [ -d "${{ steps.paths.outputs.depot }}/registries" ] && [ -n "$(ls -A "${{ steps.paths.outputs.depot }}/registries")" ]; then
echo "Registries directory exists and is non-empty. Updating any registries"
julia -e "import Pkg; isdefined(Pkg, :Registry) && Pkg.Registry.update();"
else
echo "Registries directory does not exist or is empty. Skipping registry update"
fi
shell: bash
# GitHub actions cache entries are immutable and cannot be updated. In order to have both the Julia
# depot cache be up-to-date and avoid storing redundant cache entries we'll manually cleanup old
# cache entries before the new cache is saved. However, we need to be careful with our manual
# cleanup as otherwise we can cause cache misses for jobs which would have normally had a cache hit.
# Some scenarios to keep in mind include:
#
# - Job failures result in the post-action for `actions/cache` being skipped. If we delete all cache
# entries for the branch we may have no cache entry available for the next run.
# - We should avoid deleting old cache entries for the default branch since these entries serve as
# the fallback if no earlier cache entry exists on a branch. We can rely on GitHub's default cache
# eviction policy here which will remove the oldest cache entry first.
#
# References:
# - https://github.com/actions/cache/blob/main/tips-and-workarounds.md#update-a-cache
# - https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#usage-limits-and-eviction-policy
# Not windows
- uses: pyTooling/Actions/with-post-step@adef08d3bdef092282614f3b683897cefae82ee3
if: ${{ inputs.delete-old-caches == 'true' && runner.OS != 'Windows' }}
- uses: pyTooling/Actions/with-post-step@370c306306304663febee1525552a09e061588fa # v7.4.2
if: ${{ inputs.delete-old-caches != 'false' &&
github.ref != format('refs/heads/{0}', github.event.repository.default_branch) &&
runner.OS != 'Windows' }}
with:
# seems like there has to be a `main` step in this action. Could list caches for info if we wanted
# main: julia ${{ github.action_path }}/handle_caches.jl "${{ github.repository }}" "list"
main: echo ""
post: julia $GITHUB_ACTION_PATH/handle_caches.jl "${{ github.repository }}" "rm" "${{ steps.keys.outputs.restore-key }}"
post: julia $GITHUB_ACTION_PATH/handle_caches.jl rm "${{ github.repository }}" "${{ steps.keys.outputs.restore-key }}" "${{ github.ref }}" "${{ inputs.delete-old-caches != 'required' }}"
env:
GH_TOKEN: ${{ inputs.token }}
# Windows (because this action uses command prompt on windows)
- uses: pyTooling/Actions/with-post-step@adef08d3bdef092282614f3b683897cefae82ee3
if: ${{ inputs.delete-old-caches == 'true' && runner.OS == 'Windows' }}
- uses: pyTooling/Actions/with-post-step@370c306306304663febee1525552a09e061588fa # v7.4.2
if: ${{ inputs.delete-old-caches != 'false' &&
github.ref != format('refs/heads/{0}', github.event.repository.default_branch) &&
runner.OS == 'Windows' }}
with:
main: echo ""
post: cd %GITHUB_ACTION_PATH% && julia handle_caches.jl "${{ github.repository }}" "rm" "${{ steps.keys.outputs.restore-key }}"
post: cd %GITHUB_ACTION_PATH% && julia handle_caches.jl rm "${{ github.repository }}" "${{ steps.keys.outputs.restore-key }}" "${{ github.ref }}" "${{ inputs.delete-old-caches != 'required' }}"
env:
GH_TOKEN: ${{ inputs.token }}

View File

@@ -0,0 +1,56 @@
# Making a new release
In this guide, as an example, `v2.2.0` refers to the version number of the new release that you want to make.
## Part 1: Use the Git CLI to create and push the Git tags
Step 1: Create a new lightweight tag of the form `vMAJOR.MINOR.PATCH`.
```bash
git clone git@github.com:julia-actions/cache.git
cd cache
git fetch --all --tags
git checkout main
git --no-pager log -1
# Take note of the commit hash here.
# Now, create a new lightweight tag of the form `vMAJOR.MINOR.PATCH`.
#
# Replace `commit_hash` with the commit hash that you obtained from the
# `git log -1` step.
#
# Replace `v2.2.0` with the actual version number that you want to use.
git tag v2.2.0 commit_hash
```
Step 2: Once you've created the new release, you need to update the `v2` tag to point to the new release. For example, suppose that the previous release was `v2.1.0`, and suppose that you just created the new release `v2.2.0`. You need to update the `v2` tag so that it points to `v2.2.0`. Here are the commands:
```bash
# Create/update the new v2 tag locally, where the new v2 tag will point to the
# release that you created in the previous step.
#
# Make sure to change `v2.2.0` to the actual value for the tag that you just
# created in the previous step.
#
# The `-f` flag forcibly overwrites the old
# `v2` tag (if it exists).
git tag -f v2 v2.2.0
```
Step 3: Now you need to push the tags:
```bash
# Regular-push the new `v2.2.0` tag:
git push origin tag v2.2.0
# Force-push the new v2 tag:
git push origin tag v2 --force
```
## Part 2: Create the GitHub Release
Go to the [Releases](https://github.com/julia-actions/cache/releases) section of this repo and create a new release (using the GitHub web interface).
For the "choose a tag" drop-down field, select the `v2.2.0` tag that you created and pushed in Part 1 of this guide.

View File

@@ -1,58 +1,78 @@
using Pkg, Dates
function handle_caches()
repo = ARGS[1]
func = ARGS[2]
restore_key = get(ARGS, 3, "")
subcommand = ARGS[1]
if func == "list"
if subcommand == "list"
repo = ARGS[2]
println("Listing existing caches")
run(`gh cache list --limit 100 --repo $repo`)
elseif func == "rm"
caches = String[]
elseif subcommand == "rm"
repo, restore_key, ref = ARGS[2:4]
allow_failure = ARGS[5] == "true"
page = 1
per_page = 100
skipped = String[]
deleted = String[]
failed = String[]
for _ in 1:5 # limit to avoid accidental rate limiting
hits = split(strip(read(`gh cache list --limit 100 --repo $repo`, String)), keepempty=false)
search_again = length(hits) == 100
filter!(startswith(restore_key), hits)
isempty(hits) && break
# We can delete everything that matches the restore key because the new cache is saved later.
for c in hits
while 1 <= page <= 5 # limit to avoid accidental rate limiting
# https://docs.github.com/en/rest/actions/cache?apiVersion=2022-11-28#list-github-actions-caches-for-a-repository
# Note: The `key` field matches on the full key or a prefix.
cmd = ```
gh api -X GET /repos/$repo/actions/caches
--field per_page=$per_page
--field page=$page
--field ref=$ref
--field key=$restore_key
--field sort=last_accessed_at
--field direction=desc
--jq '.actions_caches[].id'
```
ids = split(read(cmd, String); keepempty=false)
# Avoid deleting the latest used cache entry. This is particularly important for
# job failures where a new cache entry will not be saved after this.
page == 1 && !isempty(ids) && push!(skipped, popfirst!(ids))
for id in ids
try
run(`gh cache delete $(split(c)[1]) --repo $repo`)
push!(caches, c)
run(`gh cache delete $id --repo $repo`)
push!(deleted, id)
catch e
@error e
push!(failed, c)
push!(failed, id)
end
end
search_again || break
page = length(ids) == per_page ? page + 1 : -1
end
if isempty(failed) && isempty(caches)
println("No existing caches found for restore key `$restore_key`")
if isempty(skipped) && isempty(deleted) && isempty(failed)
println("No existing caches found on ref `$ref` matching restore key `$restore_key`")
else
if !isempty(failed)
println("Failed to delete $(length(failed)) existing caches for restore key `$restore_key`")
println("Failed to delete $(length(failed)) existing caches on ref `$ref` matching restore key `$restore_key`")
println.(failed)
@info """
To delete caches you need to grant the following to the default `GITHUB_TOKEN` by adding
this to your yml:
this to your workflow:
```
permissions:
actions: write
contents: read
actions: write
contents: read
```
(Note this won't work for fork PRs but should once merged)
Or provide a token with `repo` scope via the `token` input option.
See https://cli.github.com/manual/gh_cache_delete
"""
allow_failure || exit(1)
end
if !isempty(caches)
println("$(length(caches)) existing caches deleted that match restore key `$restore_key`:")
println.(caches)
if !isempty(deleted)
println("Deleted $(length(deleted)) caches on ref `$ref` matching restore key `$restore_key`")
println.(deleted)
end
end
else
throw(ArgumentError("Unexpected second argument: $func"))
throw(ArgumentError("Unexpected subcommand: $subcommand"))
end
end