tinybird-cli 3.3.1.dev5__tar.gz → 3.3.1.dev6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/PKG-INFO +13 -8
  2. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/__cli__.py +2 -2
  3. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/datafile.py +131 -84
  4. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/PKG-INFO +13 -8
  5. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/setup.cfg +0 -0
  6. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/ch_utils/constants.py +0 -0
  7. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/ch_utils/engine.py +0 -0
  8. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/check_pypi.py +0 -0
  9. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/client.py +0 -0
  10. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/config.py +0 -0
  11. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/connector_settings.py +0 -0
  12. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/connectors.py +0 -0
  13. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/context.py +0 -0
  14. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/data_connectors/credentials.py +0 -0
  15. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/datatypes.py +0 -0
  16. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/feedback_manager.py +0 -0
  17. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/git_settings.py +0 -0
  18. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql.py +0 -0
  19. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql_template.py +0 -0
  20. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql_template_fmt.py +0 -0
  21. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/sql_toolset.py +0 -0
  22. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/syncasync.py +0 -0
  23. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli.py +0 -0
  24. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/auth.py +0 -0
  25. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/branch.py +0 -0
  26. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/cicd.py +0 -0
  27. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/cli.py +0 -0
  28. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/common.py +0 -0
  29. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/config.py +0 -0
  30. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/connection.py +0 -0
  31. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/datasource.py +0 -0
  32. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/exceptions.py +0 -0
  33. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/job.py +0 -0
  34. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/pipe.py +0 -0
  35. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/regions.py +0 -0
  36. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/telemetry.py +0 -0
  37. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/test.py +0 -0
  38. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit.py +0 -0
  39. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/tinyunit/tinyunit_lib.py +0 -0
  40. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/token.py +0 -0
  41. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/workspace.py +0 -0
  42. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tb_cli_modules/workspace_members.py +0 -0
  43. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird/tornado_template.py +0 -0
  44. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/SOURCES.txt +0 -0
  45. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/dependency_links.txt +0 -0
  46. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/entry_points.txt +0 -0
  47. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/requires.txt +0 -0
  48. {tinybird-cli-3.3.1.dev5 → tinybird-cli-3.3.1.dev6}/tinybird_cli.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird-cli
3
- Version: 3.3.1.dev5
3
+ Version: 3.3.1.dev6
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,13 +19,18 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 3.3.1.dev6
23
+ ************
24
+
25
+ - `Fixed` `tb deploy` to deploy the endpoints in the correct order when there are endpoints depending on other endpoints.
26
+
22
27
  3.3.1.dev5
23
- ***********
28
+ ************
24
29
 
25
30
  - `Fixed` `tb push` pipe with multiple tokens
26
31
 
27
32
  3.3.1.dev4
28
- ***********
33
+ ************
29
34
 
30
35
  - `Changed` script `exec_test.sh` from `tb init --git` to run retries to avoid flakiness in tests
31
36
 
@@ -35,7 +40,7 @@ Changelog
35
40
  - `Fixed` `IMPORT` and `ENGINE` changes were not detected `tb deploy`
36
41
 
37
42
  3.3.1.dev2
38
- ***********
43
+ ************
39
44
 
40
45
  - `Changed` Update `tb release rm --oldest-rollback` to use new API
41
46
 
@@ -54,7 +59,7 @@ Changelog
54
59
  - `Changed` Stop creating endpoints folder on tb init
55
60
  - `Changed` Small refactoring of the connector credentials
56
61
  - `Fixed` Progress bar in `tb init --git`.
57
- - `Fixed` Don't do diff when there is no modified resources on `tb deploy`.
62
+ - `Fixed` Don't do diff when there are no modified resources on `tb deploy`.
58
63
  - `Fixed` Upgrade GitPython dependency to 3.1.32. That version fixes the security vulnerability `CVE-2022-24439 <https://github.com/advisories/GHSA-hcpj-qp55-gfph>`
59
64
  - `Fixed` Homepage URL in PyPI
60
65
 
@@ -62,12 +67,12 @@ Changelog
62
67
  ************
63
68
 
64
69
  - `Changed` `tb init --git` uses v3.1.0 of the CI templates (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
65
- - `Changed` Allow alter datasource with jsonpaths to add DEFAULTS if the datasource already have any (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
70
+ - `Changed` Allow alter data source with JSON paths to add DEFAULTS if the data source already has any (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
66
71
 
67
72
  3.1.0
68
73
  ************
69
74
 
70
- - `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force` for overwrite
75
+ - `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force` to overwrite
71
76
  - `Added` Ignore format changes on `tb deploy` by default
72
77
  - `Changed` `tb init --git` and `tb release generate` include `set -euxo pipefail` in the generated bash scripts
73
78
  - `Changed` `tb init --git` uses github.com/tinybirdco/ci => v3.0.0
@@ -75,7 +80,7 @@ Changelog
75
80
  - `Changed` `tb release promote` automatically deletes de oldest rollback Release if `export TB_FORCE_REMOVE_OLDEST_ROLLBACK=1`
76
81
  - `Changed` option `--node` in `tb pipe populate` to required as it is already mandatory to specify the node to populate. Now, it will provide an error message if the `--node` option is not provided.
77
82
  - `Changed` Better error report on `tb fmt --diff`. Use it in CI to standardize Datafile formatting
78
- - `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from pypi
83
+ - `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from PyPI
79
84
  - `Changed` `tb deploy` shows an example when failing because of a missing `--semver` argument
80
85
  - `Fixed` When parsing the response of a CSV `tb sql` command, the CLI was interpreting the result as an error in some cases.
81
86
 
@@ -4,5 +4,5 @@ __description__ = 'Tinybird Command Line Tool'
4
4
  __url__ = 'https://docs.tinybird.co/cli.html'
5
5
  __author__ = 'Tinybird'
6
6
  __author_email__ = 'support@tinybird.co'
7
- __version__ = '3.3.1.dev5'
8
- __revision__ = '03759c5'
7
+ __version__ = '3.3.1.dev6'
8
+ __revision__ = '133b9e9'
@@ -3952,92 +3952,30 @@ async def folder_push(
3952
3952
 
3953
3953
  async def push_files(dependency_graph: GraphDependencies, dry_run: bool = False):
3954
3954
  endpoints_dep_map = dict()
3955
- pipes_dep_map = dict()
3956
- mat_dep_map = dict()
3957
3955
  processed = set()
3958
3956
 
3959
3957
  dependencies_graph = dependency_graph.dep_map
3960
3958
  resources_to_run = dependency_graph.to_run
3961
3959
 
3962
- dependencies_graph_fork_downstream: Dict[str, Set[str]] = {}
3963
- resources_to_run_fork_downstream: Dict[str, Dict[str, Any]] = {}
3964
-
3965
- if fork_downstream:
3966
- dependencies_graph_fork_downstream, resources_to_run_fork_downstream = generate_forkdownstream_graph(
3967
- dependency_graph.all_dep_map,
3968
- dependency_graph.all_resources,
3969
- dependency_graph.to_run,
3970
- list(dependency_graph.dep_map.keys()),
3971
- )
3972
- else:
3973
- # TODO: Split this into fork_downstream and normal push
3974
- dependencies_graph_fork_downstream = dependencies_graph
3975
- resources_to_run_fork_downstream = resources_to_run
3976
-
3977
- # For the new resources using forkdownstream or tb push, we will push them following
3978
- # First, datasources. Then, endpoints depending of these datasources. Finally, the pipes
3979
- groups = [group for group in toposort(dependencies_graph)]
3980
- for group in groups:
3981
- for name in group:
3982
- if (
3983
- not is_new(name, changed, dependencies_graph, dependencies_graph_fork_downstream)
3984
- or not fork_downstream
3985
- ):
3986
- continue
3987
- await push(
3988
- name,
3989
- resources_to_run,
3990
- resource_versions,
3991
- latest_datasource_versions,
3992
- dry_run,
3993
- fork_downstream,
3994
- fork,
3995
- )
3996
- processed.add(name)
3997
-
3998
- groups = [group for group in toposort(dependencies_graph_fork_downstream)]
3999
- for group in groups:
4000
- for name in group:
4001
- if name in processed:
4002
- continue
4003
- # https://gitlab.com/tinybird/analytics/-/merge_requests/6737
4004
- if is_endpoint_with_no_dependencies(
4005
- resources_to_run_fork_downstream.get(name, {}),
4006
- dependencies_graph_fork_downstream,
4007
- resources_to_run_fork_downstream,
4008
- ):
4009
- endpoints_dep_map[name] = dependencies_graph_fork_downstream[name]
4010
- continue
4011
- if (
4012
- fork_downstream
4013
- and not is_datasource(resources_to_run_fork_downstream.get(name))
4014
- and name in dependencies_graph_fork_downstream
4015
- ):
4016
- if is_materialized(resources_to_run_fork_downstream.get(name)):
4017
- mat_dep_map[name] = dependencies_graph_fork_downstream[name]
3960
+ if not fork_downstream:
3961
+ # First, we will deploy the all the resources following the dependency graph except for the endpoints
3962
+ groups = [group for group in toposort(dependencies_graph)]
3963
+ for group in groups:
3964
+ for name in group:
3965
+ if name in processed:
4018
3966
  continue
4019
- else:
4020
- pipes_dep_map[name] = dependencies_graph_fork_downstream[name]
3967
+
3968
+ if is_endpoint_with_no_dependencies(
3969
+ resources_to_run.get(name, {}),
3970
+ dependencies_graph,
3971
+ resources_to_run,
3972
+ ):
3973
+ endpoints_dep_map[name] = dependencies_graph[name]
4021
3974
  continue
4022
- await push(
4023
- name,
4024
- resources_to_run_fork_downstream,
4025
- resource_versions,
4026
- latest_datasource_versions,
4027
- dry_run,
4028
- fork_downstream,
4029
- fork,
4030
- )
4031
- processed.add(name)
4032
3975
 
4033
- # push endpoints with no dependencies or dependencies with other endpoints
4034
- groups = [group for group in toposort(endpoints_dep_map)]
4035
- for group in groups:
4036
- for name in group:
4037
- if name not in processed and not is_materialized(resources_to_run_fork_downstream[name]):
4038
3976
  await push(
4039
3977
  name,
4040
- resources_to_run_fork_downstream,
3978
+ resources_to_run,
4041
3979
  resource_versions,
4042
3980
  latest_datasource_versions,
4043
3981
  dry_run,
@@ -4046,26 +3984,56 @@ async def folder_push(
4046
3984
  )
4047
3985
  processed.add(name)
4048
3986
 
4049
- # materialized pipes at the end
4050
- if fork_downstream:
4051
- groups = [group for group in toposort(pipes_dep_map)]
3987
+ # Then, we will deploy the endpoints that are on the dependency graph
3988
+ groups = [group for group in toposort(endpoints_dep_map)]
4052
3989
  for group in groups:
4053
3990
  for name in group:
4054
- if name not in processed and not is_materialized(resources_to_run_fork_downstream[name]):
3991
+ if name not in processed:
4055
3992
  await push(
4056
3993
  name,
4057
- resources_to_run_fork_downstream,
3994
+ resources_to_run,
4058
3995
  resource_versions,
4059
3996
  latest_datasource_versions,
4060
3997
  dry_run,
4061
3998
  fork_downstream,
3999
+ fork,
4062
4000
  )
4063
4001
  processed.add(name)
4002
+ else:
4003
+ # This will generate the graph from right to left and will fill the gaps of the dependencies
4004
+ # If we have a graph like this:
4005
+ # A -> B -> C
4006
+ # If we only modify A, the normal dependencies graph will only contain a node like _{A => B}
4007
+ # But we need a graph that contains A, B and C and the dependencies between them to deploy them in the right order
4008
+ dependencies_graph_fork_downstream, resources_to_run_fork_downstream = generate_forkdownstream_graph(
4009
+ dependency_graph.all_dep_map,
4010
+ dependency_graph.all_resources,
4011
+ resources_to_run,
4012
+ list(dependency_graph.dep_map.keys()),
4013
+ )
4064
4014
 
4065
- groups = [group for group in toposort(mat_dep_map)]
4015
+ # First, we will deploy the datasources that have been changed
4016
+ groups = [group for group in toposort(dependencies_graph_fork_downstream)]
4066
4017
  for group in groups:
4067
4018
  for name in group:
4068
- if name not in processed:
4019
+ if name in processed or not is_datasource(resources_to_run_fork_downstream[name]):
4020
+ continue
4021
+
4022
+ # If the resource is new, we will use the normal resource information to deploy it
4023
+ # This is mostly used for datasources with connections.
4024
+ # At the moment, `resources_to_run_fork_downstream` is generated by `all_resources` and this is generated using the parameter `skip_connectors=True`
4025
+ # TODO: Should the `resources_to_run_fork_downstream` be generated using the `skip_connectors` parameter?
4026
+ if is_new(name, changed, dependencies_graph_fork_downstream, dependencies_graph_fork_downstream):
4027
+ await push(
4028
+ name,
4029
+ resources_to_run,
4030
+ resource_versions,
4031
+ latest_datasource_versions,
4032
+ dry_run,
4033
+ fork_downstream,
4034
+ fork,
4035
+ )
4036
+ else:
4069
4037
  await push(
4070
4038
  name,
4071
4039
  resources_to_run_fork_downstream,
@@ -4073,8 +4041,86 @@ async def folder_push(
4073
4041
  latest_datasource_versions,
4074
4042
  dry_run,
4075
4043
  fork_downstream,
4044
+ fork,
4076
4045
  )
4077
- processed.add(name)
4046
+ processed.add(name)
4047
+
4048
+ # Now, we will create a map of all the endpoints and there dependencies
4049
+ # We are using the forkdownstream graph to get the dependencies of the endpoints as the normal dependencies graph only contains the resources that are going to be deployed
4050
+ # But does not include the missing gaps
4051
+ # If we have ENDPOINT_A ----> MV_PIPE_B -----> DATASOURCE_B ------> ENDPOINT_C
4052
+ # Where endpoint A is being used in the MV_PIPE_B, if we only modify the endpoint A
4053
+ # The dependencies graph will only contain the endpoint A and the MV_PIPE_B, but not the DATASOURCE_B and the ENDPOINT_C
4054
+ groups = [group for group in toposort(dependencies_graph_fork_downstream)]
4055
+ for group in groups:
4056
+ for name in group:
4057
+ if name in processed or not is_endpoint(resources_to_run_fork_downstream[name]):
4058
+ continue
4059
+
4060
+ endpoints_dep_map[name] = dependencies_graph_fork_downstream[name]
4061
+
4062
+ # Now that we have the dependencies of the endpoints, we need to check that the resources has not been deployed yet and only care about the endpoints that depend on endpoints
4063
+ groups = [group for group in toposort(endpoints_dep_map)]
4064
+
4065
+ # As we have used the forkdownstream graph to get the dependencies of the endpoints, we have all the dependencies of the endpoints
4066
+ # But we need to deploy the endpoints and the dependencies of the endpoints from left to right
4067
+ # So we need to reverse the groups
4068
+ groups.reverse()
4069
+ for group in groups:
4070
+ for name in group:
4071
+ if name in processed or not is_endpoint(resources_to_run_fork_downstream[name]):
4072
+ continue
4073
+
4074
+ await push(
4075
+ name,
4076
+ resources_to_run_fork_downstream,
4077
+ resource_versions,
4078
+ latest_datasource_versions,
4079
+ dry_run,
4080
+ fork_downstream,
4081
+ fork,
4082
+ )
4083
+ processed.add(name)
4084
+
4085
+ # Now we should have the endpoints and datasources deployed, we can deploy the rest of the pipes (copy & sinks)
4086
+ # We need to rely on the forkdownstream graph as it contains all the modified pipes as well as the dependencies of the pipes
4087
+ # In this case, we don't need to generate a new graph as we did for the endpoints as the pipes are not going to be used as dependencies and the datasources are already deployed
4088
+ groups = [group for group in toposort(dependencies_graph_fork_downstream)]
4089
+ for group in groups:
4090
+ for name in group:
4091
+ if name in processed or is_materialized(resources_to_run_fork_downstream.get(name)):
4092
+ continue
4093
+
4094
+ await push(
4095
+ name,
4096
+ resources_to_run_fork_downstream,
4097
+ resource_versions,
4098
+ latest_datasource_versions,
4099
+ dry_run,
4100
+ fork_downstream,
4101
+ fork,
4102
+ )
4103
+ processed.add(name)
4104
+
4105
+ # Finally, we need to deploy the materialized views from right to left.
4106
+ # We need to rely on the forkdownstream graph as it contains all the modified materialized views as well as the dependencies of the materialized views
4107
+ # In this case, we don't need to generate a new graph as we did for the endpoints as the pipes are not going to be used as dependencies and the datasources are already deployed
4108
+ groups = [group for group in toposort(dependencies_graph_fork_downstream)]
4109
+ for group in groups:
4110
+ for name in group:
4111
+ if name in processed or not is_materialized(resources_to_run_fork_downstream.get(name)):
4112
+ continue
4113
+
4114
+ await push(
4115
+ name,
4116
+ resources_to_run_fork_downstream,
4117
+ resource_versions,
4118
+ latest_datasource_versions,
4119
+ dry_run,
4120
+ fork_downstream,
4121
+ fork,
4122
+ )
4123
+ processed.add(name)
4078
4124
 
4079
4125
  if deployment.is_git_release:
4080
4126
  deployment.deploying_dry_run()
@@ -4856,6 +4902,7 @@ def is_endpoint(resource: Optional[Dict[str, Any]]) -> bool:
4856
4902
  def is_materialized(resource: Optional[Dict[str, Any]]) -> bool:
4857
4903
  if not resource:
4858
4904
  return False
4905
+
4859
4906
  is_materialized = any(
4860
4907
  [node.get("params", {}).get("type", None) == "materialized" for node in resource.get("nodes", []) or []]
4861
4908
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: tinybird-cli
3
- Version: 3.3.1.dev5
3
+ Version: 3.3.1.dev6
4
4
  Summary: Tinybird Command Line Tool
5
5
  Home-page: https://docs.tinybird.co/cli.html
6
6
  Author: Tinybird
@@ -19,13 +19,18 @@ Changelog
19
19
 
20
20
  ---------
21
21
 
22
+ 3.3.1.dev6
23
+ ************
24
+
25
+ - `Fixed` `tb deploy` to deploy the endpoints in the correct order when there are endpoints depending on other endpoints.
26
+
22
27
  3.3.1.dev5
23
- ***********
28
+ ************
24
29
 
25
30
  - `Fixed` `tb push` pipe with multiple tokens
26
31
 
27
32
  3.3.1.dev4
28
- ***********
33
+ ************
29
34
 
30
35
  - `Changed` script `exec_test.sh` from `tb init --git` to run retries to avoid flakiness in tests
31
36
 
@@ -35,7 +40,7 @@ Changelog
35
40
  - `Fixed` `IMPORT` and `ENGINE` changes were not detected `tb deploy`
36
41
 
37
42
  3.3.1.dev2
38
- ***********
43
+ ************
39
44
 
40
45
  - `Changed` Update `tb release rm --oldest-rollback` to use new API
41
46
 
@@ -54,7 +59,7 @@ Changelog
54
59
  - `Changed` Stop creating endpoints folder on tb init
55
60
  - `Changed` Small refactoring of the connector credentials
56
61
  - `Fixed` Progress bar in `tb init --git`.
57
- - `Fixed` Don't do diff when there is no modified resources on `tb deploy`.
62
+ - `Fixed` Don't do diff when there are no modified resources on `tb deploy`.
58
63
  - `Fixed` Upgrade GitPython dependency to 3.1.32. That version fixes the security vulnerability `CVE-2022-24439 <https://github.com/advisories/GHSA-hcpj-qp55-gfph>`
59
64
  - `Fixed` Homepage URL in PyPI
60
65
 
@@ -62,12 +67,12 @@ Changelog
62
67
  ************
63
68
 
64
69
  - `Changed` `tb init --git` uses v3.1.0 of the CI templates (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
65
- - `Changed` Allow alter datasource with jsonpaths to add DEFAULTS if the datasource already have any (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
70
+ - `Changed` Allow alter data source with JSON paths to add DEFAULTS if the data source already has any (See release notes: https://github.com/tinybirdco/ci/releases/tag/v3.1.0)
66
71
 
67
72
  3.1.0
68
73
  ************
69
74
 
70
- - `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force` for overwrite
75
+ - `Added` `tb init --cicd` to generate CI/CD files not only when using `--git`. Combine with `--force` to overwrite
71
76
  - `Added` Ignore format changes on `tb deploy` by default
72
77
  - `Changed` `tb init --git` and `tb release generate` include `set -euxo pipefail` in the generated bash scripts
73
78
  - `Changed` `tb init --git` uses github.com/tinybirdco/ci => v3.0.0
@@ -75,7 +80,7 @@ Changelog
75
80
  - `Changed` `tb release promote` automatically deletes de oldest rollback Release if `export TB_FORCE_REMOVE_OLDEST_ROLLBACK=1`
76
81
  - `Changed` option `--node` in `tb pipe populate` to required as it is already mandatory to specify the node to populate. Now, it will provide an error message if the `--node` option is not provided.
77
82
  - `Changed` Better error report on `tb fmt --diff`. Use it in CI to standardize Datafile formatting
78
- - `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from pypi
83
+ - `Changed` `tb init --git` generates a requirements.txt file to install the latest tinybird-cli release from PyPI
79
84
  - `Changed` `tb deploy` shows an example when failing because of a missing `--semver` argument
80
85
  - `Fixed` When parsing the response of a CSV `tb sql` command, the CLI was interpreting the result as an error in some cases.
81
86