Skip to content

Commit a12ca3b

Browse files
Snow 2113906 enable release channels should default to false (#2323)
* enable_release_channels defaults to None * fix integration tests
1 parent ce0d4a3 commit a12ca3b

File tree

6 files changed

+73
-54
lines changed

6 files changed

+73
-54
lines changed

RELEASE-NOTES.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,16 @@
2525
## Fixes and improvements
2626

2727

28+
# v3.8.2
29+
30+
## Deprecations
31+
32+
## New additions
33+
34+
## Fixes and improvements
35+
* Fix `enable_release_channels` property in application package definition to default to `None` instead of `False`.
36+
37+
2838
# v3.8.1
2939

3040
## Deprecations

src/snowflake/cli/_plugins/nativeapp/entities/application_package.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -190,9 +190,9 @@ class ApplicationPackageEntityModel(EntityModelBaseWithArtifacts):
190190
title="Entities that will be bundled and deployed as part of this application package",
191191
default=[],
192192
)
193-
enable_release_channels: bool = Field(
193+
enable_release_channels: Optional[bool] = Field(
194194
title="Enable release channels for this application package",
195-
default=False,
195+
default=None,
196196
)
197197

198198
@field_validator("children")
@@ -1559,13 +1559,16 @@ def _get_enable_release_channels_flag(self) -> Optional[bool]:
15591559
If return value is None, it means do not explicitly set the flag.
15601560
"""
15611561
value_from_snowflake_yml = self.model.enable_release_channels
1562-
feature_flag_from_config = FeatureFlag.ENABLE_RELEASE_CHANNELS.is_enabled()
1563-
if feature_flag_from_config and not value_from_snowflake_yml:
1564-
self._workspace_ctx.console.warning(
1565-
f"{FeatureFlag.ENABLE_RELEASE_CHANNELS.name} value in config.toml is deprecated."
1566-
f" Set [enable_release_channels] for the application package in snowflake.yml instead."
1567-
)
1568-
enable_release_channels = value_from_snowflake_yml or feature_flag_from_config
1562+
feature_flag_from_config = FeatureFlag.ENABLE_RELEASE_CHANNELS.get_value()
1563+
if value_from_snowflake_yml is not None:
1564+
enable_release_channels = value_from_snowflake_yml
1565+
else:
1566+
enable_release_channels = feature_flag_from_config
1567+
if feature_flag_from_config is not None:
1568+
self._workspace_ctx.console.warning(
1569+
f"{FeatureFlag.ENABLE_RELEASE_CHANNELS.name} value in config.toml is deprecated."
1570+
f" Set [enable_release_channels] for the application package in snowflake.yml instead."
1571+
)
15691572

15701573
feature_enabled_in_account = (
15711574
get_snowflake_facade().get_ui_parameter(

tests/nativeapp/test_application_package_entity.py

Lines changed: 49 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ def test_bundle(project_directory):
140140
@mock.patch(f"{APP_PACKAGE_ENTITY}.validate_setup_script")
141141
@mock.patch(f"{APPLICATION_PACKAGE_ENTITY_MODULE}.sync_deploy_root_with_stage")
142142
@mock.patch(SQL_FACADE_GET_UI_PARAMETER, return_value="ENABLED")
143-
@pytest.mark.parametrize("enable_release_channels", [False, True])
143+
@pytest.mark.parametrize("enable_release_channels", [False, True, None])
144144
def test_deploy(
145145
mock_get_parameter,
146146
mock_sync,
@@ -193,18 +193,26 @@ def test_deploy(
193193
mock.call("describe application package pkg"),
194194
),
195195
(None, mock.call("use role old_role")),
196-
(
197-
mock_cursor([("old_role",)], []),
198-
mock.call("select current_role()"),
199-
),
200-
(None, mock.call("use role app_role")),
201-
(
202-
None,
203-
mock.call(
204-
f"alter application package pkg\n set enable_release_channels = {enable_release_channels}\n".lower()
196+
]
197+
+ (
198+
[]
199+
if enable_release_channels is None
200+
else [
201+
(
202+
mock_cursor([("old_role",)], []),
203+
mock.call("select current_role()"),
205204
),
206-
),
207-
(None, mock.call("use role old_role")),
205+
(None, mock.call("use role app_role")),
206+
(
207+
None,
208+
mock.call(
209+
f"alter application package pkg\n set enable_release_channels = {enable_release_channels}\n".lower()
210+
),
211+
),
212+
(None, mock.call("use role old_role")),
213+
]
214+
)
215+
+ [
208216
(
209217
mock_cursor([("old_role",)], []),
210218
mock.call("select current_role()"),
@@ -311,18 +319,6 @@ def test_deploy_w_stage_subdir(
311319
mock.call("select current_role()"),
312320
),
313321
(None, mock.call("use role app_role")),
314-
(
315-
None,
316-
mock.call(
317-
"alter application package pkg\n set enable_release_channels = false\n"
318-
),
319-
),
320-
(None, mock.call("use role old_role")),
321-
(
322-
mock_cursor([("old_role",)], []),
323-
mock.call("select current_role()"),
324-
),
325-
(None, mock.call("use role app_role")),
326322
(None, mock.call("use role old_role")),
327323
]
328324
)
@@ -2612,3 +2608,32 @@ def test_given_release_channel_and_label_without_create_version_when_publish_the
26122608
)
26132609

26142610
assert str(e.value) == "--label can only be used with --create-version flag."
2611+
2612+
2613+
@pytest.mark.parametrize(
2614+
"feature_flag, enable_snowflake_yml, expected",
2615+
[
2616+
(None, None, None),
2617+
(True, None, True),
2618+
(False, None, False),
2619+
(False, True, True),
2620+
(True, False, False),
2621+
],
2622+
)
2623+
@mock.patch(f"{APPLICATION_PACKAGE_ENTITY_MODULE}.sync_deploy_root_with_stage")
2624+
@mock.patch(SQL_FACADE_GET_UI_PARAMETER, return_value="ENABLED")
2625+
@mock.patch("snowflake.cli.api.config.get_config_value")
2626+
def test_get_enable_release_channels(
2627+
mock_get_config_value,
2628+
mock_get_parameter,
2629+
mock_sync,
2630+
project_directory,
2631+
mock_cursor,
2632+
feature_flag,
2633+
enable_snowflake_yml,
2634+
expected,
2635+
):
2636+
mock_get_config_value.return_value = feature_flag
2637+
app_pkg, bundle_ctx, mock_console = _get_app_pkg_entity(project_directory)
2638+
app_pkg.model.enable_release_channels = enable_snowflake_yml
2639+
assert app_pkg._get_enable_release_channels_flag() == expected # noqa: SLF001

tests/nativeapp/test_manager.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@
7979
from tests.nativeapp.utils import (
8080
APP_PACKAGE_ENTITY_DEPLOY,
8181
APP_PACKAGE_ENTITY_GET_EXISTING_APP_PKG_INFO,
82-
APP_PACKAGE_ENTITY_GET_RELEASE_CHANNELS,
8382
APP_PACKAGE_ENTITY_IS_DISTRIBUTION_SAME,
8483
ENTITIES_UTILS_MODULE,
8584
SQL_EXECUTOR_EXECUTE,
@@ -845,7 +844,7 @@ def test_get_snowsight_url_without_pdf_warehouse(
845844
@mock.patch(SQL_FACADE_GET_UI_PARAMETER, return_value="ENABLED")
846845
@mock.patch(SQL_FACADE_CREATE_APP_PKG)
847846
@mock.patch("snowflake.cli.api.config.get_config_value")
848-
@pytest.mark.parametrize("feature_flag", [True, False])
847+
@pytest.mark.parametrize("feature_flag", [True, False, None])
849848
def test_given_no_existing_pkg_when_create_app_pkg_then_success_and_respect_release_channels_flag(
850849
mock_get_config_value,
851850
mock_create_app_pkg,
@@ -888,7 +887,7 @@ def test_given_no_existing_pkg_when_create_app_pkg_then_success_and_respect_rele
888887
@mock.patch(SQL_FACADE_GET_UI_PARAMETER, return_value="ENABLED")
889888
@mock.patch(SQL_FACADE_ALTER_APP_PKG_PROPERTIES)
890889
@mock.patch("snowflake.cli.api.config.get_config_value")
891-
@pytest.mark.parametrize("feature_flag", [True, False])
890+
@pytest.mark.parametrize("feature_flag", [True, False, None])
892891
def test_given_existing_app_package_with_feature_flag_set_when_create_pkg_then_set_pkg_property_to_same_value(
893892
mock_get_config_value,
894893
mock_alter_app_pkg_properties,
@@ -939,9 +938,7 @@ def test_given_existing_app_package_with_feature_flag_set_when_create_pkg_then_s
939938
@mock_get_app_pkg_distribution_in_sf()
940939
@mock.patch(APP_PACKAGE_ENTITY_IS_DISTRIBUTION_SAME, return_value=True)
941940
@mock.patch(SQL_FACADE_GET_UI_PARAMETER, return_value="ENABLED")
942-
@mock.patch(APP_PACKAGE_ENTITY_GET_RELEASE_CHANNELS, return_value=None)
943941
def test_create_app_pkg_different_owner(
944-
mock_get_release_channels,
945942
mock_get_ui_parameter,
946943
mock_is_distribution_same,
947944
mock_get_distribution,
@@ -986,9 +983,7 @@ def test_create_app_pkg_different_owner(
986983
[False, True],
987984
)
988985
@mock.patch(SQL_FACADE_GET_UI_PARAMETER, return_value="ENABLED")
989-
@mock.patch(APP_PACKAGE_ENTITY_GET_RELEASE_CHANNELS, return_value=None)
990986
def test_create_app_pkg_external_distribution(
991-
mock_get_release_channels,
992987
mock_get_ui_parameter,
993988
mock_is_distribution_same,
994989
mock_get_distribution,
@@ -1038,9 +1033,7 @@ def test_create_app_pkg_external_distribution(
10381033
],
10391034
)
10401035
@mock.patch(SQL_FACADE_GET_UI_PARAMETER, return_value="ENABLED")
1041-
@mock.patch(APP_PACKAGE_ENTITY_GET_RELEASE_CHANNELS, return_value=None)
10421036
def test_create_app_pkg_internal_distribution_special_comment(
1043-
mock_get_release_channel,
10441037
mock_get_ui_parameter,
10451038
mock_is_distribution_same,
10461039
mock_get_distribution,

tests/nativeapp/utils.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,6 @@
5858
APP_PACKAGE_ENTITY_GET_EXISTING_VERSION_INFO = (
5959
f"{APP_PACKAGE_ENTITY}.get_existing_version_info"
6060
)
61-
APP_PACKAGE_ENTITY_GET_RELEASE_CHANNELS = (
62-
f"{APP_PACKAGE_ENTITY}._get_enable_release_channels_flag"
63-
)
6461
APP_PACKAGE_ENTITY_IS_DISTRIBUTION_SAME = (
6562
f"{APP_PACKAGE_ENTITY}.verify_project_distribution"
6663
)

tests_integration/nativeapp/test_release_channels.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,6 @@ def test_release_channels_disabled_to_enabled_switch(
6969
assert result.exit_code == 0
7070
assert result.json == []
7171

72-
# setting ENABLE_RELEASE_CHANNELS feature flag should issue a warning
73-
get_value_mock.return_value = True
74-
result = runner.invoke_with_connection(["app", "deploy"])
75-
assert result.exit_code == 0
76-
assert (
77-
"ENABLE_RELEASE_CHANNELS value in config.toml is deprecated. "
78-
"Set [enable_release_channels] for the application package in snowflake.yml instead."
79-
) in result.output
80-
8172
# setting enable_release_channels in pdf should silence the warning
8273
set_pdf_release_channels(True)
8374
result = runner.invoke_with_connection(["app", "deploy"])

0 commit comments

Comments
 (0)