-- Third-party actions from github.com. Archives are content-addressed by commit SHA and shared by every -- account: the code is public and identical for everyone, so it is stored once and never billed (see -- docs/metering.md). Cold fetches are recorded on the free `ops.action_fetches` meter of the run's account. CREATE TABLE action_archives ( key TEXT PRIMARY KEY, -- "/@" owner TEXT NOT NULL, repo TEXT NOT NULL, sha TEXT NOT NULL, r2_key TEXT NOT NULL, size INTEGER NOT NULL, sha256 TEXT NOT NULL, -- of the stored .tgz; runners verify it before extracting created_at INTEGER NOT NULL, last_used_at INTEGER NOT NULL ); CREATE INDEX action_archives_idle ON action_archives(last_used_at); -- Every action.yml/action.yaml in an archive, so compile never re-reads the tarball. CREATE TABLE action_manifests ( archive_key TEXT NOT NULL REFERENCES action_archives(key) ON DELETE CASCADE, path TEXT NOT NULL, -- directory inside the repository ('' for the root) source TEXT NOT NULL, PRIMARY KEY (archive_key, path) ); -- A pinned SHA is only accepted when it is reachable from a branch or tag of the named repository, so a -- commit that exists only in a fork (GitHub shares objects across a fork network) can't pose as the repo. CREATE TABLE action_pin_checks ( key TEXT PRIMARY KEY, -- "/@" reachable INTEGER NOT NULL, checked_at INTEGER NOT NULL ); -- 'all': any public github.com action; 'pinned': only full commit SHAs (also for actions they call); -- 'builtin': only the forge's built-in actions (checkout, cache, upload-artifact, setup-*). ALTER TABLE repos ADD COLUMN actions_policy TEXT NOT NULL DEFAULT 'all';