Files
wehub-resource-sync 593b94c120
pytest / Unit Tests (push) Waiting to run
pytest / Integration (integration_tests_a) (push) Waiting to run
pytest / Integration (integration_tests_b) (push) Waiting to run
pytest / Integration (integration_tests_c) (push) Waiting to run
pytest / Integration (integration_tests_d) (push) Waiting to run
pytest / Integration (integration_tests_e) (push) Waiting to run
pytest / Integration (integration_tests_f) (push) Waiting to run
pytest / Integration (integration_tests_g) (push) Waiting to run
pytest / Integration (integration_tests_h) (push) Waiting to run
pytest / Integration (integration_tests_i) (push) Waiting to run
pytest / Integration (integration_tests_j) (push) Waiting to run
pytest / Distributed (distributed_a) (push) Waiting to run
pytest / Distributed (distributed_b) (push) Waiting to run
pytest / Distributed (distributed_c) (push) Waiting to run
pytest / Distributed (distributed_d) (push) Waiting to run
pytest / Distributed (distributed_e) (push) Waiting to run
pytest / Distributed (distributed_f) (push) Waiting to run
pytest / Minimal Install (push) Waiting to run
pytest / Event File (push) Waiting to run
pytest (slow) / py-slow (push) Waiting to run
Publish JSON Schema / publish-schema (push) Waiting to run
chore: import upstream snapshot with attribution
2026-07-13 12:49:20 +08:00

1.9 KiB

Releasing

Release procedure

  1. Update version number in ludwig/globals.py
  2. Update the README.md file
  3. Update ludwig-docs
  4. Commit
  5. Tag the commit with the version number vX.Y.Z with a meaningful message
  6. Push with --tags
  7. If a non-patch release, edit the release notes
  8. The PyPI upload is automated via GitHub Actions (.github/workflows/upload-pypi.yml) when a release is published
  9. Publish Docker images (see below)

Docker images

Four images are published to Docker Hub under the ludwigai organisation for each release: ludwigai/ludwig, ludwigai/ludwig-gpu, ludwigai/ludwig-ray, ludwigai/ludwig-ray-gpu.

Automated (CI)

The GitHub Actions workflow .github/workflows/docker.yml triggers on v*.*.* tags and builds images from the tagged source. If CI is healthy this runs automatically after step 6 above.

Manual fallback

If CI does not run or images need to be backfilled, trigger a versioned build via the workflow dispatch input — no local Docker setup required:

# Trigger all 4 image variants for a specific PyPI release
gh workflow run docker.yml --repo ludwig-ai/ludwig --ref main \
  -f ludwig_version=0.14.0 -f latest=true

Or build and push locally using the script at docker/build_and_push.sh (requires docker login to a ludwigai Docker Hub account):

./docker/build_and_push.sh 0.14.0 --latest

Both approaches install ludwig[full]==<version> from PyPI and produce two tags per image: the full version (0.14.0) and the major.minor shorthand (0.14), plus latest when requested.

Release policy

Ludwig follows Semantic Versioning. In general, for major and minor releases, maintainers should all agree on the release. For patches, in particular time sensitive ones, a single maintainer can release without a full consensus, but this practice should be reserved for critical situations.