mirror of
https://github.com/TECHNOFAB11/jsonnet-bundler.git
synced 2025-12-11 23:50:05 +01:00
The go-modules approach is a bit broken: https://github.com/golang/go/issues/29228 To resolve that, we now compute that version using `git describe` and set it using `ldflags`. While this is not as nice/builtin as the other approach, it at least works all the time and across go versions. Furthermore, I did refactor the Makefile in preparation for an AUR package that builds from source and for building release artifacts in CI.
90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
// Copyright 2018 jsonnet-bundler authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/fatih/color"
|
|
"github.com/pkg/errors"
|
|
"gopkg.in/alecthomas/kingpin.v2"
|
|
)
|
|
|
|
const (
|
|
installActionName = "install"
|
|
updateActionName = "update"
|
|
initActionName = "init"
|
|
rewriteActionName = "rewrite"
|
|
)
|
|
|
|
var Version = "dev"
|
|
|
|
func main() {
|
|
os.Exit(Main())
|
|
}
|
|
|
|
func Main() int {
|
|
cfg := struct {
|
|
JsonnetHome string
|
|
}{}
|
|
|
|
color.Output = color.Error
|
|
|
|
a := kingpin.New(filepath.Base(os.Args[0]), "A jsonnet package manager").Version(Version)
|
|
a.HelpFlag.Short('h')
|
|
|
|
a.Flag("jsonnetpkg-home", "The directory used to cache packages in.").
|
|
Default("vendor").StringVar(&cfg.JsonnetHome)
|
|
|
|
initCmd := a.Command(initActionName, "Initialize a new empty jsonnetfile")
|
|
|
|
installCmd := a.Command(installActionName, "Install all dependencies or install specific ones")
|
|
installCmdURIs := installCmd.Arg("uris", "URIs to packages to install, URLs or file paths").Strings()
|
|
|
|
updateCmd := a.Command(updateActionName, "Update all dependencies.")
|
|
|
|
rewriteCmd := a.Command(rewriteActionName, "Automatically rewrite legacy imports to absolute ones")
|
|
|
|
command, err := a.Parse(os.Args[1:])
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, errors.Wrapf(err, "Error parsing commandline arguments"))
|
|
a.Usage(os.Args[1:])
|
|
return 2
|
|
}
|
|
|
|
workdir, err := os.Getwd()
|
|
if err != nil {
|
|
return 1
|
|
}
|
|
|
|
cfg.JsonnetHome = filepath.Clean(cfg.JsonnetHome)
|
|
|
|
switch command {
|
|
case initCmd.FullCommand():
|
|
return initCommand(workdir)
|
|
case installCmd.FullCommand():
|
|
return installCommand(workdir, cfg.JsonnetHome, *installCmdURIs)
|
|
case updateCmd.FullCommand():
|
|
return updateCommand(workdir, cfg.JsonnetHome)
|
|
case rewriteCmd.FullCommand():
|
|
return rewriteCommand(workdir, cfg.JsonnetHome)
|
|
default:
|
|
installCommand(workdir, cfg.JsonnetHome, []string{})
|
|
}
|
|
|
|
return 0
|
|
}
|