Updatecli

Update anything, anywhere

Updatecli reads a YAML manifest, fetches a value from any source, checks your conditions, then writes the value into any file and opens the pull request. One binary, on a laptop or in any CI, with no server and no database.

Get started

brew tap updatecli/updatecli && brew install updatecli Other platforms

Open source, Apache-2.0 licensed.

How it works

A manifest declares what to update, where, and under which conditions. Each pipeline runs three stages, always in this order:

  1. Source

    Retrieves the value an update is based on, such as the latest release of a dependency. A source never modifies anything.

  2. Condition

    Checks that everything required to apply the update holds true. If a condition is not met, the targets are skipped.

  3. Target

    Writes the source value where it belongs, such as a key in a YAML file or a line in a Dockerfile.

An SCM block and an action then commit the change to a working branch and open the pull or merge request.

Read the introduction

updatecli.yaml
name: QuickStart example

# "sources" describe where the information to use comes from.
# Here: the latest Jenkins weekly version.
sources:
  jenkinsVersion:
    name: Get the latest Jenkins weekly version
    kind: jenkins
    spec:
      release: weekly

# "conditions" describe what must be true before any target is updated.
# Here: the matching Docker image must exist on DockerHub.
conditions:
  dockerimage:
    name: Is the Jenkins weekly tag published on DockerHub
    kind: dockerimage
    spec:
      image: jenkins/jenkins

# "targets" describe what to update with the source value.
# Here: the key "$.container.tag" of the file "data.yaml".
targets:
  dataFile:
    name: Bump the Jenkins Docker image tag
    kind: yaml
    spec:
      file: data.yaml
      key: $.container.tag
$ updatecli diff

source: jenkinsVersion
✔ version "2.575" found for the Jenkins weekly release

condition: dockerimage
✔ docker image jenkins/jenkins:2.575 found

target: dataFile
⚠ - change detected:
	* key "$.container.tag" should be updated from "2.475" to "2.575", in file "data.yaml"

Why Updatecli

Any value, in any file

A YAML key, a Dockerfile, a Helm chart, go.mod, or a line in a text file. Values come from container registries, Maven repositories, Git, HTTP APIs, and more.

Checks before it changes

Conditions validate your assumptions first, so a version that is not published yet, or has known vulnerabilities, never reaches a pull request.

No server, no database

The same binary runs on a laptop or in any CI. The manifest and the files it updates are the only state.

Updatecli updates related files together, in the order you choose, including the ones no package manager knows about. Why Updatecli exists

Documentation

Start here

Go further