diff --git a/cmd/cmd/publish/provider.go b/cmd/cmd/publish/provider.go index 947a42ff..c3974e22 100644 --- a/cmd/cmd/publish/provider.go +++ b/cmd/cmd/publish/provider.go @@ -140,11 +140,21 @@ func (p *Provider) createVersionsFile() error { } // Build the versions file... - version := Version{} + version := Version{ + Version: p.Version, + Protocols: []string{"5.1"}, + Platforms: nil, + } for _, sum := range shasums { // get os and arch from filename removeFileExtension := strings.Split(sum.Path, ".zip") + if len(removeFileExtension) < 1 { + log.Fatalf("error: %s does not have .zip extension", sum.Path) + } fileNameSplit := strings.Split(removeFileExtension[0], "_") + if len(fileNameSplit) < 4 { + log.Fatalf("filename does not match our regex: %s", removeFileExtension[0]) + } // Get build target and architecture from the zip file name target := fileNameSplit[2] @@ -178,9 +188,9 @@ func (p *Provider) createVersionsFile() error { } func (p *Provider) providerDirs() string { - log.Println("* Creating release/v1/providers/[namespace]/[repo]/[version] directories") + log.Println("* Creating release/v1/providers/[namespace]/[provider]/[version] directories") - target := path.Join("release", "v1", "providers", p.Namespace, p.RepoName, p.Version) + target := path.Join("release", "v1", "providers", p.Namespace, p.Provider, p.Version) err := CreateDir(target) if err != nil { @@ -189,6 +199,28 @@ func (p *Provider) providerDirs() string { return target } +func (p *Provider) CreateWellKnown() error { + log.Println("* Creating .well-known directory") + pathString := path.Join(p.RootPath, "release", ".well-known") + + err := os.MkdirAll(pathString, os.ModePerm) + if err != nil && !errors.Is(err, fs.ErrExist) { + return fmt.Errorf("error creating '%s' dir: %w", pathString, err) + } + + log.Println(" - Writing to .well-known/terraform.json file") + err = os.WriteFile( + fmt.Sprintf("%s/terraform.json", pathString), + []byte(`{"providers.v1": "/v1/providers/"}`), + 0644, + ) + if err != nil { + return err + } + + return nil +} + func CreateDir(path string) error { log.Printf("* Creating %s directory", path) err := os.MkdirAll(path, os.ModePerm) diff --git a/cmd/cmd/publish/shasums.go b/cmd/cmd/publish/shasums.go index 973b3769..a7e71617 100644 --- a/cmd/cmd/publish/shasums.go +++ b/cmd/cmd/publish/shasums.go @@ -33,7 +33,7 @@ func GetShaSumContents(distPath, repoName, version string) (ShaSums, error) { slog.Warn("unable to parse SHA sum line", "line", line) continue } - shaSums = append(shaSums, ShaSum{Sum: matches[0][0], Path: matches[0][1]}) + shaSums = append(shaSums, ShaSum{Sum: matches[0][1], Path: matches[0][2]}) } return shaSums, nil } diff --git a/cmd/cmd/publishCmd.go b/cmd/cmd/publishCmd.go index 9930aa65..1e3ce140 100644 --- a/cmd/cmd/publishCmd.go +++ b/cmd/cmd/publishCmd.go @@ -28,7 +28,7 @@ var publishCmd = &cobra.Command{ Use: "publish", Short: "Publish terraform provider", Long: `...`, - RunE: func(cmd *cobra.Command, args []string) error { + RunE: func(_ *cobra.Command, args []string) error { return publish() }, } @@ -104,44 +104,22 @@ func publish() error { // Create release dir - only the contents of this need to be uploaded to S3 log.Printf("* Creating reelase directory") - err = os.Mkdir(path.Join(p.RootPath, "release"), os.ModePerm) - if !errors.Is(err, fs.ErrExist) { - return fmt.Errorf("error creating 'release' dir: %w", err) + err = os.MkdirAll(path.Join(p.RootPath, "release"), os.ModePerm) + if err != nil && !errors.Is(err, fs.ErrExist) { + return fmt.Errorf("error creating '%s' dir: %w", path.Join(p.RootPath, "release"), err) } // Create .wellKnown directory and terraform.json file - err = wellKnown() + err = p.CreateWellKnown() if err != nil { - return fmt.Errorf("error creating '.wellKnown' dir: %s", err) + return fmt.Errorf("error creating '.well-known' dir: %w", err) } err = p.CreateV1Dir() if err != nil { - return fmt.Errorf("error creating 'v1' dir: %s", err) + return fmt.Errorf("error creating 'v1' dir: %w", err) } log.Println("📦 Packaged Terraform Provider for private registry.") return nil } - -// This establishes the "API" as a TF provider by responding with the correct JSON payload, by using static files -func wellKnown() error { - log.Println("* Creating .well-known directory") - - err := os.Mkdir("release/.well-known", os.ModePerm) - if !errors.Is(err, fs.ErrExist) { - return fmt.Errorf("error creating 'release' dir: %w", err) - } - - log.Println(" - Writing to .well-known/terraform.json file") - err = os.WriteFile( - "release/.well-known/terraform.json", - []byte(`{"providers.v1": "/v1/providers/"}`), - 0644, - ) - if err != nil { - return err - } - - return nil -}