Enable CI through GitHub Actions (#4)

This commit is contained in:
Jamie Holdstock 2020-05-14 13:53:48 +01:00 committed by GitHub
parent 43f80f009d
commit b45bbf8896
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 75 additions and 12 deletions

28
.github/workflows/go.yml vendored Normal file
View 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

View File

@ -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
) )

View File

@ -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
View 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 \