Skip to content

ActionsManager

Self-hosted control plane

Change a workflow once. Roll it out everywhere.

ActionsManager is a control plane for GitHub Actions across a whole repository fleet. Group repositories into projects, roll out changes as reviewable pull requests, and catch drift, all from one container you run yourself.

docker run · one container · SQLite by default

What it does

Built for fleets, not single repos

All features
  • One project, many repos

    Group repositories into Caller Workflow Projects and operate on all of them at once instead of repo by repo.

    The NodeBuilds project in ActionsManager, with six target repositories selected on its Repositories & Branches page.
  • PR campaigns

    One rollout opens a pull request in every repository in the project. Review them one by one, or bulk-merge from ActionsManager.

    A PR campaign in ActionsManager tracking open and merged pull requests across two repositories.
  • Drift detection

    See exactly where a repository's workflow has diverged from the managed definition, and resolve it from the same screen.

    The drift view in ActionsManager comparing the managed workflow with the version changed in GitHub.
  • Reusable workflows

    Manage both sides of reuse: the Reusable Workflow Project and the caller projects that link it, and edit it in one place.

    A caller project in ActionsManager with java-build.yml linked in from the Shared CI Reusable Workflow Project, open in the editor.
  • Build detection & metrics

    Detect each repository's build type to start from the right workflow template, then track success rates and run times across the project.

    Build metrics in ActionsManager: success rate, run counts, durations and recent runs for a project.
  • Your tokens, your box

    Log in with GitHub OAuth or a personal access token. PATs are stored encrypted in your own database, and there is no product telemetry.

    The ActionsManager sign-in screen, offering GitHub OAuth or a personal access token.

Quick start

Running in one command

SQLite by default, PostgreSQL when you need it. Then open http://localhost:8080 and sign in with a personal access token or GitHub OAuth.

Full installation guide
Terminal window
# Generate a stable SECRET_KEY once and reuse it on every start:
# SECRET_KEY=$(openssl rand -hex 32)
docker run -d \
--name actions-manager \
-p 8080:8080 \
-v actions-manager-data:/app/data \
-e INSTALLATION_MODE=self-hosted \
-e SECRET_KEY=<your_generated_key> \
-e ALLOW_INSECURE_HTTP=true \
ghcr.io/greywolflabs/actions-manager:latest