Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 11 additions & 2 deletions sqlmesh/integrations/github/cicd/command.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import logging
import traceback
import typing as t

import click

Expand All @@ -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,
)


Expand Down
5 changes: 5 additions & 0 deletions sqlmesh/integrations/github/cicd/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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
Expand Down Expand Up @@ -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()
Expand Down Expand Up @@ -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()
Expand All @@ -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()
Expand Down