Skip to content

Vehicle UI: Make vehicle colours selectable #1458

Vehicle UI: Make vehicle colours selectable

Vehicle UI: Make vehicle colours selectable #1458

name: Language Reminder
on:
pull_request_review_comment:
types: [created]
issue_comment:
types: [created]
issues:
types: [opened]
permissions:
pull-requests: write
issues: write
contents: read
models: read
jobs:
check-language:
name: Check Comment Language
runs-on: ubuntu-latest
# temporary disable to due high false-positive rate
if: false && (github.event.issue.pull_request || github.event.pull_request)
steps:
- uses: actions/checkout@v5
- name: Check language
id: language_check
uses: actions/github-script@v8
env:
COMMENT_BODY: ${{ github.event.comment.body }}
GITHUB_TOKEN: ${{ github.token }}
with:
script: |
// Use environment variable for security (prevents injection)
const commentBody = process.env.COMMENT_BODY;
const response = await fetch('https://models.github.ai/inference/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.GITHUB_TOKEN}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'openai/gpt-4o-mini',
messages: [
{
role: 'system',
content: 'This project requires English communication to ensure everyone can participate. Determine if a user comment requires a language reminder. The comment is markdown formatted. When analyzing: ignore text inside markdown code blocks (```), code suggestions, and quotes (>) as these may contain translations/i18n content (e.g. "de: Text"). Only analyze the regular text content. Short comments (one sentence) should not be flagged. Return `true` if you think a reminder to switch to English is needed, `false` otherwise. When unsure, return `false`.'
},
{
role: 'user',
content: commentBody
}
],
response_format: {
type: 'json_schema',
json_schema: {
name: 'language_check',
strict: true,
schema: {
type: 'object',
properties: {
requires_reminder: { type: 'boolean' }
},
required: ['requires_reminder'],
additionalProperties: false
}
}
},
max_tokens: 200
})
});
if (!response.ok) {
const errorText = await response.text();
throw new Error(`Inference failed: ${response.statusText} - ${errorText}`);
}
const result = await response.json();
const analysis = JSON.parse(result.choices[0].message.content);
core.setOutput('analysis', JSON.stringify(analysis));
return analysis;
- name: Post reminder if non-English
if: steps.language_check.outputs.analysis != ''
uses: actions/github-script@v8
with:
script: |
const analysis = JSON.parse('${{ steps.language_check.outputs.analysis }}');
console.log('Analysis:', analysis);
if (analysis.requires_reminder) {
const comment = context.payload.comment;
const reminderMessage = `@${comment.user.login} πŸ‡¬πŸ‡§ Please use English so everyone can participate. See [Contributing Guidelines](https://github.com/${context.repo.owner}/${context.repo.repo}/blob/master/CONTRIBUTING.md#communication-language).`;
// Handle different event types
if (context.eventName === 'pull_request_review_comment') {
// Review comment on PR - reply in thread
await github.rest.pulls.createReviewComment({
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: context.payload.pull_request.number,
body: reminderMessage,
commit_id: comment.commit_id,
path: comment.path,
in_reply_to: comment.id
});
} else if (context.eventName === 'issue_comment' && context.payload.issue.pull_request) {
// Comment on PR issue - post as issue comment
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.payload.issue.number,
body: reminderMessage
});
}
}