diff --git a/pre_commit_mirror_maker/golang/go.mod b/pre_commit_mirror_maker/golang/go.mod new file mode 100644 index 0000000..367b0ce --- /dev/null +++ b/pre_commit_mirror_maker/golang/go.mod @@ -0,0 +1,3 @@ +module github.com/pre-commit/placeholder + +go 1.19 diff --git a/pre_commit_mirror_maker/golang/go.sum b/pre_commit_mirror_maker/golang/go.sum new file mode 100644 index 0000000..e69de29 diff --git a/pre_commit_mirror_maker/golang/main.go b/pre_commit_mirror_maker/golang/main.go new file mode 100644 index 0000000..804b4cb --- /dev/null +++ b/pre_commit_mirror_maker/golang/main.go @@ -0,0 +1,3 @@ +package main + +func main() {{}} diff --git a/pre_commit_mirror_maker/languages.py b/pre_commit_mirror_maker/languages.py index ae86d2b..283012f 100644 --- a/pre_commit_mirror_maker/languages.py +++ b/pre_commit_mirror_maker/languages.py @@ -1,6 +1,7 @@ from __future__ import annotations import json +import re import subprocess import urllib.request @@ -33,6 +34,18 @@ def rust_get_package_versions(package_name: str) -> list[str]: return list(reversed([version['num'] for version in resp['versions']])) +def golang_get_package_versions(package_name: str) -> list[str]: + # https://pkg.go.dev/golang.org/x/mod/module#EscapePath + # https://github.com/golang/mod/blob/d271cf332fd221d661d13b186b51a11d7e66ff74/module/module.go#L707 + escaped = re.sub( + r'[A-Z]', + lambda m: f'!{m.group(0).lower()}', package_name, + ) + url = f'https://proxy.golang.org/{escaped}/@v/list' + resp = urllib.request.urlopen(url).read().decode() + return sorted(resp.splitlines(), key=version.parse) + + def node_get_additional_dependencies( package_name: str, package_version: str, ) -> list[str]: @@ -45,7 +58,14 @@ def rust_get_additional_dependencies( return [f'cli:{package_name}:{package_version}'] +def golang_get_additional_dependencies( + package_name: str, package_version: str, +) -> list[str]: + return [f'{package_name}@{package_version}'] + + LIST_VERSIONS = { + 'golang': golang_get_package_versions, 'node': node_get_package_versions, 'python': python_get_package_versions, 'ruby': ruby_get_package_versions, @@ -53,6 +73,7 @@ def rust_get_additional_dependencies( } ADDITIONAL_DEPENDENCIES = { + 'golang': golang_get_additional_dependencies, 'node': node_get_additional_dependencies, 'rust': rust_get_additional_dependencies, } diff --git a/setup.cfg b/setup.cfg index 3b28d4d..2b7d75d 100644 --- a/setup.cfg +++ b/setup.cfg @@ -35,6 +35,7 @@ console_scripts = pre_commit_mirror_maker = all/.pre-commit-hooks.yaml all/.version + golang/* node/.npmignore node/* python/* diff --git a/tests/languages_test.py b/tests/languages_test.py index 07c59d8..96e2a83 100644 --- a/tests/languages_test.py +++ b/tests/languages_test.py @@ -1,5 +1,6 @@ from __future__ import annotations +from pre_commit_mirror_maker.languages import golang_get_package_versions from pre_commit_mirror_maker.languages import node_get_package_versions from pre_commit_mirror_maker.languages import python_get_package_versions from pre_commit_mirror_maker.languages import ruby_get_package_versions @@ -39,3 +40,9 @@ def test_rust_get_package_version_output(): ret = rust_get_package_versions('clap') assert ret assert_all_text(ret) + + +def test_golang_get_package_version_output(): + ret = golang_get_package_versions('mvdan.cc/gofumpt') + assert ret + assert_all_text(ret) diff --git a/tests/make_repo_test.py b/tests/make_repo_test.py index e874ef6..2927ac8 100644 --- a/tests/make_repo_test.py +++ b/tests/make_repo_test.py @@ -236,3 +236,24 @@ def test_rust_integration(in_git_dir): assert _cmd('git', 'log', '--oneline') # TODO: test that the package is installable + + +def test_golang_integration(in_git_dir): + make_repo( + '.', + language='golang', name='mvdan.cc/gofumpt', description='', + entry='gofumpt', id='gofumpt', match_key='types', match_val='go', + args='-w', require_serial='false', minimum_pre_commit_version='0', + ) + # Our files should exist + assert in_git_dir.join('.version').exists() + assert in_git_dir.join('.pre-commit-hooks.yaml').exists() + assert in_git_dir.join('go.mod').exists() + assert in_git_dir.join('main.go').exists() + + # Should have made _some_ tags + assert _cmd('git', 'tag', '-l') + # Should have made _some_ commits + assert _cmd('git', 'log', '--oneline') + + # TODO: test that the package is installable