Skip to content

Commit

Permalink
feat: add go pkg support (#259)
Browse files Browse the repository at this point in the history
  • Loading branch information
yingziwu authored Mar 9, 2024
1 parent 9784e64 commit 0e0eb2c
Show file tree
Hide file tree
Showing 3 changed files with 83 additions and 0 deletions.
11 changes: 11 additions & 0 deletions docs/usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -946,6 +946,17 @@ Check `Visual Studio Code Marketplace <https://marketplace.visualstudio.com/vsco
vsmarketplace
The extension's Unique Identifier on marketplace.visualstudio.com/vscode, e.g. ``ritwickdey.LiveServer``.

Check Go packages and modules
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::

source = "go"

Check `Go packages and modules <https://pkg.go.dev/>`_ for updates.

go
The name of Go package or module, e.g. ``github.com/caddyserver/caddy/v2/cmd``.

Combine others' results
~~~~~~~~~~~~~~~~~~~~~~~
::
Expand Down
36 changes: 36 additions & 0 deletions nvchecker_source/go.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# MIT licensed
# Copyright (c) 2024 bgme <i@bgme.me>.

from lxml import html

from nvchecker.api import (
VersionResult, Entry, AsyncCache, KeyManager,
session, GetVersionError, HTTPError
)

GO_PKG_URL = 'https://pkg.go.dev/{pkg}?tab=versions'


async def get_version(
name: str, conf: Entry, *,
cache: AsyncCache, keymanager: KeyManager,
**kwargs,
) -> VersionResult:
key = tuple(sorted(conf.items()))
return await cache.get(key, get_version_impl)


async def get_version_impl(info) -> VersionResult:
conf = dict(info)
pkg_name = conf.get('go')

url = GO_PKG_URL.format(pkg=pkg_name)
res = await session.get(url)
doc = html.fromstring(res.body.decode())

elements = doc.xpath("//div[@class='Version-tag']/a/text()")
try:
version = elements[0]
return version
except IndexError:
raise GetVersionError("parse error", pkg_name=pkg_name)
36 changes: 36 additions & 0 deletions tests/test_go.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# MIT licensed
# Copyright (c) 2024 bgme <i@bgme.me>.

import pytest

from nvchecker.api import HTTPError

lxml_available = True
try:
import lxml
except ImportError:
lxml_available = False

pytestmark = [
pytest.mark.asyncio(scope="session"),
pytest.mark.needs_net,
pytest.mark.skipif(not lxml_available, reason="needs lxml")
]


async def test_go(get_version):
assert await get_version("one version", {
"source": "go",
"go": "github.com/caddyserver/replace-response",
}) == "v0.0.0-20231221003037-a85d4ddc11d6"

assert await get_version("multiple version", {
"source": "go",
"go": "github.com/corazawaf/coraza-caddy",
}) == "v1.2.2"

with pytest.raises(HTTPError):
await get_version("not found", {
"source": "go",
"go": "github.com/asdas/sadfasdf",
})

0 comments on commit 0e0eb2c

Please sign in to comment.