Skip to content

Create examples directory with usage scripts #9

@BekahHW

Description

@BekahHW

Description

RepoReady would benefit from an examples/ directory containing practical usage scripts and demonstrations. This will help new users understand how to use the CLI effectively and provide ready-to-run examples for different scenarios.

Current State

  • ❌ No examples directory exists
  • ❌ No sample usage scripts
  • ❌ Limited practical demonstrations
  • ✅ Good documentation in README.md
  • ✅ Intro and examples commands exist in CLI
  • ✅ Test script exists (test-org-community-files.js)

Acceptance Criteria

Directory Structure

  • Create examples/ directory in repository root
  • Organize examples by use case or complexity
  • Include README.md in examples directory
  • Ensure all examples are executable and well-documented

Example Scripts to Create

Basic Usage Examples

  • evaluate-popular-repos.js - Evaluate well-known repositories
  • batch-evaluate.js - Evaluate multiple repositories
  • create-repo-interactive.js - Interactive repository creation
  • evaluate-with-token.js - Using GitHub tokens properly

Advanced Examples

  • compare-repositories.js - Compare scores of multiple repos
  • export-results.js - Export evaluation results to JSON/CSV
  • check-org-repos.js - Evaluate all repos in an organization
  • automated-evaluation.js - Scheduled evaluation script

Integration Examples

  • github-actions-example.yml - Use RepoReady in CI/CD
  • pre-commit-hook.js - Evaluate repo before commits
  • slack-integration.js - Send results to Slack
  • dashboard-data.js - Generate data for dashboards

Implementation Suggestions

Directory Structure

examples/
├── README.md
├── basic/
│   ├── evaluate-popular-repos.js
│   ├── create-repo-interactive.js
│   └── evaluate-with-token.js
├── advanced/
│   ├── batch-evaluate.js
│   ├── compare-repositories.js
│   └── export-results.js
├── integrations/
│   ├── github-actions-example.yml
│   ├── pre-commit-hook.js
│   └── slack-integration.js
└── data/
    ├── sample-repos.json
    └── expected-results.json

Example: Basic Repository Evaluation

#!/usr/bin/env node
// examples/basic/evaluate-popular-repos.js

/**
 * Example: Evaluate Popular Open Source Repositories
 * 
 * This script demonstrates how to use RepoReady to evaluate
 * several well-known open source repositories and compare their scores.
 */

const { exec } = require('child_process');
const util = require('util');
const execPromise = util.promisify(exec);

const popularRepos = [
  'facebook/react',
  'microsoft/vscode',
  'nodejs/node',
  'tensorflow/tensorflow',
  'vuejs/vue'
];

async function evaluateRepos() {
  console.log('🚀 Evaluating Popular Open Source Repositories\n');
  console.log('This may take a moment due to API rate limits...\n');
  
  for (const repo of popularRepos) {
    try {
      console.log(`📊 Evaluating ${repo}...`);
      
      // Use the built RepoReady CLI
      const { stdout } = await execPromise(`node ../dist/index.js evaluate ${repo}`);
      
      console.log(stdout);
      console.log('─'.repeat(50));
      
      // Small delay to respect rate limits
      await new Promise(resolve => setTimeout(resolve, 1000));
      
    } catch (error) {
      console.error(`❌ Error evaluating ${repo}:`, error.message);
    }
  }
}

// Run if called directly
if (require.main === module) {
  evaluateRepos()
    .then(() => console.log('✅ Evaluation complete!'))
    .catch(console.error);
}

module.exports = { evaluateRepos, popularRepos };

Example: Batch Evaluation with Results Export

// examples/advanced/batch-evaluate.js

/**
 * Example: Batch Repository Evaluation with Export
 * 
 * Evaluates multiple repositories and exports results to JSON
 */

const fs = require('fs').promises;
const path = require('path');
const { GitHubService } = require('../../dist/utils/github');
const { RepositoryEvaluator } = require('../../dist/evaluator');

class BatchEvaluator {
  constructor(githubToken) {
    this.githubService = new GitHubService(githubToken);
    this.evaluator = new RepositoryEvaluator();
    this.results = [];
  }

  async evaluateRepository(owner, repo) {
    try {
      console.log(`📊 Evaluating ${owner}/${repo}...`);
      
      const repoInfo = await this.githubService.getRepositoryInfo(owner, repo);
      const score = await this.evaluator.evaluate(repoInfo);
      
      const result = {
        repository: `${owner}/${repo}`,
        timestamp: new Date().toISOString(),
        score: score.percentage,
        rating: score.rating,
        totalScore: score.totalScore,
        maxScore: score.maxScore,
        recommendations: score.recommendations.length
      };
      
      this.results.push(result);
      console.log(`   Score: ${score.percentage.toFixed(1)}% (${score.rating})`);
      
      return result;
    } catch (error) {
      console.error(`❌ Error evaluating ${owner}/${repo}:`, error.message);
      return null;
    }
  }

  async evaluateBatch(repositories) {
    for (const repo of repositories) {
      const [owner, name] = repo.split('/');
      await this.evaluateRepository(owner, name);
      
      // Respect rate limits
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  }

  async exportResults(filename = 'evaluation-results.json') {
    const outputPath = path.join(__dirname, '..', 'data', filename);
    await fs.writeFile(outputPath, JSON.stringify(this.results, null, 2));
    console.log(`📄 Results exported to ${outputPath}`);
  }

  generateSummary() {
    if (this.results.length === 0) return;
    
    const avgScore = this.results.reduce((sum, r) => sum + r.score, 0) / this.results.length;
    const ratingCounts = this.results.reduce((counts, r) => {
      counts[r.rating] = (counts[r.rating] || 0) + 1;
      return counts;
    }, {});
    
    console.log('\n📈 Batch Evaluation Summary');
    console.log(`   Repositories evaluated: ${this.results.length}`);
    console.log(`   Average score: ${avgScore.toFixed(1)}%`);
    console.log(`   Rating distribution:`, ratingCounts);
  }
}

// Example usage
const exampleRepos = [
  'OpenSource-Communities/RepoReady',
  'facebook/react',
  'microsoft/typescript'
];

async function main() {
  const token = process.env.GITHUB_TOKEN;
  if (!token) {
    console.error('Please set GITHUB_TOKEN environment variable');
    process.exit(1);
  }
  
  const batchEvaluator = new BatchEvaluator(token);
  
  await batchEvaluator.evaluateBatch(exampleRepos);
  batchEvaluator.generateSummary();
  await batchEvaluator.exportResults();
}

if (require.main === module) {
  main().catch(console.error);
}

Example: GitHub Actions Integration

# examples/integrations/github-actions-example.yml

# Example GitHub Actions workflow using RepoReady
name: Repository Health Check

on:
  schedule:
    # Run weekly on Sundays at 6 AM UTC
    - cron: '0 6 * * 0'
  workflow_dispatch: # Allow manual triggering

jobs:
  evaluate-repos:
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout code
      uses: actions/checkout@v4
      
    - name: Setup Node.js
      uses: actions/setup-node@v4
      with:
        node-version: '18'
        
    - name: Install RepoReady
      run: npm install -g repoready
      
    - name: Evaluate repository
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        echo "## Repository Health Report" >> $GITHUB_STEP_SUMMARY
        rr evaluate ${{ github.repository }} >> $GITHUB_STEP_SUMMARY
        
    - name: Evaluate competitor repositories
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        echo "## Competitor Analysis" >> $GITHUB_STEP_SUMMARY
        rr evaluate microsoft/vscode >> $GITHUB_STEP_SUMMARY
        rr evaluate facebook/react >> $GITHUB_STEP_SUMMARY

Files to Create

Main Examples README

# Examples Directory

This directory contains practical examples of using RepoReady in various scenarios.

## Getting Started

1. Build RepoReady: `npm run build`
2. Set GitHub token: `export GITHUB_TOKEN=your_token_here`
3. Run examples: `node examples/basic/evaluate-popular-repos.js`

## Directory Structure

- `basic/` - Simple usage examples for beginners
- `advanced/` - Complex scenarios and batch operations
- `integrations/` - Integration with other tools and services
- `data/` - Sample data files and expected results

## Requirements

- Node.js 16+
- Built RepoReady (`npm run build`)
- GitHub token (for API access)

## Examples Overview

### Basic Examples
- **evaluate-popular-repos.js** - Evaluate famous repositories
- **create-repo-interactive.js** - Interactive repository creation
- **evaluate-with-token.js** - Token usage best practices

### Advanced Examples
- **batch-evaluate.js** - Evaluate multiple repos with export
- **compare-repositories.js** - Side-by-side repository comparison
- **check-org-repos.js** - Evaluate entire organizations

### Integration Examples
- **github-actions-example.yml** - CI/CD integration
- **pre-commit-hook.js** - Git hook integration
- **slack-integration.js** - Notifications integration

Benefits

  • 📚 Provides practical learning materials
  • 🚀 Helps users get started quickly
  • 💡 Demonstrates advanced use cases
  • 🔧 Shows integration possibilities
  • 📊 Includes real-world scenarios
  • 🎯 Reduces support burden with self-service examples

Integration with Documentation

  • Link examples from main README.md
  • Reference examples in CLI help text
  • Include in getting started guides
  • Use in tutorials and blog posts

Estimated Effort

Medium - Requires creating multiple working examples and documentation.


Perfect for contributors who want to help users succeed with RepoReady! 📚

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions