Rename folders (#97)

* Rename arkd folder & drop cli

* Rename ark cli folder & update docs

* Update readme

* Fix

* scripts: add build-all

* Add target to build cli for all platforms

* Update build scripts

---------

Co-authored-by: tiero <3596602+tiero@users.noreply.github.com>
This commit is contained in:
Pietralberto Mazza
2024-02-09 19:32:58 +01:00
committed by GitHub
parent 0d8c7bffb2
commit dc00d60585
119 changed files with 154 additions and 449 deletions

View File

@@ -5,7 +5,7 @@ on:
branches: branches:
- master - master
paths: paths:
- "asp/**" - "server/**"
jobs: jobs:
test: test:
@@ -13,7 +13,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
defaults: defaults:
run: run:
working-directory: ./asp working-directory: ./server
steps: steps:
- uses: actions/setup-go@v3 - uses: actions/setup-go@v3
with: with:

View File

@@ -6,14 +6,14 @@ on:
tags: tags:
- "*" - "*"
paths: paths:
- "asp/**" - "server/**"
jobs: jobs:
goreleaser: goreleaser:
runs-on: ubuntu-20.04 runs-on: ubuntu-20.04
defaults: defaults:
run: run:
working-directory: ./asp working-directory: ./server
env: env:
DOCKER_CLI_EXPERIMENTAL: "enabled" DOCKER_CLI_EXPERIMENTAL: "enabled"

View File

@@ -3,13 +3,13 @@ name: ci_unit
on: on:
push: push:
paths: paths:
- "asp/**" - "server/**"
branches: [master] branches: [master]
pull_request: pull_request:
branches: branches:
- master - master
paths: paths:
- "asp/**" - "server/**"
jobs: jobs:
test: test:
@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
defaults: defaults:
run: run:
working-directory: ./asp working-directory: ./server
steps: steps:
- uses: actions/setup-go@v3 - uses: actions/setup-go@v3
with: with:
@@ -27,7 +27,7 @@ jobs:
uses: golangci/golangci-lint-action@v3 uses: golangci/golangci-lint-action@v3
with: with:
version: v1.54 version: v1.54
working-directory: ./asp working-directory: ./server
- name: check code integrity - name: check code integrity
uses: securego/gosec@master uses: securego/gosec@master
with: with:

View File

@@ -11,7 +11,7 @@ WORKDIR /app
COPY . . COPY . .
RUN cd asp && CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -ldflags="-X 'main.Version=${COMMIT}' -X 'main.Commit=${COMMIT}' -X 'main.Date=${COMMIT}'" -o ../bin/arkd cmd/arkd/main.go RUN cd server && CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -ldflags="-X 'main.Version=${COMMIT}' -X 'main.Commit=${COMMIT}' -X 'main.Date=${COMMIT}'" -o ../bin/arkd cmd/arkd/main.go
# Second image, running the arkd executable # Second image, running the arkd executable
FROM debian:buster-slim FROM debian:buster-slim

View File

@@ -6,8 +6,8 @@ Welcome to the Ark monorepo.
In this repository you can find: In this repository you can find:
- `asp` - a proof of concept of an Ark Service Provider. - `server` - a proof of concept of an Ark Service Provider.
- `website` - the website where to find documentation about Ark protocol and products. - `website` - the website where to find documentation about Ark protocol and products.
- `noah` - the initial Ark wallet, served as CLI. - `client` - the initial Ark wallet, served as CLI.

View File

@@ -1,81 +0,0 @@
package main
import (
"fmt"
"strconv"
"github.com/urfave/cli/v2"
)
var (
rpcServerFlag = &cli.StringFlag{
Name: "rpcserver",
Usage: "the addr of the arkd to connect to in the form <host>:<port>",
Value: defaultRpcServer,
}
noTlsFlag = &cli.BoolFlag{
Name: "no-tls",
Usage: "used to disable TLS termination",
Value: false,
}
)
var configCommand = &cli.Command{
Name: "config",
Usage: "Print local configuration of the ark CLI",
Action: printConfigAction,
Subcommands: []*cli.Command{
{
Name: "init",
Usage: "initialize the CLI state with flags",
Action: configInitAction,
Flags: []cli.Flag{rpcServerFlag, noTlsFlag},
},
{
Name: "set",
Usage: "set a <key> <value> in the local state",
Action: configSetAction,
},
},
}
func printConfigAction(ctx *cli.Context) error {
state, err := getState()
if err != nil {
return err
}
for key, value := range state {
fmt.Println(key + ": " + value)
}
return nil
}
func configInitAction(ctx *cli.Context) error {
return setState(map[string]string{
"rpcserver": ctx.String("rpcserver"),
"no-tls": strconv.FormatBool(ctx.Bool("no-tls")),
})
}
func configSetAction(c *cli.Context) error {
if c.NArg() < 2 {
return fmt.Errorf("key and/or value are missing")
}
key := c.Args().Get(0)
value := c.Args().Get(1)
if value == "" {
return fmt.Errorf("value must not be an empty string")
}
if err := setState(map[string]string{key: value}); err != nil {
return err
}
fmt.Printf("%s %s has been set\n", key, value)
return nil
}

View File

@@ -1,209 +0,0 @@
package main
import (
"encoding/json"
"errors"
"fmt"
"os"
"os/user"
"path/filepath"
"strconv"
"strings"
arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1"
"github.com/ark-network/ark/common"
"github.com/gogo/protobuf/jsonpb"
"github.com/gogo/protobuf/proto"
"github.com/urfave/cli/v2"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
)
const (
DATADIR_ENVVAR = "ARK_CLI_DATADIR"
STATE_FILE = "state.json"
)
var (
version = "alpha"
datadir = common.AppDataDir("ark", false)
statePath = filepath.Join(datadir, STATE_FILE)
defaultRpcServer = "localhost:6000"
defaultNoTls = true
initialState = map[string]string{
"rpcserver": defaultRpcServer,
"no-tls": strconv.FormatBool(defaultNoTls),
}
)
func initCLIEnv() {
dir := cleanAndExpandPath(os.Getenv(DATADIR_ENVVAR))
if len(dir) <= 0 {
return
}
datadir = dir
statePath = filepath.Join(dir, STATE_FILE)
}
func main() {
initCLIEnv()
app := cli.NewApp()
app.Version = version
app.Name = "Ark CLI"
app.Usage = "Command line interface to interact with arkd"
app.Commands = append(app.Commands, configCommand, roundCommand)
app.Before = func(ctx *cli.Context) error {
if _, err := os.Stat(datadir); os.IsNotExist(err) {
return os.Mkdir(datadir, os.ModeDir|0755)
}
return nil
}
if err := app.Run(os.Args); err != nil {
fmt.Println(fmt.Errorf("error: %v", err))
os.Exit(1)
}
}
// cleanAndExpandPath expands environment variables and leading ~ in the
// passed path, cleans the result, and returns it.
// This function is taken from https://github.com/btcsuite/btcd
func cleanAndExpandPath(path string) string {
if path == "" {
return ""
}
// Expand initial ~ to OS specific home directory.
if strings.HasPrefix(path, "~") {
var homeDir string
u, err := user.Current()
if err == nil {
homeDir = u.HomeDir
} else {
homeDir = os.Getenv("HOME")
}
path = strings.Replace(path, "~", homeDir, 1)
}
// NOTE: The os.ExpandEnv doesn't work with Windows-style %VARIABLE%,
// but the variables can still be expanded via POSIX-style $VARIABLE.
return filepath.Clean(os.ExpandEnv(path))
}
func getState() (map[string]string, error) {
file, err := os.ReadFile(statePath)
if err != nil {
if !os.IsNotExist(err) {
return nil, err
}
if err := setInitialState(); err != nil {
return nil, err
}
return initialState, nil
}
data := map[string]string{}
if err := json.Unmarshal(file, &data); err != nil {
return nil, err
}
return data, nil
}
func setInitialState() error {
jsonString, err := json.Marshal(initialState)
if err != nil {
return err
}
return os.WriteFile(statePath, jsonString, 0755)
}
func setState(data map[string]string) error {
currentData, err := getState()
if err != nil {
return err
}
mergedData := merge(currentData, data)
jsonString, err := json.Marshal(mergedData)
if err != nil {
return err
}
err = os.WriteFile(statePath, jsonString, 0755)
if err != nil {
return fmt.Errorf("writing to file: %w", err)
}
return nil
}
func merge(maps ...map[string]string) map[string]string {
merge := make(map[string]string, 0)
for _, m := range maps {
for k, v := range m {
merge[k] = v
}
}
return merge
}
func printRespJSON(resp interface{}) {
jsonMarshaler := &jsonpb.Marshaler{
EmitDefaults: true,
OrigName: true,
Indent: "\t", // Matches indentation of printJSON.
}
jsonStr, err := jsonMarshaler.MarshalToString(resp.(proto.Message))
if err != nil {
fmt.Println("unable to decode response: ", err)
return
}
fmt.Println(jsonStr)
}
func getServiceClient() (arkv1.ArkServiceClient, func(), error) {
conn, err := getClientConn()
if err != nil {
return nil, nil, err
}
cleanup := func() { conn.Close() }
return arkv1.NewArkServiceClient(conn), cleanup, nil
}
func getClientConn() (*grpc.ClientConn, error) {
state, err := getState()
if err != nil {
return nil, err
}
address, ok := state["rpcserver"]
if !ok {
return nil, errors.New("set rpcserver with `config set rpcserver`")
}
opts := []grpc.DialOption{grpc.WithDefaultCallOptions()}
noTls, _ := strconv.ParseBool(state["no-tls"])
if !noTls {
return nil, fmt.Errorf("secure connection not supported yet")
}
opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
conn, err := grpc.Dial(address, opts...)
if err != nil {
return nil, fmt.Errorf("unable to connect to RPC server: %v",
err)
}
return conn, nil
}

View File

@@ -1,55 +0,0 @@
package main
import (
"context"
"fmt"
arkv1 "github.com/ark-network/ark/api-spec/protobuf/gen/ark/v1"
"github.com/urfave/cli/v2"
)
var (
roundTxidFlag = &cli.StringFlag{
Name: "txid",
Usage: "the hash of a broadcasted pool transaction",
}
currentFlag = &cli.BoolFlag{
Name: "current",
Usage: "info about the status of the ongoing round",
Value: false,
}
)
var roundCommand = &cli.Command{
Name: "round",
Usage: "Get info about an ark round",
Action: getRoundAction,
Flags: []cli.Flag{roundTxidFlag, currentFlag},
}
func getRoundAction(ctx *cli.Context) error {
client, cleanup, err := getServiceClient()
if err != nil {
return err
}
defer cleanup()
txid := ctx.String("txid")
current := ctx.Bool("current")
if txid == "" && !current {
return fmt.Errorf("missing flag, please provide either --txid or --current")
}
if current {
return fmt.Errorf("not supported yet")
}
res, err := client.GetRound(context.Background(), &arkv1.GetRoundRequest{Txid: txid})
if err != nil {
return err
}
printRespJSON(res)
return nil
}

View File

@@ -1,9 +1,13 @@
.PHONY: build clean help lint vet .PHONY: build build-all clean help lint vet
build: build:
@echo "Building noah binary..." @echo "Building binary..."
@bash ./scripts/build @bash ./scripts/build
build-all:
@echo "Building binary..."
@bash ./scripts/build-all
## clean: cleans the binary ## clean: cleans the binary
clean: clean:
@echo "Cleaning..." @echo "Cleaning..."

View File

@@ -8,7 +8,7 @@ import (
var balanceCommand = cli.Command{ var balanceCommand = cli.Command{
Name: "balance", Name: "balance",
Usage: "Print balance of the Noah wallet", Usage: "Print balance of the Ark wallet",
Action: balanceAction, Action: balanceAction,
} }

View File

@@ -6,7 +6,7 @@ import (
var configCommand = cli.Command{ var configCommand = cli.Command{
Name: "config", Name: "config",
Usage: "Print local configuration of the Noah CLI", Usage: "Print local configuration of the Ark CLI",
Action: printConfigAction, Action: printConfigAction,
} }

View File

@@ -1,10 +1,10 @@
module github.com/ark-network/noah module github.com/ark-network/ark-cli
go 1.21.0 go 1.21.0
replace github.com/ark-network/ark/common => ../common replace github.com/ark-network/ark/common => ../common
replace github.com/ark-network/ark => ../asp replace github.com/ark-network/ark => ../server
require ( require (
github.com/ark-network/ark v0.0.0-00010101000000-000000000000 github.com/ark-network/ark v0.0.0-00010101000000-000000000000

View File

@@ -14,24 +14,23 @@ import (
) )
const ( const (
DATADIR_ENVVAR = "NOAH_DATADIR" DATADIR_ENVVAR = "ARK_WALLET_DATADIR"
STATE_FILE = "state.json" STATE_FILE = "state.json"
defaultArkURL = "localhost:6000"
defaultNetwork = "testnet" defaultNetwork = "testnet"
) )
var ( var (
version = "alpha" version = "alpha"
noahDataDirectory = common.AppDataDir("noah", false) datadir = common.AppDataDir("ark-cli", false)
statePath = filepath.Join(noahDataDirectory, STATE_FILE) statePath = filepath.Join(datadir, STATE_FILE)
explorerUrl = map[string]string{ explorerUrl = map[string]string{
network.Liquid.Name: "https://blockstream.info/liquid/api", network.Liquid.Name: "https://blockstream.info/liquid/api",
network.Testnet.Name: "https://blockstream.info/liquidtestnet/api", network.Testnet.Name: "https://blockstream.info/liquidtestnet/api",
} }
initialState = map[string]string{ initialState = map[string]string{
"ark_url": defaultArkURL, "ark_url": "",
"ark_pubkey": "", "ark_pubkey": "",
"encrypted_private_key": "", "encrypted_private_key": "",
"password_hash": "", "password_hash": "",
@@ -41,13 +40,13 @@ var (
) )
func initCLIEnv() { func initCLIEnv() {
dataDir := cleanAndExpandPath(os.Getenv(DATADIR_ENVVAR)) dir := cleanAndExpandPath(os.Getenv(DATADIR_ENVVAR))
if len(dataDir) <= 0 { if len(dir) <= 0 {
return return
} }
noahDataDirectory = dataDir datadir = dir
statePath = filepath.Join(noahDataDirectory, STATE_FILE) statePath = filepath.Join(datadir, STATE_FILE)
} }
func main() { func main() {
@@ -56,8 +55,8 @@ func main() {
app := cli.NewApp() app := cli.NewApp()
app.Version = version app.Version = version
app.Name = "noah CLI" app.Name = "Ark CLI"
app.Usage = "Command line interface for Ark wallet" app.Usage = "command line interface for Ark wallet"
app.Commands = append( app.Commands = append(
app.Commands, app.Commands,
&balanceCommand, &balanceCommand,
@@ -70,8 +69,8 @@ func main() {
) )
app.Before = func(ctx *cli.Context) error { app.Before = func(ctx *cli.Context) error {
if _, err := os.Stat(noahDataDirectory); os.IsNotExist(err) { if _, err := os.Stat(datadir); os.IsNotExist(err) {
return os.Mkdir(noahDataDirectory, os.ModeDir|0755) return os.Mkdir(datadir, os.ModeDir|0755)
} }
return nil return nil
} }

View File

@@ -12,5 +12,5 @@ ARCH=$(eval "go env GOARCH")
pushd $PARENT_PATH pushd $PARENT_PATH
mkdir -p build mkdir -p build
GO111MODULE=on go build -ldflags="-s -w" -o build/noah-$OS-$ARCH . GO111MODULE=on go build -ldflags="-s -w" -o build/ark-cli-$OS-$ARCH .
popd popd

23
client/scripts/build-all Executable file
View File

@@ -0,0 +1,23 @@
#!/bin/bash
set -e
PARENT_PATH=$(dirname $(
cd $(dirname $0)
pwd -P
))
declare -a OS=("darwin" "linux")
declare -a ARCH=("amd64" "arm64")
pushd $PARENT_PATH
mkdir -p build
for os in "${OS[@]}"; do
for arch in "${ARCH[@]}"; do
echo "Building for $os $arch"
GOOS=$os GOARCH=$arch go build -o build/ark-$os-$arch .
done
done
popd

View File

Some files were not shown because too many files have changed in this diff Show More