github.com/hashicorp/packer@v1.14.3/cmd/generate-fixer-deprecations/main.go (about) 1 // Copyright (c) HashiCorp, Inc. 2 // SPDX-License-Identifier: BUSL-1.1 3 4 package main 5 6 import ( 7 "bytes" 8 "flag" 9 "fmt" 10 "go/format" 11 "os" 12 "path/filepath" 13 "strings" 14 "text/template" 15 16 "github.com/hashicorp/packer/fix" 17 ) 18 19 var deprecatedOptsTemplate = template.Must(template.New("deprecatedOptsTemplate").Funcs(template.FuncMap{"StringsJoin": strings.Join}).Parse(`//<!-- Code generated by generate-fixer-deprecations; DO NOT EDIT MANUALLY --> 20 21 package config 22 23 var DeprecatedOptions = map[string][]string{ 24 {{- range $key, $value := .DeprecatedOpts}} 25 "{{$key}}": []string{"{{ StringsJoin . "\", \"" }}"}, 26 {{- end}} 27 } 28 `)) 29 30 type executeOpts struct { 31 DeprecatedOpts map[string][]string 32 } 33 34 func main() { 35 // Figure out location in directory structure 36 args := flag.Args() 37 if len(args) == 0 { 38 // Default: process the file 39 args = []string{os.Getenv("GOFILE")} 40 } 41 fname := args[0] 42 43 absFilePath, err := filepath.Abs(fname) 44 if err != nil { 45 panic(err) 46 } 47 paths := strings.Split(absFilePath, "cmd"+string(os.PathSeparator)+ 48 "generate-fixer-deprecations"+string(os.PathSeparator)+"main.go") 49 packerDir := paths[0] 50 51 // Load all deprecated options from all active fixers 52 allDeprecatedOpts := map[string][]string{} 53 for _, name := range fix.FixerOrder { 54 fixer, ok := fix.Fixers[name] 55 if !ok { 56 panic("fixer not found: " + name) 57 } 58 59 deprecated := fixer.DeprecatedOptions() 60 for k, v := range deprecated { 61 if allDeprecatedOpts[k] == nil { 62 allDeprecatedOpts[k] = v 63 } else { 64 allDeprecatedOpts[k] = append(allDeprecatedOpts[k], v...) 65 } 66 } 67 } 68 69 deprecated_path := filepath.Join(packerDir, "packer-plugin-sdk", "template", 70 "config", "deprecated_options.go") 71 72 buf := bytes.Buffer{} 73 74 // execute template into buffer 75 deprecated := &executeOpts{DeprecatedOpts: allDeprecatedOpts} 76 err = deprecatedOptsTemplate.Execute(&buf, deprecated) 77 if err != nil { 78 panic(err) 79 } 80 // we've written unformatted go code to the file. now we have to format it. 81 out, err := format.Source(buf.Bytes()) 82 if err != nil { 83 panic(err) 84 } 85 86 outputFile, err := os.Create(deprecated_path) 87 if err != nil { 88 panic(err) 89 } 90 _, err = outputFile.Write(out) 91 defer outputFile.Close() 92 if err != nil { 93 fmt.Printf("%v", err) 94 os.Exit(1) 95 } 96 }