Preparation jobs#


Triggers the get-changes action to determine the changes. In addition to the changes from the action output, it emits some additional outputs that are used by subsequent jobs.


Each of the boolean properties denote whether the PR or commit includes changes for the corresponding stack.

  changes: string // JSON-encoded array of modified changesets
  catalog: boolean
  ingestion_server: boolean
  api: boolean
  frontend: boolean
  documentation: boolean


Determines the tag to use for the Docker images. If the job is triggered via a workflow dispatch, the images are tagged with the image_tag input taken by the dispatch. If the job is triggered via a PR or a commit pushed to main, the images are tagged with the full 40-char hash (github.sha) of the last commit.


  image_tag: string // the tag to use for the Docker images


Runs the linting steps defined in the repository’s pre-commit configuration. This is executed via just lint.


This job should be considered a complement to lint and would ideally be part of it, as a pre-commit hook. However, the docker image we relied on for the pre-commit hook causes issues with arm64 computers (which includes recent Apply devices). Therefore, we run the hook as a CI step instead.

It is still possible to run this hook locally, assuming the docker image works on your computer’s architecture, by invoking the lint-codeowners just recipe:

just lint-codeowners


In CI we run the set of “experimental” checks as well, which are disabled in the just recipe because they fail if there are uncommitted changes. To run precisely the check that CI uses, enable experimental checks:

just lint-codeowners all



This job only runs on PRs.

Use the outputs from the get-changes job to add an appropriate stack label to the PR. If a label cannot be determined from the changes, the 🚦 status: awaiting triage and 🏷 status: label work required labels are added instead.