actup
Upgrade GitHub Actions versions interactively from your terminal
Explore the docs »
Report Bug
·
Request Feature
actup is a CLI tool that scans your GitHub Actions workflow files (.github/workflows/*.yml) and upgrades action versions to their latest semver tags. It provides both an interactive terminal UI (TUI) powered by Bubble Tea for cherry-picking upgrades, and a non-interactive mode for CI/automation.
Features
- Automatic discovery of workflow files in
.github/workflows/
- Interactive TUI with a checkbox list to select which actions to upgrade
- Non-interactive mode (
--no-tui) for automated upgrades
- Dry-run support (
--dry-run) to preview changes without writing files
- Atomic file edits via temp-file + rename to prevent corruption
- Semver-aware — fetches and sorts tags by semantic versioning
- Concurrent API requests with built-in rate-limiting and caching
Demo

Table of Contents
Installation
Package managers
go install:
go install github.com/lynicis/actup@latest
Homebrew (macOS & Linux):
brew tap lynicis/tap
brew install actup
Scoop (Windows):
scoop bucket add actup https://github.com/lynicis/scoop-bucket.git
scoop install actup
Debian / Ubuntu:
curl -LO https://github.com/lynicis/actup/releases/latest/download/actup_latest_linux_amd64.deb
sudo dpkg -i actup_latest_linux_amd64.deb
Fedora / RHEL / CentOS:
curl -LO https://github.com/lynicis/actup/releases/latest/download/actup_latest_linux_amd64.rpm
sudo rpm -i actup_latest_linux_amd64.rpm
Replace amd64 with arm64 if you're on an ARM machine.
Build from source
Requires Go 1.22 or later.
git clone https://github.com/lynicis/actup.git
cd actup
make build
make install # optional, installs to $GOPATH/bin
Manual binary
Grab a pre-built binary for Linux, macOS, or Windows from the Releases page.
Docker
Images are published to ghcr.io/lynicis/actup for both linux/amd64 and linux/arm64:
docker run ghcr.io/lynicis/actup:latest --help
Mount a repository to scan:
docker run -v "$PWD:/workdir" -w /workdir ghcr.io/lynicis/actup:latest
You can also set GITHUB_TOKEN for higher API rate limits:
docker run -v "$PWD:/workdir" -w /workdir \
-e GITHUB_TOKEN \
ghcr.io/lynicis/actup:latest
Usage
Run actup from the root of any repository containing GitHub Actions workflows:
# Interactive mode (default) — opens a TUI to select upgrades
actup
# Non-interactive mode — upgrades everything automatically
actup --no-tui
# Preview changes without writing files
actup --dry-run
# Scan custom paths
actup -p ./my-workflows -p ./another-workflows
# Provide a GitHub token for higher rate limits
actup -t $GITHUB_TOKEN
# or
export GITHUB_TOKEN=ghp_xxx
actup
# Pin all upgrades to major version 4
actup --major 4
# Use a config file for per-action overrides
actup # auto-discovers .actup.yaml in current directory
Config File (.actup.yaml)
Place an optional .actup.yaml in your project root for persistent overrides:
# Global default major version (overridden by CLI --major flag)
major: 4
# Per-action overrides / pins / exclusions
actions:
actions/checkout: 4 # pin to latest v4.x.x
actions/setup-go: v5.3.0 # pin to exact version
some-org/some-action: skip # exclude from upgrades
Precedence: CLI flags > config file > built-in defaults.
Interactive TUI Controls
| Key |
Action |
Space |
Toggle selection of an action |
a |
Select all upgradable actions |
n |
Deselect all |
Enter |
Apply selected upgrades |
q / Ctrl+C |
Quit |
Example Output
actup — 5 actions found across 3 files
[✓] actions/checkout@v3 → v4 (3 files)
[✓] actions/setup-go@v4 → v5 (2 files)
[⏭] actions/cache@v4 (up to date)
[✓] golangci/golangci-lint-action@v3 → v6 (1 file)
[⚠] some-org/some-action@v1 (API error)
[space] toggle [a] all [n] none [enter] apply [q] quit
Roadmap
- Interactive TUI with checklist selection
- Non-interactive (
--no-tui) mode
- Dry-run support
- Concurrent GitHub API calls with rate-limit awareness
- Cross-platform builds (Linux, macOS, Windows)
- Pre-commit hooks for CI integration (
.pre-commit-hooks.yaml)
- Add support for pinning to specific major versions (
--major)
- Config file support (
.actup.yaml)
- Integration with
dependabot-style grouped updates
- Pre-upgrade hooks / custom validation
See the open issues for a full list of proposed features and known issues.
Contributing
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature)
- Commit your Changes (
git commit -m 'feat: add some AmazingFeature')
- Push to the Branch (
git push origin feature/AmazingFeature)
- Open a Pull Request
Please make sure your code passes the existing tests and lint checks:
make test
make lint
License
Distributed under the MIT License. See LICENSE for more information.
Acknowledgments
- Bubble Tea — the TUI framework that powers the interactive interface
- Cobra — CLI framework for Go
- go-github — GitHub API client library
- go-yaml - Yaml unmarshaller/marshaller for Go