Skip to content

Commit 48cef03

Browse files
Merge branch 'main' into main
2 parents 35837a1 + 8fb0538 commit 48cef03

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

91 files changed

+4094
-947
lines changed
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
name: 🐛 Bug Report
2+
description: Report a bug with detailed reproduction steps
3+
body:
4+
- type: markdown
5+
attributes:
6+
value: |
7+
**Reproducibility is critical.** Provide exact steps so maintainers can reproduce instantly.
8+
9+
- type: textarea
10+
id: description
11+
attributes:
12+
label: What's happening?
13+
placeholder: Describe the bug in 1-2 sentences
14+
validations:
15+
required: true
16+
17+
- type: textarea
18+
id: reproduction
19+
attributes:
20+
label: Exact Reproduction Steps
21+
description: Copy-pasteable commands only
22+
placeholder: |
23+
1. Run command
24+
2. Change config/file
25+
3. Run another command
26+
4. See error
27+
value: |
28+
1.
29+
2.
30+
3.
31+
validations:
32+
required: true
33+
34+
- type: textarea
35+
id: expected
36+
attributes:
37+
label: Expected
38+
placeholder: What should happen
39+
validations:
40+
required: true
41+
42+
- type: textarea
43+
id: actual
44+
attributes:
45+
label: Actual
46+
placeholder: What actually happens
47+
validations:
48+
required: true
49+
50+
- type: textarea
51+
id: visuals
52+
attributes:
53+
label: Screenshots/Videos
54+
description: "**REQUIRED** - Visual proof of the issue"
55+
placeholder: Drag screenshot/screencast here
56+
validations:
57+
required: true
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
name: 📚 Documentation Issue
2+
description: Report docs problems with screenshots
3+
body:
4+
- type: dropdown
5+
id: type
6+
attributes:
7+
label: Issue Type
8+
options:
9+
- Broken link
10+
- Typo/grammar
11+
- Missing docs
12+
- Outdated content
13+
- Unclear explanation
14+
validations:
15+
required: true
16+
17+
- type: input
18+
id: url
19+
attributes:
20+
label: URL
21+
placeholder: "https://lingo.dev/..."
22+
validations:
23+
required: true
24+
25+
- type: textarea
26+
id: issue
27+
attributes:
28+
label: Issue
29+
placeholder: What's wrong?
30+
validations:
31+
required: true
32+
33+
- type: textarea
34+
id: fix
35+
attributes:
36+
label: Fix
37+
placeholder: How to fix it?
38+
39+
- type: textarea
40+
id: screenshot
41+
attributes:
42+
label: Screenshot
43+
description: "**REQUIRED** - Show the issue"
44+
placeholder: Drag screenshot here
45+
validations:
46+
required: true
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
name: ✨ Feature Request
2+
description: Suggest a feature with clear use case
3+
body:
4+
- type: textarea
5+
id: problem
6+
attributes:
7+
label: Problem
8+
placeholder: What can't you do today?
9+
validations:
10+
required: true
11+
12+
- type: textarea
13+
id: solution
14+
attributes:
15+
label: Solution
16+
placeholder: How should it work?
17+
validations:
18+
required: true
19+
20+
- type: textarea
21+
id: visuals
22+
attributes:
23+
label: Visuals
24+
description: "**REQUIRED** - Show mockup/example"
25+
placeholder: Drag screenshot/diagram here
26+
validations:
27+
required: true
28+
29+
- type: textarea
30+
id: alternatives
31+
attributes:
32+
label: Workarounds
33+
placeholder: What have you tried?

.github/pull_request_template.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## Summary
2+
3+
[One sentence: what this PR does]
4+
5+
## Changes
6+
7+
- [Key change 1]
8+
- [Key change 2]
9+
10+
## Testing
11+
12+
**Business logic tests added:**
13+
14+
- [ ] [Describe test 1 - what behavior it validates]
15+
- [ ] [Describe test 2 - what edge case it covers]
16+
- [ ] All tests pass locally
17+
18+
## Visuals
19+
20+
**Required for UI/UX changes:**
21+
22+
- [ ] Before/after screenshots attached
23+
- [ ] Video demo for interactions (< 30s)
24+
25+
## Checklist
26+
27+
- [ ] Changeset added (if version bump needed)
28+
- [ ] Tests cover business logic (not just happy path)
29+
- [ ] No breaking changes (or documented below)
30+
31+
Closes #[issue-number]

.github/workflows/lingodotdev.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ jobs:
4646
uses: actions/checkout@v4
4747

4848
- name: Use Node.js
49-
uses: actions/setup-node@v2
49+
uses: actions/setup-node@v4
5050
with:
51-
node-version: "20"
51+
node-version: "20.17"
5252

5353
- name: Lingo.dev
5454
uses: ./
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
name: PR Assignment Check
2+
3+
on:
4+
pull_request_target:
5+
types: [opened, reopened, edited]
6+
workflow_dispatch:
7+
inputs:
8+
pr_number:
9+
description: "PR number to check"
10+
required: true
11+
type: number
12+
13+
jobs:
14+
check:
15+
runs-on: ubuntu-latest
16+
permissions:
17+
contents: read
18+
issues: read
19+
pull-requests: write
20+
id-token: write
21+
steps:
22+
- uses: actions/checkout@v4
23+
with:
24+
fetch-depth: 0
25+
- uses: anthropics/claude-code-action@v1
26+
with:
27+
anthropic_api_key: ${{ secrets.CLAUDE_CODE_API_KEY }}
28+
github_token: ${{ secrets.GITHUB_TOKEN }}
29+
show_full_output: true
30+
prompt: |
31+
EXEMPT USERS: @maxprilutskiy, @vrcprl, @davidturnbull, @monicabe, @sumitsaurabh927, @AleksandrSl (skip all checks if PR author is one of these)
32+
33+
Close this PR if:
34+
1. It doesn't reference any issue (no "Closes #123", "Fixes #456", etc.)
35+
2. OR it references an issue where the PR author is NOT assigned
36+
37+
When closing, leave a brief, friendly comment (2-3 sentences, no emojis) explaining:
38+
- They need to reference an assigned issue or get assigned first
39+
- They should find unassigned issues to work on
40+
41+
Otherwise, do nothing.
42+
claude_args: |
43+
--allowedTools "Bash,Read,Grep,Glob"

.github/workflows/pr-check.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,9 @@ jobs:
3131
fi
3232
3333
- name: Use Node.js
34-
uses: actions/setup-node@v2
34+
uses: actions/setup-node@v4
3535
with:
36-
node-version: 20.12.2
36+
node-version: "20.17"
3737

3838
- name: Install pnpm
3939
uses: pnpm/action-setup@v4
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Check for Merge Conflicts
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize, reopened]
6+
# Also run when the base branch is updated
7+
push:
8+
branches:
9+
- main
10+
11+
jobs:
12+
check-merge-conflict:
13+
runs-on: ubuntu-latest
14+
if: github.event_name == 'pull_request'
15+
16+
steps:
17+
- name: Check for merge conflicts
18+
uses: actions/github-script@v7
19+
with:
20+
script: |
21+
const pr = context.payload.pull_request;
22+
23+
// Get the PR details to check mergeable state
24+
const { data: pullRequest } = await github.rest.pulls.get({
25+
owner: context.repo.owner,
26+
repo: context.repo.repo,
27+
pull_number: pr.number
28+
});
29+
30+
console.log(`PR #${pr.number} mergeable state: ${pullRequest.mergeable_state}`);
31+
console.log(`PR #${pr.number} mergeable: ${pullRequest.mergeable}`);
32+
33+
// The mergeable field can be: true, false, or null (if GitHub is still calculating)
34+
if (pullRequest.mergeable === null) {
35+
console.log('GitHub is still calculating mergeable status. Waiting...');
36+
// Wait a bit and try again
37+
await new Promise(resolve => setTimeout(resolve, 5000));
38+
39+
const { data: updatedPR } = await github.rest.pulls.get({
40+
owner: context.repo.owner,
41+
repo: context.repo.repo,
42+
pull_number: pr.number
43+
});
44+
45+
console.log(`Updated mergeable state: ${updatedPR.mergeable_state}`);
46+
console.log(`Updated mergeable: ${updatedPR.mergeable}`);
47+
48+
if (updatedPR.mergeable === false) {
49+
core.setFailed(`❌ PR #${pr.number} has merge conflicts that must be resolved.`);
50+
} else if (updatedPR.mergeable === null) {
51+
core.warning('⚠️ Could not determine merge conflict status. GitHub may still be calculating.');
52+
} else {
53+
console.log(`✅ PR #${pr.number} has no merge conflicts.`);
54+
}
55+
} else if (pullRequest.mergeable === false) {
56+
core.setFailed(`❌ PR #${pr.number} has merge conflicts that must be resolved.`);
57+
} else {
58+
console.log(`✅ PR #${pr.number} has no merge conflicts.`);
59+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
name: PR Stale Check
2+
3+
on:
4+
schedule:
5+
- cron: "0 0 * * 1" # Every Monday at midnight UTC
6+
workflow_dispatch:
7+
8+
jobs:
9+
check-stale:
10+
runs-on: ubuntu-latest
11+
permissions:
12+
contents: read
13+
issues: read
14+
pull-requests: write
15+
id-token: write
16+
steps:
17+
- uses: actions/checkout@v4
18+
with:
19+
fetch-depth: 0
20+
- uses: anthropics/claude-code-action@v1
21+
with:
22+
anthropic_api_key: ${{ secrets.CLAUDE_CODE_API_KEY }}
23+
github_token: ${{ secrets.GITHUB_TOKEN }}
24+
show_full_output: true
25+
prompt: |
26+
EXEMPT USERS: @maxprilutskiy, @vrcprl, @davidturnbull, @monicabe, @sumitsaurabh927, @AleksandrSl
27+
28+
Check all open pull requests and for each PR:
29+
30+
1. Analyze the conversation to determine:
31+
- Are there unaddressed comments/requests from maintainers?
32+
- Has the PR author responded or made updates recently?
33+
- Is the ball in the author's court or are they waiting on maintainers?
34+
- Has a stale reminder been posted already (look for "still working on this" or similar language in bot comments)?
35+
36+
2. Decision logic:
37+
- If author is waiting on maintainers: SKIP
38+
- If author responded recently (within 7 days): SKIP
39+
- If PR author is in exempt users list: SKIP
40+
- If there are unaddressed maintainer comments AND:
41+
- No stale reminder posted yet: POST REMINDER
42+
- Stale reminder was posted >7 days ago with no response: CLOSE PR
43+
44+
3. Reminder message template (friendly, concise, no emojis):
45+
"Hey @author! Just checking in - are you still working on this PR? We noticed there are some comments that may need addressing. If you need more time, no problem! Just let us know. If we don't hear back within a week, we'll close this to keep the repo tidy, but you can always reopen when ready."
46+
47+
4. Close message template (friendly, concise, no emojis):
48+
"Closing this PR as stale to keep the repo clean. Feel free to reopen or create a new PR once you're ready to continue. Thanks for your contribution!"
49+
claude_args: |
50+
--allowedTools "Bash,Read,Grep,Glob"

.github/workflows/release.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ jobs:
3636
fi
3737
3838
- name: Use Node.js
39-
uses: actions/setup-node@v2
39+
uses: actions/setup-node@v4
4040
with:
41-
node-version: 20.12.2
41+
node-version: "20.17"
4242

4343
- name: Install pnpm
4444
uses: pnpm/action-setup@v4

0 commit comments

Comments
 (0)