tailscale/tstest/integration/gen_deps.go

70 lines
1.7 KiB
Go

// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//go:build ignore
// +build ignore
package main
import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
)
func main() {
for _, goos := range []string{"windows", "linux", "darwin", "freebsd", "openbsd"} {
generate(goos)
}
}
func generate(goos string) {
var x struct {
Imports []string
}
cmd := exec.Command("go", "list", "-json", "tailscale.com/cmd/tailscaled")
cmd.Env = append(os.Environ(), "GOOS="+goos, "GOARCH=amd64")
j, err := cmd.Output()
if err != nil {
log.Fatalf("GOOS=%s GOARCH=amd64 %s: %v", goos, cmd, err)
}
if err := json.Unmarshal(j, &x); err != nil {
log.Fatal(err)
}
var out bytes.Buffer
out.WriteString(`// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// Code generated by gen_deps.go; DO NOT EDIT.
package integration
import (
// And depend on a bunch of tailscaled innards, for Go's test caching.
// Otherwise cmd/go never sees that we depend on these packages'
// transitive deps when we run "go install tailscaled" in a child
// process and can cache a prior success when a dependency changes.
`)
for _, dep := range x.Imports {
if !strings.Contains(dep, ".") {
// Omit stanard library deps.
continue
}
fmt.Fprintf(&out, "\t_ %q\n", dep)
}
fmt.Fprintf(&out, ")\n")
filename := fmt.Sprintf("tailscaled_deps_test_%s.go", goos)
err = ioutil.WriteFile(filename, out.Bytes(), 0644)
if err != nil {
log.Fatal(err)
}
}