-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathcliff.toml
More file actions
193 lines (154 loc) · 10.1 KB
/
Copy pathcliff.toml
File metadata and controls
193 lines (154 loc) · 10.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
[remote.github]
owner = "danielgafni"
repo = "dagster-ray"
[bump]
features_always_bump_minor = false
breaking_always_bump_major = false
[git]
commit_preprocessors = [
{ pattern = '^\((\w+)\)!:', replace = "($1):" },
# Map legacy emoji-prefixed commits to conventional commits
{ pattern = '^:sparkles: ', replace = "feat: " },
{ pattern = '^:bug: ', replace = "fix: " },
{ pattern = '^:book: ', replace = "docs: " },
{ pattern = '^:art: ', replace = "refactor: " },
{ pattern = '^:wrench: ', replace = "feat: " },
{ pattern = '^:zap: ', replace = "perf: " },
{ pattern = '^:robot: ', replace = "ci: " },
{ pattern = '^:bomb: ', replace = "feat!: " },
# Map other legacy prefixes to conventional commits
{ pattern = '^\[docs\] ', replace = "docs: " },
{ pattern = '^add support for', replace = "feat: add support for" },
# Strip PR references from messages (handled in template with author links)
{ pattern = ' \(#\d+\)', replace = "" },
]
commit_parsers = [
{ message = "^.*!:", group = "<0>### :bomb: Breaking" },
{ message = "^feat", group = "<1>### :sparkles: Features" },
{ message = "^fix", group = "<2>### :bug: Bug Fixes" },
{ message = "^docs", group = "<3>### :book: Docs" },
{ message = "^perf", group = "<4>### :zap: Performance" },
{ message = "^refactor", group = "<5>### :hammer_and_wrench: Other Improvements" },
{ message = "^chore", group = "<5>### :hammer_and_wrench: Other Improvements" },
{ message = "^ci", group = "<5>### :hammer_and_wrench: Other Improvements" },
{ message = "^build", group = "<5>### :hammer_and_wrench: Other Improvements" },
{ message = "^test", group = "<5>### :hammer_and_wrench: Other Improvements" },
{ message = "^style", group = "<5>### :hammer_and_wrench: Other Improvements" },
{ message = "^.*", skip = true },
]
ignore_tags = "v0\\.0\\."
# Tags whose changelog entries are hardcoded in the footer; update regex when adding new footer entries
skip_tags = "v0\\.[1-3]\\.|v0\\.4\\.[0-2]"
sort_commits = "newest"
[changelog]
header = """
# Changelog
All notable user-facing changes to `dagster-ray` will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
"""
body = """
## {{ version | default(value="Unreleased") }}{% if timestamp %} ({{ timestamp | date(format="%d-%m-%Y") }}){% endif %}
{% if message %}
{{ message }}
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
{{ group | striptags | trim }}
{% for commit in commits %}
- {{ commit.message | split(pat="\n") | first | trim }}\
{% if commit.remote.pr_number %} ([#{{ commit.remote.pr_number }}](https://github.com/danielgafni/dagster-ray/pull/{{ commit.remote.pr_number }}){% if commit.remote.username %} by [@{{ commit.remote.username }}](https://github.com/{{ commit.remote.username }}){% endif %})
{%- elif commit.remote.username %} (by [@{{ commit.remote.username }}](https://github.com/{{ commit.remote.username }}))
{%- endif %}
{%- endfor %}
{% endfor %}\
{%- set new_contributors = github.contributors | filter(attribute="is_first_time", value=true) -%}
{%- set_global new_contribs_count = 0 -%}
{%- set existing = "danielgafni,JosefNagelschmidt,cornettew,geoHeil,serriaguirregaray,dependabot[bot],github-actions[bot],renovate[bot]" -%}
{%- for contributor in new_contributors -%}
{%- if not existing is containing(contributor.username) -%}
{%- set_global new_contribs_count = new_contribs_count + 1 -%}
{%- endif -%}
{%- endfor -%}
{% if new_contribs_count > 0 %}
### :heart: New Contributors
{% for contributor in new_contributors -%}
{%- if not existing is containing(contributor.username) -%}
{%- set_global first_pr = contributor.pr_number -%}
{%- for commit in commits -%}
{%- if commit.remote.username == contributor.username and commit.remote.pr_number -%}
{%- set_global first_pr = commit.remote.pr_number -%}
{%- endif -%}
{%- endfor %}
- [@{{ contributor.username }}](https://github.com/{{ contributor.username }}) made their first contribution in [#{{ first_pr }}](https://github.com/danielgafni/dagster-ray/pull/{{ first_pr }})
{%- endif -%}
{%- endfor %}
{% endif %}
"""
footer = """
## 0.4.2 (20-02-2026)
### Added
- `RayResource` now has new lifecycle hook methods for customizing startup messages (and potentially doing something else):
- `on_create`
- `on_ready`
- `on_connect`
- `on_cleanup`
### Fixes
- fixed duplicated startup log message for `LocalRay`
- fixed the top-level `env_vars` Dagster config field not taking effect for `KubeRayInteractiveJob`
## 0.4.1 (25-01-2026)
### Added
- `RayCluster`'s head pod logs are now displayed on startup timeout or failure
### Fixes
- Prevent the `RayCluster` cleanup sensor from targeting clusters with `.metadata.ownerReferences` set.
- `address` config value can now be omitted for `ray_executor`, making it use Ray's default cluster address resolution. Thanks @cornettew!
- Fixed race condition with cluster sharing: previously multiple steps running in parallel could create different `RayCluster` instances at the same time (that were supposed to be shared). `dagster-ray` now uses Kubernetes [Lease](https://kubernetes.io/docs/concepts/architecture/leases/)-based leader election to coordinate shared cluster creation, which guarantees that only one of the running steps creates the shared `RayCluster`.
- `runtimeEnvYAML` now has all strings fully quoted which fixes passing values such as `1e-5` as `runtime_env` values. Thanks @JosefNagelschmidt!
- `ray_address` is now optional for `RunLauncherConfig`. Thanks @cornettew!
## 0.4.0 (10-10-2025)
This release introduces a new feature that is very useful in dev environments: **Cluster Sharing**. Cluster sharing allows reusing existing `RayCluster` resources created by previous Dagster steps. It's implemented for `KubeRayCluster` Dagster resource. This feature enables faster iteration speed and reduced infrastructure costs (at the expense of job isolation). Therefore `KubeRayCluster` is now recommended over `KubeRayInteractiveJob` for use in **dev** environments.
Learn more in [Cluster Sharing docs](tutorial/kuberay.md/#cluster-sharing).
### Added
- `KubeRayCluster.cluster_sharing` parameter that controls cluster sharing behavior.
- `dagster_ray.kuberay.sensors.cleanup_expired_kuberay_clusters` sensor that cleans up expired clusters (both shared and non-shared). Learn more in [docs](api/kuberay.md#dagster_ray.kuberay.sensors.cleanup_expired_kuberay_clusters).
- `dagster-ray` entry now appears in the Dagster libraries list in the web UI.
### Changed
- [:bomb: breaking] - removed `cleanup_kuberay_clusters_op` and other associated definitions in favor of `dagster_ray.kuberay.sensors.cleanup_expired_kuberay_clusters` sensor that is more flexible.
## 0.3.1 (02-10-2025)
### Added
- `failure_tolerance_timeout` configuration parameter for `KubeRayInteractiveJob` and `KubeRayCluster`. It can be set to a positive value to give the cluster some time to transition out of `failed` state (which can be transient in some scenarios) before raising an error.
### Fixes
- ensure both `.head.serviceIP` and `.head.serviceName` are set on the `RayCluster` while waiting for cluster readiness.
## 0.3.0 (19-09-2025)
This release includes massive docs improvements and drops support for Python 3.9.
### Changes
- [:bomb: breaking] dropped Python 3.9 support (EOL October 2025).
- [internal] most of the general, backend-agnostic code has been moved to `dagster_ray.core` (top-level imports still work).
## 0.2.1 (18-09-2025)
### Fixes
- Fixed broken wheel on PyPI.
## 0.2.0 (18-09-2025)
### Changed
- `KubeRayInteractiveJob.deletion_strategy` now defaults to `DeleteCluster` for both successful and failed executions. This is a reasonable default for the use case.
- `KubeRayInteractiveJob.ttl_seconds_after_finished` now defaults to `600` seconds.
- `KubeRayCluster.lifecycle.cleanup` now defaults to `always`.
- [:bomb: breaking] `RayJob` and `RayCluster` clients and resources Kubernetes init parameters have been renamed to `kube_config` and `kube_context`.
### Added
- `enable_legacy_debugger` configuration parameter to subclasses of `RayResource`
- `on_exception` option for `lifecycle.cleanup` policy. It's triggered during resource setup/cleanup (including `KeyboardInterrupt`), but not by user `@op`/`@asset` code.
- `KubeRayInteractiveJob` now respects `lifecycle.cleanup`. It defaults to `on_exception`. Users are advised to rely on built-in `RayJob` cleanup mechanisms, such as `ttlSecondsAfterFinished` and `deletionStrategy`.
### Fixes
- removed `ignore_reinit_error` from `RayResource` init options: it's potentially dangerous, for example in case the user has accidentally connected to another Ray cluster (including local ray) before initializing the resource.
## 0.1.0 (05-09-2025)
### Changed
- [:bomb: breaking] `RayResource`: top-level `skip_init` and `skip_setup` configuration parameters have been removed. The `lifecycle` field is the new way of configuring steps performed during resource initialization. `KubeRayCluster`'s `skip_cleanup` has been moved to `lifecycle` as well.
- [:bomb: breaking] injected `dagster.io/run_id` Kubernetes label has been renamed to `dagster/run-id`. Keys starting with `dagster.io/` have been converted to `dagster/` to match how `dagster-k8s` does it.
- [:bomb: breaking] `dagster_ray.kuberay` Configurations have been unified with KubeRay APIs.
- `dagster-ray` now populates Kubernetes labels with more values (including some useful Dagster Cloud values such as `git-sha`).
### Added
- `KubeRayInteractiveJob` -- a resource that utilizes the new `InteractiveMode` for `RayJob`. It can be used to connect to Ray in Client mode -- like `KubeRayCluster` -- but gives access to `RayJob` features, such as automatic cleanup (`ttlSecondsAfterFinished`), retries (`backoffLimit`) and timeouts (`activeDeadlineSeconds`).
- `RayResource` setup lifecycle has been overhauled: resources now has an `actions` parameter with 3 configuration options: `create`, `wait` and `connect`. The user can disable them and run `.create()`, `.wait()` and `.connect()` manually if needed.
"""
postprocessors = [
{ pattern = 'danielgafni/dagster-ray/blob/master/', replace = "danielgafni/dagster-ray/blob/main/" },
]
trim = false