diff --git a/.github/workflows/build-database.yml b/.github/workflows/build-database.yml deleted file mode 100644 index 8579273..0000000 --- a/.github/workflows/build-database.yml +++ /dev/null @@ -1,258 +0,0 @@ -name: Build Awesome Database - -on: - # Disabled: Database is now built on VPS via systemd timer - # schedule: - # # Run daily at 02:00 UTC - # - cron: '0 2 * * *' - workflow_dispatch: # Allow manual triggering (kept for emergency use) - inputs: - index_mode: - description: 'Indexing mode' - required: false - default: 'full' - type: choice - options: - - full - - sample - incremental: - description: 'Incremental mode (skip unchanged repos)' - required: false - default: true - type: boolean - -permissions: - contents: read - actions: write - -jobs: - build-database: - runs-on: ubuntu-latest - timeout-minutes: 360 # 6 hours (GitHub Actions maximum for free tier) - - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - - - name: Setup pnpm - uses: pnpm/action-setup@v3 - with: - version: 10 - - - name: Install dependencies - run: | - pnpm install - pnpm rebuild better-sqlite3 - chmod +x awesome - - - name: Build awesome database - id: build - env: - CI: true - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - INCREMENTAL: ${{ github.event.inputs.incremental || 'true' }} - run: | - # Pass env vars! - CI=${CI:-false} - # Capture start time - START_TIME=$(date -u +"%Y-%m-%d %H:%M:%S UTC") - echo "start_time=$START_TIME" >> $GITHUB_OUTPUT - - # Determine index mode and incremental setting - INDEX_MODE="${{ github.event.inputs.index_mode || 'full' }}" - INCREMENTAL="${{ github.event.inputs.incremental }}" - # Default to true if not specified (for scheduled runs) - if [ -z "$INCREMENTAL" ]; then - INCREMENTAL="true" - fi - echo "Index mode: $INDEX_MODE" - echo "Incremental: $INCREMENTAL" - - # Build the index in non-interactive mode (350m timeout, job timeout is 360m) - timeout 350m node -e " - const db = require('./lib/database'); - const dbOps = require('./lib/db-operations'); - const indexer = require('./lib/indexer'); - - (async () => { - try { - // Initialize database - db.initialize(); - - // Set GitHub token if available - if (process.env.GITHUB_TOKEN) { - dbOps.setSetting('githubToken', process.env.GITHUB_TOKEN); - console.log('GitHub token configured'); - } else { - console.warn('โš ๏ธ WARNING: No GitHub token found! Rate limit will be 60/hour instead of 5000/hour'); - } - - // Build index with incremental flag - const incremental = process.env.INCREMENTAL === 'true'; - await indexer.buildIndex(false, '${INDEX_MODE}', incremental); - - // Close database - db.close(); - - console.log('Index built successfully'); - process.exit(0); - } catch (error) { - console.error('Failed to build index:', error.message); - console.error(error.stack); - process.exit(1); - } - })(); - " || { - EXIT_CODE=$? - if [ $EXIT_CODE -eq 124 ]; then - echo "โŒ Index building timed out after 350 minutes" - echo "This may indicate rate limiting issues or too many lists to index" - fi - exit $EXIT_CODE - } - - # Capture end time - END_TIME=$(date -u +"%Y-%m-%d %H:%M:%S UTC") - echo "end_time=$END_TIME" >> $GITHUB_OUTPUT - - - name: Gather database statistics - id: stats - run: | - # Get database stats - STATS=$(node -e " - const db = require('./lib/database'); - const dbOps = require('./lib/db-operations'); - db.initialize(); - - const stats = dbOps.getIndexStats(); - const dbPath = require('path').join(require('os').homedir(), '.awesome', 'awesome.db'); - const fs = require('fs'); - const fileSize = fs.existsSync(dbPath) ? fs.statSync(dbPath).size : 0; - const fileSizeMB = (fileSize / (1024 * 1024)).toFixed(2); - - console.log(JSON.stringify({ - totalLists: stats.totalLists || 0, - totalRepos: stats.totalRepositories || 0, - totalReadmes: stats.totalReadmes || 0, - sizeBytes: fileSize, - sizeMB: fileSizeMB - })); - - db.close(); - ") - - echo "Database statistics:" - echo "$STATS" | jq . - - # Extract values for outputs - TOTAL_LISTS=$(echo "$STATS" | jq -r '.totalLists') - TOTAL_REPOS=$(echo "$STATS" | jq -r '.totalRepos') - TOTAL_READMES=$(echo "$STATS" | jq -r '.totalReadmes') - SIZE_MB=$(echo "$STATS" | jq -r '.sizeMB') - - echo "total_lists=$TOTAL_LISTS" >> $GITHUB_OUTPUT - echo "total_repos=$TOTAL_REPOS" >> $GITHUB_OUTPUT - echo "total_readmes=$TOTAL_READMES" >> $GITHUB_OUTPUT - echo "size_mb=$SIZE_MB" >> $GITHUB_OUTPUT - - - name: Prepare database artifact - run: | - # Copy database from home directory - DB_PATH="$HOME/.awesome/awesome.db" - - if [ ! -f "$DB_PATH" ]; then - echo "Error: Database file not found at $DB_PATH" - exit 1 - fi - - # Create artifact directory - mkdir -p artifacts - - # Copy database with timestamp - BUILD_DATE=$(date -u +"%Y%m%d-%H%M%S") - cp "$DB_PATH" "artifacts/awesome-${BUILD_DATE}.db" - cp "$DB_PATH" "artifacts/awesome-latest.db" - - # Create metadata file - cat > artifacts/metadata.json <> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY - fi - - # Add kept artifacts table if any - if [ $KEEP_COUNT -gt 0 ]; then - cat >> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY - - if [ $KEEP_COUNT -gt 10 ]; then - echo "" >> $GITHUB_STEP_SUMMARY - echo "*...and $((KEEP_COUNT - 10)) more*" >> $GITHUB_STEP_SUMMARY - fi - fi - - cat >> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY <