name: Sync Manual Tools on: schedule: # Run daily at midnight UTC - cron: '0 0 * * *' workflow_dispatch: # Run on pushes to main that modify manual-tools.ts push: branches: - main paths: - 'manual-tools.ts' - 'sync-manual-tools.ts' jobs: sync-manual: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v2 with: version: 9 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'pnpm' - name: Install dependencies run: pnpm install --frozen-lockfile - name: Generate Prisma Client run: pnpm --filter=@tpmjs/db db:generate - name: Run manual tools sync id: sync run: | # Run the sync script and capture output output=$(pnpm tsx sync-manual-tools.ts 2>&1) echo "$output" # Extract statistics from output processed=$(echo "$output" | grep "Processed:" | awk '{print $2}') skipped=$(echo "$output" | grep "Skipped:" | awk '{print $2}') errors=$(echo "$output" | grep "Errors:" | awk '{print $2}') total=$(echo "$output" | grep "Total manual tools:" | awk '{print $4}') # Set outputs for Discord notification echo "processed=${processed:-0}" >> $GITHUB_OUTPUT echo "skipped=${skipped:-0}" >> $GITHUB_OUTPUT echo "errors=${errors:-0}" >> $GITHUB_OUTPUT echo "total=${total:-0}" >> $GITHUB_OUTPUT # Determine status if [ "${errors:-0}" -gt 0 ]; then echo "status_emoji=⚠️" >> $GITHUB_OUTPUT echo "status_color=16776960" >> $GITHUB_OUTPUT # Yellow else echo "status_emoji=✅" >> $GITHUB_OUTPUT echo "status_color=5763719" >> $GITHUB_OUTPUT # Green fi env: DATABASE_URL: ${{ secrets.DATABASE_URL }} - name: Send Discord notification if: always() run: | # Build Discord payload payload=$(jq -n \ --arg title "${{ steps.sync.outputs.status_emoji }} Manual Tools Sync" \ --argjson color ${{ steps.sync.outputs.status_color }} \ --arg timestamp "$(date -u +%Y-%m-%dT%H:%M:%S.000Z)" \ ' { embeds: [{ title: $title, color: $color, fields: [ { name: "📦 Total Tools", value: "${{ steps.sync.outputs.total }}", inline: true }, { name: "✨ Processed", value: "${{ steps.sync.outputs.processed }}", inline: true }, { name: "⏭️ Skipped", value: "${{ steps.sync.outputs.skipped }}", inline: true }, { name: "❌ Errors", value: "${{ steps.sync.outputs.errors }}", inline: true }, { name: "🔗 Run", value: "[View Logs](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})", inline: true } ], timestamp: $timestamp }] }') # Send to Discord curl -X POST "${{ secrets.DISCORD_WEBHOOK }}" \ -H "Content-Type: application/json" \ -d "$payload"