continuwuity/.forgejo/actions/timelord/action.yml
Tom Foster 6ee80e71cc ci: Refactor timelord action to use git-warp-time fallback
Updates the timelord action to fall back to git-warp-time when the cache
is completely empty, enabling timestamp restoration even on fresh builds.
Simplifies the interface by making inputs optional with sensible defaults
and adds Docker integration via buildkit-cache-dance.
2025-09-08 06:15:59 +01:00

98 lines
3.3 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
- name: Check if binaries need installation
shell: bash
id: check-binaries
run: |
echo "Checking for existing binaries..."
echo "Contents of ~/.cargo/bin:"
ls -la ~/.cargo/bin/ || echo "~/.cargo/bin doesn't exist"
echo "PATH: $PATH"
NEED_INSTALL=false
if [ ! -e ~/.cargo/bin/timelord ]; then
echo "timelord-cli not found at ~/.cargo/bin/timelord, needs installation"
NEED_INSTALL=true
fi
if [ ! -e ~/.cargo/bin/git-warp-time ]; then
echo "git-warp-time not found at ~/.cargo/bin/git-warp-time, 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: Debug installed binary locations
shell: bash
run: |
echo "After installation:"
echo "timelord location: $(which timelord || echo 'not found')"
echo "git-warp-time location: $(which git-warp-time || echo 'not found')"
echo "Contents of ~/.cargo/bin after install:"
ls -la ~/.cargo/bin/ || echo "~/.cargo/bin doesn't exist"
- 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
~/.cargo/bin/git-warp-time --quiet
else
~/.cargo/bin/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 }}
~/.cargo/bin/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 }}