Skip to content

Commit

Permalink
urlchecker: Extract version from deb for rotating url
Browse files Browse the repository at this point in the history
  • Loading branch information
zhsj committed Dec 26, 2024
1 parent 5892302 commit 15a2907
Show file tree
Hide file tree
Showing 5 changed files with 69 additions and 0 deletions.
8 changes: 8 additions & 0 deletions src/checkers/urlchecker.py
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,14 @@ async def check(self, external_data: ExternalBase):
version_string = await utils.extract_appimage_version(
tmpfile,
)
if url.endswith(".deb"):
with tempfile.NamedTemporaryFile("w+b") as tmpfile:
new_version = await utils.get_extra_data_info_from_url(
url, session=self.session, dest_io=tmpfile
)
version_string = utils.extract_deb_version(
tmpfile,
)
else:
new_version = await utils.get_extra_data_info_from_url(
url, session=self.session
Expand Down
8 changes: 8 additions & 0 deletions src/lib/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@
# with this program; if not, write to the Free Software Foundation, Inc.,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

import apt_inst
import apt_pkg
import datetime as dt
import zoneinfo
import json
Expand Down Expand Up @@ -449,6 +451,12 @@ async def extract_appimage_version(appimg_io: t.IO):
return kf.get_string(GLib.KEY_FILE_DESKTOP_GROUP, "X-AppImage-Version")


def extract_deb_version(deb_io: t.IO):
assert deb_io.name
control = apt_inst.DebFile(deb_io.name).control.extractdata("control")
return apt_pkg.TagSection(control).get("Version")


_GITHUB_URL_PATTERN = re.compile(
r"""
^[email protected]:
Expand Down
9 changes: 9 additions & 0 deletions tests/com.google.Chrome.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
app-id: com.google.Chrome
modules:
- name: chrome
sources:
- type: extra-data
filename: chrome.deb
url: https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
sha256: "0000000000000000000000000000000000000000000000000000000000000000"
size: 0
File renamed without changes.
44 changes: 44 additions & 0 deletions tests/test_urlchecker_deb.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import unittest
import os

from src.manifest import ManifestChecker
from src.lib.utils import init_logging
from src.lib.checksums import MultiDigest

TEST_MANIFEST = os.path.join(os.path.dirname(__file__), "com.tencent.WeChat.yaml")


class TestURLChecker(unittest.IsolatedAsyncioTestCase):
def setUp(self):
init_logging()

async def test_check(self):
checker = ManifestChecker(TEST_MANIFEST)
ext_data = await checker.check()

data = self._find_by_filename(ext_data, "wechat.deb")
self.assertIsNotNone(data)
self.assertEqual(data.filename, "wechat.deb")
self.assertIsNotNone(data.new_version)
self.assertIsInstance(data.new_version.size, int)
self.assertGreater(data.new_version.size, 0)
self.assertIsNotNone(data.new_version.checksum)
self.assertIsInstance(data.new_version.checksum, MultiDigest)
self.assertNotEqual(
data.new_version.checksum,
MultiDigest(
sha256="0000000000000000000000000000000000000000000000000000000000000000" # noqa: E501
),
)
self.assertIsNotNone(data.new_version.version)

def _find_by_filename(self, ext_data, filename):
for data in ext_data:
if data.filename == filename:
return data
else:
return None


if __name__ == "__main__":
unittest.main()

0 comments on commit 15a2907

Please sign in to comment.