forked from continuwuation/continuwuity
Replace local detect-runner-os action with external detect-versions@v1 to reduce custom action maintenance. Add architecture detection for future cross-platform support and namespace all cache keys with "continuwuity-" prefix to prevent collisions with other projects on shared runners. Updates cache mount IDs in Dockerfiles to match the new namespacing convention, ensuring consistent cache isolation across CI and Docker builds.
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: continuwuity-timelord-binaries
|
|
|
|
- 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: continuwuity-timelord-binaries
|
|
|
|
|
|
- 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: |
|
|
continuwuity-timelord-${{ 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 }}
|