Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit c68dd9a

Browse files
committed
Stability and features
1 parent b024cf6 commit c68dd9a

14 files changed

+178
-195
lines changed

cmd/docker-setup/describe.go

+10-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"encoding/json"
55
"fmt"
6+
"os"
67

78
"gopkg.in/yaml.v3"
89

@@ -26,15 +27,22 @@ var describeCmd = &cobra.Command{
2627
Long: header + "\nShow detailed information about tools",
2728
Args: cobra.ExactArgs(1),
2829
RunE: func(cmd *cobra.Command, args []string) error {
29-
tools, err := tool.LoadFromFile(metadataFileName)
30+
// Check existance of metadata file
31+
_, err := os.Stat(metadataFile)
3032
if err != nil {
31-
return fmt.Errorf("Failed to load metadata from file %s: %s\n", metadataFileName, err)
33+
return fmt.Errorf("Metadata file %s does not exist", metadataFile)
34+
}
35+
36+
tools, err := tool.LoadFromFile(metadataFile)
37+
if err != nil {
38+
return fmt.Errorf("Failed to load metadata from file %s: %s\n", metadataFile, err)
3239
}
3340

3441
tool, err := tools.GetByName(args[0])
3542
if err != nil {
3643
return fmt.Errorf("Error getting tool %s\n", args[0])
3744
}
45+
tool.ReplaceVariables(prefix + target, arch, alt_arch)
3846

3947
if describeOutput == "pretty" {
4048
tool.Print()

cmd/docker-setup/generate.go

-122
This file was deleted.

cmd/docker-setup/init.go

+10-5
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import (
44
"fmt"
55
"os"
66
"runtime"
7-
7+
88
log "github.com/sirupsen/logrus"
99

1010
"github.com/nicholasdille/docker-setup/pkg/tool"
@@ -17,7 +17,12 @@ var prefix = "/"
1717
var target = "usr/local"
1818
var cacheDirectory = "/var/cache/docker-setup"
1919
var libDirectory = "/var/lib/docker-setup"
20-
var metadataFileName = cacheDirectory + "/metadata.json"
20+
var metadataFileName = "metadata.json"
21+
var metadataFile = cacheDirectory + "/" + metadataFileName
22+
var registry = "ghcr.io"
23+
var repository = "nicholasdille/docker-setup"
24+
var toolSeparator = "/"
25+
var registryImagePrefix = registry + "/" + repository + toolSeparator
2126
var tools tool.Tools
2227

2328
var emoji_tool = "\U0001F528"
@@ -46,11 +51,11 @@ func initDockerSetup() {
4651
os.MkdirAll(cacheDirectory, 0755)
4752
os.MkdirAll(libDirectory, 0755)
4853

49-
_, err = os.Stat(metadataFileName)
54+
_, err = os.Stat(metadataFile)
5055
if err == nil {
51-
tools, err = tool.LoadFromFile(metadataFileName)
56+
tools, err = tool.LoadFromFile(metadataFile)
5257
if err != nil {
53-
fmt.Printf("Error loading metadata from file %s: %s\n", metadataFileName, err)
58+
fmt.Printf("Error loading metadata from file %s: %s\n", metadataFile, err)
5459
os.Exit(1)
5560
}
5661
}

cmd/docker-setup/inspect.go

+33-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
package main
22

33
import (
4+
"fmt"
5+
"os"
6+
47
"github.com/spf13/cobra"
8+
//log "github.com/sirupsen/logrus"
9+
//"github.com/fatih/color"
10+
11+
"github.com/nicholasdille/docker-setup/pkg/tool"
512
)
613

714
func initInspectCmd() {
@@ -12,8 +19,31 @@ var inspectCmd = &cobra.Command{
1219
Use: "inspect",
1320
Short: "Inspect tool",
1421
Long: header + "\nInspect tools",
15-
Args: cobra.NoArgs,
16-
Run: func(cmd *cobra.Command, args []string) {
17-
//
22+
Args: cobra.ExactArgs(1),
23+
RunE: func(cmd *cobra.Command, args []string) error {
24+
// Check existance of metadata file
25+
_, err := os.Stat(metadataFile)
26+
if err != nil {
27+
return fmt.Errorf("Metadata file %s does not exist", metadataFile)
28+
}
29+
30+
tools, err := tool.LoadFromFile(metadataFile)
31+
if err != nil {
32+
return fmt.Errorf("Failed to load metadata from file %s: %s\n", metadataFile, err)
33+
}
34+
35+
tool, err := tools.GetByName(args[0])
36+
if err != nil {
37+
return fmt.Errorf("Error getting tool %s\n", args[0])
38+
}
39+
tool.ReplaceVariables(prefix + target, arch, alt_arch)
40+
41+
fmt.Printf("%s Inspecting %s %s\n", emoji_tool, tool.Name, tool.Version)
42+
err = tool.Inspect(registryImagePrefix, prefix, alt_arch)
43+
if err != nil {
44+
return fmt.Errorf("Unable to inspect %s: %s", tool, err)
45+
}
46+
47+
return nil
1848
},
1949
}

cmd/docker-setup/install.go

+22-10
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"fmt"
5+
"os"
56

67
"github.com/spf13/cobra"
78
log "github.com/sirupsen/logrus"
@@ -19,6 +20,7 @@ var plan bool
1920
var toolStatus map[string]tool.ToolStatus = make(map[string]tool.ToolStatus)
2021
var requestedTools tool.Tools
2122
var plannedTools tool.Tools
23+
var reinstall bool
2224

2325
//var check_mark string = "✓" // Unicode=\u2713 UTF-8=\xE2\x9C\x93 (https://www.compart.com/de/unicode/U+2713)
2426
//var cross_mark string = "✗" // Unicode=\u2717 UTF-8=\xE2\x9C\x97 (https://www.compart.com/de/unicode/U+2717)
@@ -28,13 +30,12 @@ func initInstallCmd() {
2830

2931
installCmd.Flags().StringVarP(&installMode, "mode", "m", "default", "How to install (default, tags, installed)")
3032
installCmd.Flags().BoolVarP( &defaultMode, "default", "d", false, "Install default tools")
31-
installCmd.Flags().BoolVarP( &tagsMode, "tags", "t", false, "Install tools matching tag")
32-
installCmd.Flags().BoolVarP( &installedMode, "installed", "i", false, "Update installed tools")
33-
installCmd.Flags().BoolVarP( &plan, "plan", "p", false, "Show planned installations")
33+
installCmd.Flags().BoolVarP( &tagsMode, "tags", "t", false, "Install tool(s) matching tag")
34+
installCmd.Flags().BoolVarP( &installedMode, "installed", "i", false, "Update installed tool(s)")
35+
installCmd.Flags().BoolVarP( &plan, "plan", "p", false, "Show tool(s) planned installation")
3436
installCmd.Flags().BoolVarP( &check, "check", "c", false, "Abort after checking versions")
37+
installCmd.Flags().BoolVarP( &reinstall, "reinstall", "r", false, "Reinstall tool(s)")
3538
installCmd.MarkFlagsMutuallyExclusive("mode", "default", "tags", "installed")
36-
37-
installCmd.Flags().BoolP("reinstall", "r", false, "Reinstall tools")
3839
}
3940

4041
var installCmd = &cobra.Command{
@@ -57,15 +58,21 @@ var installCmd = &cobra.Command{
5758
return fmt.Errorf("You can only only specify one: --check, --plan")
5859
}
5960

60-
tools, err := tool.LoadFromFile(metadataFileName)
61+
// Check existance of metadata file
62+
_, err := os.Stat(metadataFile)
63+
if err != nil {
64+
return fmt.Errorf("Metadata file %s does not exist", metadataFile)
65+
}
66+
67+
tools, err := tool.LoadFromFile(metadataFile)
6168
if err != nil {
62-
return fmt.Errorf("Failed to load metadata from file %s: %s\n", metadataFileName, err)
69+
return fmt.Errorf("Failed to load metadata from file %s: %s\n", metadataFile, err)
6370
}
6471

6572
// Fill default values and replace variables
6673
for index, tool := range tools.Tools {
6774
log.Tracef("Getting status for requested tool %s", tool.Name)
68-
tools.Tools[index].ReplaceVariables(target, arch, alt_arch)
75+
tools.Tools[index].ReplaceVariables(prefix + target, arch, alt_arch)
6976

7077
err := tools.Tools[index].GetBinaryStatus()
7178
if err != nil {
@@ -142,13 +149,18 @@ var installCmd = &cobra.Command{
142149

143150
// Install
144151
for _, tool := range plannedTools.Tools {
152+
if tool.Status.MarkerFilePresent && ! reinstall {
153+
fmt.Printf("Skipping %s %s because it is already installed.\n", tool.Name, tool.Version)
154+
continue
155+
}
156+
145157
fmt.Printf("%s Installing %s %s", emoji_tool, tool.Name, tool.Version)
146-
err := tool.Install(prefix, alt_arch)
158+
err := tool.Install(registryImagePrefix, prefix, alt_arch)
147159
fmt.Printf("\n")
148160
if err != nil {
149161
return fmt.Errorf("Unable to install %s: %s", tool, err)
150162
}
151-
// TODO: Create marker file
163+
tool.CreateMarkerFile(cacheDirectory)
152164
}
153165

154166
return nil

cmd/docker-setup/main.go

+5-3
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,13 @@ func init() {
3232
initDockerSetup()
3333

3434
initDescribeCmd()
35-
initGenerateCmd()
3635
initInstallCmd()
3736
initListCmd()
3837
initSearchCmd()
3938
initTagsCmd()
4039
initInspectCmd()
41-
initReinstallCmd()
4240
initUninstallCmd()
4341
initUpdateCmd()
44-
initUpgradeCmd()
4542

4643
// TODO: Add new subcommands for executables docker-setup-<subcommand>
4744
// - build
@@ -64,6 +61,11 @@ func main() {
6461
return nil
6562
}
6663
rootCmd.PersistentFlags().StringVarP(&logLevel, "log-level", "l", log.WarnLevel.String(), "Log level (trace, debug, info, warning, error)")
64+
rootCmd.PersistentFlags().StringVarP(&prefix, "prefix", "p", "/", "Prefix for installation")
65+
rootCmd.PersistentFlags().StringVarP(&target, "target", "t", "usr/local", "Target directory for installation")
66+
rootCmd.PersistentFlags().StringVarP(&cacheDirectory, "cache-directory", "C", "/var/cache/docker-setup", "Cache directory")
67+
rootCmd.PersistentFlags().StringVarP(&libDirectory, "lib-directory", "L", "/var/lib/docker-setup", "Library directory")
68+
rootCmd.PersistentFlags().StringVarP(&metadataFileName, "metadata-file", "m", "metadata.json", "Metadata file")
6769

6870
rootCmd.Execute()
6971
}

cmd/docker-setup/reinstall.go

-19
This file was deleted.

cmd/docker-setup/uninstall.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ var uninstallCmd = &cobra.Command{
1515
Long: header + "\nUninstall tools",
1616
Args: cobra.NoArgs,
1717
Run: func(cmd *cobra.Command, args []string) {
18-
//
18+
// Remove all files listes in /var/lib/docker-setup/manifests/<tool>.txt
19+
// tool.RemoveMarkerFile()
1920
},
2021
}

cmd/docker-setup/update.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ var updateCmd = &cobra.Command{
2323
Long: header + "\nUpdate tool manifest",
2424
Args: cobra.NoArgs,
2525
Run: func(cmd *cobra.Command, args []string) {
26-
containers.GetManifest("ghcr.io/nicholasdille/docker-setup/metadata:main", alt_arch, func (blob blob.Reader) error {
26+
containers.GetManifest(registryImagePrefix + "metadata:main", alt_arch, func (blob blob.Reader) error {
2727
os.Chdir(cacheDirectory)
2828
archive.ExtractTarGz(blob)
2929
return nil

0 commit comments

Comments
 (0)