robotframework-velo-cli 0.1.7__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.
@@ -0,0 +1,49 @@
1
+ Copyright (c) 2026 Velo. All rights reserved.
2
+
3
+ PROPRIETARY SOFTWARE LICENSE
4
+
5
+ This software and its source code, documentation, and associated files
6
+ (collectively, the "Software") are the exclusive property of Velo and are
7
+ protected by copyright law and international treaties.
8
+
9
+ GRANT OF LICENSE
10
+
11
+ Velo grants you a limited, non-exclusive, non-transferable, non-sub licensable
12
+ license to use the Software solely for your internal business purposes,
13
+ strictly in accordance with any agreement entered into with Velo.
14
+
15
+ RESTRICTIONS
16
+
17
+ You may not, and you may not permit any third party to:
18
+
19
+ 1. Copy, modify, adapt, translate, or create derivative works of the Software;
20
+ 2. Reverse engineer, disassemble, decompile, or otherwise attempt to derive
21
+ the source code of the Software;
22
+ 3. Sell, sublicense, rent, lease, transfer, or otherwise make the Software
23
+ available to any third party;
24
+ 4. Remove or alter any proprietary notices, labels, or marks on the Software;
25
+ 5. Use the Software for any purpose other than as expressly permitted
26
+ under this license.
27
+
28
+ NO WARRANTY
29
+
30
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
31
+ IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS
32
+ FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL VELO BE
33
+ LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM THE USE OF
34
+ THE SOFTWARE.
35
+
36
+ TERMINATION
37
+
38
+ This license is effective until terminated. It will terminate automatically
39
+ if you fail to comply with any of its terms. Upon termination, you must
40
+ immediately cease all use of the Software and destroy any copies in your
41
+ possession.
42
+
43
+ GOVERNING LAW
44
+
45
+ This license shall be governed by and construed in accordance with applicable
46
+ law. Any disputes arising under this license shall be subject to the exclusive
47
+ jurisdiction of the competent courts.
48
+
49
+ For licensing inquiries, contact: legal@velo.com
@@ -0,0 +1,293 @@
1
+ Metadata-Version: 2.4
2
+ Name: robotframework-velo-cli
3
+ Version: 0.1.7
4
+ Summary: Run Robot Framework test suites on the Velo cloud platform
5
+ Author-email: Velo <support@velo.com>
6
+ License: Copyright (c) 2026 Velo. All rights reserved.
7
+
8
+ PROPRIETARY SOFTWARE LICENSE
9
+
10
+ This software and its source code, documentation, and associated files
11
+ (collectively, the "Software") are the exclusive property of Velo and are
12
+ protected by copyright law and international treaties.
13
+
14
+ GRANT OF LICENSE
15
+
16
+ Velo grants you a limited, non-exclusive, non-transferable, non-sub licensable
17
+ license to use the Software solely for your internal business purposes,
18
+ strictly in accordance with any agreement entered into with Velo.
19
+
20
+ RESTRICTIONS
21
+
22
+ You may not, and you may not permit any third party to:
23
+
24
+ 1. Copy, modify, adapt, translate, or create derivative works of the Software;
25
+ 2. Reverse engineer, disassemble, decompile, or otherwise attempt to derive
26
+ the source code of the Software;
27
+ 3. Sell, sublicense, rent, lease, transfer, or otherwise make the Software
28
+ available to any third party;
29
+ 4. Remove or alter any proprietary notices, labels, or marks on the Software;
30
+ 5. Use the Software for any purpose other than as expressly permitted
31
+ under this license.
32
+
33
+ NO WARRANTY
34
+
35
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
36
+ IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF MERCHANTABILITY, FITNESS
37
+ FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. IN NO EVENT SHALL VELO BE
38
+ LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM THE USE OF
39
+ THE SOFTWARE.
40
+
41
+ TERMINATION
42
+
43
+ This license is effective until terminated. It will terminate automatically
44
+ if you fail to comply with any of its terms. Upon termination, you must
45
+ immediately cease all use of the Software and destroy any copies in your
46
+ possession.
47
+
48
+ GOVERNING LAW
49
+
50
+ This license shall be governed by and construed in accordance with applicable
51
+ law. Any disputes arising under this license shall be subject to the exclusive
52
+ jurisdiction of the competent courts.
53
+
54
+ For licensing inquiries, contact: legal@velo.com
55
+
56
+ Project-URL: Homepage, https://velo.com
57
+ Project-URL: Bug Tracker, https://github.com/velo/robotframework-velo-cli/issues
58
+ Keywords: robotframework,robot,testing,automation,velo,sap
59
+ Classifier: Development Status :: 3 - Alpha
60
+ Classifier: Framework :: Robot Framework
61
+ Classifier: Framework :: Robot Framework :: Tool
62
+ Classifier: Intended Audience :: Developers
63
+ Classifier: Intended Audience :: Information Technology
64
+ Classifier: Programming Language :: Python :: 3
65
+ Classifier: Programming Language :: Python :: 3.10
66
+ Classifier: Programming Language :: Python :: 3.11
67
+ Classifier: Programming Language :: Python :: 3.12
68
+ Classifier: Operating System :: OS Independent
69
+ Classifier: Topic :: Software Development :: Testing
70
+ Requires-Python: >=3.10
71
+ Description-Content-Type: text/markdown
72
+ License-File: LICENSE
73
+ Requires-Dist: robotframework>=6.0
74
+ Requires-Dist: requests>=2.31
75
+ Requires-Dist: pathspec>=0.12
76
+ Provides-Extra: dev
77
+ Requires-Dist: pytest>=7; extra == "dev"
78
+ Requires-Dist: pytest-cov; extra == "dev"
79
+ Requires-Dist: ruff; extra == "dev"
80
+ Requires-Dist: mypy; extra == "dev"
81
+ Dynamic: license-file
82
+
83
+ # robotframework-velo-cli
84
+
85
+ Run Robot Framework test suites on the Velo cloud platform — no SAP GUI setup required on your machine.
86
+
87
+ ---
88
+
89
+ ## Installation
90
+
91
+ ```bash
92
+ pip install robotframework-velo-cli
93
+ ```
94
+
95
+ > **Note:** This package intentionally installs a `robot` command that wraps and replaces the standard Robot Framework entry point. `robotframework` is a declared dependency and will be installed automatically. Because `robotframework-velo-cli` is installed after `robotframework`, its `robot` script takes precedence. When `VELO_REMOTE` is not set the wrapper passes all arguments through to Robot Framework unchanged — your existing workflow is unaffected.
96
+
97
+ ---
98
+
99
+ ## Quick start
100
+
101
+ ```bash
102
+ # 1. Set your workspace credentials
103
+ export VELO_API_KEY=<your-api-key>
104
+ export VELO_API_BASE=http://<velo-api-host>:8000 # default: http://localhost:8000
105
+
106
+ # 2. Run your tests remotely — same command you always use
107
+ VELO_REMOTE=1 robot ./tests
108
+
109
+ # 3. With tag filtering — all standard RF flags pass through unchanged
110
+ VELO_REMOTE=1 robot --include smoke --exclude wip ./tests
111
+ ```
112
+
113
+ ---
114
+
115
+ ## Execution modes
116
+
117
+ | Variable | Value | Behaviour |
118
+ |---|---|---|
119
+ | `VELO_REMOTE` | `0` (default) | Package is inert — `robot` runs locally as normal |
120
+ | `VELO_REMOTE` | `1` | Suite is packaged, uploaded, and executed on the Velo platform |
121
+ | `VELO_DEBUG` | `1` | Local debug: native SAP GUI for Windows, or Docker Java elsewhere |
122
+ | `VELO_SAP_CLIENT` | `auto` | SAP backend: `auto`, `java`, or `windows` (see debug mode below) |
123
+
124
+ ---
125
+
126
+ ## Environment variables
127
+
128
+ | Variable | Required | Default | Description |
129
+ |---|---|---|---|
130
+ | `VELO_API_KEY` | Yes (remote) | — | Workspace API key |
131
+ | `VELO_API_BASE` | No | `http://localhost:8000` | Velo API base URL |
132
+ | `VELO_REMOTE` | No | `0` | Set to `1` to enable remote execution |
133
+ | `VELO_DEBUG` | No | `0` | Set to `1` for local debug (Windows native or Docker Java) |
134
+ | `VELO_SAP_CLIENT` | No | `auto` | SAP client: `auto`, `java`, or `windows` |
135
+
136
+ ---
137
+
138
+ ## Remote execution flow
139
+
140
+ When `VELO_REMOTE=1`, the following happens automatically:
141
+
142
+ ```
143
+ 1. Scan working directory and apply .veloignore rules
144
+ 2. Package directory into a .zip archive
145
+ 3. Upload archive to the Velo API
146
+ 4. Trigger a remote run (optionally with --include / --exclude tags)
147
+ 5. Stream Robot Framework log output to your terminal in real time
148
+ 6. On completion: download log.html + report.html to ./results/
149
+ 7. Exit with the standard RF exit code
150
+ ```
151
+
152
+ The terminal experience is identical to a local RF run — log lines appear as tests execute, not buffered.
153
+
154
+ ---
155
+
156
+ ## What gets uploaded
157
+
158
+ The entire current working directory is packaged into a `.zip` archive when you run `robot`. The archive is created from the directory you run the command in, preserving the full folder structure.
159
+
160
+ **Typical archive contents:**
161
+
162
+ ```
163
+ tests/
164
+ smoke/
165
+ login.robot
166
+ regression/
167
+ sales_order.robot
168
+ resources/
169
+ keywords.robot
170
+ variables/
171
+ common.py
172
+ ```
173
+
174
+ Only files are included — empty directories are omitted. The archive is uploaded to the API, extracted into the execution container, and `robot` is run against the entire directory.
175
+
176
+ ---
177
+
178
+ ## .veloignore
179
+
180
+ A `.veloignore` file in the project root controls which files are excluded from the uploaded archive. It uses the same syntax as `.gitignore` (glob patterns, `#` comments, negation with `!`).
181
+
182
+ Place it at the root of your test project:
183
+
184
+ ```
185
+ your-project/
186
+ ├── .veloignore ← here
187
+ ├── tests/
188
+ ├── resources/
189
+ └── ...
190
+ ```
191
+
192
+ ### Default exclusions
193
+
194
+ When **no `.veloignore` file is present**, the following are excluded automatically:
195
+
196
+ ```
197
+ .git
198
+ __pycache__
199
+ *.pyc
200
+ *.pyo
201
+ venv
202
+ .venv
203
+ node_modules
204
+ .env
205
+ .env.*
206
+ results
207
+ *.log
208
+ ```
209
+
210
+ ### Important: defaults are replaced, not merged
211
+
212
+ If a `.veloignore` file exists, **it completely replaces the default list** — the defaults above are no longer applied. Include any defaults you still want in your `.veloignore`.
213
+
214
+ ### Example .veloignore
215
+
216
+ ```gitignore
217
+ # Re-include sensible defaults
218
+ .git
219
+ __pycache__
220
+ *.pyc
221
+ venv
222
+ .venv
223
+ .env
224
+ .env.*
225
+ results
226
+ *.log
227
+
228
+ # Project-specific exclusions
229
+ data/sensitive/
230
+ config/secrets.yaml
231
+ *.csv
232
+ docs/
233
+ ```
234
+
235
+ ### Verifying exclusions
236
+
237
+ After a run, inspect the uploaded archive on the API server:
238
+
239
+ ```bash
240
+ unzip -l <storage_root>/suites/<suite_id>.zip
241
+ ```
242
+
243
+ ---
244
+
245
+ ## Artifacts
246
+
247
+ When the run completes, the following are downloaded to your local `--outputdir` (default: `./results/`):
248
+
249
+ | File | Description |
250
+ |---|---|
251
+ | `log.html` | Full Robot Framework execution log with keyword-level detail |
252
+ | `report.html` | Test suite summary report |
253
+
254
+ The video recording (`recording.mp4`) is stored on the server and accessible via the API at `GET /api/runs/{run_id}/artifacts/video`.
255
+
256
+ ---
257
+
258
+ ## Exit codes
259
+
260
+ The package preserves standard RF exit codes so existing CI scripts and Makefiles work without modification:
261
+
262
+ | Code | Meaning |
263
+ |---|---|
264
+ | `0` | All tests passed |
265
+ | `1` | One or more tests failed |
266
+ | `2` | Invalid RF options or arguments |
267
+ | `3` | Test execution stopped by user |
268
+ | `252` | Help or version info printed |
269
+ | `253` | Platform error (upload failed, API unreachable, run did not start) |
270
+
271
+ ---
272
+
273
+ ## RF flag pass-through
274
+
275
+ All standard `robot` flags are forwarded to the remote execution environment:
276
+
277
+ | Flag | Behaviour |
278
+ |---|---|
279
+ | `--include TAG` / `--exclude TAG` | Passed to remote RF runner |
280
+ | `--variable KEY:VALUE` | Passed to remote RF runner |
281
+ | `--suite SUITE` | Passed to remote RF runner |
282
+ | `--outputdir PATH` | Controls local download destination for results |
283
+ | `--dryrun` | Executes locally — remote is not triggered |
284
+
285
+ ---
286
+
287
+ ## Development install (editable)
288
+
289
+ ```bash
290
+ git clone <repo>
291
+ cd velo
292
+ pip install -e packages/robotframework-velo-cli
293
+ ```
@@ -0,0 +1,211 @@
1
+ # robotframework-velo-cli
2
+
3
+ Run Robot Framework test suites on the Velo cloud platform — no SAP GUI setup required on your machine.
4
+
5
+ ---
6
+
7
+ ## Installation
8
+
9
+ ```bash
10
+ pip install robotframework-velo-cli
11
+ ```
12
+
13
+ > **Note:** This package intentionally installs a `robot` command that wraps and replaces the standard Robot Framework entry point. `robotframework` is a declared dependency and will be installed automatically. Because `robotframework-velo-cli` is installed after `robotframework`, its `robot` script takes precedence. When `VELO_REMOTE` is not set the wrapper passes all arguments through to Robot Framework unchanged — your existing workflow is unaffected.
14
+
15
+ ---
16
+
17
+ ## Quick start
18
+
19
+ ```bash
20
+ # 1. Set your workspace credentials
21
+ export VELO_API_KEY=<your-api-key>
22
+ export VELO_API_BASE=http://<velo-api-host>:8000 # default: http://localhost:8000
23
+
24
+ # 2. Run your tests remotely — same command you always use
25
+ VELO_REMOTE=1 robot ./tests
26
+
27
+ # 3. With tag filtering — all standard RF flags pass through unchanged
28
+ VELO_REMOTE=1 robot --include smoke --exclude wip ./tests
29
+ ```
30
+
31
+ ---
32
+
33
+ ## Execution modes
34
+
35
+ | Variable | Value | Behaviour |
36
+ |---|---|---|
37
+ | `VELO_REMOTE` | `0` (default) | Package is inert — `robot` runs locally as normal |
38
+ | `VELO_REMOTE` | `1` | Suite is packaged, uploaded, and executed on the Velo platform |
39
+ | `VELO_DEBUG` | `1` | Local debug: native SAP GUI for Windows, or Docker Java elsewhere |
40
+ | `VELO_SAP_CLIENT` | `auto` | SAP backend: `auto`, `java`, or `windows` (see debug mode below) |
41
+
42
+ ---
43
+
44
+ ## Environment variables
45
+
46
+ | Variable | Required | Default | Description |
47
+ |---|---|---|---|
48
+ | `VELO_API_KEY` | Yes (remote) | — | Workspace API key |
49
+ | `VELO_API_BASE` | No | `http://localhost:8000` | Velo API base URL |
50
+ | `VELO_REMOTE` | No | `0` | Set to `1` to enable remote execution |
51
+ | `VELO_DEBUG` | No | `0` | Set to `1` for local debug (Windows native or Docker Java) |
52
+ | `VELO_SAP_CLIENT` | No | `auto` | SAP client: `auto`, `java`, or `windows` |
53
+
54
+ ---
55
+
56
+ ## Remote execution flow
57
+
58
+ When `VELO_REMOTE=1`, the following happens automatically:
59
+
60
+ ```
61
+ 1. Scan working directory and apply .veloignore rules
62
+ 2. Package directory into a .zip archive
63
+ 3. Upload archive to the Velo API
64
+ 4. Trigger a remote run (optionally with --include / --exclude tags)
65
+ 5. Stream Robot Framework log output to your terminal in real time
66
+ 6. On completion: download log.html + report.html to ./results/
67
+ 7. Exit with the standard RF exit code
68
+ ```
69
+
70
+ The terminal experience is identical to a local RF run — log lines appear as tests execute, not buffered.
71
+
72
+ ---
73
+
74
+ ## What gets uploaded
75
+
76
+ The entire current working directory is packaged into a `.zip` archive when you run `robot`. The archive is created from the directory you run the command in, preserving the full folder structure.
77
+
78
+ **Typical archive contents:**
79
+
80
+ ```
81
+ tests/
82
+ smoke/
83
+ login.robot
84
+ regression/
85
+ sales_order.robot
86
+ resources/
87
+ keywords.robot
88
+ variables/
89
+ common.py
90
+ ```
91
+
92
+ Only files are included — empty directories are omitted. The archive is uploaded to the API, extracted into the execution container, and `robot` is run against the entire directory.
93
+
94
+ ---
95
+
96
+ ## .veloignore
97
+
98
+ A `.veloignore` file in the project root controls which files are excluded from the uploaded archive. It uses the same syntax as `.gitignore` (glob patterns, `#` comments, negation with `!`).
99
+
100
+ Place it at the root of your test project:
101
+
102
+ ```
103
+ your-project/
104
+ ├── .veloignore ← here
105
+ ├── tests/
106
+ ├── resources/
107
+ └── ...
108
+ ```
109
+
110
+ ### Default exclusions
111
+
112
+ When **no `.veloignore` file is present**, the following are excluded automatically:
113
+
114
+ ```
115
+ .git
116
+ __pycache__
117
+ *.pyc
118
+ *.pyo
119
+ venv
120
+ .venv
121
+ node_modules
122
+ .env
123
+ .env.*
124
+ results
125
+ *.log
126
+ ```
127
+
128
+ ### Important: defaults are replaced, not merged
129
+
130
+ If a `.veloignore` file exists, **it completely replaces the default list** — the defaults above are no longer applied. Include any defaults you still want in your `.veloignore`.
131
+
132
+ ### Example .veloignore
133
+
134
+ ```gitignore
135
+ # Re-include sensible defaults
136
+ .git
137
+ __pycache__
138
+ *.pyc
139
+ venv
140
+ .venv
141
+ .env
142
+ .env.*
143
+ results
144
+ *.log
145
+
146
+ # Project-specific exclusions
147
+ data/sensitive/
148
+ config/secrets.yaml
149
+ *.csv
150
+ docs/
151
+ ```
152
+
153
+ ### Verifying exclusions
154
+
155
+ After a run, inspect the uploaded archive on the API server:
156
+
157
+ ```bash
158
+ unzip -l <storage_root>/suites/<suite_id>.zip
159
+ ```
160
+
161
+ ---
162
+
163
+ ## Artifacts
164
+
165
+ When the run completes, the following are downloaded to your local `--outputdir` (default: `./results/`):
166
+
167
+ | File | Description |
168
+ |---|---|
169
+ | `log.html` | Full Robot Framework execution log with keyword-level detail |
170
+ | `report.html` | Test suite summary report |
171
+
172
+ The video recording (`recording.mp4`) is stored on the server and accessible via the API at `GET /api/runs/{run_id}/artifacts/video`.
173
+
174
+ ---
175
+
176
+ ## Exit codes
177
+
178
+ The package preserves standard RF exit codes so existing CI scripts and Makefiles work without modification:
179
+
180
+ | Code | Meaning |
181
+ |---|---|
182
+ | `0` | All tests passed |
183
+ | `1` | One or more tests failed |
184
+ | `2` | Invalid RF options or arguments |
185
+ | `3` | Test execution stopped by user |
186
+ | `252` | Help or version info printed |
187
+ | `253` | Platform error (upload failed, API unreachable, run did not start) |
188
+
189
+ ---
190
+
191
+ ## RF flag pass-through
192
+
193
+ All standard `robot` flags are forwarded to the remote execution environment:
194
+
195
+ | Flag | Behaviour |
196
+ |---|---|
197
+ | `--include TAG` / `--exclude TAG` | Passed to remote RF runner |
198
+ | `--variable KEY:VALUE` | Passed to remote RF runner |
199
+ | `--suite SUITE` | Passed to remote RF runner |
200
+ | `--outputdir PATH` | Controls local download destination for results |
201
+ | `--dryrun` | Executes locally — remote is not triggered |
202
+
203
+ ---
204
+
205
+ ## Development install (editable)
206
+
207
+ ```bash
208
+ git clone <repo>
209
+ cd velo
210
+ pip install -e packages/robotframework-velo-cli
211
+ ```
@@ -0,0 +1,76 @@
1
+ [build-system]
2
+ requires = ["setuptools>=68"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "robotframework-velo-cli"
7
+ version = "0.1.7"
8
+ description = "Run Robot Framework test suites on the Velo cloud platform"
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = { file = "LICENSE" }
12
+
13
+ authors = [
14
+ { name = "Velo", email = "support@velo.com" }
15
+ ]
16
+
17
+ keywords = ["robotframework", "robot", "testing", "automation", "velo", "sap"]
18
+
19
+ classifiers = [
20
+ "Development Status :: 3 - Alpha",
21
+ "Framework :: Robot Framework",
22
+ "Framework :: Robot Framework :: Tool",
23
+ "Intended Audience :: Developers",
24
+ "Intended Audience :: Information Technology",
25
+ "Programming Language :: Python :: 3",
26
+ "Programming Language :: Python :: 3.10",
27
+ "Programming Language :: Python :: 3.11",
28
+ "Programming Language :: Python :: 3.12",
29
+ "Operating System :: OS Independent",
30
+ "Topic :: Software Development :: Testing",
31
+ ]
32
+
33
+ dependencies = [
34
+ "robotframework>=6.0",
35
+ "requests>=2.31",
36
+ "pathspec>=0.12",
37
+ ]
38
+
39
+ [project.optional-dependencies]
40
+ dev = [
41
+ "pytest>=7",
42
+ "pytest-cov",
43
+ "ruff",
44
+ "mypy",
45
+ ]
46
+
47
+ [project.urls]
48
+ Homepage = "https://velo.com"
49
+ "Bug Tracker" = "https://github.com/velo/robotframework-velo-cli/issues"
50
+
51
+ [project.scripts]
52
+ robot = "velo.cli:main"
53
+ velo = "velo.cli:velo_main"
54
+
55
+ [tool.setuptools.packages.find]
56
+ where = ["src"]
57
+
58
+ [tool.setuptools.package-data]
59
+ velo = ["py.typed"]
60
+
61
+ [tool.pytest.ini_options]
62
+ testpaths = ["tests"]
63
+
64
+ [tool.coverage.run]
65
+ source = ["velo"]
66
+
67
+ [tool.ruff]
68
+ target-version = "py310"
69
+ line-length = 88
70
+
71
+ [tool.ruff.lint]
72
+ select = ["E", "F", "I", "UP"]
73
+
74
+ [tool.mypy]
75
+ python_version = "3.10"
76
+ strict = true
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+