forked from continuwuation/continuwuity
Runner images have migrated from /usr/share/rust/.cargo/bin to standard ~/.cargo/bin location. Action now checks old location first and migrates binaries if found, maintaining compatibility with both paths. Bump cache key to v3 to ensure fresh binary cache after path changes.
120 lines
3.9 KiB
YAML
120 lines
3.9 KiB
YAML
name: timelord
|
|
description: |
|
|
Use timelord to set file timestamps with git-warp-time fallback for cache misses
|
|
inputs:
|
|
key:
|
|
description: |
|
|
The key to use for caching the timelord data.
|
|
required: false
|
|
default: ''
|
|
path:
|
|
description: |
|
|
The path to the directory to be timestamped.
|
|
required: false
|
|
default: ''
|
|
|
|
outputs:
|
|
database-path:
|
|
description: Path to timelord database
|
|
value: '${{ env.TIMELORD_CACHE_PATH }}'
|
|
|
|
runs:
|
|
using: composite
|
|
steps:
|
|
- name: Set defaults
|
|
shell: bash
|
|
run: |
|
|
echo "TIMELORD_KEY=${{ inputs.key || format('timelord-v1-{0}-{1}', github.repository, hashFiles('**/*.rs', '**/Cargo.toml', '**/Cargo.lock')) }}" >> $GITHUB_ENV
|
|
echo "TIMELORD_PATH=${{ inputs.path || '.' }}" >> $GITHUB_ENV
|
|
echo "TIMELORD_CACHE_PATH=$HOME/.cache/timelord" >> $GITHUB_ENV
|
|
echo "PATH=$HOME/.cargo/bin:/usr/share/rust/.cargo/bin:$PATH" >> $GITHUB_ENV
|
|
|
|
- name: Restore binary cache
|
|
id: binary-cache
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
path: |
|
|
/usr/share/rust/.cargo/bin
|
|
~/.cargo/bin
|
|
key: timelord-binaries-v3
|
|
|
|
- name: Check if binaries need installation
|
|
shell: bash
|
|
id: check-binaries
|
|
run: |
|
|
NEED_INSTALL=false
|
|
|
|
# Ensure ~/.cargo/bin exists
|
|
mkdir -p ~/.cargo/bin
|
|
|
|
# Check and move timelord if needed
|
|
if [ -f /usr/share/rust/.cargo/bin/timelord ] && [ ! -f ~/.cargo/bin/timelord ]; then
|
|
echo "Moving timelord from /usr/share/rust/.cargo/bin to ~/.cargo/bin"
|
|
mv /usr/share/rust/.cargo/bin/timelord ~/.cargo/bin/
|
|
fi
|
|
if [ ! -f ~/.cargo/bin/timelord ]; then
|
|
echo "timelord-cli not found, needs installation"
|
|
NEED_INSTALL=true
|
|
fi
|
|
|
|
# Check and move git-warp-time if needed
|
|
if [ -f /usr/share/rust/.cargo/bin/git-warp-time ] && [ ! -f ~/.cargo/bin/git-warp-time ]; then
|
|
echo "Moving git-warp-time from /usr/share/rust/.cargo/bin to ~/.cargo/bin"
|
|
mv /usr/share/rust/.cargo/bin/git-warp-time ~/.cargo/bin/
|
|
fi
|
|
if [ ! -f ~/.cargo/bin/git-warp-time ]; then
|
|
echo "git-warp-time not found, needs installation"
|
|
NEED_INSTALL=true
|
|
fi
|
|
|
|
echo "need-install=$NEED_INSTALL" >> $GITHUB_OUTPUT
|
|
|
|
- name: Install timelord-cli and git-warp-time
|
|
if: steps.check-binaries.outputs.need-install == 'true'
|
|
uses: https://github.com/taiki-e/install-action@v2
|
|
with:
|
|
tool: git-warp-time,timelord-cli@3.0.1
|
|
|
|
- name: Save binary cache
|
|
if: steps.check-binaries.outputs.need-install == 'true'
|
|
uses: actions/cache/save@v4
|
|
with:
|
|
path: |
|
|
/usr/share/rust/.cargo/bin
|
|
~/.cargo/bin
|
|
key: timelord-binaries-v3
|
|
|
|
|
|
- name: Restore timelord cache with fallbacks
|
|
id: timelord-restore
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
path: ${{ env.TIMELORD_CACHE_PATH }}
|
|
key: ${{ env.TIMELORD_KEY }}
|
|
restore-keys: |
|
|
timelord-v1-${{ github.repository }}-
|
|
|
|
- name: Initialize timestamps on complete cache miss
|
|
if: steps.timelord-restore.outputs.cache-hit != 'true'
|
|
shell: bash
|
|
run: |
|
|
echo "Complete timelord cache miss - running git-warp-time"
|
|
git fetch --unshallow
|
|
if [ "${{ env.TIMELORD_PATH }}" = "." ]; then
|
|
git-warp-time --quiet
|
|
else
|
|
git-warp-time --quiet ${{ env.TIMELORD_PATH }}
|
|
fi
|
|
echo "Git timestamps restored"
|
|
|
|
- name: Run timelord sync
|
|
shell: bash
|
|
run: |
|
|
mkdir -p ${{ env.TIMELORD_CACHE_PATH }}
|
|
timelord sync --source-dir ${{ env.TIMELORD_PATH }} --cache-dir ${{ env.TIMELORD_CACHE_PATH }}
|
|
|
|
- name: Save updated timelord cache immediately
|
|
uses: actions/cache/save@v4
|
|
with:
|
|
path: ${{ env.TIMELORD_CACHE_PATH }}
|
|
key: ${{ env.TIMELORD_KEY }}
|