fix: 使用固定便携包清单名称 (#102)
This commit is contained in:
@@ -17,7 +17,7 @@ _VERSION_PATTERN = re.compile(
|
|||||||
|
|
||||||
|
|
||||||
def versioned_manifest_file_name(version: str) -> str:
|
def versioned_manifest_file_name(version: str) -> str:
|
||||||
"""返回版本化清单文件名,例如 ``autobuy_manifest_0.2.2.json``。"""
|
"""返回版本化清单文件名,例如 ``autobuy_manifest_0.1.0.json``。"""
|
||||||
|
|
||||||
normalized = version.strip()
|
normalized = version.strip()
|
||||||
if _VERSION_PATTERN.fullmatch(normalized) is None:
|
if _VERSION_PATTERN.fullmatch(normalized) is None:
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ VSVersionInfo(
|
|||||||
$manifestPath = Join-Path $releaseRoot "autobuy_manifest.json"
|
$manifestPath = Join-Path $releaseRoot "autobuy_manifest.json"
|
||||||
Invoke-Checked -FailureMessage "Failed to generate the release manifest" -Command {
|
Invoke-Checked -FailureMessage "Failed to generate the release manifest" -Command {
|
||||||
& $buildPython (Join-Path $clientRoot "build_tools\release_manifest.py") `
|
& $buildPython (Join-Path $clientRoot "build_tools\release_manifest.py") `
|
||||||
--version $version --update $updateZip --portable $portableZip `
|
--version $version --update $updateZip --portable $portableLatestZip `
|
||||||
--output $manifestPath
|
--output $manifestPath
|
||||||
}
|
}
|
||||||
$versionedManifestPath = Join-Path $releaseRoot "autobuy_manifest_$version.json"
|
$versionedManifestPath = Join-Path $releaseRoot "autobuy_manifest_$version.json"
|
||||||
|
|||||||
@@ -3,4 +3,4 @@
|
|||||||
发布脚本和程序界面需要版本号时都从这里读取,避免多个文件各写一份。
|
发布脚本和程序界面需要版本号时都从这里读取,避免多个文件各写一份。
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__version__ = "0.2.2"
|
__version__ = "0.1.0"
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ class ReleaseManifestTest(unittest.TestCase):
|
|||||||
with tempfile.TemporaryDirectory() as directory:
|
with tempfile.TemporaryDirectory() as directory:
|
||||||
root = Path(directory)
|
root = Path(directory)
|
||||||
update_zip = root / "CMAutoBuy_0.1.0.zip"
|
update_zip = root / "CMAutoBuy_0.1.0.zip"
|
||||||
portable_zip = root / "自动采集采购工具_0.1.0.zip"
|
portable_zip = root / "自动采集采购工具.zip"
|
||||||
update_zip.write_bytes(b"update")
|
update_zip.write_bytes(b"update")
|
||||||
portable_zip.write_bytes(b"portable")
|
portable_zip.write_bytes(b"portable")
|
||||||
output = root / MANIFEST_FILE_NAME
|
output = root / MANIFEST_FILE_NAME
|
||||||
@@ -160,6 +160,7 @@ class ReleaseManifestTest(unittest.TestCase):
|
|||||||
manifest["update"]["sha256"],
|
manifest["update"]["sha256"],
|
||||||
hashlib.sha256(b"update").hexdigest(),
|
hashlib.sha256(b"update").hexdigest(),
|
||||||
)
|
)
|
||||||
|
self.assertEqual(manifest["update"]["file"], "CMAutoBuy_0.1.0.zip")
|
||||||
self.assertEqual(manifest["portable"]["file"], portable_zip.name)
|
self.assertEqual(manifest["portable"]["file"], portable_zip.name)
|
||||||
|
|
||||||
def test_versioned_manifest_name_is_stable_and_validated(self):
|
def test_versioned_manifest_name_is_stable_and_validated(self):
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ class UpdateServiceTest(unittest.TestCase):
|
|||||||
health = json.loads(
|
health = json.loads(
|
||||||
(self.update_directory / "healthy.json").read_text(encoding="utf-8")
|
(self.update_directory / "healthy.json").read_text(encoding="utf-8")
|
||||||
)
|
)
|
||||||
self.assertEqual(health["version"], "0.2.2")
|
self.assertEqual(health["version"], "0.1.0")
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ class FakeCredentialStore:
|
|||||||
|
|
||||||
class FakeUpdateService:
|
class FakeUpdateService:
|
||||||
def __init__(self, result=None, delay=0.0, download_error=None):
|
def __init__(self, result=None, delay=0.0, download_error=None):
|
||||||
self.result = result or UpdateCheckResult("0.2.2", "0.2.2", False)
|
self.result = result or UpdateCheckResult("0.1.0", "0.1.0", False)
|
||||||
self.delay = delay
|
self.delay = delay
|
||||||
self.download_error = download_error
|
self.download_error = download_error
|
||||||
self.check_count = 0
|
self.check_count = 0
|
||||||
@@ -58,7 +58,7 @@ class FakeUpdateService:
|
|||||||
def check(
|
def check(
|
||||||
self,
|
self,
|
||||||
manifest_url,
|
manifest_url,
|
||||||
current_version="0.2.2",
|
current_version="0.1.0",
|
||||||
is_cancelled=None,
|
is_cancelled=None,
|
||||||
credentials=None,
|
credentials=None,
|
||||||
):
|
):
|
||||||
@@ -142,7 +142,7 @@ class UpdateUiEventTest(unittest.TestCase):
|
|||||||
def test_update_card_uses_safe_defaults_and_password_input(self):
|
def test_update_card_uses_safe_defaults_and_password_input(self):
|
||||||
page = self._page(FakeUpdateService())
|
page = self._page(FakeUpdateService())
|
||||||
|
|
||||||
self.assertEqual(page.currentVersionLabel.text(), "0.2.2")
|
self.assertEqual(page.currentVersionLabel.text(), "0.1.0")
|
||||||
self.assertEqual(
|
self.assertEqual(
|
||||||
page.updateManifestUrlInput.text(), DEFAULT_UPDATE_MANIFEST_URL
|
page.updateManifestUrlInput.text(), DEFAULT_UPDATE_MANIFEST_URL
|
||||||
)
|
)
|
||||||
@@ -313,7 +313,7 @@ class UpdateUiEventTest(unittest.TestCase):
|
|||||||
sha256="0" * 64,
|
sha256="0" * 64,
|
||||||
)
|
)
|
||||||
service = FakeUpdateService(
|
service = FakeUpdateService(
|
||||||
UpdateCheckResult("0.2.2", "0.3.0", True, update)
|
UpdateCheckResult("0.1.0", "0.3.0", True, update)
|
||||||
)
|
)
|
||||||
page = self._page(service)
|
page = self._page(service)
|
||||||
self._save_configuration(page)
|
self._save_configuration(page)
|
||||||
|
|||||||
@@ -218,8 +218,9 @@ CMAutoBuy/ 整个文件夹拷到任何机器都能用
|
|||||||
- `autobuy_manifest.json`:Client 固定读取的在线更新清单;
|
- `autobuy_manifest.json`:Client 固定读取的在线更新清单;
|
||||||
- `autobuy_manifest_<版本号>.json`:与固定清单内容完全相同的归档副本。
|
- `autobuy_manifest_<版本号>.json`:与固定清单内容完全相同的归档副本。
|
||||||
|
|
||||||
清单中的更新包和便携包都引用带版本号的文件名,并记录版本、字节大小和 SHA256;
|
清单中的更新包引用带版本号的文件名,便携包固定引用
|
||||||
SHA256 用于发现下载损坏,不等同于发布者身份认证。
|
`自动采集采购工具.zip`,并记录版本、字节大小和 SHA256;SHA256 用于发现下载
|
||||||
|
损坏,不等同于发布者身份认证。
|
||||||
|
|
||||||
**在线更新:**设置页默认显示已确认的发布清单地址和账号,密码由操作人员首次
|
**在线更新:**设置页默认显示已确认的发布清单地址和账号,密码由操作人员首次
|
||||||
填写并保存到 Windows 凭据管理器;URL 和账号作为非敏感设置保存在 SQLite,密码
|
填写并保存到 Windows 凭据管理器;URL 和账号作为非敏感设置保存在 SQLite,密码
|
||||||
|
|||||||
Reference in New Issue
Block a user