mirror of
https://forgejo.ellis.link/continuwuation/continuwuity.git
synced 2025-09-09 13:53:03 +02:00
Updates the timelord action to fall back to git-warp-time when the cache is completely empty, enabling timestamp restoration even on fresh builds. When git-warp-time is used, performs an unshallow fetch to get full history, while subsequent runs use normal fetches. Simplifies the interface by making inputs optional with sensible defaults. Adds binary caching for timelord-cli and git-warp-time tools to avoid repeated installations, and updates paths to use /usr/share/rust/.cargo/bin/ for the catthehacker runner image used by the dind profile (may need updating if/when switching to standard image). The main timelord restore now happens inside the Dockerfile itself, as Docker intentionally wipes all file mtimes on COPY/ADD operations.
99 lines
3.2 KiB
YAML
99 lines
3.2 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: Restore binary cache
|
|
id: binary-cache
|
|
uses: actions/cache/restore@v4
|
|
with:
|
|
path: /usr/share/rust/.cargo/bin
|
|
key: timelord-binaries-v1
|
|
|
|
- name: Check if binaries need installation
|
|
shell: bash
|
|
id: check-binaries
|
|
run: |
|
|
NEED_INSTALL=false
|
|
if [ ! -e /usr/share/rust/.cargo/bin/timelord ]; then
|
|
echo "timelord-cli not found at /usr/share/rust/.cargo/bin/timelord, needs installation"
|
|
NEED_INSTALL=true
|
|
fi
|
|
if [ ! -e /usr/share/rust/.cargo/bin/git-warp-time ]; then
|
|
echo "git-warp-time not found at /usr/share/rust/.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: Save binary cache
|
|
if: steps.check-binaries.outputs.need-install == 'true'
|
|
uses: actions/cache/save@v4
|
|
with:
|
|
path: /usr/share/rust/.cargo/bin
|
|
key: timelord-binaries-v1
|
|
|
|
|
|
- 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
|
|
/usr/share/rust/.cargo/bin/git-warp-time --quiet
|
|
else
|
|
/usr/share/rust/.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 }}
|
|
/usr/share/rust/.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 }}
|