113 lines
2.5 KiB
Markdown
113 lines
2.5 KiB
Markdown
Cache Action
|
|
============
|
|
|
|
A Gitea Action that caches build files as `tar.xz` archives on the runner filesystem. Simple, fast, no external dependencies.
|
|
|
|
## Branches
|
|
|
|
| Branch | Purpose |
|
|
|--------|---------|
|
|
| `restore` | Restores cache archive if it exists |
|
|
| `save` | Saves cache archive (use after build) |
|
|
|
|
## Inputs
|
|
|
|
| Input | Description | Required | Default |
|
|
|-------|-------------|----------|---------|
|
|
| `path` | Single directory to cache | No | `~/.cache/` |
|
|
| `key-prefix` | Prefix for the cache key | Yes | — |
|
|
| `key-file` | File to hash (SHA-256) for the cache key | Yes | — |
|
|
|
|
## Outputs
|
|
|
|
| Output | Description |
|
|
|--------|-------------|
|
|
| `cache-hit` | `true` if exact key match found, `false` otherwise (restore only) |
|
|
|
|
## How It Works
|
|
|
|
1. Hashes `key-file` with SHA-256, combines with `key-prefix` as `<prefix>-<hash>`
|
|
2. Stores archives at `~/.cache/.cache-store/<key>.tar.xz`
|
|
3. `restore` branch extracts the archive, `save` branch creates one
|
|
|
|
## Usage
|
|
|
|
This action must be used **twice** in your workflow:
|
|
|
|
1. **Before build** — use `@restore` to restore cache if it exists
|
|
2. **After build** — use `@save` to save the cache archive
|
|
|
|
## Rust Example
|
|
|
|
```yaml
|
|
name: Rust Build
|
|
on: push
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
# 1. Restore cache before build
|
|
- uses: Actions/Cache@restore
|
|
id: cache
|
|
with:
|
|
key-prefix: 'cargo-registry'
|
|
key-file: 'Cargo.lock'
|
|
path: '~/.cargo/registry'
|
|
|
|
- name: Build
|
|
run: cargo build --release
|
|
|
|
# 2. Save cache after build
|
|
- uses: Actions/Cache@save
|
|
with:
|
|
key-prefix: 'cargo-registry'
|
|
key-file: 'Cargo.lock'
|
|
path: '~/.cargo/registry'
|
|
```
|
|
|
|
## Skip Steps on Cache Hit
|
|
|
|
```yaml
|
|
name: Build with Conditional Steps
|
|
on: push
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
|
|
# 1. Restore cache
|
|
- uses: Actions/Cache@restore
|
|
id: cache
|
|
with:
|
|
key-prefix: 'rust'
|
|
key-file: 'Cargo.lock'
|
|
path: '~/.cargo/registry'
|
|
|
|
- name: Fetch dependencies
|
|
if: steps.cache.outputs.cache-hit != 'true'
|
|
run: cargo fetch
|
|
|
|
- name: Build
|
|
run: cargo build --release
|
|
|
|
# 2. Save cache
|
|
- uses: Actions/Cache@save
|
|
with:
|
|
key-prefix: 'rust'
|
|
key-file: 'Cargo.lock'
|
|
path: '~/.cargo/registry'
|
|
```
|