From b090324c46675f9130f5510e7d3e0418d8b10d9a Mon Sep 17 00:00:00 2001 From: p4u Date: Fri, 28 Feb 2025 12:36:33 +0100 Subject: [PATCH] update to go 1.24 Signed-off-by: p4u --- .github/workflows/main.yml | 10 ++-- .github/workflows/swagger.yml | 2 +- Dockerfile | 2 +- api/wallet.go | 2 +- cmd/cli/main.go | 86 +++++++++++++++++------------------ cmd/end2endtest/main.go | 28 ++++++------ go.mod | 2 +- tree/arbo/tree.go | 34 +++++--------- 8 files changed, 78 insertions(+), 88 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 23fa25af0..e91b82cf6 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -28,7 +28,7 @@ jobs: - name: Set up Go environment uses: actions/setup-go@v5 with: - go-version: '1.23' + go-version: '1.24' - name: Tidy go module run: | go mod tidy @@ -54,7 +54,7 @@ jobs: fi - name: Run staticcheck run: | - go install honnef.co/go/tools/cmd/staticcheck@2024.1.1 + go install honnef.co/go/tools/cmd/staticcheck@2025.1 staticcheck -debug.version staticcheck ./... 2> staticcheck-stderr - name: Check staticcheck stderr (this step isn't needed because we are using actions/setup-go@v5 on GitHub hosted runner) @@ -81,7 +81,7 @@ jobs: - uses: benjlevesque/short-sha@v3.0 # sets env.SHA to the first 7 chars of github.sha - uses: actions/setup-go@v5 with: - go-version: '1.23' + go-version: '1.24' - run: mkdir -p "$PWD/gocoverage-unit/" - name: Run Go test -race id: go-test-race @@ -151,7 +151,7 @@ jobs: - uses: actions/download-artifact@v4 - uses: actions/setup-go@v5 with: - go-version: '1.23' + go-version: '1.24' cache: false - name: Convert gocoverage format run: | @@ -190,7 +190,7 @@ jobs: name: gocoverage-all-textfmt@${{ env.SHA }} - uses: actions/setup-go@v5 with: - go-version: '1.23' + go-version: '1.24' cache: false - name: Send coverage to coveralls.io (unit) if: ${{ always() }} diff --git a/.github/workflows/swagger.yml b/.github/workflows/swagger.yml index 54bc119dd..7f19ee643 100644 --- a/.github/workflows/swagger.yml +++ b/.github/workflows/swagger.yml @@ -24,7 +24,7 @@ jobs: path: developer-portal - uses: actions/setup-go@v5 with: - go-version: '1.23' + go-version: '1.24' cache: false - name: Install swag run: | diff --git a/Dockerfile b/Dockerfile index d96e5693c..f4cd23a9e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # syntax=docker/dockerfile:experimental -FROM golang:1.23 AS builder +FROM golang:1.24 AS builder ARG BUILDARGS diff --git a/api/wallet.go b/api/wallet.go index 9d952e812..3a77a2f00 100644 --- a/api/wallet.go +++ b/api/wallet.go @@ -439,7 +439,7 @@ func (a *API) walletElectionHandler(msg *apirest.APIdata, ctx *httprouter.HTTPCo Metadata: &metadataURI, } - log.Debugf(log.FormatProto(process)) + log.Debugf("%s", log.FormatProto(process)) stx := models.SignedTx{} if stx.Tx, err = proto.Marshal(&models.Tx{ diff --git a/cmd/cli/main.go b/cmd/cli/main.go index c3c8277ba..bddabf44e 100644 --- a/cmd/cli/main.go +++ b/cmd/cli/main.go @@ -61,8 +61,8 @@ func main() { account = fmt.Sprintf("%s [%s]", a.Memo, a.Address.String()) } return fmt.Sprintf("%s | %s", - color.New(color.FgHiGreen, color.Bold, color.Underline).Sprintf(cli.chainID), - color.New(color.FgHiBlue).Sprintf(account), + color.New(color.FgHiGreen, color.Bold, color.Underline).Sprint(cli.chainID), + color.New(color.FgHiBlue).Sprint(account), ) } @@ -93,7 +93,7 @@ func main() { option, _, err := prompt.Run() if err != nil { - errorp.Printf("prompt failed: %v\n", err) + errorp.Print("prompt failed: ", err, "\n") os.Exit(1) } switch option { @@ -196,7 +196,7 @@ func accountHandler(c *VocdoniCLI) error { return err } default: - infoPrint.Printf("using account %d\n", opt) + infoPrint.Print("using account ", opt, "\n") if err := c.useAccount(opt); err != nil { return err } @@ -219,7 +219,7 @@ func accountSet(c *VocdoniCLI) error { if err != nil { return err } - infoPrint.Printf("set account %s\n", key) + infoPrint.Print("set account ", key, "\n") return c.setAPIaccount(key, memo) } @@ -232,7 +232,7 @@ func accountGen(c *VocdoniCLI) error { return err } key := fmt.Sprintf("%x", util.RandomBytes(32)) - infoPrint.Printf("set account %s\n", memo) + infoPrint.Print("set account ", memo, "\n") return c.setAPIaccount(key, memo) } @@ -242,21 +242,21 @@ func accountInfo(c *VocdoniCLI) error { return err } localAcc := c.getCurrentAccount() - infoPrint.Printf("details for account %s\n", localAcc.Memo) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ address"), valuesPrint.Sprintf(acc.Address.String())) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ public key"), valuesPrint.Sprintf(localAcc.PublicKey.String())) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ balance"), valuesPrint.Sprintf("%d", acc.Balance)) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ nonce"), valuesPrint.Sprintf("%d", acc.Nonce)) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ electionIndex"), valuesPrint.Sprintf("%d", acc.ElectionIndex)) + infoPrint.Print("details for account ", localAcc.Memo, "\n") + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ address"), valuesPrint.Sprint(acc.Address.String())) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ public key"), valuesPrint.Sprint(localAcc.PublicKey.String())) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ balance"), valuesPrint.Sprint(acc.Balance)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ nonce"), valuesPrint.Sprint(acc.Nonce)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ electionIndex"), valuesPrint.Sprint(acc.ElectionIndex)) if acc.InfoURL != "" && acc.InfoURL != "none" { - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ info URL"), valuesPrint.Sprintf(acc.InfoURL)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ info URL"), valuesPrint.Sprint(acc.InfoURL)) } if acc.Metadata != nil { accMetadata, err := json.MarshalIndent(acc.Metadata, "", " ") if err != nil { log.Debug("account metadata cannot be unmarshal") } else { - fmt.Printf("%s:\n%s\n", keysPrint.Sprintf(" ➥ metadata"), valuesPrint.Sprintf("%s", accMetadata)) + fmt.Printf("%s:\n%s\n", keysPrint.Sprint(" ➥ metadata"), valuesPrint.Sprint(string(accMetadata))) } } @@ -268,11 +268,11 @@ func networkInfo(cli *VocdoniCLI) error { if err != nil { return err } - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ API host"), valuesPrint.Sprintf(cli.config.Host.Host)) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ chainID"), valuesPrint.Sprintf(info.ID)) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ height"), valuesPrint.Sprintf("%d", info.Height)) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ block time"), valuesPrint.Sprintf("%v", info.BlockTime)) - fmt.Printf("%s: %s\n", keysPrint.Sprintf(" ➥ timestamp"), valuesPrint.Sprintf("%d", info.Timestamp)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ API host"), valuesPrint.Sprint(cli.config.Host.Host)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ chainID"), valuesPrint.Sprint(info.ID)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ height"), valuesPrint.Sprint(info.Height)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ block time"), valuesPrint.Sprint(info.BlockTime)) + fmt.Printf("%s: %s\n", keysPrint.Sprint(" ➥ timestamp"), valuesPrint.Sprint(info.Timestamp)) return nil } @@ -308,15 +308,15 @@ func bootStrapAccount(cli *VocdoniCLI) error { if err != nil { return err } - infoPrint.Printf("trying to fetch faucet package from default remote service...\n") + infoPrint.Print("trying to fetch faucet package from default remote service...\n") faucetPkg, err = apiclient.GetFaucetPackageFromDefaultService(cli.api.MyAddress().Hex(), info.ID) if err != nil { return err } - infoPrint.Printf("got faucet package!") + infoPrint.Print("got faucet package!") } - infoPrint.Printf("bootstraping account...\n") + infoPrint.Print("bootstraping account...\n") txHash, err := cli.api.AccountBootstrap(faucetPkg, &api.AccountMetadata{ Name: map[string]string{"default": "vocdoni cli account " + cli.getCurrentAccount().Address.Hex()}, @@ -324,13 +324,13 @@ func bootStrapAccount(cli *VocdoniCLI) error { if err != nil { return err } - infoPrint.Printf("transaction sent! hash %s\n", txHash.String()) - infoPrint.Printf("waiting for confirmation...") + infoPrint.Print("transaction sent! hash ", txHash.String(), "\n") + infoPrint.Print("waiting for confirmation...") ok := cli.waitForTransaction(txHash) if !ok { return fmt.Errorf("transaction was not included") } - infoPrint.Printf(" transaction confirmed!\n") + infoPrint.Print(" transaction confirmed!\n") return nil } @@ -390,7 +390,7 @@ func transfer(cli *VocdoniCLI) error { return err } if item == "N" { - log.Infof("transfer canceled") + log.Info("transfer canceled") return nil } @@ -398,13 +398,13 @@ func transfer(cli *VocdoniCLI) error { if err != nil { return err } - infoPrint.Printf("transaction sent! hash %s\n", txHash.String()) - infoPrint.Printf("waiting for confirmation...") + infoPrint.Print("transaction sent! hash ", txHash.String(), "\n") + infoPrint.Print("waiting for confirmation...") ok := cli.waitForTransaction(txHash) if !ok { return fmt.Errorf("transaction was not included") } - infoPrint.Printf(" transaction confirmed!\n") + infoPrint.Print(" transaction confirmed!\n") return nil } @@ -450,13 +450,13 @@ func faucetPkg(cli *VocdoniCLI) error { if err != nil { return err } - infoPrint.Printf("faucet package for %s with amount %d: [ %s ]\n", to.Hex(), amount, base64.StdEncoding.EncodeToString(fpackageBytes)) + infoPrint.Print("faucet package for ", to.Hex(), " with amount ", amount, ": [ ", base64.StdEncoding.EncodeToString(fpackageBytes), " ]\n") return nil } func hostHandler(cli *VocdoniCLI) error { validateFunc := func(url string) error { - log.Debugf("performing ping test to %s", url) + log.Debug("performing ping test to ", url) _, err := http.NewRequest("GET", url+"/ping", http.NoBody) return err } @@ -471,7 +471,7 @@ func hostHandler(cli *VocdoniCLI) error { if err != nil { return err } - infoPrint.Printf("configuring API host to %s\n", host) + infoPrint.Print("configuring API host to ", host, "\n") if err := cli.setHost(host); err != nil { return err } @@ -489,7 +489,7 @@ func hostHandler(cli *VocdoniCLI) error { } func accountSetValidator(cli *VocdoniCLI) error { - infoPrint.Printf("enter the name and a public key of the validator, leave it bank for using the selected account\n") + infoPrint.Print("enter the name and a public key of the validator, leave it bank for using the selected account\n") n := ui.Prompt{ Label: "name", @@ -519,13 +519,13 @@ func accountSetValidator(cli *VocdoniCLI) error { return err } - infoPrint.Printf("transaction sent! hash %s\n", hash.String()) - infoPrint.Printf("waiting for confirmation...") + infoPrint.Print("transaction sent! hash ", hash.String(), "\n") + infoPrint.Print("waiting for confirmation...") ok := cli.waitForTransaction(hash) if !ok { return fmt.Errorf("transaction was not included") } - infoPrint.Printf(" transaction confirmed!\n") + infoPrint.Print(" transaction confirmed!\n") return nil } @@ -551,7 +551,7 @@ func accountSetMetadata(cli *VocdoniCLI) error { } if currentAccount.Metadata != nil { - log.Infof("account has metadata (%s) let's update it", currentAccount.InfoURL) + log.Info("account has metadata (", currentAccount.InfoURL, ") let's update it") accMeta = *currentAccount.Metadata } @@ -600,13 +600,13 @@ func accountSetMetadata(cli *VocdoniCLI) error { return err } - infoPrint.Printf("set account metadata...\n") + infoPrint.Print("set account metadata...\n") txHash, err := cli.api.AccountSetMetadata(&accMeta) if err != nil { return err } - infoPrint.Printf("account transaction sent! hash is %s\n", txHash.String()) - infoPrint.Printf("waiting for confirmation...\n") + infoPrint.Print("account transaction sent! hash is ", txHash.String(), "\n") + infoPrint.Print("waiting for confirmation...\n") if !cli.waitForTransaction(txHash) { return fmt.Errorf("transaction was not included") } @@ -614,7 +614,7 @@ func accountSetMetadata(cli *VocdoniCLI) error { } func electionHandler(cli *VocdoniCLI) error { - infoPrint.Printf("preparing the election template...\n") + infoPrint.Print("preparing the election template...\n") description := api.ElectionDescription{ Title: map[string]string{"default": "election title"}, Description: map[string]string{"default": "election description"}, @@ -691,12 +691,12 @@ func electionHandler(cli *VocdoniCLI) error { return err } - infoPrint.Printf("creating new election...\n") + infoPrint.Print("creating new election...\n") electionID, err := cli.api.NewElection(&description, true) if err != nil { return err } - infoPrint.Printf("election transaction sent! electionID is %s\n", electionID.String()) + infoPrint.Print("election transaction sent! electionID is ", electionID.String(), "\n") return nil } diff --git a/cmd/end2endtest/main.go b/cmd/end2endtest/main.go index eed064e35..925b6e21b 100644 --- a/cmd/end2endtest/main.go +++ b/cmd/end2endtest/main.go @@ -100,7 +100,7 @@ func (c *config) Clone() *config { for i, key := range c.accountKeys { newKey := ethereum.SignKeys{} if err := newKey.AddHexKey(hex.EncodeToString(key.PrivateKey())); err != nil { - log.Fatalf("could not clone account private key") + log.Fatal("could not clone account private key") } cloned.accountKeys[i] = &newKey } @@ -122,17 +122,17 @@ func parseFlags(c *config) { flag.IntVar(&c.runs, "runs", 1, "number of tests to run (of the same type specified in --operation)") flag.Usage = func() { - fmt.Fprintf(os.Stderr, "Usage of %s:\n", os.Args[0]) + fmt.Fprint(os.Stderr, "Usage of ", os.Args[0], ":\n") flag.PrintDefaults() - fmt.Fprintf(os.Stderr, "\nSome examples of different operation modes:\n") + fmt.Fprint(os.Stderr, "\nSome examples of different operation modes:\n") for name, op := range ops { - fmt.Fprintf(os.Stderr, "### %s\n", name) - fmt.Fprintf(os.Stderr, "\t"+op.description+"\n") - fmt.Fprintf(os.Stderr, op.example+"\n") - fmt.Fprintf(os.Stderr, "\n") + fmt.Fprint(os.Stderr, "### ", name, "\n") + fmt.Fprint(os.Stderr, "\t", op.description, "\n") + fmt.Fprint(os.Stderr, op.example, "\n") + fmt.Fprint(os.Stderr, "\n") } - fmt.Fprintf(os.Stderr, "If the network is deployed locally using the docker test suite, ") - fmt.Fprintf(os.Stderr, "the faucet URL might be configured as `--faucet=http://localhost:9090/v2/open/claim`\n") + fmt.Fprint(os.Stderr, "If the network is deployed locally using the docker test suite, ") + fmt.Fprint(os.Stderr, "the faucet URL might be configured as `--faucet=http://localhost:9090/v2/open/claim`\n") } flag.CommandLine.SortFlags = false @@ -158,7 +158,7 @@ func createSignKeys(c *config) error { return err } c.accountKeys[i] = ak - log.Infof("privkey %x = account %s", ak.PrivateKey(), ak.AddressString()) + log.Info("privkey ", fmt.Sprintf("%x", ak.PrivateKey()), " = account ", ak.AddressString()) } return nil } @@ -198,14 +198,14 @@ func privKeyToSigner(key string) (*ethereum.SignKeys, error) { if len(key) > 0 { skey = ethereum.NewSignKeys() if err := skey.AddHexKey(key); err != nil { - return nil, fmt.Errorf("cannot create key %s with err %s", key, err) + return nil, fmt.Errorf("cannot create key %s: %v", key, err) } } return skey, nil } func main() { - fmt.Fprintf(os.Stderr, "vocdoni version %q\n", internal.Version) + fmt.Fprint(os.Stderr, "vocdoni version \"", internal.Version, "\"\n") mainConfig := &config{} parseFlags(mainConfig) @@ -214,7 +214,7 @@ func main() { createAccount := func(c *config) (*apiclient.HTTPclient, error) { if len(c.accountPrivKeys) == 0 { c.accountPrivKeys = []string{util.RandomHex(32)} - log.Infof("no keys passed, generated random private key: %s", c.accountPrivKeys) + log.Info("no keys passed, generated random private key: ", c.accountPrivKeys) } if err := createSignKeys(c); err != nil { log.Fatal(err) @@ -226,7 +226,7 @@ func main() { defer wg.Done() api, err := createAccount(c) if err != nil { - log.Fatalf("could not create account: %v", err) + log.Fatal("could not create account: ", err) } if err := setupAndRun(op, api, c); err != nil { log.Fatal(err) diff --git a/go.mod b/go.mod index b9910ac82..96e99c6a5 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module go.vocdoni.io/dvote -go 1.23.5 +go 1.24.0 // For testing purposes // replace go.vocdoni.io/proto => ../dvote-protobuf diff --git a/tree/arbo/tree.go b/tree/arbo/tree.go index a5a531f3a..68addee3b 100644 --- a/tree/arbo/tree.go +++ b/tree/arbo/tree.go @@ -920,9 +920,7 @@ func (t *Tree) Graphviz(w io.Writer, fromRoot []byte) error { // generate a string Graphviz representation of the first NLevels of the tree // and writes it to w func (t *Tree) GraphvizFirstNLevels(rTx db.Reader, w io.Writer, fromRoot []byte, untilLvl int) error { - fmt.Fprintf(w, `digraph hierarchy { -node [fontname=Monospace,fontsize=10,shape=box] -`) + fmt.Fprint(w, "digraph hierarchy {\nnode [fontname=Monospace,fontsize=10,shape=box]\n") if fromRoot == nil { var err error @@ -946,39 +944,33 @@ node [fontname=Monospace,fontsize=10,shape=box] switch v[0] { case PrefixValueEmpty: case PrefixValueLeaf: - fmt.Fprintf(w, "\"%v\" [style=filled];\n", firstChars(k)) + fmt.Fprint(w, "\"", firstChars(k), "\" [style=filled];\n") // key & value from the leaf kB, vB := ReadLeafValue(v) - fmt.Fprintf(w, "\"%v\" -> {\"k:%v\\nv:%v\"}\n", - firstChars(k), firstChars(kB), - firstChars(vB)) - fmt.Fprintf(w, "\"k:%v\\nv:%v\" [style=dashed]\n", - firstChars(kB), firstChars(vB)) + fmt.Fprint(w, "\"", firstChars(k), "\" -> {\"k:", firstChars(kB), "\\nv:", firstChars(vB), "\"}\n") + fmt.Fprint(w, "\"k:", firstChars(kB), "\\nv:", firstChars(vB), "\" [style=dashed]\n") case PrefixValueIntermediate: l, r := ReadIntermediateChilds(v) lStr := firstChars(l) rStr := firstChars(r) eStr := "" if bytes.Equal(l, t.emptyHash) { - lStr = fmt.Sprintf("empty%v", nEmpties) - eStr += fmt.Sprintf("\"%v\" [style=dashed,label=0];\n", - lStr) + lStr = "empty" + fmt.Sprint(nEmpties) + eStr += "\"" + lStr + "\" [style=dashed,label=0];\n" nEmpties++ } if bytes.Equal(r, t.emptyHash) { - rStr = fmt.Sprintf("empty%v", nEmpties) - eStr += fmt.Sprintf("\"%v\" [style=dashed,label=0];\n", - rStr) + rStr = "empty" + fmt.Sprint(nEmpties) + eStr += "\"" + rStr + "\" [style=dashed,label=0];\n" nEmpties++ } - fmt.Fprintf(w, "\"%v\" -> {\"%v\" \"%v\"}\n", firstChars(k), - lStr, rStr) + fmt.Fprint(w, "\"", firstChars(k), "\" -> {\"", lStr, "\" \"", rStr, "\"}\n") fmt.Fprint(w, eStr) default: } return false }) - fmt.Fprintf(w, "}\n") + fmt.Fprint(w, "}\n") return err } @@ -1007,15 +999,13 @@ func (t *Tree) PrintGraphvizFirstNLevels(rTx db.Reader, fromRoot []byte, untilLv untilLvl = t.maxLevels } w := bytes.NewBufferString("") - fmt.Fprintf(w, - "--------\nGraphviz of the Tree with Root "+hex.EncodeToString(fromRoot)+":\n") + fmt.Fprint(w, "--------\nGraphviz of the Tree with Root ", hex.EncodeToString(fromRoot), ":\n") err := t.GraphvizFirstNLevels(rTx, w, fromRoot, untilLvl) if err != nil { fmt.Println(w) return err } - fmt.Fprintf(w, - "End of Graphviz of the Tree with Root "+hex.EncodeToString(fromRoot)+"\n--------\n") + fmt.Fprint(w, "End of Graphviz of the Tree with Root ", hex.EncodeToString(fromRoot), "\n--------\n") fmt.Println(w) return nil