comfy-test 0.0.41__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 (36) hide show
  1. comfy_test-0.0.41/.github/workflows/publish.yml +74 -0
  2. comfy_test-0.0.41/.github/workflows/test-matrix-local.yml +241 -0
  3. comfy_test-0.0.41/.github/workflows/test-matrix.yml +271 -0
  4. comfy_test-0.0.41/.gitignore +69 -0
  5. comfy_test-0.0.41/.ipynb_checkpoints/pyproject-checkpoint.toml +48 -0
  6. comfy_test-0.0.41/LICENSE +21 -0
  7. comfy_test-0.0.41/PKG-INFO +231 -0
  8. comfy_test-0.0.41/README.md +199 -0
  9. comfy_test-0.0.41/bin/act +0 -0
  10. comfy_test-0.0.41/pyproject.toml +49 -0
  11. comfy_test-0.0.41/src/comfy_test/__init__.py +103 -0
  12. comfy_test-0.0.41/src/comfy_test/__main__.py +6 -0
  13. comfy_test-0.0.41/src/comfy_test/cli.py +643 -0
  14. comfy_test-0.0.41/src/comfy_test/comfyui/__init__.py +11 -0
  15. comfy_test-0.0.41/src/comfy_test/comfyui/api.py +202 -0
  16. comfy_test-0.0.41/src/comfy_test/comfyui/server.py +211 -0
  17. comfy_test-0.0.41/src/comfy_test/comfyui/validator.py +616 -0
  18. comfy_test-0.0.41/src/comfy_test/comfyui/workflow.py +234 -0
  19. comfy_test-0.0.41/src/comfy_test/comfyui/workflow_converter.py +1313 -0
  20. comfy_test-0.0.41/src/comfy_test/errors.py +99 -0
  21. comfy_test-0.0.41/src/comfy_test/github/__init__.py +1 -0
  22. comfy_test-0.0.41/src/comfy_test/local_runner.py +246 -0
  23. comfy_test-0.0.41/src/comfy_test/runner.py +81 -0
  24. comfy_test-0.0.41/src/comfy_test/screenshot.py +584 -0
  25. comfy_test-0.0.41/src/comfy_test/screenshot_cache.py +332 -0
  26. comfy_test-0.0.41/src/comfy_test/test/__init__.py +13 -0
  27. comfy_test-0.0.41/src/comfy_test/test/comfy_env.py +75 -0
  28. comfy_test-0.0.41/src/comfy_test/test/config.py +221 -0
  29. comfy_test-0.0.41/src/comfy_test/test/config_file.py +310 -0
  30. comfy_test-0.0.41/src/comfy_test/test/manager.py +1182 -0
  31. comfy_test-0.0.41/src/comfy_test/test/node_discovery.py +231 -0
  32. comfy_test-0.0.41/src/comfy_test/test/platform/__init__.py +74 -0
  33. comfy_test-0.0.41/src/comfy_test/test/platform/base.py +218 -0
  34. comfy_test-0.0.41/src/comfy_test/test/platform/linux.py +250 -0
  35. comfy_test-0.0.41/src/comfy_test/test/platform/windows.py +248 -0
  36. comfy_test-0.0.41/src/comfy_test/test/platform/windows_portable.py +371 -0
@@ -0,0 +1,74 @@
1
+ name: Bump Version & Publish
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main
7
+ workflow_dispatch:
8
+ workflow_call:
9
+ inputs:
10
+ python-version:
11
+ description: 'Python version to use'
12
+ required: false
13
+ default: '3.10'
14
+ type: string
15
+
16
+ jobs:
17
+ bump-and-publish:
18
+ runs-on: ubuntu-latest
19
+ environment: pypi
20
+ permissions:
21
+ contents: write
22
+ id-token: write
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ with:
26
+ token: ${{ secrets.GITHUB_TOKEN }}
27
+
28
+ - name: Setup Python
29
+ uses: actions/setup-python@v5
30
+ with:
31
+ python-version: ${{ inputs.python-version || '3.10' }}
32
+
33
+ - name: Get current version
34
+ id: get_version
35
+ run: |
36
+ current=$(grep '^version = ' pyproject.toml | sed 's/version = "\(.*\)"/\1/' | tr -d '\r')
37
+ echo "current=$current" >> $GITHUB_OUTPUT
38
+
39
+ - name: Bump patch version
40
+ id: bump_version
41
+ run: |
42
+ current="${{ steps.get_version.outputs.current }}"
43
+ IFS='.' read -r major minor patch <<< "$current"
44
+ new_patch=$((patch + 1))
45
+ new_version="${major}.${minor}.${new_patch}"
46
+ sed -i "s/^version = \".*\"/version = \"${new_version}\"/" pyproject.toml
47
+ echo "new_version=$new_version" >> $GITHUB_OUTPUT
48
+ echo "Bumped version: $current -> $new_version"
49
+
50
+ - name: Commit version bump
51
+ run: |
52
+ git config user.name "github-actions[bot]"
53
+ git config user.email "github-actions[bot]@users.noreply.github.com"
54
+ git add pyproject.toml
55
+ git commit -m "Bump version to ${{ steps.bump_version.outputs.new_version }} [skip ci]"
56
+ git tag "v${{ steps.bump_version.outputs.new_version }}"
57
+ git push origin main --tags
58
+
59
+ - name: Install build tools
60
+ run: pip install build
61
+
62
+ - name: Build package
63
+ run: python -m build
64
+
65
+ - name: Create GitHub Release
66
+ uses: softprops/action-gh-release@v1
67
+ with:
68
+ tag_name: v${{ steps.bump_version.outputs.new_version }}
69
+ name: v${{ steps.bump_version.outputs.new_version }}
70
+ generate_release_notes: true
71
+ files: dist/*
72
+
73
+ - name: Publish to PyPI
74
+ uses: pypa/gh-action-pypi-publish@release/v1
@@ -0,0 +1,241 @@
1
+ # LOCAL VERSION - For testing with act
2
+ # This file has local mount overrides for comfy-test and comfy-env
3
+ # Use test-matrix.yml for GitHub Actions CI
4
+
5
+ name: ComfyUI Installation Test Matrix (Local)
6
+
7
+ on:
8
+ workflow_call:
9
+ inputs:
10
+ node-path:
11
+ description: "Path to custom node directory"
12
+ type: string
13
+ default: "."
14
+ config-file:
15
+ description: "Path to comfy-test.toml config file"
16
+ type: string
17
+ default: "comfy-test.toml"
18
+ python-version:
19
+ description: "Python version for testing"
20
+ type: string
21
+ default: "3.10"
22
+ comfy-test-ref:
23
+ description: "Git ref for comfy-test (branch, tag, or SHA)"
24
+ type: string
25
+ default: "main"
26
+ timeout-minutes:
27
+ description: "Job timeout in minutes (default: 60)"
28
+ type: number
29
+ default: 60
30
+
31
+ jobs:
32
+ test-linux:
33
+ runs-on: ubuntu-latest
34
+ timeout-minutes: ${{ inputs.timeout-minutes }}
35
+ steps:
36
+ - name: Free disk space
37
+ run: |
38
+ sudo rm -rf /usr/share/dotnet &
39
+ sudo rm -rf /usr/local/lib/android &
40
+ sudo rm -rf /opt/ghc &
41
+ sudo rm -rf /opt/hostedtoolcache/CodeQL &
42
+ sudo apt-get clean &
43
+ wait
44
+
45
+ - name: Checkout node
46
+ uses: actions/checkout@v4
47
+
48
+ - name: Checkout comfy-test
49
+ if: ${{ !env.COMFY_TEST_LOCAL }}
50
+ uses: actions/checkout@v4
51
+ with:
52
+ repository: PozzettiAndrea/comfy-test
53
+ ref: ${{ inputs.comfy-test-ref }}
54
+ path: .comfy-test-src
55
+
56
+ - name: Setup Python
57
+ uses: actions/setup-python@v5
58
+ with:
59
+ python-version: ${{ inputs.python-version }}
60
+
61
+ - name: Install uv
62
+ run: pip install uv
63
+
64
+ - name: Install comfy-test
65
+ run: |
66
+ if [ -d "/local-comfy-test" ]; then
67
+ echo "Installing comfy-test from local mount: /local-comfy-test"
68
+ pip install "/local-comfy-test[screenshot]"
69
+ else
70
+ pip install "./.comfy-test-src[screenshot]"
71
+ fi
72
+
73
+ - name: Install Playwright
74
+ run: |
75
+ playwright install chromium
76
+ playwright install-deps chromium
77
+
78
+ - name: Install local comfy-env
79
+ run: |
80
+ if [ -d "/local-comfy-env" ]; then
81
+ echo "Installing comfy-env from local mount: /local-comfy-env"
82
+ pip install /local-comfy-env
83
+ fi
84
+
85
+ - name: Syntax
86
+ id: syntax
87
+ run: comfy-test run --platform linux --only-level syntax -c ${{ inputs.config-file }}
88
+
89
+ - name: Install
90
+ id: install
91
+ if: always()
92
+ run: comfy-test run --platform linux --only-level install --work-dir .comfy-test-env -c ${{ inputs.config-file }}
93
+
94
+ - name: Registration
95
+ id: registration
96
+ if: always() && steps.install.outcome == 'success'
97
+ run: comfy-test run --platform linux --only-level registration --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
98
+
99
+ - name: Instantiation
100
+ id: instantiation
101
+ if: always() && steps.install.outcome == 'success'
102
+ run: comfy-test run --platform linux --only-level instantiation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
103
+
104
+ - name: Validation
105
+ id: validation
106
+ if: always() && steps.install.outcome == 'success'
107
+ run: comfy-test run --platform linux --only-level validation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
108
+
109
+ - name: Execution
110
+ id: execution
111
+ if: always() && steps.install.outcome == 'success'
112
+ run: comfy-test run --platform linux --only-level execution --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
113
+
114
+ - name: Upload logs
115
+ if: always()
116
+ uses: actions/upload-artifact@v4
117
+ with:
118
+ name: test-logs-linux
119
+ path: .comfy-test/
120
+ if-no-files-found: ignore
121
+
122
+ test-windows:
123
+ runs-on: windows-latest
124
+ timeout-minutes: ${{ inputs.timeout-minutes }}
125
+ steps:
126
+ - name: Checkout node
127
+ uses: actions/checkout@v4
128
+
129
+ - name: Checkout comfy-test
130
+ uses: actions/checkout@v4
131
+ with:
132
+ repository: PozzettiAndrea/comfy-test
133
+ ref: ${{ inputs.comfy-test-ref }}
134
+ path: .comfy-test-src
135
+
136
+ - name: Setup Python
137
+ uses: actions/setup-python@v5
138
+ with:
139
+ python-version: ${{ inputs.python-version }}
140
+
141
+ - name: Install uv
142
+ run: pip install uv
143
+
144
+ - name: Install comfy-test
145
+ run: pip install ./.comfy-test-src
146
+
147
+ - name: Syntax
148
+ id: syntax
149
+ run: comfy-test run --platform windows --only-level syntax -c ${{ inputs.config-file }}
150
+
151
+ - name: Install
152
+ id: install
153
+ if: always()
154
+ run: comfy-test run --platform windows --only-level install --work-dir .comfy-test-env -c ${{ inputs.config-file }}
155
+
156
+ - name: Registration
157
+ id: registration
158
+ if: always() && steps.install.outcome == 'success'
159
+ run: comfy-test run --platform windows --only-level registration --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
160
+
161
+ - name: Instantiation
162
+ id: instantiation
163
+ if: always() && steps.install.outcome == 'success'
164
+ run: comfy-test run --platform windows --only-level instantiation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
165
+
166
+ - name: Validation
167
+ id: validation
168
+ if: always() && steps.install.outcome == 'success'
169
+ run: comfy-test run --platform windows --only-level validation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
170
+
171
+ - name: Execution
172
+ id: execution
173
+ if: always() && steps.install.outcome == 'success'
174
+ run: comfy-test run --platform windows --only-level execution --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
175
+
176
+ - name: Upload logs
177
+ if: always()
178
+ uses: actions/upload-artifact@v4
179
+ with:
180
+ name: test-logs-windows
181
+ path: .comfy-test/
182
+ if-no-files-found: ignore
183
+
184
+ test-windows-portable:
185
+ runs-on: windows-latest
186
+ timeout-minutes: ${{ inputs.timeout-minutes }}
187
+ steps:
188
+ - name: Checkout node
189
+ uses: actions/checkout@v4
190
+
191
+ - name: Checkout comfy-test
192
+ uses: actions/checkout@v4
193
+ with:
194
+ repository: PozzettiAndrea/comfy-test
195
+ ref: ${{ inputs.comfy-test-ref }}
196
+ path: .comfy-test-src
197
+
198
+ - name: Setup Python
199
+ uses: actions/setup-python@v5
200
+ with:
201
+ python-version: ${{ inputs.python-version }}
202
+
203
+ - name: Install comfy-test
204
+ run: pip install ./.comfy-test-src
205
+
206
+ - name: Syntax
207
+ id: syntax
208
+ run: comfy-test run --platform windows-portable --only-level syntax -c ${{ inputs.config-file }}
209
+
210
+ - name: Install
211
+ id: install
212
+ if: always()
213
+ run: comfy-test run --platform windows-portable --only-level install --work-dir .comfy-test-env -c ${{ inputs.config-file }}
214
+
215
+ - name: Registration
216
+ id: registration
217
+ if: always() && steps.install.outcome == 'success'
218
+ run: comfy-test run --platform windows-portable --only-level registration --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
219
+
220
+ - name: Instantiation
221
+ id: instantiation
222
+ if: always() && steps.install.outcome == 'success'
223
+ run: comfy-test run --platform windows-portable --only-level instantiation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
224
+
225
+ - name: Validation
226
+ id: validation
227
+ if: always() && steps.install.outcome == 'success'
228
+ run: comfy-test run --platform windows-portable --only-level validation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
229
+
230
+ - name: Execution
231
+ id: execution
232
+ if: always() && steps.install.outcome == 'success'
233
+ run: comfy-test run --platform windows-portable --only-level execution --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
234
+
235
+ - name: Upload logs
236
+ if: always()
237
+ uses: actions/upload-artifact@v4
238
+ with:
239
+ name: test-logs-windows-portable
240
+ path: .comfy-test/
241
+ if-no-files-found: ignore
@@ -0,0 +1,271 @@
1
+ name: ComfyUI Installation Test Matrix
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ node-path:
7
+ description: "Path to custom node directory"
8
+ type: string
9
+ default: "."
10
+ config-file:
11
+ description: "Path to comfy-test.toml config file"
12
+ type: string
13
+ default: "comfy-test.toml"
14
+ python-version:
15
+ description: "Python version for testing"
16
+ type: string
17
+ default: "3.10"
18
+ comfy-test-ref:
19
+ description: "Git ref for comfy-test (branch, tag, or SHA)"
20
+ type: string
21
+ default: "main"
22
+ timeout-minutes:
23
+ description: "Job timeout in minutes (default: 60)"
24
+ type: number
25
+ default: 60
26
+
27
+ jobs:
28
+ test-linux:
29
+ runs-on: ubuntu-latest
30
+ timeout-minutes: ${{ inputs.timeout-minutes }}
31
+ steps:
32
+ - name: Free disk space
33
+ run: |
34
+ sudo rm -rf /usr/share/dotnet &
35
+ sudo rm -rf /usr/local/lib/android &
36
+ sudo rm -rf /opt/ghc &
37
+ sudo rm -rf /opt/hostedtoolcache/CodeQL &
38
+ sudo apt-get clean &
39
+ wait
40
+
41
+ - name: Checkout node
42
+ uses: actions/checkout@v4
43
+
44
+ - name: Checkout comfy-test
45
+ uses: actions/checkout@v4
46
+ with:
47
+ repository: PozzettiAndrea/comfy-test
48
+ ref: ${{ inputs.comfy-test-ref }}
49
+ path: .comfy-test-src
50
+
51
+ - name: Setup Python
52
+ uses: actions/setup-python@v5
53
+ with:
54
+ python-version: ${{ inputs.python-version }}
55
+
56
+ - name: Install uv
57
+ run: pip install uv
58
+
59
+ - name: Install comfy-test
60
+ run: pip install "./.comfy-test-src[screenshot]"
61
+
62
+ - name: Install Playwright
63
+ run: |
64
+ playwright install chromium
65
+ playwright install-deps chromium
66
+
67
+ - name: Syntax
68
+ id: syntax
69
+ run: comfy-test run --platform linux --only-level syntax -c ${{ inputs.config-file }}
70
+
71
+ - name: Install
72
+ id: install
73
+ if: always()
74
+ run: comfy-test run --platform linux --only-level install --work-dir .comfy-test-env -c ${{ inputs.config-file }}
75
+
76
+ - name: Registration
77
+ id: registration
78
+ if: always() && steps.install.outcome == 'success'
79
+ run: comfy-test run --platform linux --only-level registration --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
80
+
81
+ - name: Instantiation
82
+ id: instantiation
83
+ if: always() && steps.install.outcome == 'success'
84
+ run: comfy-test run --platform linux --only-level instantiation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
85
+
86
+ - name: Validation
87
+ id: validation
88
+ if: always() && steps.install.outcome == 'success'
89
+ run: comfy-test run --platform linux --only-level validation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
90
+
91
+ - name: Execution
92
+ id: execution
93
+ if: always() && steps.install.outcome == 'success'
94
+ run: comfy-test run --platform linux --only-level execution --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
95
+
96
+ - name: Upload logs
97
+ if: always()
98
+ uses: actions/upload-artifact@v4
99
+ with:
100
+ name: test-logs-linux
101
+ path: .comfy-test/
102
+ if-no-files-found: ignore
103
+
104
+ - name: Upload screenshots
105
+ if: always()
106
+ uses: actions/upload-artifact@v4
107
+ with:
108
+ name: screenshots-linux
109
+ path: .comfy-test/screenshots/
110
+ if-no-files-found: ignore
111
+
112
+ - name: Publish to gh-pages
113
+ if: always() && steps.execution.outcome == 'success'
114
+ uses: peaceiris/actions-gh-pages@v4
115
+ with:
116
+ github_token: ${{ secrets.GITHUB_TOKEN }}
117
+ publish_branch: gh-pages
118
+ publish_dir: .comfy-test
119
+ keep_files: true
120
+ exclude_assets: ''
121
+
122
+ test-windows:
123
+ runs-on: windows-latest
124
+ timeout-minutes: ${{ inputs.timeout-minutes }}
125
+ steps:
126
+ - name: Checkout node
127
+ uses: actions/checkout@v4
128
+
129
+ - name: Checkout comfy-test
130
+ uses: actions/checkout@v4
131
+ with:
132
+ repository: PozzettiAndrea/comfy-test
133
+ ref: ${{ inputs.comfy-test-ref }}
134
+ path: .comfy-test-src
135
+
136
+ - name: Setup Python
137
+ uses: actions/setup-python@v5
138
+ with:
139
+ python-version: ${{ inputs.python-version }}
140
+
141
+ - name: Install uv
142
+ run: pip install uv
143
+
144
+ - name: Install comfy-test
145
+ run: pip install "./.comfy-test-src[screenshot]"
146
+
147
+ - name: Install Playwright
148
+ run: |
149
+ playwright install chromium
150
+ playwright install-deps chromium
151
+
152
+ - name: Syntax
153
+ id: syntax
154
+ run: comfy-test run --platform windows --only-level syntax -c ${{ inputs.config-file }}
155
+
156
+ - name: Install
157
+ id: install
158
+ if: always()
159
+ run: comfy-test run --platform windows --only-level install --work-dir .comfy-test-env -c ${{ inputs.config-file }}
160
+
161
+ - name: Registration
162
+ id: registration
163
+ if: always() && steps.install.outcome == 'success'
164
+ run: comfy-test run --platform windows --only-level registration --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
165
+
166
+ - name: Instantiation
167
+ id: instantiation
168
+ if: always() && steps.install.outcome == 'success'
169
+ run: comfy-test run --platform windows --only-level instantiation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
170
+
171
+ - name: Validation
172
+ id: validation
173
+ if: always() && steps.install.outcome == 'success'
174
+ run: comfy-test run --platform windows --only-level validation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
175
+
176
+ - name: Execution
177
+ id: execution
178
+ if: always() && steps.install.outcome == 'success'
179
+ run: comfy-test run --platform windows --only-level execution --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
180
+
181
+ - name: Upload logs
182
+ if: always()
183
+ uses: actions/upload-artifact@v4
184
+ with:
185
+ name: test-logs-windows
186
+ path: .comfy-test/
187
+ if-no-files-found: ignore
188
+
189
+ - name: Upload screenshots
190
+ if: always()
191
+ uses: actions/upload-artifact@v4
192
+ with:
193
+ name: screenshots-windows
194
+ path: |
195
+ ${{ inputs.node-path }}/workflows/*.png
196
+ ${{ inputs.node-path }}/workflows/**/*.png
197
+ if-no-files-found: ignore
198
+
199
+ test-windows-portable:
200
+ runs-on: windows-latest
201
+ timeout-minutes: ${{ inputs.timeout-minutes }}
202
+ steps:
203
+ - name: Checkout node
204
+ uses: actions/checkout@v4
205
+
206
+ - name: Checkout comfy-test
207
+ uses: actions/checkout@v4
208
+ with:
209
+ repository: PozzettiAndrea/comfy-test
210
+ ref: ${{ inputs.comfy-test-ref }}
211
+ path: .comfy-test-src
212
+
213
+ - name: Setup Python
214
+ uses: actions/setup-python@v5
215
+ with:
216
+ python-version: ${{ inputs.python-version }}
217
+
218
+ - name: Install comfy-test
219
+ run: pip install "./.comfy-test-src[screenshot]"
220
+
221
+ - name: Install Playwright
222
+ run: |
223
+ playwright install chromium
224
+ playwright install-deps chromium
225
+
226
+ - name: Syntax
227
+ id: syntax
228
+ run: comfy-test run --platform windows-portable --only-level syntax -c ${{ inputs.config-file }}
229
+
230
+ - name: Install
231
+ id: install
232
+ if: always()
233
+ run: comfy-test run --platform windows-portable --only-level install --work-dir .comfy-test-env -c ${{ inputs.config-file }}
234
+
235
+ - name: Registration
236
+ id: registration
237
+ if: always() && steps.install.outcome == 'success'
238
+ run: comfy-test run --platform windows-portable --only-level registration --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
239
+
240
+ - name: Instantiation
241
+ id: instantiation
242
+ if: always() && steps.install.outcome == 'success'
243
+ run: comfy-test run --platform windows-portable --only-level instantiation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
244
+
245
+ - name: Validation
246
+ id: validation
247
+ if: always() && steps.install.outcome == 'success'
248
+ run: comfy-test run --platform windows-portable --only-level validation --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
249
+
250
+ - name: Execution
251
+ id: execution
252
+ if: always() && steps.install.outcome == 'success'
253
+ run: comfy-test run --platform windows-portable --only-level execution --work-dir .comfy-test-env --skip-setup -c ${{ inputs.config-file }}
254
+
255
+ - name: Upload logs
256
+ if: always()
257
+ uses: actions/upload-artifact@v4
258
+ with:
259
+ name: test-logs-windows-portable
260
+ path: .comfy-test/
261
+ if-no-files-found: ignore
262
+
263
+ - name: Upload screenshots
264
+ if: always()
265
+ uses: actions/upload-artifact@v4
266
+ with:
267
+ name: screenshots-windows-portable
268
+ path: |
269
+ ${{ inputs.node-path }}/workflows/*.png
270
+ ${{ inputs.node-path }}/workflows/**/*.png
271
+ if-no-files-found: ignore
@@ -0,0 +1,69 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ *.egg-info/
24
+ .installed.cfg
25
+ *.egg
26
+
27
+ # PyInstaller
28
+ *.manifest
29
+ *.spec
30
+
31
+ # Installer logs
32
+ pip-log.txt
33
+ pip-delete-this-directory.txt
34
+
35
+ # Unit test / coverage reports
36
+ htmlcov/
37
+ .tox/
38
+ .nox/
39
+ .coverage
40
+ .coverage.*
41
+ .cache
42
+ nosetests.xml
43
+ coverage.xml
44
+ *.cover
45
+ *.py,cover
46
+ .hypothesis/
47
+ .pytest_cache/
48
+
49
+ # Environments
50
+ .env
51
+ .venv
52
+ env/
53
+ venv/
54
+ ENV/
55
+ env.bak/
56
+ venv.bak/
57
+
58
+ # IDEs
59
+ .idea/
60
+ .vscode/
61
+ *.swp
62
+ *.swo
63
+
64
+ # Test artifacts
65
+ .comfy-test/
66
+
67
+ # OS
68
+ .DS_Store
69
+ Thumbs.db
@@ -0,0 +1,48 @@
1
+ [project]
2
+ name = "comfy-test"
3
+ version = "0.0.10"
4
+ description = "Installation testing infrastructure for ComfyUI custom nodes"
5
+ readme = "README.md"
6
+ license = {text = "MIT"}
7
+ requires-python = ">=3.10"
8
+ authors = [
9
+ {name = "Andrea Pozzetti"}
10
+ ]
11
+ keywords = ["comfyui", "testing", "installation", "ci", "github-actions"]
12
+ classifiers = [
13
+ "Development Status :: 3 - Alpha",
14
+ "Intended Audience :: Developers",
15
+ "License :: OSI Approved :: MIT License",
16
+ "Programming Language :: Python :: 3.10",
17
+ "Programming Language :: Python :: 3.11",
18
+ "Programming Language :: Python :: 3.12",
19
+ "Programming Language :: Python :: 3.13",
20
+ ]
21
+ dependencies = [
22
+ "tomli>=2.0.0; python_version < '3.11'", # TOML parsing (built-in for 3.11+)
23
+ "requests>=2.28.0", # ComfyUI API calls
24
+ "websocket-client", # ComfyUI WebSocket for workflow monitoring
25
+ "py7zr>=0.20.0", # Extract portable 7z archives
26
+ ]
27
+
28
+ [project.optional-dependencies]
29
+ dev = ["pytest", "ruff", "mypy"]
30
+
31
+ [project.urls]
32
+ Homepage = "https://github.com/PozzettiAndrea/comfy-test"
33
+ Repository = "https://github.com/PozzettiAndrea/comfy-test"
34
+ Issues = "https://github.com/PozzettiAndrea/comfy-test/issues"
35
+
36
+ [project.scripts]
37
+ comfy-test = "comfy_test.cli:main"
38
+
39
+ [build-system]
40
+ requires = ["hatchling"]
41
+ build-backend = "hatchling.build"
42
+
43
+ [tool.hatch.build.targets.wheel]
44
+ packages = ["src/comfy_test"]
45
+
46
+ [tool.ruff]
47
+ line-length = 100
48
+ target-version = "py310"