Skip to content

Commit 5d2d033

Browse files
committed
Add golang package mirroring
1 parent 3a9bbf4 commit 5d2d033

File tree

7 files changed

+56
-0
lines changed

7 files changed

+56
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module github.com/pre-commit/placeholder
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: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
import json
4+
import re
45
import subprocess
56
import urllib.request
67

@@ -33,6 +34,18 @@ def rust_get_package_versions(package_name: str) -> list[str]:
3334
return list(reversed([version['num'] for version in resp['versions']]))
3435

3536

37+
def golang_get_package_versions(package_name: str) -> list[str]:
38+
# https://pkg.go.dev/golang.org/x/mod/module#EscapePath
39+
# https://github.com/golang/mod/blob/d271cf332fd221d661d13b186b51a11d7e66ff74/module/module.go#L707
40+
escaped = re.sub(
41+
r'[A-Z]',
42+
lambda m: f'!{m.group(0).lower()}', package_name,
43+
)
44+
url = f'https://proxy.golang.org/{escaped}/@v/list'
45+
resp = urllib.request.urlopen(url).read().decode()
46+
return sorted(resp.splitlines(), key=version.parse)
47+
48+
3649
def node_get_additional_dependencies(
3750
package_name: str, package_version: str,
3851
) -> list[str]:
@@ -45,14 +58,22 @@ def rust_get_additional_dependencies(
4558
return [f'cli:{package_name}:{package_version}']
4659

4760

61+
def golang_get_additional_dependencies(
62+
package_name: str, package_version: str,
63+
) -> list[str]:
64+
return [f'{package_name}@{package_version}']
65+
66+
4867
LIST_VERSIONS = {
68+
'golang': golang_get_package_versions,
4969
'node': node_get_package_versions,
5070
'python': python_get_package_versions,
5171
'ruby': ruby_get_package_versions,
5272
'rust': rust_get_package_versions,
5373
}
5474

5575
ADDITIONAL_DEPENDENCIES = {
76+
'golang': golang_get_additional_dependencies,
5677
'node': node_get_additional_dependencies,
5778
'rust': rust_get_additional_dependencies,
5879
}

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ console_scripts =
3535
pre_commit_mirror_maker =
3636
all/.pre-commit-hooks.yaml
3737
all/.version
38+
golang/*
3839
node/.npmignore
3940
node/*
4041
python/*

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
@@ -39,3 +40,9 @@ def test_rust_get_package_version_output():
3940
ret = rust_get_package_versions('clap')
4041
assert ret
4142
assert_all_text(ret)
43+
44+
45+
def test_golang_get_package_version_output():
46+
ret = golang_get_package_versions('mvdan.cc/gofumpt')
47+
assert ret
48+
assert_all_text(ret)

tests/make_repo_test.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,24 @@ def test_rust_integration(in_git_dir):
236236
assert _cmd('git', 'log', '--oneline')
237237

238238
# TODO: test that the package is installable
239+
240+
241+
def test_golang_integration(in_git_dir):
242+
make_repo(
243+
'.',
244+
language='golang', name='mvdan.cc/gofumpt', description='',
245+
entry='gofumpt', id='gofumpt', match_key='types', match_val='go',
246+
args='-w', require_serial='false', minimum_pre_commit_version='3.0.0',
247+
)
248+
# Our files should exist
249+
assert in_git_dir.join('.version').exists()
250+
assert in_git_dir.join('.pre-commit-hooks.yaml').exists()
251+
assert in_git_dir.join('go.mod').exists()
252+
assert in_git_dir.join('main.go').exists()
253+
254+
# Should have made _some_ tags
255+
assert _cmd('git', 'tag', '-l')
256+
# Should have made _some_ commits
257+
assert _cmd('git', 'log', '--oneline')
258+
259+
# TODO: test that the package is installable

0 commit comments

Comments
 (0)