Skip to main content

Update-time - it's time to update your dependencies

Keeping dependencies up-to-date is an important aspect of software maintenance. Update-time is a command line tool that scans your repository for dependencies and updates them to their latest versions. It looks at the files you already have — pyproject.toml, package.json, Dockerfiles, GitHub Actions workflows, CircleCI configs, GitLab CI configs, Docker Compose and Helm manifests, and jsDelivr URLs — and rewrites the pinned versions in place. To avoid adopting freshly published releases that may still be buggy, it applies a cooldown period (see Cooldown below).

Usage

Run Update-time without installing it using uvx:

uvx update-time

Or install it as a uv tool so it's always available on your PATH:

uv tool install update-time
update-time

Update-time has a small command-line interface. Run update-time -h/--help to see all options, update-time -V/--version to print the version, and update-time --cooldown DAYS to override the default cooldown period (see Cooldown below). Running update-time with no options in the root folder of a repository updates all supported dependencies.

The recommended workflow is to run Update-time on a dedicated branch, push it, and let CI do the verification:

  1. Create a branch for the updates.
  2. Run update-time in the root of your repository to update the dependencies in place.
  3. Commit the changes and open a pull request.
  4. Let your tests and checks run in CI to confirm nothing is broken before merging.

To raise API rate limits while updating, set the following environment variables before running Update-time:

  • GITHUB_TOKEN — increases the GitHub API rate limit when updating GitHub Actions. The token only needs to read public release and commit data, so no specific scope is required: both a classic token with no scopes selected and a fine-grained token with default read-only access to public repositories work.
  • DOCKER_HUB_USERNAME and DOCKER_HUB_TOKEN — authenticate to the Docker Hub API (both must be set) to increase its rate limit when updating Docker images.

What is updated

Update-time runs a set of updater scripts, each responsible for one kind of dependency. The file-rewriting scripts run concurrently where it's safe to do so; package.json engine and dependency updates run sequentially because they touch the same files.

Dependency Files Source
Python dependencies pinned with == pyproject.toml PyPI
npm dependencies package.json (and package-lock.json) npm registry
Node engine version package.json the Node base image in the project's Dockerfile
Dockerfile base images (tag + digest) Dockerfile Docker Hub
CircleCI images (tag + digest) CircleCI YAML configs Docker Hub
GitLab CI images (tag + digest) .gitlab-ci.yml Docker Hub
Docker Compose and Helm images (tag + digest) Compose files and Helm folder Docker Hub
GitHub Action versions (SHA + tag) workflow YAML files GitHub releases API
jsDelivr npm URLs (version + SRI hash) Sphinx config npm registry

Only versions specified with an exact match (== for Python, a concrete tag — optionally already pinned as tag@sha256:digest — for images) are updated; looser version specifiers are left untouched, so you can pin a maximum version to opt a dependency out of automatic updates. Where available, Update-time prints the changelog entries between the current and new version so you can review what changed.

References that are not yet pinned are pinned automatically:

  • Docker images referenced by tag only — base images in Dockerfiles (FROM image:tag), CircleCI images, GitLab CI images, and Docker Compose / Helm manifest images — get the @sha256:digest of the (latest) tag appended, so the image is reproducible. Images without a concrete version tag are ignored: references through a template ({{ ... }}) or variable substitution (${VAR}), and tagless base images such as FROM scratch or stage references.
  • GitHub Actions referenced by version tag only (e.g. uses: actions/checkout@v4) are pinned to the commit SHA of the latest version, with the version added as a trailing comment (e.g. uses: actions/checkout@<sha> # v4.1.1). Actions referenced by a branch (e.g. @main) are left untouched because they don't resolve to a version.

Cooldown

To avoid adopting releases that are too fresh to trust, Update-time honours a cooldown period during which newly published versions are not yet picked up. Where the cooldown comes from depends on the dependency type:

  • Docker images and GitHub Actions — Update-time enforces its own cooldown, based on each image tag's push date and each release's publication date. It defaults to 7 days and can be changed with the --cooldown option, for example update-time --cooldown 14.
  • Python dependencies — Update-time delegates the actual updating to uv, so the cooldown is whatever you configure for uv. Use the exclude-newer setting under [tool.uv] in your pyproject.toml to hold back recently released versions.
  • npm dependencies — Update-time delegates the actual updating to npm, so the cooldown is whatever you configure for npm (for example via your .npmrc).

Because Python and npm updates are delegated, the built-in 7-day cooldown does not apply to them; configure those tools directly if you want a cooldown there.

Point of contact

Point of contact for this repository is Frank Niessink.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

update_time-0.0.5.tar.gz (22.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

update_time-0.0.5-py3-none-any.whl (34.1 kB view details)

Uploaded Python 3

File details

Details for the file update_time-0.0.5.tar.gz.

File metadata

  • Download URL: update_time-0.0.5.tar.gz
  • Upload date:
  • Size: 22.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for update_time-0.0.5.tar.gz
Algorithm Hash digest
SHA256 8daad43d1f0beb81659bd19cb3f83bc121ebb4d4d64dd2804d4cb201682ba5b6
MD5 68c65d1d236d630fa95177ddec5d7441
BLAKE2b-256 6c0f242f7e24dfbbeefdc361618c205d7baec1968ea7f81bfe7fa81a3425cfb7

See more details on using hashes here.

File details

Details for the file update_time-0.0.5-py3-none-any.whl.

File metadata

  • Download URL: update_time-0.0.5-py3-none-any.whl
  • Upload date:
  • Size: 34.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.11.24 {"installer":{"name":"uv","version":"0.11.24","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for update_time-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0cd1035fe6e789bc726ebe4d2c1015451670da21cdcd4705a2424c9f336054ac
MD5 23a99bd51c47dc9d5b8e0ed2091aa9f6
BLAKE2b-256 c45527e2961ad47cc7556b17b12715ad29eb79c7ade8df276ac67a9ce4c7527c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page