Make validation a required status check, and GitHub blocks any pull request that would
introduce validation errors into your semantic layer. Add publishing to the merge event, and
your BI tools update themselves.
Add both workflows to the repository described under Prerequisites.
Each section below states how its workflow decides what to act on.
These actions are GitHub only. For other CI/CD systems, call the API directly — see
CI/CD Overview.
Prerequisites
- Metadata in this repository — the workflow must live in the same GitHub repository that stores your Honeydew metadata, connected through the Git integration.
- Public GraphQL API enabled — it is not enabled by default. Contact support@honeydew.ai to enable it for your organization.
- API key and secret — create an API key. Validation needs the Viewer role; publishing needs Editor.
- GitHub secrets — store the key and secret as repository secrets (for example,
HONEYDEW_API_KEYandHONEYDEW_API_SECRET).
<workspace>/<branch> — for example, branch q3-fixes
of workspace sales lives on the Git branch sales/q3-fixes. Validation reads the workspace
from that name; publishing is told which workspace to publish, and runs only when that
workspace’s directory changed.
Validate a workspace
Value
- Catch errors before merge. A broken attribute, metric, or YAML file fails the check
instead of reaching the
prodbranch. - No infrastructure. The action calls the GraphQL API directly. It has no dependencies and does not check out the repository.
- Zero configuration for detection. The workspace and branch are detected automatically from the Git branch name.
How it works
The action reloads the workspace from Git and then checks every object for validation errors:- Calls
reset_workspaceto reload the branch from its latest commit. - Checks the workspace itself for load errors (for example, a YAML parse error).
- Checks every object — entities and their fields, domains, dynamic datasets, global parameters, context items, and agents.
- Reports each error as a GitHub annotation and a job summary table, and fails the run (non-zero exit) if any errors are found.
The reload runs in the API key’s own session, not a user’s. It does not affect anyone
editing the workspace in Honeydew Studio, so the action is safe to run on active branches
and as a required status check.
Configure
1
Add the API key as GitHub secrets
In the repository, go to Settings > Secrets and variables > Actions and add:
HONEYDEW_API_KEY— the API key nameHONEYDEW_API_SECRET— the API key secret
2
Add the workflow file
Commit a workflow file to the repository that stores your semantic-layer metadata (see the
example below). The action runs on pull requests and reports any validation errors.
3
Require the check to pass before merging
In Settings > Branches, add a branch protection rule (or ruleset) for your default
branch that requires the validation status check to pass before merging. This is what
blocks broken changes from reaching
prod.Example workflow
This workflow validates the workspace changed by a pull request, on the pull request’s source branch, before it merges. It skips branches that are not Honeydew workspace branches, so unrelated pull requests (docs, infrastructure) are not blocked..github/workflows/validate-honeydew-workspaces.yml
Inputs
To validate a specific workspace and branch instead of relying on auto-detection:
What is validated
The action first confirms the workspace loads, then checks every object in it. If the workspace fails to load, the workspace-level errors are reported and the per-object checks are skipped.- Entities and their fields — datasets, dataset attributes, calculated attributes, and metrics
- Domains
- Dynamic Datasets (perspectives)
- Global parameters
- Context items
- Agents
Publish to a BI tool
Once a change merges, theprod branch holds the new model but your BI tools still serve the
previous one. The publish action closes that gap: it publishes a domain to
Power BI, Sigma, Tableau or ThoughtSpot, so a merge is all it takes to update
what those tools serve.
It wraps the mutations documented under
Publish to BI Tools, and like the validation
action it has no dependencies and does not check out the repository.
How publishing works
- Reloads the workspace from Git (
reset_workspace), so the published model reflects the merged commit. Setreload: 'false'to skip this. - Calls the destination’s publish mutation with the domain and connector you configured.
- Writes a job summary with a link to the published object, and reports the object’s ID where the destination returns one.
workspace and domain to publish; nothing is inferred from the branch the
workflow runs on. The Honeydew branch defaults to prod, because that is what a merge
produces — set it to publish a development branch instead, for example to a staging BI
workspace before merging.
The destination connector must be configured in Honeydew first, from the user settings menu
under Power BI / Sigma / Tableau / ThoughtSpot → Settings. A connector
configured this way is named
default, which is the action’s default connector-name.Publish example workflow
Add one workflow per workspace. Itspaths: filter is the whole gate: GitHub runs the
workflow only when the merged pull request touched that workspace’s directory, so a merge
elsewhere in a repository holding many workspaces never republishes it.
.github/workflows/publish-sales.yml
.github/workflows/honeydew-publish.yml
tableau-existing-datasource-id is the ID of the data source an earlier run created — see
Updating instead of duplicating for where to find it.
paths: filters a whole workflow, so it cannot vary per matrix entry. A single workflow
covering several workspaces has to work out which ones changed itself — with
dorny/paths-filter, for example. Prefer one
workflow per workspace: it needs no extra dependency and no API call.Updating instead of duplicating
Publishing on every merge has to update the existing object rather than create another one. How that works depends on the destination:Publish inputs
Common inputs:
Destination-specific inputs:
For Tableau, pass exactly one of
tableau-existing-datasource-id, to update a data source, or
both tableau-datasource-name and tableau-project-id, to create one. Any other combination
fails the step.
Look up the IDs these inputs take with the queries under
Publish to BI Tools — powerbi_workspaces,
sigma_connections, sigma_folders, tableau_projects,
tableau_honeydew_datasources and thoughtspot_connections.
Outputs
A warning means the publish itself succeeded. Set
fail-on-warning: 'true' to fail the step
anyway.