Skip to main content

GX cloud

PyPI Docker Pulls ci pre-commit.ci status codecov Ruff

Quick Start

To use the GX Agent, you will need to have a Great Expectations Cloud account. You can sign up for free at https://app.greatexpectations.io.

Deployment instructions for the GX Agent can be found in the GX Cloud documentation.

Contributing

Follow these steps to create a development environment:

  1. Use the version of Python specified in .python-version
    • confirm with python --version
  2. Use the version of Poetry specified in poetry.lock
    • confirm with poetry --version
  3. Set up virtual environment and install dependencies
    • poetry sync
  4. Activate your virtual environment
    • eval $(poetry env activate)
  5. Set up precommit hooks
    • pre-commit install

Troubleshooting

If you run into issues, you can try pipx reinstall-all

Running locally for development

$ gx-agent --help
usage: gx-agent [-h] [--log-level LOG_LEVEL] [--skip-log-file SKIP_LOG_FILE] [--log-cfg-file LOG_CFG_FILE] [--version]

optional arguments:
  -h, --help            show this help message and exit
  --log-level LOG_LEVEL
                        Level of logging to use. Defaults to WARNING.
  --skip-log-file SKIP_LOG_FILE
                        Skip writing debug logs to a file. Defaults to False. Does not affect logging to stdout/stderr.
  --log-cfg-file LOG_CFG_FILE
                        Path to a logging configuration json file. Supersedes --log-level and --skip-log-file.
  --version             Show the GX Agent version.

Set ENV variables

GX_CLOUD_ACCESS_TOKEN GX_CLOUD_ORGANIZATION_ID

If you want to override where the GX Agent looks for the RabbitMQ queue you can also set AMQP_HOST_OVERRIDE and AMQP_PORT_OVERRIDE. For example, if you are running a local dockerized RabbitMQ service exposed on localhost port 5672, you can set AMQP_HOST_OVERRIDE=127.0.0.1 and AMQP_PORT_OVERRIDE=5672.

Start the GX Agent

If you intend to run the GX Agent against local services (Cloud backend or datasources) run the Agent outside of the container.

gx-agent

Developer Tasks

Common developer tasks are available via invoke (defined in tasks.py).

invoke --list to see available tasks.

Synchronize Dependencies

To ensure you are using the latest version of the core and development dependencies run poetry sync. Also available as an invoke task.

invoke deps

Updating poetry.lock dependencies

Use the latest version of poetry

pipx upgrade poetry

The dependencies installed in our CI and the Docker build step are determined by the poetry.lock file.

To update only a specific dependency (such as great_expectations) ...

poetry update great_expectations

Note: If poetry update does not find the latest version of great_expectations, you can manually update the version in pyproject.toml, and then update the lockfile using poetry lock.

To resolve and update all dependencies ...

poetry lock

In either case, the updated poetry.lock file must be committed and merged to main.

Building and Running the GX Agent Image

To build the GX Agent Docker image, run the following in the root dir:

invoke docker

Running the GX Agent:

invoke docker --run

or

docker run --env GX_CLOUD_ACCESS_TOKEN="<GX_TOKEN>" --env GX_CLOUD_ORGANIZATION_ID="<GX_ORG_ID>" gx/agent

Now go into GX Cloud and issue commands for the GX Agent to run, such as generating an Expectation Suite for a Data Source.

Note if you are pushing out a new image update the image tag version in containerize-agent.yaml. The image will be built and pushed out via GitHub Actions.

Example Data

The contents from /examples/agent/data will be copied to /data for the Docker container.

Adding an action to the Agent

  1. Make a new action in great_expectations_cloud/agent/actions/ in a separate file.
  2. Register your action in the file it was created in using great_expectations_cloud.agent.event_handler.register_event_action(). Register for the major version of GX Core that the action applies to, e.g. register_event_action("1", RunCheckpointEvent, RunCheckpointAction) registers the action for major version 1 of GX Core (e.g. 1.0.0).
  3. Import your action in great_expectations_cloud/agent/actions/__init__.py

Note: The Agent is core-version specific but this registration mechanism allows us to preemptively work on actions for future versions of GX Core while still supporting the existing latest major version.

Release Process

Versioning

This is the version that will be used for the Docker image tag as well.

Standard Release: The versioning scheme is YYYYMMDD.{release_number} where:

  • the date is the date of the release
  • the release number starts at 0 for the first release of the day
  • the release number is incremented for each release within the same day

For example: 20240402.0

Pre-release: The versioning scheme is YYYYMMDD.{release_number}.dev{dev_number}

  • the date is the date of the release
  • the dev number starts at 0 for the first pre-release of the day
  • the dev number is incremented for each pre-release within the same day
  • the release number is the release that this pre-release is for

For example: 20240403.0.dev0 is the first pre-release for the 20240403.0 release.

For example, imagine the following sequence of releases given for a day with two releases:

  • 20240403.0.dev0
  • 20240403.0.dev1
  • 20240403.0
  • 20240403.1.dev0
  • 20240403.1

There can be days with no standard releases, only pre-releases or days with no pre-release or standard release at all.

Pre-releases

Pre-releases are completed automatically with each merge to the main branch. The version is updated in pyproject.toml and a pre-release is created on PyPi. A new Docker tag will also be generated and pushed to Docker Hub

Manual Pre-releases

NOTE: CI will automatically create pre-releases on merges to main. Instead of manually creating pre-releases, consider using the CI process. This is only for exceptional cases.

To manually create a pre-release, run the following command to update the version in pyproject.toml and then merge it to main in a standalone PR:

invoke pre-release

This will create a new pre-release version. On the next merge to main, the release will be uploaded to PyPi. A new Docker tag will also be generated and pushed to Docker Hub

Releases

Releases will be completed on a regular basis by the maintainers of the project and with any release of GX Core

For maintainers, to create a release, run the following command to update the version in pyproject.toml and then merge it to main in a standalone PR:

invoke release

This will create a new release version. On the next merge to main, the release will be uploaded to PyPi. A new Docker tag will also be generated and pushed to Docker Hub. In addition, releases will be tagged with stable and latest tags.

GitHub Workflow for releasing

We use the GitHub Actions workflow to automate the release and pre-release process. There are two workflows involved:

  1. CI - This workflow runs on each pull request and will update the version in pyproject.toml to the pre-release version if the version is not already manually updated in the PR. It will also run the tests and linting.

  2. Containerize Agent - This workflows runs on merge with main and will create a new Docker image and push it to Docker Hub and PyPi. It uses the version in pyproject.toml.

A visual representation of the workflow is shown here

Dependabot and Releases/Pre-releases

GitHub's Dependabot regularly checks our dependencies for vulnerabilty-based updates and proposes PRs to update dependency version numbers accordingly.

Dependabot may only update the poetry.lock file. If only changes to poetry.lock are made, this may be done in a pre-release.

For changes to the pyproject.toml file:

  • If the version of a tool in the [tool.poetry.group.dev.dependencies] group is updated, this may be done without any version bump.
    • While doing this, make sure any version references in the pre-commit config .pre-commit-config.yaml are kept in sync (e.g., ruff).
  • For other dependency updates or package build metadata changes, a new release should be orchestrated. This includes updates in the following sections:
    • [tool.poetry.dependencies]
    • [tool.poetry.group.*.dependencies] where * is the name of the group (not including the dev group)
  • To stop the auto-version bump add the no version bump label to the PR. Use this when:
    • Only modifying dev dependencies.
    • Only modifying tests that do not change functionality.

NOTE: Dependabot does not have permissions to access secrets in our CI. You may notice that integration tests fail on PRs that dependabot creates. If you add a commit (as a GX member) to the PR, the tests will run again and pass because they now have access to the secrets. That commit can be anything, including an empty commit e.g. git commit -m "some message" --allow-empty.

Download files

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

Source Distribution

great_expectations_cloud-20260416.0.tar.gz (80.8 kB view details)

Uploaded Source

Built Distribution

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

great_expectations_cloud-20260416.0-py3-none-any.whl (104.0 kB view details)

Uploaded Python 3

File details

Details for the file great_expectations_cloud-20260416.0.tar.gz.

File metadata

File hashes

Hashes for great_expectations_cloud-20260416.0.tar.gz
Algorithm Hash digest
SHA256 44730f236bcb99e84bba3b9adc875caddaed40249d9dbd3e1e14ec62a00e15fb
MD5 786d06a7ba3e8badb7bccf902f21dc78
BLAKE2b-256 3835b46f5e536a463c66158846d1a67c263bce2b8f300681b599c937a3b64eca

See more details on using hashes here.

Provenance

The following attestation bundles were made for great_expectations_cloud-20260416.0.tar.gz:

Publisher: publish-to-pypi.yaml on great-expectations/cloud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file great_expectations_cloud-20260416.0-py3-none-any.whl.

File metadata

File hashes

Hashes for great_expectations_cloud-20260416.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2737bd332a2c5054ecf7313c630075cbdd66fbfd7de98cd45d5e0d4914d1d54f
MD5 cf1a78274c9c82e22f983055a71a83f0
BLAKE2b-256 1a57d5679946911d63a417ad0f1c57951876b60226700779895912e5cd21332e

See more details on using hashes here.

Provenance

The following attestation bundles were made for great_expectations_cloud-20260416.0-py3-none-any.whl:

Publisher: publish-to-pypi.yaml on great-expectations/cloud

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

20260416.0 This release

2 files

20260409.0

2 files

20260403.0

2 files

20260326.0

2 files

20260313.0

2 files

20260305.0

2 files

20260304.0

2 files

20260226.0

2 files

20260217.1

2 files

20260217.0

2 files

20260205.0

2 files

20260130.0

2 files

20260126.0

2 files

20260123.0

2 files

20260120.0

2 files

20260113.0

2 files

20251219.0

2 files

20251211.0

2 files

20251204.0

2 files

20251121.0

2 files

20251110.0

2 files

20251103.0

2 files

20251024.0

2 files

20251016.0

2 files

20251010.0

2 files

20251002.0

2 files

20250925.0

2 files

20250922.0

2 files

20250917.0

2 files

20250905.1

2 files

20250905.0

2 files

20250828.0

2 files

20250825.0

2 files

20250821.0

2 files

20250818.0

2 files

20250813.0

2 files

20250811.0

2 files

20250731.0

2 files

20250717.0

2 files

20250709.0

2 files

20250703.0

2 files

20250625.0

2 files

20250618.0

2 files

20250616.0

2 files

20250612.0

2 files

20250605.0

2 files

20250529.2

2 files

20250527.0

2 files

20250523.0

2 files

20250515.0

2 files

20250512.0

2 files

20250424.0

2 files

20250422.0

2 files

20250417.0

2 files

20250416.0

2 files

20250410.0

2 files

20250403.0

2 files

20250401.0

2 files

20250327.0

2 files

20250320.0

2 files

20250312.0

2 files

20250305.0

2 files

20250226.0

2 files

20250219.0

2 files

20250205.1

2 files

20250205.0

2 files

20250203.1

2 files

20250203.0

2 files

20250130.0

2 files

20250123.0

2 files

20250117.0

2 files

20250109.0

2 files

20241223.0

2 files

20241212.1

2 files

20241212.0

2 files

20241204.0

2 files

20241127.0

2 files

20241120.0

2 files

20241115.0

2 files

20241113.0

2 files

20241112.0

2 files

20241030.0

2 files

20241024.1.0

2 files

20241024.0

2 files

20241017.1

2 files

20241017.0

2 files

20241008.0

2 files

20241001.0

2 files

20240926.0

2 files

20240918.0

2 files

20240911.0

2 files

20240904.0

2 files

20240827.0

2 files

20240823.0

2 files

20240820.0

2 files

20240812.1

2 files

20240812.0

2 files

20240806.0

2 files

20240731.0

2 files

20240723.0

2 files

20240716.0

2 files

20240710.0

2 files

20240708.1

2 files

20240708.0

2 files

20240703.0

2 files

20240702.0

2 files

20240625.0

2 files

20240618.1

2 files

20240618.0

2 files

20240611.0

2 files

20240605.0

2 files

20240528.1

2 files

20240528.0

2 files

20240522.1

2 files

20240522.0

2 files

20240521.0

2 files

20240515.0

2 files

20240507.0

2 files

20240502.0

2 files

20240430.0

2 files

20240426.0

2 files

20240425.0

2 files

20240424.0

2 files

20240423.0

2 files

20240418.0

2 files

20240417.0

2 files

0.0.47

2 files

0.0.46

2 files

0.0.45

2 files

0.0.44

2 files

0.0.43

2 files

0.0.42

2 files

0.0.41

2 files

0.0.38

2 files

0.0.36

2 files

0.0.35

2 files

0.0.34.0

2 files

0.0.33

2 files

0.0.32

2 files

0.0.31

2 files

0.0.30

2 files

0.0.29

2 files

0.0.28

2 files

0.0.27

2 files

0.0.26

2 files

0.0.24

2 files

0.0.23

2 files

0.0.22

2 files

0.0.21

2 files

0.0.20

2 files

0.0.19

2 files

0.0.18

2 files

0.0.17

2 files

0.0.16

2 files

0.0.15

2 files

0.0.14

2 files

0.0.13

2 files

0.0.12

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

Supported by

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