-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_release.py
More file actions
86 lines (78 loc) · 2.82 KB
/
Copy pathtest_release.py
File metadata and controls
86 lines (78 loc) · 2.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
from pathlib import Path
import pytest
from f1sql.contracts import BuildTarget
from f1sql.release import (
ReleaseExistsError,
ReleasePackager,
calculate_release_target,
verify_release,
)
def test_release_bundle_is_verifiable_and_immutable(tmp_path: Path) -> None:
packager = ReleasePackager(tmp_path / "releases")
target = BuildTarget(2024, 1)
plan = packager.build(
target,
{
"database.bak": b"fixture-backup",
"quality-report.json": b'{"passed":true}\n',
"LICENSE-DATA": b"CC BY-NC-SA 4.0",
"NOTICE": b"notice",
"ATTRIBUTION.md": b"attribution",
"release-notes.md": b"notes",
},
{
"schema_version": "2.0.0",
"core_repository_sha": "a" * 40,
"database_repository_sha": "b" * 40,
"source_versions": {"fastf1": "3.8.1"},
},
)
assert plan.version == "2024.1.0"
assets = verify_release(plan.output_dir)
assert any(asset.name == "manifest.json" for asset in assets)
assert (plan.output_dir / f"f1-sql-{target.version}.zip").exists()
with pytest.raises(ReleaseExistsError):
packager.build(
target,
{
"database.bak": b"changed",
"quality-report.json": b"{}",
"LICENSE-DATA": b"license",
"NOTICE": b"notice",
"ATTRIBUTION.md": b"attribution",
"release-notes.md": b"notes",
},
{
"schema_version": "2.0.0",
"core_repository_sha": "a" * 40,
"database_repository_sha": "b" * 40,
"source_versions": {"fastf1": "3.8.1"},
},
)
def test_release_dry_run_has_no_publish_side_effect(tmp_path: Path) -> None:
output = tmp_path / "releases"
plan = ReleasePackager(output).build(
BuildTarget(2024, 2),
{
"database.bak": b"fixture",
"quality-report.json": b"{}",
"LICENSE-DATA": b"license",
"NOTICE": b"notice",
"ATTRIBUTION.md": b"attribution",
"release-notes.md": b"notes",
},
{
"schema_version": "2.0.0",
"core_repository_sha": "a" * 40,
"database_repository_sha": "b" * 40,
"source_versions": {"fastf1": "3.8.1"},
},
dry_run=True,
)
assert plan.dry_run is True
assert not plan.output_dir.exists()
def test_release_revision_is_immutable_and_correction_aware() -> None:
assert calculate_release_target(2024, 1, "new", {}).version == "2024.1.0"
released = {"2024.1.0": "old", "2024.1.1": "older"}
assert calculate_release_target(2024, 1, "new", released).version == "2024.1.2"
assert calculate_release_target(2024, 1, "old", released) is None