Sign in

Search issue titles and bodies, change requests and comments. Private repositories you cannot read are not included.

vole
Clone

Read only, no credentials:

https://rodent.software/git/vole.git

Write over SSH with a registered key:

git clone ssh://git@0.0.0.0:2222/vole.git

A free and open-source forge that lives in your Git repo.

Publish repositories as Go modules and move the module path to rodent.software

d37d301fd4881ee37855387377db5a7aed843017 · Keenan Nemetz · 17h ago · parent 1c363d53

Publish repositories as Go modules and move the module path to rodent.software

The module named a GitHub repository that does not exist, and a module path
under the forge could not be fetched anyway: the go command resolves an import
path by asking it for a go-import tag first, and the forge served only pages.

Answer the <host>/<repository> discovery probe from the catch-all route with the
repository's tag, naming its Git transport and that prefix, so a public
repository is importable with no vanity service in front of the instance. Only
a repository an anonymous reader can read answers: the tag is fetched without
credentials, so a tag for a private repository would confirm its existence to
anyone who guessed the name. The prefix host comes from public_url, never the
request's Host header, for the same reason the clone URL does.

With the path resolvable, rename the module to rodent.software/vole: imports,
the build line in the getting-started guide, and the packaged units and
metadata follow it. docs/go-modules.md explains the lookup, what the instance
must have, and why a repository named after a route cannot claim the prefix.

server/integration_test.go +11−11

@@ -25,16 +25,16 @@ import (
25 25
26 26 "golang.org/x/crypto/ssh"
27 27
28 "github.com/rodent-software/vole/ci"
29 "github.com/rodent-software/vole/ci/runs"
30 "github.com/rodent-software/vole/core/git"
31 "github.com/rodent-software/vole/forge/access"
32 "github.com/rodent-software/vole/forge/config"
33 "github.com/rodent-software/vole/forge/identity"
34 "github.com/rodent-software/vole/forge/index"
35 "github.com/rodent-software/vole/forge/repo"
36 "github.com/rodent-software/vole/metadata"
37 "github.com/rodent-software/vole/server"
28 "rodent.software/vole/ci"
29 "rodent.software/vole/ci/runs"
30 "rodent.software/vole/core/git"
31 "rodent.software/vole/forge/access"
32 "rodent.software/vole/forge/config"
33 "rodent.software/vole/forge/identity"
34 "rodent.software/vole/forge/index"
35 "rodent.software/vole/forge/repo"
36 "rodent.software/vole/metadata"
37 "rodent.software/vole/server"
38 38 )
39 39
40 40 // binPath is the binary under test, built once by TestMain. It is read by every test
@@ -174,7 +174,7 @@ func TestMain(m *testing.M) {
174 174 }
175 175 binPath = filepath.Join(dir, "vole")
176 176 args := append([]string{"build"}, binaryBuildArgs()...)
177 args = append(args, "-o", binPath, "github.com/rodent-software/vole/cmd/vole")
177 args = append(args, "-o", binPath, "rodent.software/vole/cmd/vole")
178 178 build := exec.Command("go", args...)
179 179 build.Stdout, build.Stderr = os.Stdout, os.Stderr
180 180 if err := build.Run(); err != nil {