[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Golang Xen packages and the golang packaging system

On Thu, Apr 23, 2020 at 1:22 PM George Dunlap <George.Dunlap@xxxxxxxxxx> wrote:
> > On Apr 23, 2020, at 12:49 PM, George Dunlap <george.dunlap@xxxxxxxxxx> 
> > wrote:
> >
> >
> >
> >> On Apr 23, 2020, at 12:27 PM, Ian Jackson <ian.jackson@xxxxxxxxxx> wrote:
> >>
> >> Ian Jackson writes ("Re: Golang Xen packages and the golang packaging  
> >> system"):
> >>> This is quite unpleasant.  In particular, it makes a git tree out of
> >>> output files.  What will we do when someone sends us patches to the
> >>> bindings ?
> >>
> >> Also, anyone who redistributes your proposed golang package is
> >> violating our licence unless they ship a copy of xen.git[1] too, since
> >> the golang package is not source code.
> >>
> >> [1] Technically, a copy of the relevant parts will do.
> >
> > The “relevant parts” would primarily be gengotypes.py, right?  Oh, and I 
> > guess libxl_test.idl and friends.  libxl_test.idl isn’t included in the 
> > distribution either.
> >
> > I’m not an expert in the golang build system, but they generally seem to be 
> > trying to keep the functionality simple (which of course, means if you want 
> > to do anything non-basic, it’s incredibly complicated or completely 
> > impossible).
> >
> > There’s a command, `go generate`, which we could use to run gengotypes.py 
> > to generate the appropriate files.  But I’m not sure how to use that in a 
> > practical way for this sort of package: it might end up that people wanting 
> > to use the package would need to manually clone it, then manually run `go 
> > generate` before manually building the package.
> >
> > Checking in the generated files means that someone can simply add 
> > `golang.xenproject.org/xenlight` as a dependency (perhaps with a specific 
> > version tag, like v4.14), and everything Just Works.
> >
> > Nick may have some ideas on how to use the golang build system more 
> > effectively.
> So, the following seems to work quite well actually:
> mkdir vendor
> ln -s vendor/golang.xenproject.org /usr/share/gocode/src/golang.xenproject.org
> echo “golang.xenproject.org/xenlight” >> vendor/modules.txt
> go build -mod=vendor
> Using the above method, (say) redctl.git would build exactly the same on Xen 
> 4.14 as on Xen 4.15 (assuming redctl wasn’t using anything not available in 
> 4.14).
> I’m inclined to say we should start with just telling people to do that, and 
> look at doing something else if we discover that’s not suitable for some 
> reason.

If it's not viable to create another repo for the xenlight package, I
think we should should just initialize the go module, i.e. go.mod, at
xen.git/tools/golang. The downside is that tags cannot be independent
from the rest of xen.git, so users need to have `require <module
path>/xenlight@RELEASE-4.14.0` in their go.mod, but at least its `go
get`-able. And, this does not fetch the entire git tree.

This would also mean that we actually track the generated code (which
isn't really a big deal IMO, it's expected that people track their
generated gRPC code, for example).

I spent some time today trying to get `go get <vanity URL>/xenlight`
to work, after defining the go.mod (with <vanity URL>/xenlight as the
import path) in tools/golang. I *think* it's do-able with a meta-tag
like: `<meta name="go-import" content="<vanity URL>/xenlight mod
https://proxy.golang.org";>`, but I was having a hard time getting the
package to show up on pkg.go.dev or proxy.golang.org. I'm not totally
familiar with the module proxies yet, but it seems like it could be a
way to detach ourselves from the "package is defined at the root of a
git repo" problem.




Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.