Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 70 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
10. [Batch Transfer](#10-batch-transfer)
11. [Transaction Simulation](#11-transaction-simulation)
12. [RNS Operations](#12-rns-operations)
13. [Developer Metrics](#13-developer-metrics)
- [Contributing](#contributing)

## Installation
Expand Down Expand Up @@ -1087,8 +1088,75 @@ The command provides:
- Cost in RBTC and Wei
- Recommended gas limits (with buffers)
- Optimization tips (if applicable)
=======
>>>>>>> main

### 13. Developer Metrics

The `devmetrics` command generates a combined developer health report using both GitHub repository activity and Rootstock contract activity, with output options for terminal, JSON, or Markdown.

#### Basic Usage

```bash
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress
```

#### Network Selection

```bash
# Mainnet (default)
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress

# Testnet
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress --network testnet
```

#### Output Formats

```bash
# Table output (default)
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress --format table

# JSON output
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress --format json

# Markdown output
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress --format markdown

# CI mode (forces JSON output)
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress --ci
```

#### Multiple Repositories / Contracts

```bash
# Apply one contract to multiple repos
rsk-cli devmetrics --repo owner/repo1 --repo owner/repo2 --contract 0xYourContractAddress

# Apply one repo to multiple contracts
rsk-cli devmetrics --repo owner/repo --contract 0xContract1 --contract 0xContract2

# Pair repos and contracts one-to-one
rsk-cli devmetrics --repo owner/repo1 --contract 0xContract1 --repo owner/repo2 --contract 0xContract2
```

#### Authentication and RPC

```bash
# Use GitHub token to increase API rate limits
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress --github-token ghp_xxx

# Use custom RPC URL
rsk-cli devmetrics --repo owner/repo --contract 0xYourContractAddress --rpc-url https://your-rpc-url
```

You can also configure `devmetrics` via environment variables:

```env
GITHUB_TOKEN=your_github_token_here

# You can use custom RPC URLs for better performance and rate limits
ROOTSTOCK_MAINNET_RPC_URL=https://public-node.rsk.co
ROOTSTOCK_TESTNET_RPC_URL=https://public-node.testnet.rsk.co
```

## Contributing

Expand Down
70 changes: 70 additions & 0 deletions bin/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import { validateAndFormatAddressRSK } from "../src/utils/index.js";
import { rnsUpdateCommand } from "../src/commands/rnsUpdate.js";
import { rnsTransferCommand } from "../src/commands/rnsTransfer.js";
import { rnsRegisterCommand } from "../src/commands/rnsRegister.js";
import { devmetricsCommand } from "../src/commands/devmetrics.js";

interface CommandOptions {
testnet?: boolean;
Expand Down Expand Up @@ -696,4 +697,73 @@ program
}
});

// ─── devmetrics command ────────────────────────────────────────────────────────
// Collects repeated flag values into an array (e.g. --repo a --repo b → ['a','b'])
function collectRepeatable(val: string, prev: string[]): string[] {
return [...prev, val];
}

program
.command("devmetrics")
.description(
"Aggregate GitHub and Rootstock on-chain metrics into a dApp health report"
)
.option(
"-r, --repo <repo>",
"GitHub repo in owner/repo format — repeat for multiple repos",
collectRepeatable,
[] as string[]
)
.option(
"-c, --contract <address>",
"Rootstock contract address — repeat for multiple contracts",
collectRepeatable,
[] as string[]
)
.option(
"-f, --format <format>",
"Output format: table | json | markdown",
"table"
)
.option("--ci", "CI/CD mode — forces JSON output (overrides --format)", false)
.option(
"--github-token <token>",
"GitHub personal access token (or set GITHUB_TOKEN env var)"
)
.option(
"-n, --network <network>",
"Rootstock network: mainnet or testnet",
"mainnet"
)
.option(
"--rpc-url <url>",
"Custom Rootstock RPC URL (overrides --network default)"
)
.action(
async (opts: {
repo: string[];
contract: string[];
format: string;
ci: boolean;
githubToken?: string;
network: string;
rpcUrl?: string;
}) => {
try {
await devmetricsCommand({
repos: opts.repo,
contracts: opts.contract,
format: opts.format as "table" | "json" | "markdown",
ci: opts.ci,
githubToken: opts.githubToken,
network: opts.network as "mainnet" | "testnet",
rpcUrl: opts.rpcUrl,
});
} catch (error: any) {
logError(false, `devmetrics error: ${error.message || error}`);
process.exit(1);
}
}
);

program.parse(process.argv);
Loading