Module: GitFit::Install::Actions

Defined in:
lib/git_fit/install/actions.rb

Constant Summary collapse

RESTORE_ACTION =
<<~RESTORE_ACTION_YAML
  name: DB Cache Restore
  description: Restore SQLite DB with checksum verification
  inputs:
    path:
      required: false
      default: db/fit.sqlite3
    key-prefix:
      required: false
      default: git-fit-db
  runs:
    using: composite
    steps:
      - uses: actions/cache/restore@v4
        id: restore-db
        with:
          path: |-
            ${{ inputs.path }}
            ${{ inputs.path }}.checksum
          key: ${{ inputs.key-prefix }}-v1-${{ github.run_id }}
          restore-keys: ${{ inputs.key-prefix }}-v1-

      - name: Verify checksum
        shell: bash
        run: |
          db="${{ inputs.path }}"
          ck="${db}.checksum"
          if [ ! -f "$ck" ]; then
            echo "No checksum file — first run or cache miss, skipping verify"
            exit 0
          fi
          if ! sha256sum --check "$ck" --quiet 2>/dev/null; then
            echo "::warning::Checksum mismatch — $db may be corrupted"
            echo "Removing stale files"
            rm -f "$db" "$ck"
          else
            echo "Checksum OK — $db is intact"
          fi
RESTORE_ACTION_YAML
SAVE_ACTION =
<<~SAVE_ACTION_YAML
  name: DB Cache Save
  description: Save SQLite DB with checksum, skip if unchanged
  inputs:
    path:
      required: false
      default: db/fit.sqlite3
    key-prefix:
      required: false
      default: git-fit-db
  outputs:
    saved:
      description: "true if cache was updated, false if unchanged"
      value: ${{ steps.detect.outputs.saved }}
  runs:
    using: composite
    steps:
      - name: Detect changes
        id: detect
        shell: bash
        run: |
          db="${{ inputs.path }}"
          ck="${db}.checksum"
          new_sum=$(sha256sum "$db" 2>/dev/null || echo "")
          if [ -z "$new_sum" ]; then
            echo "saved=false" >> "$GITHUB_OUTPUT"
            exit 0
          fi
          if [ -f "$ck" ] && sha256sum --check "$ck" --quiet 2>/dev/null; then
            echo "DB unchanged — skip save"
            echo "saved=false" >> "$GITHUB_OUTPUT"
            exit 0
          fi
          echo "$new_sum" > "$ck"
          echo "saved=true" >> "$GITHUB_OUTPUT"

      - uses: actions/cache/save@v4
        if: steps.detect.outputs.saved == 'true'
        with:
          path: |-
            ${{ inputs.path }}
            ${{ inputs.path }}.checksum
          key: ${{ inputs.key-prefix }}-v1-${{ github.run_id }}
SAVE_ACTION_YAML