github.com/askholme/packer@v0.7.2-0.20140924152349-70d9566a6852/checkpoint.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "log" 6 "path/filepath" 7 8 "github.com/hashicorp/go-checkpoint" 9 "github.com/mitchellh/packer/packer" 10 ) 11 12 func init() { 13 packer.VersionChecker = packerVersionCheck 14 checkpointResult = make(chan *checkpoint.CheckResponse, 1) 15 } 16 17 var checkpointResult chan *checkpoint.CheckResponse 18 19 // runCheckpoint runs a HashiCorp Checkpoint request. You can read about 20 // Checkpoint here: https://github.com/hashicorp/go-checkpoint. 21 func runCheckpoint(c *config) { 22 // If the user doesn't want checkpoint at all, then return. 23 if c.DisableCheckpoint { 24 log.Printf("[INFO] Checkpoint disabled. Not running.") 25 checkpointResult <- nil 26 return 27 } 28 29 configDir, err := ConfigDir() 30 if err != nil { 31 log.Printf("[ERR] Checkpoint setup error: %s", err) 32 checkpointResult <- nil 33 return 34 } 35 36 version := packer.Version 37 if packer.VersionPrerelease != "" { 38 version += fmt.Sprintf(".%s", packer.VersionPrerelease) 39 } 40 41 signaturePath := filepath.Join(configDir, "checkpoint_signature") 42 if c.DisableCheckpointSignature { 43 log.Printf("[INFO] Checkpoint signature disabled") 44 signaturePath = "" 45 } 46 47 resp, err := checkpoint.Check(&checkpoint.CheckParams{ 48 Product: "packer", 49 Version: version, 50 SignatureFile: signaturePath, 51 CacheFile: filepath.Join(configDir, "checkpoint_cache"), 52 }) 53 if err != nil { 54 log.Printf("[ERR] Checkpoint error: %s", err) 55 resp = nil 56 } 57 58 checkpointResult <- resp 59 } 60 61 // packerVersionCheck implements packer.VersionCheckFunc and is used 62 // as the version checker. 63 func packerVersionCheck(current string) (packer.VersionCheckInfo, error) { 64 info := <-checkpointResult 65 if info == nil { 66 var zero packer.VersionCheckInfo 67 return zero, nil 68 } 69 70 alerts := make([]string, len(info.Alerts)) 71 for i, a := range info.Alerts { 72 alerts[i] = a.Message 73 } 74 75 return packer.VersionCheckInfo{ 76 Outdated: info.Outdated, 77 Latest: info.CurrentVersion, 78 Alerts: alerts, 79 }, nil 80 }