podojo-cli 0.4.3__tar.gz → 0.4.4__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.
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/.github/workflows/publish.yml +4 -2
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/CHANGELOG.md +6 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/PKG-INFO +1 -1
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/pyproject.toml +1 -1
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/usertests.py +27 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/tests/test_usertests.py +9 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/uv.lock +1 -1
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/.gitignore +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/CLAUDE.md +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/README.md +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/__init__.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/client.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/__init__.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/auth.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/gdrive.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/projects.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/showreel.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/transcripts.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/commands/videos.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/config.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/gdrive/__init__.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/gdrive/list.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/gdrive/upload.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/main.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/video/__init__.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/src/podojo_cli/video/showreel.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/tests/conftest.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/tests/test_auth.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/tests/test_gdrive.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/tests/test_projects.py +0 -0
- {podojo_cli-0.4.3 → podojo_cli-0.4.4}/tests/test_showreel.py +0 -0
|
@@ -14,10 +14,12 @@ jobs:
|
|
|
14
14
|
id-token: write
|
|
15
15
|
attestations: write
|
|
16
16
|
steps:
|
|
17
|
-
- uses: actions/checkout@
|
|
17
|
+
- uses: actions/checkout@v6
|
|
18
18
|
|
|
19
|
-
- uses: astral-sh/setup-uv@
|
|
19
|
+
- uses: astral-sh/setup-uv@v8.0.0
|
|
20
20
|
|
|
21
21
|
- run: uv build
|
|
22
22
|
|
|
23
23
|
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
24
|
+
with:
|
|
25
|
+
skip-existing: true
|
|
@@ -5,6 +5,12 @@ All notable changes to the Podojo CLI will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org).
|
|
7
7
|
|
|
8
|
+
## [0.4.4] - 2026-04-19
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- `usertests snippet` command prints the recorder script to embed in self-hosted prototypes
|
|
12
|
+
- `usertests create` now hints at the snippet command so users know how to enable screen recording
|
|
13
|
+
|
|
8
14
|
## [0.4.3] - 2026-04-14
|
|
9
15
|
|
|
10
16
|
### Added
|
|
@@ -16,6 +16,22 @@ VALID_STEP_TYPES = {"screen", "prototype"}
|
|
|
16
16
|
VALID_STEP_VARIANTS = {"question", "task", "intro", "feedback", "instruction"}
|
|
17
17
|
REQUIRED_STEP_FIELDS = ["type", "title"]
|
|
18
18
|
|
|
19
|
+
RECORDER_SNIPPET = """\
|
|
20
|
+
<script src="https://usertests.podojo.com/player.js"></script>
|
|
21
|
+
<script>
|
|
22
|
+
if (typeof rrweb === "undefined") {
|
|
23
|
+
console.error("[rrweb] failed to load — screen recording disabled");
|
|
24
|
+
} else {
|
|
25
|
+
rrweb.record({
|
|
26
|
+
emit(event) {
|
|
27
|
+
window.parent.postMessage({ type: "rrweb-event", event: event }, "*");
|
|
28
|
+
},
|
|
29
|
+
checkoutEveryNms: 30000,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
33
|
+
"""
|
|
34
|
+
|
|
19
35
|
EXAMPLE_YAML = """\
|
|
20
36
|
# Podojo Unmoderated User Test Configuration
|
|
21
37
|
#
|
|
@@ -257,6 +273,11 @@ def create_usertest(
|
|
|
257
273
|
if group:
|
|
258
274
|
console.print(f" Preview: https://usertests.podojo.com/preview/{group}/{usertest_id}")
|
|
259
275
|
console.print(f" Live: https://usertests.podojo.com/{group}?test={usertest_id}")
|
|
276
|
+
console.print(
|
|
277
|
+
"\n[dim]If your prototype is self-hosted, add the recorder script to its "
|
|
278
|
+
"[bold]<head>[/bold] to enable screen recording.\n"
|
|
279
|
+
"Run [bold]podojo usertests snippet[/bold] to print it.[/dim]"
|
|
280
|
+
)
|
|
260
281
|
|
|
261
282
|
|
|
262
283
|
@app.command("update")
|
|
@@ -323,3 +344,9 @@ def validate(
|
|
|
323
344
|
def example():
|
|
324
345
|
"""Print an example user test YAML template."""
|
|
325
346
|
print(EXAMPLE_YAML)
|
|
347
|
+
|
|
348
|
+
|
|
349
|
+
@app.command("snippet")
|
|
350
|
+
def snippet():
|
|
351
|
+
"""Print the recorder script to embed in self-hosted prototypes."""
|
|
352
|
+
print(RECORDER_SNIPPET)
|
|
@@ -126,6 +126,7 @@ def test_create_usertest(runner, httpx_mock, tmp_path):
|
|
|
126
126
|
assert "test-usertest-1" in result.output
|
|
127
127
|
assert "https://usertests.podojo.com/preview/test-group/test-usertest-1" in result.output
|
|
128
128
|
assert "https://usertests.podojo.com/test-group?test=test-usertest-1" in result.output
|
|
129
|
+
assert "podojo usertests snippet" in result.output
|
|
129
130
|
|
|
130
131
|
|
|
131
132
|
def test_create_usertest_file_not_found(runner):
|
|
@@ -280,3 +281,11 @@ def test_example(runner):
|
|
|
280
281
|
assert "steps:" in result.output
|
|
281
282
|
assert "prototype" in result.output
|
|
282
283
|
assert "screen" in result.output
|
|
284
|
+
|
|
285
|
+
|
|
286
|
+
def test_snippet(runner):
|
|
287
|
+
result = runner.invoke(app, ["usertests", "snippet"])
|
|
288
|
+
|
|
289
|
+
assert result.exit_code == 0
|
|
290
|
+
assert "player.js" in result.output
|
|
291
|
+
assert "rrweb.record" in result.output
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|