diff --git a/.gitea/workflows/workflow.yaml b/.gitea/workflows/workflow.yaml index 665dfa4..bab1daa 100644 --- a/.gitea/workflows/workflow.yaml +++ b/.gitea/workflows/workflow.yaml @@ -2,45 +2,43 @@ name: Go on: push: - branches: [ main, go_migr ] + branches: [ main ] pull_request: - branches: [ main, go_migr ] + branches: [ main ] jobs: build: - runs-on: ubuntu-24.04 # You can change this to macos-latest or windows-latest if needed + runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v5 - name: Set up Go - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: - go-version: '1.24.6' # You can specify a specific version or 'stable' + go-version: '1.25.3' - name: Build run: | - go build -v -ldflags "\ - -X main.version=${{ github.ref_name }} \ - -X main.commit=${{ github.sha }} \ - -X main.date=$(date +%Y-%m-%dT%H:%M:%S%z)" \ - -o clean_file + echo "Initializing config" + mkdir -p ~/.ssh + echo "${{ secrets.MYREPO_TOKEN }}" > ~/.ssh/textsender_models_deploy_key + chmod 600 ~/.ssh/textsender_models_deploy_key + ssh-keyscan ${{ vars.MY_HOST }} >> ~/.ssh/known_hosts + + eval $(ssh-agent -s) + ssh-add -v ~/.ssh/textsender_models_deploy_key + + go env -w GOPRIVATE='${{ secrets.GIT_HOST_ROOT }}' + + echo "Creating local .gitconfig" + touch ~/.gitconfig + cat > ~/.gitconfig << "EOF" + [url "ssh://git@${{ secrets.GIT_HOST_ROOT }}"] + insteadOf = https://${{ secrets.GIT_HOST_ROOT }} + EOF + + make build - name: Test run: go test -v ./... - - - name: Run gofmt (optional) - # Uncomment to check code formatting with gofmt - run: | - if [ -n "$(gofmt -l.)" ]; then - echo "Go code is not formatted. Please run 'gofmt -w.' to fix it." - exit 1 - fi - - - name: Run golint (optional) - # Uncomment to check code style with golint - run: | - if [ -n "$(golint./...)" ]; then - echo "Go code has style issues. Please run 'golint./...' to see them." - exit 1 - fi diff --git a/.gitignore b/.gitignore index a5b7afc..b05a5da 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +/vendor /clean_file numbers.json diff --git a/go.mod b/go.mod index 46c4372..abccf8a 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,7 @@ module git.kundeng.us/phoenix/clean_file go 1.25.3 + +require git.kundeng.us/phoenix/textsender-models v0.0.7-5-9bc1743bd9-556 + +require github.com/google/uuid v1.6.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..493217b --- /dev/null +++ b/go.sum @@ -0,0 +1,4 @@ +git.kundeng.us/phoenix/textsender-models v0.0.7-5-9bc1743bd9-556 h1:/tIswN4wEFioG++uo25iBY1jPNdHjhH07l8Vh4qUDQo= +git.kundeng.us/phoenix/textsender-models v0.0.7-5-9bc1743bd9-556/go.mod h1:lx5MCnOgGgsdpwzrfi9uph5xmkeb6H8AuexUNGss2no= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= diff --git a/main.go b/main.go index 7c9f38c..6878364 100644 --- a/main.go +++ b/main.go @@ -1,11 +1,13 @@ package main -import "flag" -import "fmt" -import "os" +import ( + "flag" + "fmt" + "os" -import "git.kundeng.us/phoenix/clean_file/parser" -import "git.kundeng.us/phoenix/clean_file/version" + "git.kundeng.us/phoenix/clean_file/parser" + "git.kundeng.us/phoenix/clean_file/version" +) func main() { args := os.Args @@ -29,11 +31,8 @@ func main() { fmt.Println("File path:", filepath) prsr := parser.NumberParser{FilePath: filepath} - rawValues := prsr.FileDump() - parsedValues := prsr.UpdateValues(rawValues) - newUpdated := prsr.RemoveDups(parsedValues) + numbers := prsr.FileDump() + prsr.PrintValues(numbers, true) - prsr.PrintValues(newUpdated, true) - - prsr.SaveFile(newUpdated) + prsr.SaveFile(numbers) } diff --git a/parser/parser.go b/parser/parser.go index 79edf74..5d7c71d 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -1,48 +1,49 @@ package parser -import "fmt" -import "os" -import "unicode" import ( "bufio" + "encoding/json" + "fmt" "log" + "os" + "strings" + "unicode" + + "git.kundeng.us/phoenix/textsender-models/pkg/contact" ) -import "encoding/json" -import "strings" const Letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" -type SomeObject struct { - Value string `json:"value"` -} - type NumberParser struct { FilePath string } -func (prsr NumberParser) FileDump() []SomeObject { +func (prsr *NumberParser) FileDump() []contact.Contact { fmt.Println("Dumping files") - objs := []SomeObject{} + objs := []contact.Contact{} for _, line := range prsr.readLines(prsr.FilePath) { if strings.ContainsAny(line, Letters) { continue } - myObj := SomeObject{Value: line} - if myObj.Value != "" { + myObj := contact.Contact{PhoneNumber: line} + if myObj.PhoneNumber != "" { objs = append(objs, myObj) } } + objs = prsr.updateContacts(objs) + objs = prsr.removeDups(objs) + return objs } -func (prsr NumberParser) UpdateValues(vals []SomeObject) []SomeObject { - updated := []SomeObject{} +func (prsr *NumberParser) updateContacts(contacts []contact.Contact) []contact.Contact { + updated := []contact.Contact{} - for _, val := range vals { - parsed := val.Value + for _, ct := range contacts { + parsed := ct.PhoneNumber if len(parsed) < 2 { fmt.Println("Invalid number:", parsed) continue @@ -54,49 +55,44 @@ func (prsr NumberParser) UpdateValues(vals []SomeObject) []SomeObject { fmt.Println(parsed) updatedParsed := prsr.addPrefix(parsed) - updated = append(updated, SomeObject{Value: updatedParsed}) + updated = append(updated, contact.Contact{PhoneNumber: updatedParsed}) } return updated } -func (prsr NumberParser) RemoveDups(vals []SomeObject) []SomeObject { - updated := []SomeObject{} +func (prsr *NumberParser) removeDups(contacts []contact.Contact) []contact.Contact { + updated := []contact.Contact{} uniqueItems := make(map[string]string) - for _, val := range vals { - uniqueItems[val.Value] = val.Value + for _, val := range contacts { + uniqueItems[val.PhoneNumber] = val.PhoneNumber } for _, item := range uniqueItems { - updated = append(updated, SomeObject{Value: item}) + updated = append(updated, contact.Contact{PhoneNumber: item}) } return updated } -func (prsr NumberParser) PrintValues(vals []SomeObject, printTotal bool) { - fmt.Println("Printing values") +func (prsr NumberParser) PrintValues(contacts []contact.Contact, printTotal bool) { + fmt.Println("Printing numbers") - for _, val := range vals { - fmt.Println("Value:", val.Value) + for _, ct := range contacts { + fmt.Println("Number:", ct.PhoneNumber) } if printTotal { - fmt.Println("Total Numbers:", len(vals)) + fmt.Println("Total Numbers:", len(contacts)) } } -func (prsr NumberParser) SaveFile(vals []SomeObject) { +func (prsr NumberParser) SaveFile(vals []contact.Contact) { filename := "numbers.json" - allNumbers := []string{} - - for _, val := range vals { - allNumbers = append(allNumbers, val.Value) - } // Create json and save it to the filesystem - jsonData, err := json.MarshalIndent(allNumbers, "", " ") + jsonData, err := json.MarshalIndent(&vals, "", " ") if err != nil { fmt.Println("Error marshaling JSON:", err) return diff --git a/parser/parser_test.go b/parser/parser_test.go index bdc1eae..e0321ce 100644 --- a/parser/parser_test.go +++ b/parser/parser_test.go @@ -1,91 +1,32 @@ package parser -import "testing" -import "fmt" +import ( + "fmt" + "testing" + + "git.kundeng.us/phoenix/textsender-models/pkg/contact" +) const Test_File_Path = "../tests/numbers.txt" -// Add three tests -// File dump -func Test_FileDump(t *testing.T) { - parser := NumberParser{FilePath: Test_File_Path} - rawValues := parser.FileDump() - - testValues := []SomeObject{ - {Value: "(217) 555-0194"}, - {Value: "(602) 555-0177"}, - {Value: "(713) 555-0167"}, - {Value: "(608) 555-0190"}, - {Value: "(305) 555-0112"}, - {Value: "(415) 555-0135"}, - {Value: "(608) 555-0190"}, - {Value: "(602) 555-0177"}, - {Value: "(317) 555-0123"}, - {Value: "(360) 555-0158"}, - } - - if len(rawValues) < 1 { - t.Error("Dump should not be empty") - } - - if !dataEqual(rawValues, testValues) { - t.Error("File dump was not correctly dump") - } -} - -// Parse values -func Test_Parsed(t *testing.T) { - parser := NumberParser{FilePath: Test_File_Path} - rawValues := parser.FileDump() - - if len(rawValues) < 1 { - t.Error("Dump should not be empty") - } - - parsed := parser.UpdateValues(rawValues) - testValues := []SomeObject{ - {Value: "+12175550194"}, - {Value: "+16025550177"}, - {Value: "+17135550167"}, - {Value: "+16085550190"}, - {Value: "+13055550112"}, - {Value: "+14155550135"}, - {Value: "+16085550190"}, - {Value: "+16025550177"}, - {Value: "+13175550123"}, - {Value: "+13605550158"}, - } - - aSize := len(parsed) - bSize := len(testValues) - if aSize != bSize { - t.Error("Data has varrying sizes A", aSize, " B", bSize) - } - if !dataEqual(parsed, testValues) { - t.Error("Data has not be updated") - } -} - // Remove duplicates func Test_RemoveDups(t *testing.T) { parser := NumberParser{FilePath: Test_File_Path} - rawValues := parser.FileDump() + finalAmount := parser.FileDump() - if len(rawValues) < 1 { + if len(finalAmount) < 1 { t.Error("Dump should not be empty") } - parsed := parser.UpdateValues(rawValues) - finalAmount := parser.RemoveDups(parsed) - testValues := []SomeObject{ - {Value: "+12175550194"}, - {Value: "+16025550177"}, - {Value: "+17135550167"}, - {Value: "+16085550190"}, - {Value: "+13055550112"}, - {Value: "+14155550135"}, - {Value: "+13175550123"}, - {Value: "+13605550158"}, + testValues := []contact.Contact{ + {PhoneNumber: "+12175550194"}, + {PhoneNumber: "+16025550177"}, + {PhoneNumber: "+17135550167"}, + {PhoneNumber: "+16085550190"}, + {PhoneNumber: "+13055550112"}, + {PhoneNumber: "+14155550135"}, + {PhoneNumber: "+13175550123"}, + {PhoneNumber: "+13605550158"}, } aSize := len(finalAmount) @@ -96,18 +37,18 @@ func Test_RemoveDups(t *testing.T) { if !dataEqual(finalAmount, testValues) { fmt.Println("Printing final amount") for _, val := range finalAmount { - fmt.Println("Value:", val.Value) + fmt.Println("PhoneNumber:", val.PhoneNumber) } fmt.Println("Printing test values") for _, val := range testValues { - fmt.Println("Value:", val.Value) + fmt.Println("PhoneNumber:", val.PhoneNumber) } t.Error("Data has not be updated") } } -func dataEqual(a, b []SomeObject) bool { +func dataEqual(a, b []contact.Contact) bool { if len(a) != len(b) { return false }