Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 11 additions & 21 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Composal Disk Volume

Persist dependency directories across ephemeral Composal GitHub runners with
Modal Volumes v2. Both `composal-x64-2x` and `composal-x64-4x` use the same
Persist dependency directories across Composal GitHub Actions jobs.
Both `composal-x64-2x` and `composal-x64-4x` use the same
repository-scoped storage.

```yaml
Expand All @@ -26,29 +26,19 @@ keys for package download stores (`~/.npm`, a pnpm store, Cargo registry/git
caches); package managers check the package versions and integrity. Use distinct
keys for incompatible platforms or toolchains.

Each VM extracts trusted snapshots into private directories on its local disk,
so package managers and tests read local files. Concurrent jobs never share a
live directory. The action's post step archives its directory to the job's
private Modal Volume namespace. After the VM stops, Composal verifies the job's actual GitHub assignment:
only successful `push`, `schedule`, or `workflow_dispatch` jobs on the
repository's default branch can publish a new snapshot. Pull requests and other
branches can restore and modify their private clone, but their writes are
removed. When trusted jobs publish the same key concurrently, the last completed
publication becomes the snapshot for future VMs; changes are not merged.

No Modal credentials or additional GitHub workflow permissions are needed.
This action requires Linux Composal runners and host jobs. Container jobs are
not supported in v1. The path must be empty and must not traverse a symlink;
existing files are never hidden or replaced. Do not use this action to mount
Docker's overlay storage; this is a persisted dependency directory, not an
ext4 block device. Keep deployment artifacts and irreplaceable data elsewhere.
Each job restores its own copy of a trusted snapshot. Concurrent jobs never
share a live directory. Only successful `push`, `schedule`, or
`workflow_dispatch` jobs on the repository's default branch publish an updated
snapshot. Pull requests and other branches can restore and modify their copy,
but their changes are discarded. When trusted jobs publish the same key
concurrently, the last completed publication becomes the snapshot for future
jobs; changes are not merged.

Limits: five disk mounts per job, 32 keys and 10 GiB of published data per
repository. Snapshots unused for seven days are not restored. Superseded
snapshots are removed after seven days and abandoned job clones after a day.
Current snapshot metadata remains reserved until the key is reused; this first
release has no user-facing disk deletion interface. Modal Volumes v2 is beta.
release has no user-facing disk deletion interface.

Dependency disks are opt-in. Ordinary `actions/cache` and language setup actions
continue using GitHub's cache backend; bucket-backed Actions archive caching is
a separate integration.
continue using GitHub's cache backend.
2 changes: 1 addition & 1 deletion action.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
name: Composal Disk Volume
description: Mount an isolated dependency directory backed by a Modal Volume on Composal runners.
description: Persist dependency directories across Composal GitHub Actions jobs.
author: ComposalAI
inputs:
key:
Expand Down
Loading