Compare commits

..

27 Commits

Author SHA1 Message Date
Curtis Vogt
b02b27b5c2 Check if gh can stream logs 2025-01-24 11:15:16 -06:00
Curtis Vogt
69674bfc14 fixup! Add delay 2025-01-24 10:34:42 -06:00
Curtis Vogt
0a42a3633d fixup! Add delay 2025-01-24 10:31:40 -06:00
Curtis Vogt
9d9d37994b Add delay 2025-01-24 10:20:51 -06:00
Curtis Vogt
e49ff51323 Validate access isn't the problem 2025-01-24 10:13:55 -06:00
Curtis Vogt
5a04d111ea fixup! Experiment with access logs during execution 2025-01-24 10:10:02 -06:00
Curtis Vogt
b4c6d4b10c Experiment with access logs during execution 2025-01-24 10:08:35 -06:00
Curtis Vogt
46044e72ab fixup! Compare more context 2025-01-24 08:48:06 -06:00
Curtis Vogt
41be7ea14c fixup! Compare more context 2025-01-24 08:43:28 -06:00
Curtis Vogt
ef17b41963 Compare more context 2025-01-24 08:32:26 -06:00
Curtis Vogt
e81fae1916 fixup! Use upload for passing context 2025-01-24 08:24:39 -06:00
Curtis Vogt
1c132479c0 fixup! Use upload for passing context 2025-01-24 08:23:23 -06:00
Curtis Vogt
e7a9e0f340 fixup! Use upload for passing context 2025-01-24 08:22:26 -06:00
Curtis Vogt
7096dc43a1 fixup! Use upload for passing context 2025-01-24 08:20:50 -06:00
Curtis Vogt
cc7375cd98 Use upload for passing context 2025-01-24 08:17:26 -06:00
Curtis Vogt
0217e24a50 Encode to avoid GH checks 2025-01-23 15:56:51 -06:00
Curtis Vogt
66728dbe42 fixup! Check for differences in github context 2025-01-23 15:52:27 -06:00
Curtis Vogt
fd02edc686 fixup! Check for differences in github context 2025-01-23 15:51:36 -06:00
Curtis Vogt
a216f5035e fixup! Check for differences in github context 2025-01-23 15:46:17 -06:00
Curtis Vogt
f5316fefee fixup! Check for differences in github context 2025-01-23 15:43:05 -06:00
Curtis Vogt
11cd6b1ef0 fixup! Check for differences in github context 2025-01-23 15:40:09 -06:00
Curtis Vogt
69d3a9406a fixup! Check for differences in github context 2025-01-23 15:37:26 -06:00
Curtis Vogt
4818bbd194 fixup! Check for differences in github context 2025-01-23 15:35:19 -06:00
Curtis Vogt
d9466e9938 fixup! Check for differences in github context 2025-01-23 15:33:47 -06:00
Curtis Vogt
096c710202 Check for differences in github context 2025-01-23 15:30:05 -06:00
Curtis Vogt
3f52c6b71c Dig further 2025-01-23 13:47:27 -06:00
Curtis Vogt
19f527d7a8 Experiment with theoretical cache key conflict 2025-01-23 13:17:25 -06:00
5 changed files with 143 additions and 52 deletions

View File

@@ -59,7 +59,7 @@ jobs:
env:
JULIA_DEPOT_PATH: /tmp/julia-depot
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set cache-name
id: cache-name
shell: bash
@@ -117,7 +117,7 @@ jobs:
env:
JULIA_DEPOT_PATH: /tmp/julia-depot
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.version }}
@@ -161,7 +161,7 @@ jobs:
outputs:
cache-name: ${{ steps.cache-name.outputs.cache-name }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set cache-name
id: cache-name
run: |
@@ -193,7 +193,7 @@ jobs:
needs: test-save-nomatrix
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Restore cache
id: cache
uses: ./
@@ -233,7 +233,7 @@ jobs:
outputs:
cache-name: ${{ steps.cache-name.outputs.cache-name }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Set cache-name
id: cache-name
run: |
@@ -259,7 +259,7 @@ jobs:
needs: test-save-cloned-registry
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Add General registry clone
shell: julia --color=yes {0}
run: |

79
.github/workflows/ReusableTest.yml vendored Normal file
View File

@@ -0,0 +1,79 @@
---
name: Reusable Test
on:
pull_request:
inputs: {}
jobs:
reusable:
uses: ./.github/workflows/ReusableWorkflow.yml
duplicate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: julia-actions/setup-julia@v2
with:
version: "1"
- name: Save cache
uses: ./
- name: Export Context
run: |
jq -c <<<"$github_json" >github.json
jq -c <<<"$env_json" >env.json
jq -c <<<"$job_json" >job.json
jq -c <<<"$steps_json" >steps.json
jq -c <<<"$runner_json" >runner.json
jq -c <<<"$inputs_json" >inputs.json
env:
github_json: ${{ toJSON(github) }}
env_json: ${{ toJSON(env) }}
job_json: ${{ toJSON(job) }}
steps_json: ${{ toJSON(steps) }}
runner_json: ${{ toJSON(runner) }}
inputs_json: ${{ toJSON(inputs) }}
- name: Export environmental variables
run: jq -n env >env_vars.json
- uses: actions/upload-artifact@v4
with:
name: trigger-context
path: "*.json"
compare:
needs:
- reusable
- duplicate
runs-on: ubuntu-latest
steps:
- uses: actions/download-artifact@v4
with:
name: trigger-context
path: trigger
- uses: actions/download-artifact@v4
with:
name: reusable-context
path: reusable
- run: |
find .
for p in trigger/*.json; do
context_file="$(basename "$p")"
echo "$context_file"
a="$(cat trigger/$context_file)"
b="$(cat reusable/$context_file)"
echo "::group::Raw A"
jq <<<"$a"
echo "::endgroup::"
echo "::group::Raw B"
jq <<<"$b"
echo "::endgroup::"
echo "::group::Diff"
same=0
diff <(jq <<<"$a") <(jq <<<"$b") || same=$?
echo "::endgroup::"
[[ $same -eq 0 ]] && echo "Same" || echo "Differ"
done

52
.github/workflows/ReusableWorkflow.yml vendored Normal file
View File

@@ -0,0 +1,52 @@
---
name: Reusable Workflow
on:
workflow_call:
inputs: {}
jobs:
duplicate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- uses: julia-actions/setup-julia@v2
with:
version: "1"
- name: Save cache
uses: ./
- name: Export Context
run: |
jq -c <<<"$github_json" >github.json
jq -c <<<"$env_json" >env.json
jq -c <<<"$job_json" >job.json
jq -c <<<"$steps_json" >steps.json
jq -c <<<"$runner_json" >runner.json
jq -c <<<"$inputs_json" >inputs.json
env:
github_json: ${{ toJSON(github) }}
env_json: ${{ toJSON(env) }}
job_json: ${{ toJSON(job) }}
steps_json: ${{ toJSON(steps) }}
runner_json: ${{ toJSON(runner) }}
inputs_json: ${{ toJSON(inputs) }}
- name: Export environmental variables
run: jq -n env >env_vars.json
- uses: actions/upload-artifact@v4
with:
name: reusable-context
path: "*.json"
- run: |
set -x
uuid="$(cat /proc/sys/kernel/random/uuid)"
echo "$uuid"
# sleep 60
# https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28#download-workflow-run-logs
# gh api "/repos/{owner}/{repo}/actions/runs/${run_id:?}/logs" >logs.zip
# unzip -- logs.zip "*.txt"
# find .
# grep -rnH ReusableWorkflow.yml .
# grep -rnH "$uuid" .
gh run view "${run_id:?}" --log
env:
GH_TOKEN: ${{ github.token }}
run_id: ${{ github.run_id }}

View File

@@ -20,7 +20,7 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
- uses: julia-actions/cache@v2
- uses: julia-actions/julia-buildpkg@v1
@@ -51,8 +51,6 @@ 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
@@ -66,9 +64,6 @@ By default, this action removes caches that were previously made by jobs on the
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:
@@ -79,7 +74,7 @@ The cache key that the cache will be saved as is based on:
- The run attempt number
> [!NOTE]
> If there is job concurrency that is not fully defined by a matrix you should ensure that `cache-name` is
> 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
@@ -106,35 +101,6 @@ 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,18 +47,12 @@ 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
uses: dcarbone/install-jq-action@b7ef57d46ece78760b4019dbc4080a1ba2a40b45 # v3.2.0
uses: dcarbone/install-jq-action@e397bd87438d72198f81efd21f876461183d383a # v3.0.1
with:
force: false # Skip install when an existing `jq` is present
@@ -127,7 +121,7 @@ runs:
env:
MATRIX_JSON: ${{ toJSON(matrix) }}
- uses: actions/cache@cdf6c1fa76f9f475f3d7449005a359c84ca0f306 # v5.0.3
- uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0
id: cache
with:
path: |
@@ -178,7 +172,7 @@ runs:
# - 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@370c306306304663febee1525552a09e061588fa # v7.4.2
- uses: pyTooling/Actions/with-post-step@9ceefdbf5dceae8c441fc393ed82344c7ca8bbdb # v3.1.1
if: ${{ inputs.delete-old-caches != 'false' &&
github.ref != format('refs/heads/{0}', github.event.repository.default_branch) &&
runner.OS != 'Windows' }}
@@ -191,7 +185,7 @@ runs:
GH_TOKEN: ${{ inputs.token }}
# Windows (because this action uses command prompt on windows)
- uses: pyTooling/Actions/with-post-step@370c306306304663febee1525552a09e061588fa # v7.4.2
- uses: pyTooling/Actions/with-post-step@9ceefdbf5dceae8c441fc393ed82344c7ca8bbdb # v3.1.1
if: ${{ inputs.delete-old-caches != 'false' &&
github.ref != format('refs/heads/{0}', github.event.repository.default_branch) &&
runner.OS == 'Windows' }}