name: Build Awesome Database on: schedule: # Run every 6 hours - cron: '0 */6 * * *' workflow_dispatch: inputs: build_mode: description: 'Build mode: download (from awesome repo) or build (local indexing)' required: false default: 'download' type: choice options: - download - build awesome_repo: description: 'Awesome repository to download from (owner/repo)' required: false default: 'valknarness/awesome' type: string workflow_call: inputs: build_mode: description: 'Build mode: download (from awesome repo) or build (local indexing)' required: false default: 'download' type: string awesome_repo: description: 'Awesome repository to download from (owner/repo)' required: false default: 'valknarness/awesome' type: string push: branches: - main paths: - '.github/workflows/db.yml' - 'scripts/build-db.js' jobs: build-database: runs-on: ubuntu-latest timeout-minutes: 180 # 3 hours for local builds steps: - name: Checkout awesome-app repository uses: actions/checkout@v4 with: path: awesome-app - name: Checkout awesome CLI repository uses: actions/checkout@v4 with: repository: ${{ github.event.inputs.awesome_repo || 'valknarness/awesome' }} path: awesome token: ${{ secrets.GITHUB_TOKEN }} - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 10 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'pnpm' cache-dependency-path: awesome-app/pnpm-lock.yaml - name: Install GitHub CLI run: | # GitHub CLI is pre-installed on ubuntu-latest gh --version - name: Install awesome-app dependencies working-directory: awesome-app run: pnpm install --frozen-lockfile - name: Install awesome CLI dependencies working-directory: awesome run: | pnpm install --frozen-lockfile pnpm rebuild better-sqlite3 chmod +x awesome - name: Build database working-directory: awesome-app env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BUILD_MODE: ${{ github.event.inputs.build_mode || 'download' }} AWESOME_REPO: ${{ github.event.inputs.awesome_repo || 'valknarness/awesome' }} run: | echo "Build Mode: $BUILD_MODE" echo "Source Repo: $AWESOME_REPO" # Run the build script node scripts/build-db.js - name: Verify database working-directory: awesome-app run: | if [ ! -f awesome.db ]; then echo "❌ Database file not found!" exit 1 fi DB_SIZE=$(du -h awesome.db | cut -f1) echo "✅ Database created successfully" echo "Size: $DB_SIZE" # Verify it's a valid SQLite database if command -v sqlite3 &> /dev/null; then LISTS_COUNT=$(sqlite3 awesome.db "SELECT COUNT(*) FROM awesome_lists" 2>/dev/null || echo "0") REPOS_COUNT=$(sqlite3 awesome.db "SELECT COUNT(*) FROM repositories" 2>/dev/null || echo "0") READMES_COUNT=$(sqlite3 awesome.db "SELECT COUNT(*) FROM readmes" 2>/dev/null || echo "0") echo "Lists: $LISTS_COUNT" echo "Repositories: $REPOS_COUNT" echo "READMEs: $READMES_COUNT" fi - name: Upload database artifact uses: actions/upload-artifact@v4 with: name: awesome-database path: | awesome-app/awesome.db awesome-app/db-metadata.json retention-days: 90 compression-level: 9 - name: Create build summary working-directory: awesome-app run: | cat >> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "\`\`\`json" >> $GITHUB_STEP_SUMMARY cat db-metadata.json >> $GITHUB_STEP_SUMMARY echo "\`\`\`" >> $GITHUB_STEP_SUMMARY fi cat >> $GITHUB_STEP_SUMMARY <> $GITHUB_STEP_SUMMARY <