Skip to content

Commit

Permalink
feat: init project
Browse files Browse the repository at this point in the history
  • Loading branch information
wujunze committed Jul 20, 2023
0 parents commit 3aafe3a
Show file tree
Hide file tree
Showing 6 changed files with 581 additions and 0 deletions.
105 changes: 105 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Run tests

on:
push:
branches:
- main
- dev
paths-ignore:
- '**.md'
- '**.yml'
- '**.yaml'
- 'examples/*'
- '!.github/workflows/test.yml'
pull_request:
branches:
- main
- dev
paths-ignore:
- '**.md'
- '**.yml'
- '**.yaml'
- 'examples/*'
- '!.github/workflows/test.yml'

env:
GO111MODULE: on
GOPROXY: "https://proxy.golang.org"

jobs:
lint:
strategy:
matrix:
os:
- ubuntu-latest
- macos-latest
name: Run golangci-lint
runs-on: ${{ matrix.os }}
steps:
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: '^1.17'

- name: Checkout repository
uses: actions/checkout@v3

- name: Setup and run golangci-lint
uses: golangci/golangci-lint-action@v3
with:
version: v1.51.2
args: --timeout 5m -v -E gofumpt -E gocritic -E misspell -E revive -E godot
test:
needs: lint
strategy:
fail-fast: false
matrix:
go: [1.17]
os: [ubuntu-latest, macos-latest, windows-latest]
name: Go ${{ matrix.go }} @ ${{ matrix.os }}
runs-on: ${{ matrix.os}}
steps:
- name: Checkout repository
uses: actions/checkout@v3
with:
ref: ${{ github.ref }}

- name: Setup Go
uses: actions/setup-go@v3
with:
go-version: ${{ matrix.go }}

- name: Print Go environment
id: go-env
run: |
printf "Using go at: $(which go)\n"
printf "Go version: $(go version)\n"
printf "\n\nGo environment:\n\n"
go env
printf "\n\nSystem environment:\n\n"
env
# Calculate the short SHA1 hash of the git commit
echo "SHORT_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
echo "GO_CACHE=$(go env GOCACHE)" >> $GITHUB_OUTPUT
- name: Cache go modules
uses: actions/cache@v3
with:
path: |
${{ steps.go-env.outputs.GO_CACHE }}
~/go/pkg/mod
key: ${{ runner.os }}-${{ matrix.go }}-go-ci-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-${{ matrix.go }}-go-ci
- name: Run unit tests
run: go test -v -race -coverprofile="codecov.report" -covermode=atomic

- name: Upload code coverage report to Codecov
uses: codecov/codecov-action@v3
with:
file: ./codecov.report
flags: unittests
name: codecov-ants
fail_ci_if_error: true
verbose: true
18 changes: 18 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

vendor/

.idea

.DS_Store
115 changes: 115 additions & 0 deletions arns.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package goarns

import (
"fmt"
"github.com/tidwall/gjson"

Check failure on line 5 in arns.go

View workflow job for this annotation

GitHub Actions / Run golangci-lint (ubuntu-latest)

File is not `gofumpt`-ed (gofumpt)
"io/ioutil"
"net/http"
"time"

Check failure on line 8 in arns.go

View workflow job for this annotation

GitHub Actions / Run golangci-lint (ubuntu-latest)

File is not `gofumpt`-ed (gofumpt)
)

type ArNS struct {
DreUrl string

Check warning on line 12 in arns.go

View workflow job for this annotation

GitHub Actions / Run golangci-lint (ubuntu-latest)

var-naming: struct field DreUrl should be DreURL (revive)
ArNSAddress string
HttpClient *http.Client

Check warning on line 14 in arns.go

View workflow job for this annotation

GitHub Actions / Run golangci-lint (ubuntu-latest)

var-naming: struct field HttpClient should be HTTPClient (revive)
}

func NewArNS(dreUrl string, arNSAddr string, timout time.Duration) *ArNS {

Check warning on line 17 in arns.go

View workflow job for this annotation

GitHub Actions / Run golangci-lint (ubuntu-latest)

var-naming: func parameter dreUrl should be dreURL (revive)

Check failure on line 18 in arns.go

View workflow job for this annotation

GitHub Actions / Run golangci-lint (ubuntu-latest)

File is not `gofumpt`-ed (gofumpt)
// default timeout is 5s
if timout == 0 {
timout = 5 * time.Second
}

httpClient := &http.Client{
Timeout: timout, // Set the timeout for HTTP requests
}
return &ArNS{
DreUrl: dreUrl,
ArNSAddress: arNSAddr,
HttpClient: httpClient,
}
}

func (a *ArNS) QueryLatestRecord(domain string) (txId string, err error) {
// step1 query NameCA address
caAddress, err := a.QueryNameCa(domain)
if err != nil {
return "", err
}
// step2 query latest txId
//Currently, only level-1 domain name resolution is queried

Check failure on line 41 in arns.go

View workflow job for this annotation

GitHub Actions / Run golangci-lint (ubuntu-latest)

commentFormatting: put a space between `//` and comment text (gocritic)
txId, err = a.GetArNSTxID(caAddress, "@")

return

}

func (a *ArNS) QueryNameCa(domain string) (caAddress string, err error) {
baseURL := a.DreUrl + "/contract/"

// Construct the complete URL
url := baseURL + "?id=" + a.ArNSAddress

// Make the HTTP request using the custom HTTP client
response, err := a.HttpClient.Get(url)
if err != nil {
return "", err
}
defer response.Body.Close()

// Check the response status code
if response.StatusCode != http.StatusOK {
return "", fmt.Errorf("unexpected response status: %s", response.Status)
}

// Read the response body
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return "", err
}

value := gjson.Get(string(body), "state.records."+domain+".contractTxId")

if !value.Exists() {
return "", fmt.Errorf("domain %s not exist", domain)
}

return value.String(), nil

}

func (a *ArNS) GetArNSTxID(caAddress string, domain string) (txId string, err error) {

baseURL := a.DreUrl + "/contract/"

// Construct the complete URL
url := baseURL + "?id=" + caAddress

// Make the HTTP request using the custom HTTP client
response, err := a.HttpClient.Get(url)
if err != nil {
return "", err
}
defer response.Body.Close()

// Check the response status code
if response.StatusCode != http.StatusOK {
return "", fmt.Errorf("GetArNSTxID: unexpected response status: %s", response.Status)
}

// Read the response body
body, err := ioutil.ReadAll(response.Body)
if err != nil {
return "", err
}

value := gjson.Get(string(body), "state.records."+domain)

if !value.Exists() {
return "", fmt.Errorf("GetArNSTxID: domain %s not exist", domain)
}

return value.String(), nil

}
Loading

0 comments on commit 3aafe3a

Please sign in to comment.