Top Issues and Features by Votes #5186
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Top Issues and Features by Votes | |
| on: | |
| schedule: | |
| - cron: "0 * * * *" # Run every hour | |
| workflow_dispatch: # Allow manual triggering | |
| permissions: | |
| issues: write | |
| contents: read | |
| jobs: | |
| update-top-issues: | |
| runs-on: ubuntu-latest | |
| if: github.repository == 'browseros-ai/BrowserOS' | |
| steps: | |
| - name: Update top issues list | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| ISSUE_NUMBER: 169 | |
| run: | | |
| #!/bin/bash | |
| set -e | |
| echo "Fetching all open issues..." | |
| # Fetch all open issues with reaction data | |
| issues=$(gh api graphql -f query=' | |
| query($owner: String!, $repo: String!) { | |
| repository(owner: $owner, name: $repo) { | |
| issues(first: 100, states: OPEN, orderBy: {field: CREATED_AT, direction: DESC}) { | |
| nodes { | |
| number | |
| title | |
| url | |
| reactions(content: THUMBS_UP) { | |
| totalCount | |
| } | |
| } | |
| } | |
| } | |
| } | |
| ' -f owner='browseros-ai' -f repo='BrowserOS') | |
| # Parse and sort RFC issues (titles containing [RFC]) | |
| sorted_rfcs=$(echo "$issues" | jq -r --arg ISSUE_NUMBER "$ISSUE_NUMBER" ' | |
| .data.repository.issues.nodes | |
| | map(select(.number != ($ISSUE_NUMBER | tonumber) and (.title | contains("[RFC]")))) | |
| | sort_by(-.reactions.totalCount) | |
| | to_entries | |
| | map("\(.key + 1). [\(.value.title)](\(.value.url)) — \(.value.reactions.totalCount) 👍") | |
| | join("\n") | |
| ') | |
| # Parse and sort regular issues (excluding RFCs) | |
| sorted_issues=$(echo "$issues" | jq -r --arg ISSUE_NUMBER "$ISSUE_NUMBER" ' | |
| .data.repository.issues.nodes | |
| | map(select(.number != ($ISSUE_NUMBER | tonumber) and (.title | contains("[RFC]") | not))) | |
| | sort_by(-.reactions.totalCount) | |
| | to_entries | |
| | map("\(.key + 1). [\(.value.title)](\(.value.url)) — \(.value.reactions.totalCount) 👍") | |
| | join("\n") | |
| ') | |
| # Create issue body | |
| current_time=$(date -u +"%Y-%m-%d %H:%M:%S UTC") | |
| { | |
| echo "# Community Roadmap" | |
| echo "" | |
| echo "This list is automatically updated every hour based on 👍 reactions." | |
| echo "" | |
| echo "## How to Vote" | |
| echo "" | |
| echo "| Action | What it does |" | |
| echo "|--------|--------------|" | |
| echo "| 👍 on an issue | Adds your vote — we prioritize by vote count |" | |
| echo "| 💬 Comment | Your feedback shapes what we build |" | |
| echo "" | |
| echo "**Don't see what you need?** Create a new [feature request](https://github.com/browseros-ai/BrowserOS/issues/new) or [bug report](https://github.com/browseros-ai/BrowserOS/issues/new)." | |
| echo "" | |
| echo "**Last updated:** $current_time" | |
| echo "" | |
| echo "---" | |
| echo "" | |
| echo "## 📣 RFCs — We Need Your Input" | |
| echo "" | |
| echo "> **These proposals are in review.** Your vote and comments directly influence what gets built." | |
| echo ">" | |
| echo "> 👍 = Yes, build this | 💬 = Share your use case or feedback" | |
| echo "" | |
| if [ -n "$sorted_rfcs" ]; then | |
| echo "$sorted_rfcs" | |
| else | |
| echo "*No active RFCs right now. Check back soon!*" | |
| fi | |
| echo "" | |
| echo "---" | |
| echo "" | |
| echo "## Top Issues & Feature Requests" | |
| echo "" | |
| echo "$sorted_issues" | |
| echo "" | |
| echo "---" | |
| echo "🤖 *This issue is automatically updated by [GitHub Actions](.github/workflows/top-issues.yml)*" | |
| } > /tmp/issue_body.md | |
| # Update the tracking issue | |
| echo "Updating issue #$ISSUE_NUMBER..." | |
| gh issue edit "$ISSUE_NUMBER" \ | |
| --repo browseros-ai/BrowserOS \ | |
| --body-file /tmp/issue_body.md | |
| echo "✅ Successfully updated top issues list!" |