Enable CI through GitHub Actions (#4)
This commit is contained in:
parent
43f80f009d
commit
b45bbf8896
28
.github/workflows/go.yml
vendored
Normal file
28
.github/workflows/go.yml
vendored
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
name: Build and Test
|
||||||
|
on: [push, pull_request]
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
name: Go CI
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
go: [1.13, 1.14]
|
||||||
|
steps:
|
||||||
|
- name: Set up Go
|
||||||
|
uses: actions/setup-go@v2
|
||||||
|
with:
|
||||||
|
go-version: ${{ matrix.go }}
|
||||||
|
- name: Check out source
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
- name: Install Linters
|
||||||
|
run: "curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s -- -b $(go env GOPATH)/bin v1.27.0"
|
||||||
|
- name: Build
|
||||||
|
env:
|
||||||
|
GO111MODULE: "on"
|
||||||
|
run: go build ./...
|
||||||
|
- name: Test
|
||||||
|
env:
|
||||||
|
GO111MODULE: "on"
|
||||||
|
run: |
|
||||||
|
export PATH=${PATH}:$(go env GOPATH)/bin
|
||||||
|
sh ./run_tests.sh
|
||||||
@ -20,7 +20,6 @@ var (
|
|||||||
vspBkt = []byte("vspbkt")
|
vspBkt = []byte("vspbkt")
|
||||||
ticketsBkt = []byte("ticketsbkt")
|
ticketsBkt = []byte("ticketsbkt")
|
||||||
versionK = []byte("version")
|
versionK = []byte("version")
|
||||||
backupFile = "backup.kv"
|
|
||||||
version = 1
|
version = 1
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
23
methods.go
23
methods.go
@ -34,6 +34,7 @@ func sendJSONResponse(resp interface{}, code int, c *gin.Context) {
|
|||||||
sig := ed25519.Sign(cfg.signKey, dec)
|
sig := ed25519.Sign(cfg.signKey, dec)
|
||||||
c.Writer.Header().Set("Content-Type", "application/json; charset=utf-8")
|
c.Writer.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
c.Writer.Header().Set("VSP-Signature", hex.EncodeToString(sig))
|
c.Writer.Header().Set("VSP-Signature", hex.EncodeToString(sig))
|
||||||
|
c.Writer.WriteHeader(code)
|
||||||
c.Writer.Write(dec)
|
c.Writer.Write(dec)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,14 +133,14 @@ findAddress:
|
|||||||
}
|
}
|
||||||
voteAddr, err := dcrutil.DecodeAddress(feeEntry.Address, cfg.netParams)
|
voteAddr, err := dcrutil.DecodeAddress(feeEntry.Address, cfg.netParams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: DecodeAddress: %v", err)
|
fmt.Printf("PayFee: DecodeAddress: %v", err)
|
||||||
c.AbortWithError(http.StatusInternalServerError, errors.New("database error"))
|
c.AbortWithError(http.StatusInternalServerError, errors.New("database error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_, err = dcrutil.NewAddressPubKeyHash(dcrutil.Hash160(votingWIF.PubKey()), cfg.netParams,
|
_, err = dcrutil.NewAddressPubKeyHash(dcrutil.Hash160(votingWIF.PubKey()), cfg.netParams,
|
||||||
dcrec.STEcdsaSecp256k1)
|
dcrec.STEcdsaSecp256k1)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: NewAddressPubKeyHash: %v", err)
|
fmt.Printf("PayFee: NewAddressPubKeyHash: %v", err)
|
||||||
c.AbortWithError(http.StatusInternalServerError, errors.New("failed to deserialize voting wif"))
|
c.AbortWithError(http.StatusInternalServerError, errors.New("failed to deserialize voting wif"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -149,7 +150,7 @@ findAddress:
|
|||||||
// TODO - wallet relayfee
|
// TODO - wallet relayfee
|
||||||
relayFee, err := dcrutil.NewAmount(0.0001)
|
relayFee, err := dcrutil.NewAmount(0.0001)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: failed to NewAmount: %v", err)
|
fmt.Printf("PayFee: failed to NewAmount: %v", err)
|
||||||
c.AbortWithError(http.StatusInternalServerError, errors.New("internal error"))
|
c.AbortWithError(http.StatusInternalServerError, errors.New("internal error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -164,7 +165,7 @@ findAddress:
|
|||||||
// Get vote tx to give to wallet
|
// Get vote tx to give to wallet
|
||||||
ticketHash, err := chainhash.NewHashFromStr(feeEntry.Hash)
|
ticketHash, err := chainhash.NewHashFromStr(feeEntry.Hash)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: NewHashFromStr: %v", err)
|
fmt.Printf("PayFee: NewHashFromStr: %v", err)
|
||||||
c.AbortWithError(http.StatusInternalServerError, errors.New("internal error"))
|
c.AbortWithError(http.StatusInternalServerError, errors.New("internal error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -172,14 +173,14 @@ findAddress:
|
|||||||
now := time.Now()
|
now := time.Now()
|
||||||
resp, err := PayFee2(c.Request.Context(), ticketHash, votingWIF, feeTx)
|
resp, err := PayFee2(c.Request.Context(), ticketHash, votingWIF, feeTx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: %v", err)
|
fmt.Printf("PayFee: %v", err)
|
||||||
c.AbortWithError(http.StatusInternalServerError, errors.New("RPC server error"))
|
c.AbortWithError(http.StatusInternalServerError, errors.New("RPC server error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
err = db.InsertFeeAddressVotingKey(voteAddr.Address(), votingWIF.String(), voteBits)
|
err = db.InsertFeeAddressVotingKey(voteAddr.Address(), votingWIF.String(), voteBits)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: InsertVotingKey failed: %v", err)
|
fmt.Printf("PayFee: InsertVotingKey failed: %v", err)
|
||||||
c.AbortWithError(http.StatusInternalServerError, errors.New("internal error"))
|
c.AbortWithError(http.StatusInternalServerError, errors.New("internal error"))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@ -195,19 +196,19 @@ func PayFee2(ctx context.Context, ticketHash *chainhash.Hash, votingWIF *dcrutil
|
|||||||
var resp dcrdtypes.TxRawResult
|
var resp dcrdtypes.TxRawResult
|
||||||
err := nodeConnection.Call(ctx, "getrawtransaction", &resp, ticketHash.String())
|
err := nodeConnection.Call(ctx, "getrawtransaction", &resp, ticketHash.String())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: getrawtransaction: %v", err)
|
fmt.Printf("PayFee: getrawtransaction: %v", err)
|
||||||
return "", errors.New("RPC server error")
|
return "", errors.New("RPC server error")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = nodeConnection.Call(ctx, "addticket", nil, resp.Hex)
|
err = nodeConnection.Call(ctx, "addticket", nil, resp.Hex)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: addticket: %v", err)
|
fmt.Printf("PayFee: addticket: %v", err)
|
||||||
return "", errors.New("RPC server error")
|
return "", errors.New("RPC server error")
|
||||||
}
|
}
|
||||||
|
|
||||||
err = nodeConnection.Call(ctx, "importprivkey", nil, votingWIF.String(), "imported", false, 0)
|
err = nodeConnection.Call(ctx, "importprivkey", nil, votingWIF.String(), "imported", false, 0)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: importprivkey: %v", err)
|
fmt.Printf("PayFee: importprivkey: %v", err)
|
||||||
return "", errors.New("RPC server error")
|
return "", errors.New("RPC server error")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,14 +216,14 @@ func PayFee2(ctx context.Context, ticketHash *chainhash.Hash, votingWIF *dcrutil
|
|||||||
feeTxBuf.Grow(feeTx.SerializeSize())
|
feeTxBuf.Grow(feeTx.SerializeSize())
|
||||||
err = feeTx.Serialize(feeTxBuf)
|
err = feeTx.Serialize(feeTxBuf)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: failed to serialize fee transaction: %v", err)
|
fmt.Printf("PayFee: failed to serialize fee transaction: %v", err)
|
||||||
return "", errors.New("serialization error")
|
return "", errors.New("serialization error")
|
||||||
}
|
}
|
||||||
|
|
||||||
var res string
|
var res string
|
||||||
err = nodeConnection.Call(ctx, "sendrawtransaction", &res, hex.NewEncoder(feeTxBuf), false)
|
err = nodeConnection.Call(ctx, "sendrawtransaction", &res, hex.NewEncoder(feeTxBuf), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Errorf("PayFee: sendrawtransaction: %v", err)
|
fmt.Printf("PayFee: sendrawtransaction: %v", err)
|
||||||
return "", errors.New("transaction failed to send")
|
return "", errors.New("transaction failed to send")
|
||||||
}
|
}
|
||||||
return res, nil
|
return res, nil
|
||||||
|
|||||||
35
run_tests.sh
Executable file
35
run_tests.sh
Executable file
@ -0,0 +1,35 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# usage:
|
||||||
|
# ./run_tests.sh
|
||||||
|
|
||||||
|
set -ex
|
||||||
|
|
||||||
|
go version
|
||||||
|
|
||||||
|
env GORACE="halt_on_error=1" go test -race ./...
|
||||||
|
|
||||||
|
if [[ -v CI ]]; then
|
||||||
|
OUT_FORMAT="github-actions"
|
||||||
|
else
|
||||||
|
OUT_FORMAT="colored-line-number"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# some linters are commented until code is in a more stable state.
|
||||||
|
golangci-lint run --disable-all --deadline=10m \
|
||||||
|
--out-format=$OUT_FORMAT \
|
||||||
|
--enable=gofmt \
|
||||||
|
--enable=golint \
|
||||||
|
--enable=govet \
|
||||||
|
--enable=gosimple \
|
||||||
|
--enable=unconvert \
|
||||||
|
--enable=ineffassign \
|
||||||
|
--enable=staticcheck \
|
||||||
|
--enable=structcheck \
|
||||||
|
--enable=goimports \
|
||||||
|
--enable=misspell \
|
||||||
|
--enable=unparam \
|
||||||
|
--enable=asciicheck
|
||||||
|
# --enable=deadcode \
|
||||||
|
# --enable=errcheck \
|
||||||
|
# --enable=unused \
|
||||||
Loading…
x
Reference in New Issue
Block a user