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: | echo "Checking for existing binaries..." echo "Contents of /usr/share/rust/.cargo/bin/:" ls -la /usr/share/rust/.cargo/bin/ || echo "/usr/share/rust/.cargo/bin/ doesn't exist" echo "PATH: $PATH" 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: 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 /usr/share/rust/.cargo/bin/ after install:" ls -la /usr/share/rust/.cargo/bin/ || echo "/usr/share/rust/.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 /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 }}