Skip to content

Commit

Permalink
vendorize and fix workflows
Browse files Browse the repository at this point in the history
  • Loading branch information
braingram committed Feb 14, 2025
1 parent 5dd8c93 commit 45e20a4
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 4 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/data.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ on:

jobs:
download_webbpsf_data:
uses: spacetelescope/webbpsf/.github/workflows/download_data.yml@develop
uses: ./.github/workflows/download_data.yml
with:
minimal: ${{ github.event_name != 'workflow_dispatch' && true || inputs.webbpsf_minimal }}
move_data_cache_path:
Expand Down
91 changes: 91 additions & 0 deletions .github/workflows/download_data.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# downloads WebbPSF dataset and caches it to GitHub cache,
# making a new cache for a new data version
# the cache key is in the form `webbpsf-data-mini-1.3.0`,
# `webbpsf-data-full-1.2.6`, etc.
#
# To provide your own test workflow with the WebbPSF dataset,
# you should use this workflow to set up a cache in your repository,
# and then use `retrieve_cache.yml` to retrieve that cache so you
# don't have to download the entire dataset every time.
#
# to set up a cache of WebbPSF data in your own repository,
# create a workflow like the following:
#
# # .github/workflows/download_webbpsf.yml
# name: download and cache WebbPSF data
# on:
# schedule:
# - cron: "0 0 * * 0"
# jobs:
# download_webbpsf:
# uses: spacetelescope/webbpsf/.github/workflows/download_data.yml@beda656c80a0254e6f80649d9c9c49235634522f # v1.4.0
# with:
# minimal: true

name: download and cache data

on:
workflow_call:
inputs:
url:
description: URL to gzip file
type: string
required: false
default: https://stsci.box.com/shared/static/0dt9z6b927iqgtify2a4cvls9hvapi6k.gz
minimal:
description: dataset is minimal (as opposed to full)
type: boolean
required: false
default: true
outputs:
version:
value: ${{ jobs.download.outputs.version }}
cache_path:
value: ${{ jobs.download.outputs.cache_path }}
cache_key:
value: ${{ jobs.download.outputs.cache_key }}
workflow_dispatch:
inputs:
url:
description: URL to gzip file
type: string
required: false
default: https://stsci.box.com/shared/static/0dt9z6b927iqgtify2a4cvls9hvapi6k.gz
minimal:
description: dataset is minimal (as opposed to full)
type: boolean
required: false
default: true
schedule:
- cron: "0 0 * * 0"
release:
push:
branches:
- develop

env:
FULL_DATA_URL: https://stsci.box.com/shared/static/qxpiaxsjwo15ml6m4pkhtk36c9jgj70k.gz
MINIMAL_DATA_URL: https://stsci.box.com/shared/static/0dt9z6b927iqgtify2a4cvls9hvapi6k.gz

jobs:
download:
name: download and cache WebbPSF data
runs-on: ubuntu-latest
steps:
- run: wget ${{ (github.event_name == 'workflow_dispatch' || github.event_name == 'workflow_call') && inputs.url || env.MINIMAL_DATA_URL }} -O ${{ runner.temp }}/webbpsf-data.tar.gz
- run: mkdir ${{ runner.temp }}/data/
- run: tar -xzvf ${{ runner.temp }}/webbpsf-data.tar.gz -C ${{ runner.temp }}/data/
- id: cache_path
run: echo cache_path=${{ runner.temp }}/data/ >> $GITHUB_OUTPUT
- id: version
run: echo "version=$(cat ${{ steps.cache_path.outputs.cache_path }}/webbpsf-data/version.txt)" >> $GITHUB_OUTPUT
- id: cache_key
run: echo "cache_key=webbpsf-data-${{ (github.event_name == 'schedule' || github.event_name == 'release') && 'mini' || inputs.minimal && 'mini' || 'full' }}-${{ steps.version.outputs.version }}" >> $GITHUB_OUTPUT
- uses: actions/cache/save@4
with:
path: ${{ runner.temp }}/data/
key: ${{ steps.cache_key.outputs.cache_key }}
outputs:
version: ${{ steps.version.outputs.version }}
cache_path: ${{ steps.cache_path.outputs.cache_path }}
cache_key: ${{ steps.cache_key.outputs.cache_key }}
69 changes: 69 additions & 0 deletions .github/workflows/retrieve_cache.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# retrieves the latest cache key for WebbPSF data;
# the cache key is in the form `webbpsf-data-mini-1.3.0`,
# `webbpsf-data-full-1.2.6`, etc.
#
# to retrieve the WebbPSF data cache in your test workflow,
# first create a cache of the dataset in your repository
# (see `download_data.yml` for instructions), then
# call this workflow as a needed job and use `actions/cache/restore`
# to place the data in your test job:
#
# # .github/workflows/tests.yml
# name: run tests
# ...
# jobs:
# webbpsf_data_cache_key:
# uses: spacetelescope/webbpsf/.github/workflows/retrieve_cache.yml@beda656c80a0254e6f80649d9c9c49235634522f # v1.4.0
# with:
# minimal: true
# tests:
# needs: [ webbpsf_data_cache_key ]
# steps:
# ...
# - name: retrieve WebbPSF data cache
# uses: actions/cache/restore@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
# with:
# path: ${{ runner.temp }}/webbpsf-data
# key: ${{ needs.webbpsf_data_cache_key.outputs.cache_key }}
# ...

name: retrieve latest data cache key

on:
workflow_call:
inputs:
minimal:
description: minimal dataset
type: boolean
required: false
default: true
outputs:
version:
value: ${{ jobs.retrieve_latest_cache_key.outputs.version }}
cache_path:
value: ${{ jobs.retrieve_latest_cache_key.outputs.cache_path }}
cache_key:
value: ${{ jobs.retrieve_latest_cache_key.outputs.cache_key }}

jobs:
retrieve_latest_cache_key:
name: retrieve latest WebbPSF data cache key
runs-on: ubuntu-latest
steps:
- name: retrieve latest data cache key
id: latest_cache_key
run: |
# use actions/gh-actions-cache to allow filtering by key
gh extension install actions/gh-actions-cache
CACHE_KEY=$(gh actions-cache list -R ${{ github.repository }} --key webbpsf-data-${{ inputs.minimal && 'mini' || 'full' }}- --sort created-at | cut -f 1 | head -n 1)
if [ "$CACHE_KEY" == '' ]; then exit 1; fi
echo cache_key=$CACHE_KEY >> $GITHUB_OUTPUT
env:
GH_TOKEN: ${{ github.token }}
- run: echo ${{ steps.latest_cache_key.outputs.cache_key }}
- id: version
run: echo "version=$(echo ${{ steps.latest_cache_key.outputs.cache_key }} | awk -F '-' '{print $4}')" >> $GITHUB_OUTPUT
outputs:
version: ${{ steps.version.outputs.version }}
cache_path: ${{ runner.temp }}/data/
cache_key: ${{ steps.latest_cache_key.outputs.cache_key }}
2 changes: 1 addition & 1 deletion .github/workflows/roman_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
envs: |
- linux: check-dependencies
webbpsf_data_cache:
uses: spacetelescope/webbpsf/.github/workflows/retrieve_cache.yml@develop
uses: ./.github/workflows/retrieve_cache.yml
with:
minimal: true
latest_crds_contexts:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/roman_ci_cron.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ concurrency:
jobs:
webbpsf_data_cache:
if: (github.repository == 'spacetelescope/romancal' && (github.event_name == 'schedule' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'run scheduled tests')))
uses: spacetelescope/webbpsf/.github/workflows/retrieve_cache.yml@develop
uses: ./.github/workflows/retrieve_cache.yml
with:
minimal: true
latest_crds_contexts:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/tests_devdeps.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ concurrency:
jobs:
webbpsf_data_cache:
if: (github.repository == 'spacetelescope/romancal' && (github.event_name == 'schedule' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'run devdeps tests')))
uses: spacetelescope/webbpsf/.github/workflows/retrieve_cache.yml@develop
uses: ./.github/workflows/retrieve_cache.yml
with:
minimal: true
latest_crds_contexts:
Expand Down

0 comments on commit 45e20a4

Please sign in to comment.