-
-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
48946f4
commit d884df4
Showing
5 changed files
with
152 additions
and
1 deletion.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
name: Create GitHub Discussions | ||
|
||
on: | ||
pull_request: | ||
types: [opened] | ||
paths: | ||
- 'src/content/apps/**' | ||
workflow_dispatch: | ||
inputs: | ||
name: | ||
description: 'App Name' | ||
required: true | ||
type: string | ||
author: | ||
description: 'App Author' | ||
required: true | ||
type: string | ||
description: | ||
description: 'App Description' | ||
required: true | ||
type: string | ||
|
||
jobs: | ||
create-discussion: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
discussions: write | ||
pull-requests: read | ||
contents: read | ||
steps: | ||
- uses: actions/checkout@v4 | ||
|
||
- name: Get App Data | ||
id: app-data | ||
run: | | ||
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then | ||
echo "name=${{ inputs.name }}" >> $GITHUB_OUTPUT | ||
echo "author=${{ inputs.author }}" >> $GITHUB_OUTPUT | ||
echo "description=${{ inputs.description }}" >> $GITHUB_OUTPUT | ||
else | ||
# Add script to extract app data from PR changes | ||
echo "name=..." >> $GITHUB_OUTPUT | ||
echo "author=..." >> $GITHUB_OUTPUT | ||
echo "description=..." >> $GITHUB_OUTPUT | ||
fi | ||
- name: Create Discussion | ||
uses: abirismyname/[email protected] | ||
with: | ||
title: "Vote: ${{ steps.app-data.outputs.name }} by ${{ steps.app-data.outputs.author }}" | ||
body: | | ||
🗳️ **Vote for this app by giving it a 👍 reaction!** | ||
${{ steps.app-data.outputs.description }} | ||
repository-id: ${{ secrets.REPO_ID }} | ||
category-id: ${{ secrets.CAT_ID }} | ||
env: | ||
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
name: Update Vote Counts | ||
|
||
on: | ||
schedule: | ||
- cron: '0 */6 * * *' # Run every 6 hours | ||
workflow_dispatch: # Allow manual triggers | ||
|
||
jobs: | ||
update-votes: | ||
runs-on: ubuntu-latest | ||
permissions: | ||
contents: write | ||
discussions: read | ||
steps: | ||
- uses: actions/checkout@v4 | ||
|
||
- name: Update Vote Counts | ||
uses: actions/github-script@v7 | ||
env: | ||
CAT_ID: ${{ secrets.CAT_ID }} # Use the same secret as create-discussion | ||
with: | ||
script: | | ||
const fs = require('fs').promises; | ||
const path = require('path'); | ||
const yaml = require('js-yaml'); | ||
// Get all discussions in the Flutter of the Year category | ||
const discussions = await github.paginate(github.rest.discussions.listForRepo, { | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
category_id: process.env.CAT_ID // Use the environment variable | ||
}); | ||
// Create votes.json with the current vote counts | ||
const votes = {}; | ||
for (const discussion of discussions) { | ||
if (discussion.title.startsWith('Vote: ')) { | ||
const appName = discussion.title.replace('Vote: ', '').split(' by ')[0]; | ||
// Count thumbs up reactions | ||
const reactions = await github.rest.reactions.listForDiscussion({ | ||
owner: context.repo.owner, | ||
repo: context.repo.repo, | ||
discussion_number: discussion.number | ||
}); | ||
votes[appName] = reactions.data.filter(r => r.content === '+1').length; | ||
} | ||
} | ||
// Write the votes to a JSON file | ||
await fs.writeFile( | ||
'src/data/votes.json', | ||
JSON.stringify(votes, null, 2) | ||
); | ||
// Commit and push the changes | ||
const date = new Date().toISOString(); | ||
await exec.exec('git', ['config', 'user.name', 'github-actions[bot]']); | ||
await exec.exec('git', ['config', 'user.email', 'github-actions[bot]@users.noreply.github.com']); | ||
await exec.exec('git', ['add', 'src/data/votes.json']); | ||
await exec.exec('git', ['commit', '-m', `Update vote counts - ${date}`]); | ||
await exec.exec('git', ['push']); |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{} |
This file contains 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
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
export interface VoteData { | ||
[appName: string]: number; | ||
} | ||
|
||
export function getVotes(): VoteData { | ||
try { | ||
// During build time, this file will be created by GitHub Actions | ||
// We import it as a module to get the data | ||
const votes = import.meta.glob('/src/data/votes.json', { eager: true }); | ||
return Object.values(votes)[0] as VoteData || {}; | ||
} catch (error) { | ||
console.error('Error reading votes:', error); | ||
return {}; | ||
} | ||
} |