* chore(release): unify package versions * fix(release): harden version synchronization
112 lines
3.7 KiB
Python
112 lines
3.7 KiB
Python
import json
|
|
import sys
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
|
|
from version import PLATFORM_PACKAGES, check_versions, set_versions
|
|
|
|
|
|
class VersionTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.temporary = tempfile.TemporaryDirectory()
|
|
self.root = Path(self.temporary.name)
|
|
(self.root / "napi").mkdir()
|
|
(self.root / "site").mkdir()
|
|
(self.root / "wasm").mkdir()
|
|
|
|
self._write_manifest("Cargo.toml", "package", "0.1.0")
|
|
self._write_manifest("pyproject.toml", "project", "0.1.0")
|
|
self._write_manifest("napi/Cargo.toml", "package", "0.1.0")
|
|
self._write_manifest("wasm/Cargo.toml", "package", "0.1.0")
|
|
|
|
package = {
|
|
"name": "@firecrawl/pdf-inspector",
|
|
"version": "0.1.0",
|
|
"optionalDependencies": {
|
|
dependency: "0.1.0" for dependency in PLATFORM_PACKAGES
|
|
},
|
|
}
|
|
(self.root / "napi/package.json").write_text(
|
|
json.dumps(package), encoding="utf-8"
|
|
)
|
|
(self.root / "napi/bun.lock").write_text(
|
|
"\n".join(
|
|
f' "{dependency}": "0.1.0",'
|
|
for dependency in PLATFORM_PACKAGES
|
|
)
|
|
+ "\n",
|
|
encoding="utf-8",
|
|
)
|
|
(self.root / "site/index.html").write_text(
|
|
'https://cdn.jsdelivr.net/npm/@firecrawl/pdf-inspector-wasm@0.1.0/'
|
|
'pdf_inspector_wasm.js\n',
|
|
encoding="utf-8",
|
|
)
|
|
self._write_lock(
|
|
"napi/Cargo.lock", ("pdf-inspector", "pdf-inspector-napi")
|
|
)
|
|
self._write_lock(
|
|
"wasm/Cargo.lock", ("pdf-inspector", "pdf-inspector-wasm")
|
|
)
|
|
|
|
def tearDown(self):
|
|
self.temporary.cleanup()
|
|
|
|
def _write_manifest(self, relative, section, version):
|
|
(self.root / relative).write_text(
|
|
f'[{section}]\nname = "fixture"\nversion = "{version}"\n',
|
|
encoding="utf-8",
|
|
)
|
|
|
|
def _write_lock(self, relative, packages):
|
|
content = "\n".join(
|
|
f'[[package]]\nname = "{package}"\nversion = "0.1.0"\n'
|
|
for package in packages
|
|
)
|
|
(self.root / relative).write_text(content, encoding="utf-8")
|
|
|
|
def test_updates_every_version_location(self):
|
|
set_versions("1.14.0", self.root)
|
|
|
|
self.assertEqual(check_versions(self.root), "1.14.0")
|
|
|
|
def test_reports_a_divergent_package(self):
|
|
self._write_manifest("wasm/Cargo.toml", "package", "0.2.0")
|
|
|
|
with self.assertRaisesRegex(ValueError, "WASM package: 0.2.0"):
|
|
check_versions(self.root)
|
|
|
|
def test_rejects_an_invalid_version(self):
|
|
with self.assertRaisesRegex(ValueError, "Invalid semantic version"):
|
|
set_versions("next", self.root)
|
|
|
|
def test_rejects_numeric_prerelease_with_leading_zero(self):
|
|
before = (self.root / "Cargo.toml").read_text(encoding="utf-8")
|
|
|
|
with self.assertRaisesRegex(ValueError, "Invalid semantic version"):
|
|
set_versions("1.2.3-01", self.root)
|
|
|
|
self.assertEqual(
|
|
(self.root / "Cargo.toml").read_text(encoding="utf-8"), before
|
|
)
|
|
|
|
def test_preflight_failure_does_not_partially_update(self):
|
|
before = (self.root / "Cargo.toml").read_text(encoding="utf-8")
|
|
(self.root / "site/index.html").write_text(
|
|
"missing module URL\n", encoding="utf-8"
|
|
)
|
|
|
|
with self.assertRaisesRegex(ValueError, "Missing pinned WASM package URL"):
|
|
set_versions("1.14.0", self.root)
|
|
|
|
self.assertEqual(
|
|
(self.root / "Cargo.toml").read_text(encoding="utf-8"), before
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|