From 38c5bcbffef4cefb0a8e24596a12a9c2bbb42a32 Mon Sep 17 00:00:00 2001 From: lenare Date: Thu, 13 Nov 2025 11:34:06 +0100 Subject: [PATCH] feat: add select-model flag to cicd bot --- sqlmesh/integrations/github/cicd/command.py | 13 +++++++++++-- sqlmesh/integrations/github/cicd/controller.py | 5 +++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/sqlmesh/integrations/github/cicd/command.py b/sqlmesh/integrations/github/cicd/command.py index f1b611150a..108b464ef1 100644 --- a/sqlmesh/integrations/github/cicd/command.py +++ b/sqlmesh/integrations/github/cicd/command.py @@ -2,6 +2,7 @@ import logging import traceback +import typing as t import click @@ -25,16 +26,24 @@ envvar="GITHUB_TOKEN", help="The Github Token to be used. Pass in `${{ secrets.GITHUB_TOKEN }}` if you want to use the one created by Github actions", ) +@click.option( + "--select-model", + "-m", + type=str, + multiple=True, + help="Specify one or more models to data diff. Use wildcards to diff multiple models. Ex: '*' (all models with applied plan diffs), 'demo.model+' (this and downstream models), 'git:feature_branch' (models with direct modifications in this branch only)", +) @click.pass_context -def github(ctx: click.Context, token: str) -> None: +def github(ctx: click.Context, **kwargs: t.Any) -> None: """Github Action CI/CD Bot. See https://sqlmesh.readthedocs.io/en/stable/integrations/github/ for details""" # set a larger width because if none is specified, it auto-detects 80 characters when running in GitHub Actions # which can result in surprise newlines when outputting dates to backfill set_console(MarkdownConsole(width=1000, warning_capture_only=True, error_capture_only=True)) ctx.obj["github"] = GithubController( paths=ctx.obj["paths"], - token=token, + token=kwargs.pop("token"), config=ctx.obj["config"], + select_models=kwargs.pop("select_model") or None, ) diff --git a/sqlmesh/integrations/github/cicd/controller.py b/sqlmesh/integrations/github/cicd/controller.py index dd5ee70e76..804dd49be7 100644 --- a/sqlmesh/integrations/github/cicd/controller.py +++ b/sqlmesh/integrations/github/cicd/controller.py @@ -291,6 +291,7 @@ def __init__( event: t.Optional[GithubEvent] = None, client: t.Optional[Github] = None, context: t.Optional[Context] = None, + select_models: t.Optional[t.Collection[str]] = None, ) -> None: from github import Github @@ -301,6 +302,7 @@ def __init__( self._token = token self._event = event or GithubEvent.from_env() logger.debug(f"Github event: {json.dumps(self._event.payload)}") + self._select_models = select_models self._pr_plan_builder: t.Optional[PlanBuilder] = None self._prod_plan_builder: t.Optional[PlanBuilder] = None self._prod_plan_with_gaps_builder: t.Optional[PlanBuilder] = None @@ -407,6 +409,7 @@ def pr_plan(self) -> Plan: skip_backfill=self.bot_config.skip_pr_backfill, include_unmodified=self.bot_config.pr_include_unmodified, forward_only=self.forward_only_plan, + select_models=self._select_models, ) assert self._pr_plan_builder return self._pr_plan_builder.build() @@ -437,6 +440,7 @@ def prod_plan(self) -> Plan: categorizer_config=self.bot_config.auto_categorize_changes, run=self.bot_config.run_on_deploy_to_prod, forward_only=self.forward_only_plan, + select_models=self._select_models, ) assert self._prod_plan_builder return self._prod_plan_builder.build() @@ -454,6 +458,7 @@ def prod_plan_with_gaps(self) -> Plan: skip_linter=True, run=self.bot_config.run_on_deploy_to_prod, forward_only=self.forward_only_plan, + select_models=self._select_models, ) assert self._prod_plan_with_gaps_builder return self._prod_plan_with_gaps_builder.build()