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.
- robotframework_velo_cli-0.1.7/LICENSE +49 -0
- robotframework_velo_cli-0.1.7/PKG-INFO +293 -0
- robotframework_velo_cli-0.1.7/README.md +211 -0
- robotframework_velo_cli-0.1.7/pyproject.toml +76 -0
- robotframework_velo_cli-0.1.7/setup.cfg +4 -0
- robotframework_velo_cli-0.1.7/src/robotframework_velo_cli.egg-info/PKG-INFO +293 -0
- robotframework_velo_cli-0.1.7/src/robotframework_velo_cli.egg-info/SOURCES.txt +19 -0
- robotframework_velo_cli-0.1.7/src/robotframework_velo_cli.egg-info/dependency_links.txt +1 -0
- robotframework_velo_cli-0.1.7/src/robotframework_velo_cli.egg-info/entry_points.txt +3 -0
- robotframework_velo_cli-0.1.7/src/robotframework_velo_cli.egg-info/requires.txt +9 -0
- robotframework_velo_cli-0.1.7/src/robotframework_velo_cli.egg-info/top_level.txt +1 -0
- robotframework_velo_cli-0.1.7/src/velo/__init__.py +6 -0
- robotframework_velo_cli-0.1.7/src/velo/cli.py +29 -0
- robotframework_velo_cli-0.1.7/src/velo/constants.py +6 -0
- robotframework_velo_cli-0.1.7/src/velo/debug.py +143 -0
- robotframework_velo_cli-0.1.7/src/velo/ignore.py +41 -0
- robotframework_velo_cli-0.1.7/src/velo/py.typed +0 -0
- robotframework_velo_cli-0.1.7/src/velo/runner.py +124 -0
- robotframework_velo_cli-0.1.7/src/velo/sap_client.py +18 -0
- robotframework_velo_cli-0.1.7/src/velo/streamer.py +63 -0
- robotframework_velo_cli-0.1.7/tests/test_sap_client.py +16 -0
|
@@ -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
|