Skip to content

Commit

Permalink
✨ not allow to init the project in a directory that is not cleaned
Browse files Browse the repository at this point in the history
  • Loading branch information
Camila Macedo committed Oct 22, 2020
1 parent 36124ae commit 261baf9
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions pkg/plugin/v3/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ limitations under the License.
package v3

import (
"errors"
"fmt"
"os"
"path/filepath"
Expand Down Expand Up @@ -111,6 +112,11 @@ func (p *initPlugin) Validate() error {
}
}

// Check if the current directory has not files or directories which does not allow to init the project
if err := checkDir(); err != nil {
return err
}

// Check if the project name is a valid k8s namespace (DNS 1123 label).
if p.config.ProjectName == "" {
dir, err := os.Getwd()
Expand Down Expand Up @@ -167,3 +173,26 @@ func (p *initPlugin) PostScaffold() error {
fmt.Printf("Next: define a resource with:\n$ %s create api\n", p.commandName)
return nil
}

// checkDir will return error if the current directory has files which are
// not the .gitignore and do not starts with the prefix (.) such as .gitignore and .dockerignore.
// Note that, it is expected that the directory to scaffold the project is cleaned.
// Otherwise, it might face issues to do the scaffold. The go.mod is allowed because user might run
// go mod init before use the plugin it for not be required inform
// the go module via the repo --flag.
func checkDir() error {
err := filepath.Walk(".",
func(path string, info os.FileInfo, err error) error {
if err != nil {
return err
}
if info.Name() != "go.mod" && !strings.HasPrefix(info.Name(), ".") {
return errors.New("only the go.mod and files with the prefix \"(.)\" are allowed before the init")
}
return nil
})
if err != nil {
return err
}
return nil
}

0 comments on commit 261baf9

Please sign in to comment.