Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions pre_commit_mirror_maker/golang/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module github.com/pre-commit/placeholder

go 1.19
Empty file.
3 changes: 3 additions & 0 deletions pre_commit_mirror_maker/golang/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package main

func main() {{}}
21 changes: 21 additions & 0 deletions pre_commit_mirror_maker/languages.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from __future__ import annotations

import json
import re
import subprocess
import urllib.request

Expand Down Expand Up @@ -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]:
Expand All @@ -45,14 +58,22 @@ 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,
'rust': rust_get_package_versions,
}

ADDITIONAL_DEPENDENCIES = {
'golang': golang_get_additional_dependencies,
'node': node_get_additional_dependencies,
'rust': rust_get_additional_dependencies,
}
1 change: 1 addition & 0 deletions setup.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ console_scripts =
pre_commit_mirror_maker =
all/.pre-commit-hooks.yaml
all/.version
golang/*
node/.npmignore
node/*
python/*
Expand Down
7 changes: 7 additions & 0 deletions tests/languages_test.py
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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)
21 changes: 21 additions & 0 deletions tests/make_repo_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -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