Skip to content

Commit

Permalink
Add base backup setup
Browse files Browse the repository at this point in the history
  • Loading branch information
zivkovicmilos committed Oct 3, 2023
0 parents commit f0fa1a9
Show file tree
Hide file tree
Showing 16 changed files with 541 additions and 0 deletions.
4 changes: 4 additions & 0 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# CODEOWNERS: https://help.github.com/articles/about-codeowners/

# Primary repo maintainers.
* @gnolang/tech-staff
24 changes: 24 additions & 0 deletions .github/dependabot.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
version: 2
updates:

# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"
labels:
- "github_actions"

# Maintain dependencies for top level Go modules
- package-ecosystem: gomod
directory: /
target-branch: "main"
schedule:
interval: weekly
labels:
- "dependencies"
open-pull-requests-limit: 10
pull-request-branch-name:
separator: "-"
reviewers:
- "zivkovicmilos"
124 changes: 124 additions & 0 deletions .github/golangci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
run:
concurrency: 8
timeout: 10m
issue-exit-code: 1
tests: true
skip-dirs-use-default: true
modules-download-mode: readonly
allow-parallel-runners: false
go: ""

output:
uniq-by-line: false
path-prefix: ""
sort-results: true

issues:
max-issues-per-linter: 0
max-same-issues: 0
new: false
fix: false
exclude-rules:
- path: (.+)_test.go
linters:
- nilnil
- gosec

linters:
fast: false
disable-all: true
enable:
- asasalint # Check for pass []any as any in variadic func(...any)
- asciicheck # Detects funky ASCII characters
- bidichk # Checks for dangerous unicode character sequences
- durationcheck # Check for two durations multiplied together
- errcheck # Forces to not skip error check
- exportloopref # Checks for pointers to enclosing loop variables
- gocritic # Bundles different linting checks
- godot # Checks for periods at the end of comments
- gomoddirectives # Allow or ban replace directives in go.mod
- gosimple # Code simplification
- govet # Official Go tool
- ineffassign # Detects when assignments to existing variables are not used
- nakedret # Finds naked/bare returns and requires change them
- nilerr # Requires explicit returns
- nilnil # Requires explicit returns
- promlinter # Lints Prometheus metrics names
- reassign # Checks that package variables are not reassigned
- revive # Drop-in replacement for golint
- tagliatelle # Checks struct tags
- tenv # Detects using os.Setenv instead of t.Setenv
- testableexamples # Checks if examples are testable (have expected output)
- unparam # Finds unused params
- usestdlibvars # Detects the possibility to use variables/constants from stdlib
- wastedassign # Finds wasted assignment statements
- loggercheck # Checks the odd number of key and value pairs for common logger libraries
- nestif # Finds deeply nested if statements
- nonamedreturns # Reports all named returns
- decorder # Check declaration order of types, consts, vars and funcs
- gocheckcompilerdirectives # Checks that compiler directive comments (//go:) are valid
- gochecknoinits # Checks for init methods
- whitespace # Tool for detection of leading and trailing whitespace
- wsl # Forces you to use empty lines
- unconvert # Unnecessary type conversions
- tparallel # Detects inappropriate usage of t.Parallel() method in your Go test codes
- thelper # Detects golang test helpers without t.Helper() call and checks the consistency of test helpers
- stylecheck # Stylecheck is a replacement for golint
- prealloc # Finds slice declarations that could potentially be pre-allocated
- predeclared # Finds code that shadows one of Go's predeclared identifiers
- nolintlint # Ill-formed or insufficient nolint directives
- nlreturn # Checks for a new line before return and branch statements to increase code clarity
- misspell # Misspelled English words in comments
- makezero # Finds slice declarations with non-zero initial length
- lll # Long lines
- importas # Enforces consistent import aliases
- gosec # Security problems
- gofmt # Whether the code was gofmt-ed
- gofumpt # Stricter gofmt
- goimports # Unused imports
- goconst # Repeated strings that could be replaced by a constant
- dogsled # Checks assignments with too many blank identifiers (e.g. x, , , _, := f())
- dupl # Code clone detection
- errname # Checks that sentinel errors are prefixed with the Err and error types are suffixed with the Error
- errorlint # errorlint is a linter for that can be used to find code that will cause problems with the error wrapping scheme introduced in Go 1.13
- unused # Checks Go code for unused constants, variables, functions and types

linters-settings:
gocritic:
enabled-tags:
- diagnostic
- experimental
- opinionated
- performance
- style
disabled-checks:
- hugeParam
- rangeExprCopy
- rangeValCopy
- importShadow
- unnamedResult
errcheck:
check-type-assertions: false
check-blank: true
exclude-functions:
- io/ioutil.ReadFile
- io.Copy(*bytes.Buffer)
- io.Copy(os.Stdout)
nakedret:
max-func-lines: 1
govet:
enable-all: true
gofmt:
simplify: true
goconst:
min-len: 3
min-occurrences: 3
godot:
scope: all
period: false
tagliatelle:
case:
use-field-name: true
rules:
json: goCamel
yaml: goCamel
22 changes: 22 additions & 0 deletions .github/workflows/lint.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
on:
workflow_call:
workflow_dispatch:

jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: 1.20.x

- name: Checkout code
uses: actions/checkout@v4

- name: Lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.54 # do not forget to change the version also on the makefile
args:
--config=./.github/golangci.yaml
14 changes: 14 additions & 0 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
on:
push:
branches:
- main
pull_request:

jobs:
lint:
name: Go Linter
uses: ./.github/workflows/lint.yaml

test:
name: Go Test
uses: ./.github/workflows/test.yaml
32 changes: 32 additions & 0 deletions .github/workflows/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
on:
workflow_call:
workflow_dispatch:

jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: 1.20.x

- name: Checkout code
uses: actions/checkout@v4

- name: Go test
run: go test -shuffle=on -coverprofile coverage.out -timeout 5m ./...

test-with-race:
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v4
with:
go-version: 1.20.x

- name: Checkout code
uses: actions/checkout@v4

- name: Go race test
run: go test -race -shuffle=on -timeout 5m ./...
13 changes: 13 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.PHONY: lint
lint:
golangci-lint run --config .github/golangci.yaml

.PHONY: gofumpt
gofumpt:
go install mvdan.cc/gofumpt@latest
gofumpt -l -w .

.PHONY: fixalign
fixalign:
go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest
fieldalignment -fix $(filter-out $@,$(MAKECMDGOALS)) # the full package name (not path!)
23 changes: 23 additions & 0 deletions backup/backup.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package backup

import (
"github.com/gnolang/tx-archive/backup/client"
"github.com/gnolang/tx-archive/log"
)

// ExecuteBackup executes the node backup process
func ExecuteBackup(
_ client.Client,
_ log.Logger,
_ Config,
) error {
// Verify the output file can be generated
// TODO add functionality
// Determine the right bound
// TODO add functionality
// Gather the chain data from the node
// TODO add functionality
// Write the chain data to a file
// TODO add functionality
return nil
}
3 changes: 3 additions & 0 deletions backup/client/client.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package client

type Client interface{}
55 changes: 55 additions & 0 deletions backup/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package backup

import (
"errors"
"os"
)

const (
DefaultOutputFileLocation = "./backup.json"
)

var (
errInvalidOutputLocation = errors.New("invalid output file location")
errOutputFileExists = errors.New("output file already exists")
errInvalidRange = errors.New("invalid backup block range")
)

// Config is the base chain backup configuration
type Config struct {
ToBlock *uint64 // the right bound for the block range; latest if not specified
OutputFile string // the output file path
FromBlock uint64 // the left bound for the block range
Overwrite bool // flag indicating if the output file should be overwritten
}

// DefaultConfig returns the default backup configuration
func DefaultConfig() Config {
return Config{
OutputFile: DefaultOutputFileLocation,
Overwrite: false, // no overwrites by default
ToBlock: nil, // to latest block by default
FromBlock: 0, // from genesis by default
}
}

// ValidateConfig validates the base backup configuration
func ValidateConfig(cfg Config) error {
// Make sure the output file path is valid
if cfg.OutputFile == "" {
return errInvalidOutputLocation
}

// Make sure the output file can be overwritten, if it exists
if _, err := os.Stat(cfg.OutputFile); err == nil && !cfg.Overwrite {
// File already exists, and the overwrite flag is not set
return errOutputFileExists
}

// Make sure the backup limits are correct
if cfg.ToBlock != nil && *cfg.ToBlock < cfg.FromBlock {
return errInvalidRange
}

return nil
}
Loading

0 comments on commit f0fa1a9

Please sign in to comment.