Skip to content

Commit 3e4db3e

Browse files
committed
Merge branch 'release/0.84.0' into feature/populate-imagepullsecret-from-container-registry
2 parents 2172a0e + 125c4cb commit 3e4db3e

File tree

192 files changed

+8758
-2021
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

192 files changed

+8758
-2021
lines changed

.github/workflows/ci-slow.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,3 +311,8 @@ jobs:
311311
python-version: ${{ matrix.python-version }}
312312
test_environment: ${{ matrix.test_environment }}
313313
secrets: inherit
314+
vscode-tutorial-pipelines-test:
315+
if: github.event.pull_request.draft == false
316+
needs: run-slow-ci-label-is-set
317+
uses: ./.github/workflows/vscode-tutorial-pipelines-test.yml
318+
secrets: inherit
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
---
2+
# Regression testing workflow that runs all tutorial pipelines from the
3+
# zenml-io/vscode-tutorial-extension repository to ensure ZenML core changes
4+
# don't break the user-facing tutorial examples
5+
name: VSCode Tutorial Pipelines Test
6+
on:
7+
workflow_call:
8+
workflow_dispatch:
9+
inputs:
10+
python-version:
11+
description: Python version
12+
type: choice
13+
options: ['3.12']
14+
required: false
15+
default: '3.12'
16+
enable_tmate:
17+
description: Enable tmate session for debugging
18+
type: choice
19+
options: [no, on-failure, always, before-tests]
20+
required: false
21+
default: 'no'
22+
jobs:
23+
test-tutorial-pipelines:
24+
name: test-tutorial-pipelines
25+
runs-on: ubuntu-latest
26+
env:
27+
ZENML_DEBUG: true
28+
ZENML_ANALYTICS_OPT_IN: false
29+
ZENML_LOGGING_VERBOSITY: INFO
30+
MLSTACKS_ANALYTICS_OPT_OUT: true
31+
AUTO_OPEN_DASHBOARD: false
32+
ZENML_ENABLE_RICH_TRACEBACK: false
33+
TOKENIZERS_PARALLELISM: false
34+
PYTHONIOENCODING: utf-8
35+
UV_HTTP_TIMEOUT: 600
36+
steps:
37+
- name: Checkout ZenML code
38+
uses: actions/[email protected]
39+
with:
40+
fetch-depth: 0
41+
- name: Set up Python 3.12
42+
uses: actions/[email protected]
43+
with:
44+
python-version: '3.12'
45+
- name: Install uv
46+
run: |
47+
curl -LsSf https://astral.sh/uv/install.sh | sh
48+
source $HOME/.cargo/env
49+
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
50+
- name: Cache UV dependencies
51+
uses: actions/cache@v4
52+
with:
53+
path: ~/.cache/uv
54+
key: uv-tutorial-${{ runner.os }}-3.12-${{ github.run_id }}
55+
restore-keys: |
56+
uv-tutorial-${{ runner.os }}-3.12-
57+
- name: Setup tmate session before tests
58+
if: ${{ inputs.enable_tmate == 'before-tests' }}
59+
uses: mxschmitt/[email protected]
60+
- name: Clone tutorial repository
61+
run: |
62+
# Clone with retry logic for network resilience
63+
for i in {1..3}; do
64+
if git clone --branch develop https://github.com/zenml-io/vscode-tutorial-extension.git tutorial-repo; then
65+
break
66+
elif [ $i -lt 3 ]; then
67+
echo "Clone attempt $i failed, retrying in 5 seconds..."
68+
sleep 5
69+
else
70+
echo "Failed to clone tutorial repository after 3 attempts"
71+
exit 1
72+
fi
73+
done
74+
- name: Create virtual environment
75+
run: |
76+
uv venv
77+
- name: Install ZenML from current branch
78+
run: |
79+
source .venv/bin/activate
80+
uv pip install "git+https://github.com/${{ github.repository }}@${{ github.sha }}[server,templates,dev]"
81+
- name: Install tutorial requirements
82+
run: |
83+
source .venv/bin/activate
84+
# Validate requirements.txt exists and is readable
85+
if [ ! -f "tutorial-repo/requirements.txt" ]; then
86+
echo "Error: requirements.txt not found in tutorial repository"
87+
exit 1
88+
fi
89+
uv pip install -r tutorial-repo/requirements.txt
90+
- name: Run tutorial pipelines test script
91+
run: |
92+
source .venv/bin/activate
93+
bash scripts/test-tutorial-pipelines.sh
94+
- name: Setup tmate session after tests
95+
if: ${{ inputs.enable_tmate == 'always' || (inputs.enable_tmate == 'on-failure' && failure()) }}
96+
uses: mxschmitt/[email protected]

CLAUDE.md

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,58 @@ Use filesystem navigation tools to explore the codebase structure as needed.
124124
- Add appropriate error handling
125125
- Document public APIs thoroughly
126126

127+
### Field Description Standards
128+
When adding or modifying Field descriptions in stack component configs:
129+
130+
#### Template Structure
131+
```
132+
{Purpose statement}. {Valid values/format}. {Example(s)}. {Additional context if needed}.
133+
```
134+
135+
#### Core Requirements
136+
1. **Purpose**: Clearly state what the field controls or does
137+
2. **Format**: Specify expected value format (URL, path, enum, etc.)
138+
3. **Examples**: Provide at least one concrete example
139+
4. **Constraints**: Include any limitations or requirements
140+
141+
#### Quality Standards
142+
- Minimum 30 characters
143+
- Use action words (controls, configures, specifies, determines)
144+
- Include concrete examples with realistic values
145+
- Avoid vague language ("thing", "stuff", "value", "setting")
146+
- Don't start with "The" or end with periods
147+
- Be specific about valid formats and constraints
148+
149+
#### Example Field Descriptions
150+
```python
151+
# Good examples:
152+
instance_type: Optional[str] = Field(
153+
None,
154+
description="AWS EC2 instance type for step execution. Must be a valid "
155+
"SageMaker-supported instance type. Examples: 'ml.t3.medium' (2 vCPU, 4GB RAM), "
156+
"'ml.m5.xlarge' (4 vCPU, 16GB RAM). Defaults to ml.m5.xlarge for training steps"
157+
)
158+
159+
path: str = Field(
160+
description="Root path for artifact storage. Must be a valid URI supported by the "
161+
"artifact store implementation. Examples: 's3://my-bucket/artifacts', "
162+
"'/local/storage/path', 'gs://bucket-name/zenml-artifacts'. Path must be accessible "
163+
"with configured credentials"
164+
)
165+
166+
synchronous: bool = Field(
167+
True,
168+
description="Controls whether pipeline execution blocks the client. If True, "
169+
"the client waits until all steps complete. If False, returns immediately and "
170+
"executes asynchronously. Useful for long-running production pipelines"
171+
)
172+
```
173+
174+
#### Validation
175+
- Run `python scripts/validate_descriptions.py` to check description quality
176+
- All descriptions must pass validation before merging
177+
- Add validation to CI pipeline to prevent regressions
178+
127179
### When Fixing Bugs
128180
- Add regression tests that would have caught the bug
129181
- Understand root cause before implementing fix
@@ -148,9 +200,10 @@ Use filesystem navigation tools to explore the codebase structure as needed.
148200
### Continuous Integration
149201
- ZenML uses a two-tier CI approach:
150202
- **Fast CI**: Runs automatically on all PRs (basic tests, linting, type checking)
151-
- **Full CI**: Includes integration tests and more extensive test coverage
203+
- **Full CI**: Includes integration tests, tutorial pipeline regression tests, and more extensive test coverage
152204
- The `run-slow-ci` label triggers full CI testing
153205
- Full CI is required before merging - maintainers will add the label if needed
206+
- Tutorial pipeline testing runs all VSCode tutorial examples against the current branch to catch breaking changes
154207
- If your changes touch integrations or core functionality, mention in the PR that full CI should be run
155208
- CI failures will show in the PR checks - review logs to understand any issues
156209

0 commit comments

Comments
 (0)