Skip to content

Commit a6f45e0

Browse files
committed
add golang package mirroring
1 parent 8621d2b commit a6f45e0

File tree

8 files changed

+55
-1
lines changed

8 files changed

+55
-1
lines changed

pre_commit_mirror_maker/golang/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/pre-commit/dummy
2+
3+
go 1.19

pre_commit_mirror_maker/golang/go.sum

Whitespace-only changes.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package main
2+
3+
func main() {{}}

pre_commit_mirror_maker/languages.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import subprocess
55
import urllib.request
66

7+
import lxml.html
78
from packaging import version
89

910

@@ -31,6 +32,21 @@ def rust_get_package_versions(package_name: str) -> list[str]:
3132
return list(reversed([version['num'] for version in resp['versions']]))
3233

3334

35+
def golang_get_package_versions(package_name: str) -> list[str]:
36+
url = f'https://pkg.go.dev/{package_name}?tab=versions'
37+
resp = urllib.request.urlopen(url)
38+
versions = lxml.html.parse(resp).xpath(
39+
"//a[@class='js-versionLink']//text()",
40+
)
41+
return [str(version) for version in versions[::-1]]
42+
43+
44+
def golang_get_additional_dependencies(
45+
package_name: str, package_version: str,
46+
) -> list[str]:
47+
return [f'{package_name}@{package_version}']
48+
49+
3450
def node_get_additional_dependencies(
3551
package_name: str, package_version: str,
3652
) -> list[str]:
@@ -48,9 +64,11 @@ def rust_get_additional_dependencies(
4864
'python': python_get_package_versions,
4965
'ruby': ruby_get_package_versions,
5066
'rust': rust_get_package_versions,
67+
'golang': golang_get_package_versions,
5168
}
5269

5370
ADDITIONAL_DEPENDENCIES = {
5471
'node': node_get_additional_dependencies,
5572
'rust': rust_get_additional_dependencies,
73+
'golang': golang_get_additional_dependencies,
5674
}

pre_commit_mirror_maker/make_repo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def git(*cmd: str) -> None:
6666
# Commit and tag
6767
git('add', '.')
6868
git('commit', '-m', f'Mirror: {version}')
69-
git('tag', f'v{version}')
69+
git('tag', f'v{version.lstrip("v")}')
7070

7171

7272
def make_repo(repo: str, *, language: str, name: str, **fmt_vars: str) -> None:

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ classifiers =
2020
[options]
2121
packages = find:
2222
install_requires =
23+
lxml
2324
packaging
2425
python_requires = >=3.7
2526

tests/languages_test.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from __future__ import annotations
22

3+
from pre_commit_mirror_maker.languages import golang_get_package_versions
34
from pre_commit_mirror_maker.languages import node_get_package_versions
45
from pre_commit_mirror_maker.languages import python_get_package_versions
56
from pre_commit_mirror_maker.languages import ruby_get_package_versions
@@ -33,3 +34,9 @@ def test_rust_get_package_version_output():
3334
ret = rust_get_package_versions('clap')
3435
assert ret
3536
assert_all_text(ret)
37+
38+
39+
def test_golang_get_package_version_output():
40+
ret = golang_get_package_versions('golang.org/x/tools/cmd/goimports')
41+
assert ret
42+
assert_all_text(ret)

tests/make_repo_test.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -249,3 +249,25 @@ def test_rust_integration(in_git_dir):
249249
assert _cmd('git', 'log', '--oneline')
250250

251251
# TODO: test that the package is installable
252+
253+
254+
def test_golang_integration(in_git_dir):
255+
make_repo(
256+
'.',
257+
language='golang', name='mvdan.cc/gofumpt', description='',
258+
entry='gofumpt', id='gofumpt', match_key='types',
259+
match_val='go', args='', require_serial='false',
260+
minimum_pre_commit_version='3.0.0',
261+
)
262+
# Our files should exist
263+
assert in_git_dir.join('.version').exists()
264+
assert in_git_dir.join('.pre-commit-hooks.yaml').exists()
265+
assert in_git_dir.join('go.mod').exists()
266+
assert in_git_dir.join('main.go').exists()
267+
268+
# Should have made _some_ tags
269+
assert _cmd('git', 'tag', '-l')
270+
# Should have made _some_ commits
271+
assert _cmd('git', 'log', '--oneline')
272+
273+
# TODO: test that the package is installable

0 commit comments

Comments
 (0)