Skip to content

Commit

Permalink
feat: add CI and made linters happy
Browse files Browse the repository at this point in the history
  • Loading branch information
freak12techno committed Jun 7, 2022
1 parent 1cb76ed commit 6258aa3
Show file tree
Hide file tree
Showing 10 changed files with 185 additions and 47 deletions.
32 changes: 32 additions & 0 deletions .github/workflows/actions.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: test
on: [push]
jobs:
go-build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-go@v2
with:
go-version: '1.18.2'
- run: go version
- run: go mod download
- run: go build
go-vet:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-go@v2
with:
go-version: '1.18.2'
- run: go version
- run: go mod download
- run: go vet
golangci:
name: lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
with:
args: --timeout 300s
29 changes: 29 additions & 0 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: goreleaser

on:
push:
tags:
- '*'

permissions:
contents: write

jobs:
goreleaser:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0

- uses: actions/setup-go@v2
with:
go-version: '1.18.2'
-
name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36 changes: 36 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
linters-settings:
gocritic:
disabled-checks:
- ifElseChain
gosec:
excludes:
- G402
- G404
revive:
rules:
- name: var-declaration
disabled: true

linters:
enable-all: true
disable:
- funlen
- scopelint
- interfacer
- exhaustivestruct
- maligned
- golint
- nlreturn
- wrapcheck
- gomnd
- cyclop
- goerr113
- exhaustruct
- wsl
- lll
- dupl
- varnamelen
- gomoddirectives
- gocognit
- tagliatelle
- errorlint
25 changes: 25 additions & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
before:
hooks:
- go mod tidy
builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- darwin
archives:
- replacements:
darwin: Darwin
linux: Linux
386: i386
amd64: x86_64
checksum:
name_template: 'checksums.txt'
snapshot:
name_template: "{{ .Tag }}-next"
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'
15 changes: 8 additions & 7 deletions main.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
package main

import (
"os"
"time"

"github.com/rs/zerolog"
"github.com/spf13/cobra"
)

Expand All @@ -23,18 +21,20 @@ func Execute(configPath string) {
log := GetLogger(config.LogConfig)

stateManager := NewStateManager(config.StatePath, log)
stateManager.Load()

reportGenerator := NewReportGenerator(stateManager, log, config.Chains)

for {
_ = reportGenerator.GenerateReport()
_ := reportGenerator.GenerateReport()
time.Sleep(time.Second * 30)
}
}

func main() {
var ConfigPath string

var rootCmd = &cobra.Command{
rootCmd := &cobra.Command{
Use: "cosmos-proposals-checker",
Long: "Checks the specific wallets on different chains for proposal votes.",
Run: func(cmd *cobra.Command, args []string) {
Expand All @@ -43,10 +43,11 @@ func main() {
}

rootCmd.PersistentFlags().StringVar(&ConfigPath, "config", "", "Config file path")
rootCmd.MarkPersistentFlagRequired("config")
if err := rootCmd.MarkPersistentFlagRequired("config"); err != nil {
GetDefaultLogger().Fatal().Err(err).Msg("Could not set flag as required")
}

if err := rootCmd.Execute(); err != nil {
log := zerolog.New(zerolog.ConsoleWriter{Out: os.Stdout}).With().Timestamp().Logger()
log.Fatal().Err(err).Msg("Could not start application")
GetDefaultLogger().Fatal().Err(err).Msg("Could not start application")
}
}
34 changes: 24 additions & 10 deletions report_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,15 @@ type ReportGenerator struct {
type ReportEntry struct {
Chain string
Wallet string
ProposalId string
ProposalID string
ProposalDescription string
Vote string
}

func (e *ReportEntry) HasVoted() bool {
return e.Vote != ""
}

type Report struct {
Entries []ReportEntry
}
Expand Down Expand Up @@ -95,26 +99,36 @@ func (g *ReportGenerator) GenerateReport() *Report {
entries = append(entries, ReportEntry{
Chain: chain.Name,
Wallet: wallet,
ProposalId: proposal.ProposalID,
ProposalID: proposal.ProposalID,
ProposalDescription: proposal.Content.Description,
})
}

// Hasn't voted before but voted now - need to close alert/notify about new vote.
if votedNow && !votedBefore {
// entries = append(entries, ReportEntry{
// Chain: chain.Name,
// Wallet: wallet,
// ProposalId: proposal.ProposalID,
// ProposalDescription: proposal.Content.Description,
// Vote: ,
// })
vote := g.StateManager.GetVote(chain.Name, proposal.ProposalID, wallet)
if vote == nil {
g.Logger.Info().
Str("chain", chain.Name).
Str("proposal", proposal.ProposalID).
Str("wallet", wallet).
Msg("No vote found while there should be one")
continue
}

entries = append(entries, ReportEntry{
Chain: chain.Name,
Wallet: wallet,
ProposalID: proposal.ProposalID,
ProposalDescription: proposal.Content.Description,
Vote: vote.Option,
})
}
}
}
}

g.StateManager.CommitNewState()

return &Report{}
return &Report{Entries: entries}
}
40 changes: 27 additions & 13 deletions state_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,28 +18,27 @@ type State struct {
OldVotesState VotesState
}

type WalletVotes map[string]*Vote
type ProposalVotes map[string]WalletVotes
type (
WalletVotes map[string]*Vote
ProposalVotes map[string]WalletVotes
)

// ["chain"]["proposal"]["wallet"]["vote"]
// ["chain"]["proposal"]["wallet"]["vote"].
type VotesState map[string]ProposalVotes

func NewStateManager(path string, logger *zerolog.Logger) *StateManager {
return &StateManager{
StatePath: path,
Logger: logger.With().Str("component", "state_manager").Logger(),
State: State{
VotesState: make(VotesState),
OldVotesState: make(VotesState),
},
}
}

func (m *StateManager) SetVote(chain, proposal, wallet string, vote *Vote) {
var votesState VotesState

if m.State.VotesState == nil {
votesState = make(VotesState)
m.State.VotesState = votesState
}

votesState = m.State.VotesState
votesState := m.State.VotesState

if _, ok := votesState[chain]; !ok {
votesState[chain] = make(ProposalVotes)
Expand All @@ -54,6 +53,20 @@ func (m *StateManager) SetVote(chain, proposal, wallet string, vote *Vote) {
}
}

func (m *StateManager) GetVote(chain, proposal, wallet string) *Vote {
votesState := m.State.VotesState

if _, ok := votesState[chain]; !ok {
return nil
}

if _, ok := votesState[chain][proposal]; !ok {
return nil
}

return votesState[chain][proposal][wallet]
}

func (m *StateManager) HasVotedNow(chain, proposal, wallet string) bool {
if m.State.VotesState == nil {
return false
Expand Down Expand Up @@ -98,13 +111,14 @@ func (m *StateManager) Load() {
}

var state VotesState
if err = json.Unmarshal([]byte(content), &state); err != nil {
if err = json.Unmarshal(content, &state); err != nil {
m.Logger.Warn().Err(err).Msg("Could not unmarshall state")
m.State.OldVotesState = make(VotesState)
return
}

m.State.OldVotesState = state
m.State.VotesState = make(VotesState)
}

func (m *StateManager) Save() {
Expand All @@ -114,7 +128,7 @@ func (m *StateManager) Save() {
return
}

if err = os.WriteFile(m.StatePath, content, 0644); err != nil {
if err = os.WriteFile(m.StatePath, content, 0o600); err != nil {
m.Logger.Warn().Err(err).Msg("Could not save state")
return
}
Expand Down
8 changes: 4 additions & 4 deletions tendermint.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,19 +66,19 @@ func (rpc *RPC) GetVote(proposal, voter string) (*VoteRPCResponse, error) {

func (rpc *RPC) Get(url string, target interface{}) error {
for _, lcd := range rpc.URLs {
fullUrl := lcd + url
rpc.Logger.Trace().Str("url", fullUrl).Msg("Trying making request to LCD")
fullURL := lcd + url
rpc.Logger.Trace().Str("url", fullURL).Msg("Trying making request to LCD")

err := rpc.GetFull(
fullUrl,
fullURL,
target,
)

if err == nil {
return nil
}

rpc.Logger.Warn().Str("url", fullUrl).Err(err).Msg("LCD request failed")
rpc.Logger.Warn().Str("url", fullURL).Err(err).Msg("LCD request failed")
}

rpc.Logger.Warn().Str("url", url).Msg("All LCD requests failed")
Expand Down
2 changes: 0 additions & 2 deletions types.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package main

const VotingPeriod = "PROPOSAL_STATUS_VOTING_PERIOD"

// RPC response types.
type Proposal struct {
ProposalID string `json:"proposal_id"`
Expand Down
11 changes: 0 additions & 11 deletions utils.go

This file was deleted.

0 comments on commit 6258aa3

Please sign in to comment.