description:Install Package Manager Guard (PMG) and wrap npm/pip/etc. in this Linux GitHub Actions runner.
author:SafeDep
branding:
icon:shield
color:green
inputs:
version:
description:PMG release tag to install (e.g. v0.42.0) or "latest".
required:false
default:latest
api-key:
description:SafeDep Cloud API key. When set together with tenant-id, cloud sync is enabled and credentials are passed via env (no keychain needed in CI).
required:false
default:""
tenant-id:
description:SafeDep Cloud tenant ID. Required when api-key is set.
required:false
default:""
endpoint-id:
description:Identifier reported to SafeDep Cloud for this runner. When empty and cloud is enabled, defaults to "github-actions/<owner>/<repo>" so events aggregate per repository instead of per ephemeral runner hostname.
required:false
default:""
paranoid:
description:Treat suspicious packages as malicious (PMG_PARANOID). Empty = use PMG default (false).
description:Cooldown window in days (PMG_DEPENDENCY_COOLDOWN_DAYS). Empty = use PMG default (5).
required:false
default:""
proxy-mode:
description:Use proxy-based interception (PMG_PROXY_ENABLED). Empty = use PMG default (true). Setting "false" falls back to guard-based analysis.
required:false
default:""
sandbox:
description:Run package managers inside an OS sandbox (PMG_SANDBOX_ENABLED). Empty = use PMG default (false). Enabling will also relax AppArmor user-namespace restrictions on the runner so unprivileged user namespaces work.
required:false
default:""
sandbox-driver:
description:Sandbox backend on Linux (PMG_SANDBOX_DRIVER). One of "landlock" or "bubblewrap". Defaults to "landlock" when sandbox is enabled and this is empty.
required:false
default:""
verbosity:
description:PMG output verbosity (PMG_VERBOSITY). One of "silent", "normal", "verbose". Empty = use PMG default.
required:false
default:""
disable-telemetry:
description:Disable anonymous PMG telemetry (PMG_DISABLE_TELEMETRY). Empty = use PMG default.
required:false
default:""
skip-event-logging:
description:Skip writing audit events to the local event log (PMG_SKIP_EVENT_LOGGING). Empty = use PMG default.
required:false
default:""
config-file:
description:Path (relative to the workspace) to a user-supplied PMG config.yml. Copied into the PMG config directory before "pmg setup install" runs, so PMG merges any missing template keys into it.
required:false
default:""
cache:
description:Reuse a previously-installed PMG binary from $RUNNER_TOOL_CACHE/pmg/<version>/<arch>. Off by default; fresh download per run keeps the binary current and reduces the blast radius of any cached artifact tampering. Checksum verification still runs on every install path.
required:false
default:"false"
runs:
using:composite
steps:
- name:Verify runner OS
shell:bash
run:|
if [ "${{ runner.os }}" != "Linux" ]; then
echo "::error::safedep/pmg action currently supports Linux runners only. See https://github.com/safedep/pmg/issues/248 for cross-platform tracking."
exit 1
fi
- name:Install PMG
id:install
shell:bash
env:
INPUT_VERSION:${{ inputs.version }}
INPUT_CACHE:${{ inputs.cache }}
run:|
set -euo pipefail
repo="safedep/pmg"
# Resolve version tag.
if [ "$INPUT_VERSION" = "latest" ] || [ -z "$INPUT_VERSION" ]; then