Skip to content

Commit

Permalink
feat(readme): added a readme generator and replacer
Browse files Browse the repository at this point in the history
  • Loading branch information
StanGirard committed Aug 26, 2022
1 parent 4b4fb13 commit fb31386
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 16 deletions.
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,11 @@ plugins:
- "AWS_VPC_004"
```

<!-- BEGIN_YATAS -->

## AWS - 51 Checks

### ACM
### AWS Certificate Manager
- AWS_ACM_001 ACM Valid
- AWS_ACM_002 Certificate Expires in 90 Days
- AWS_ACM_003 ACM In Use
Expand Down Expand Up @@ -178,6 +180,7 @@ plugins:
- AWS_VPC_005 At least 2 subnets
- AWS_VPC_006 Subnets in different zone

<!-- END_YATAS -->

## How to add a new test ?

Expand Down
36 changes: 29 additions & 7 deletions internal/report/parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@ package report
import (
"fmt"
"io/ioutil"
"regexp"
"strings"

"github.com/stangirard/yatas/internal/helpers"
"github.com/stangirard/yatas/internal/results"
"gopkg.in/yaml.v3"
)
Expand All @@ -19,11 +21,30 @@ func parseReportYaml(filename string) ([]results.Tests, error) {
return report, err
}

func GenerateReadme(filename string) error {
report, err := parseReportYaml(filename)
func WriteReadme(readmeFile string, resultFile string) error {
// Open the readme File
file, err := helpers.ReadFile(readmeFile)
if err != nil {
return err
}
readme := GenerateReadme(resultFile)

re := regexp.MustCompile("(?s)(?:<!-- BEGIN_YATAS -->)(.*)(?:<!-- END_YATAS -->)")
s := re.ReplaceAllString(string(file), fmt.Sprintf("<!-- BEGIN_YATAS -->\n%s\n<!-- END_YATAS -->", readme))
err = ioutil.WriteFile(readmeFile, []byte(s), 0644)
if err != nil {
return err
}
return nil

}

func GenerateReadme(filename string) string {
report, err := parseReportYaml(filename)
readme := ""
if err != nil {
panic(err)
}
splitFirst := ""
splitSecond := ""
splitFirstMap := make(map[string]int)
Expand All @@ -36,23 +57,23 @@ func GenerateReadme(filename string) error {
split := strings.Split(check.Id, "_")
if split[0] != splitFirst {
splitFirst = split[0]
fmt.Printf("\n## %s - %d Checks\n", split[0], splitFirstMap[split[0]])
readme += fmt.Sprintf("\n## %s - %d Checks\n", split[0], splitFirstMap[split[0]])
}
if split[1] != splitSecond {
splitSecond = split[1]
// If split is in fullName map then use fullName as name
if fullName, ok := fullName[split[1]]; ok {
fmt.Printf("\n### %s\n", fullName)
readme += fmt.Sprintf("\n### %s\n", fullName)
} else {
fmt.Printf("\n### %s\n", split[1])
readme += fmt.Sprintf("\n### %s\n", split[1])
}
}
fmt.Printf("- %s %s\n", check.Id, check.Name)
readme += fmt.Sprintf("- %s %s\n", check.Id, check.Name)

}
break
}
return nil
return readme
}

var fullName = map[string]string{
Expand All @@ -73,4 +94,5 @@ var fullName = map[string]string{
"ELB": "LoadBalancer",
"GDT": "GuardDuty",
"SHU": "SecurityHub",
"ACM": "AWS Certificate Manager",
}
11 changes: 4 additions & 7 deletions internal/report/parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,7 @@ func TestGenerateReadme(t *testing.T) {
old := os.Stdout
r, w, _ := os.Pipe()
os.Stdout = w
err := GenerateReadme("../testdata/results_data.yaml")
if err != nil {
t.Error(err)
}
readme := GenerateReadme("../testdata/results_data.yaml")

w.Close()
os.Stdout = old
Expand All @@ -53,9 +50,9 @@ func TestGenerateReadme(t *testing.T) {
// Replace all \n and space with nothing in data and out variables
data = []byte(strings.Replace(string(data), "\n", "", -1))
data = []byte(strings.Replace(string(data), " ", "", -1))
out = []byte(strings.Replace(string(out), "\n", "", -1))
out = []byte(strings.Replace(string(out), " ", "", -1))
if string(out) != string(data) {
readme = strings.Replace(readme, "\n", "", -1)
readme = strings.Replace(readme, " ", "", -1)
if string(data) != string(readme) {
t.Error("Expected:\n", string(data), "\nGot:\n", string(out))
}

Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func run() error {
flag.Parse()

if *generateReadme {
return report.GenerateReadme("results.yaml")
return report.WriteReadme("README.md", "results.yaml")
}
if err := cmd.Execute(); err != nil {
return err
Expand Down

0 comments on commit fb31386

Please sign in to comment.