Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
fff3111
Fix HelpMenuE2ETest in all the 3 apps. (#3253)
kdeakinstructure Sep 23, 2025
4359561
[MBL-19109][Student] Consortia quizzes open with root account (#3260)
hermannakos Sep 26, 2025
83949e6
[MBL-19358][Teacher] Scrolling in New Quiz submissions is not smooth
kristofnemere Sep 29, 2025
7c4a91b
[CLX-2876][Horizon] Notifications screen (#3252)
domonkosadam Sep 29, 2025
f8b52ae
[MBL-19322][Student][Teacher] Assignments are sorted by Assignment ID…
kristofnemere Sep 30, 2025
ae7e96e
[MBL-19279][Teacher] Fixed Classic quiz: If it's not published and ta…
kristofnemere Sep 30, 2025
f6b2104
[MBL-19299][Student][Parent] Excused assignments show missing tag
kristofnemere Sep 30, 2025
eece501
[MBL-19372][Parent] - Fix Alert Settings dialog message appearance (#…
kdeakinstructure Sep 30, 2025
e041b09
[MBL-19309][Teacher] Section filtering does not work by clicking on t…
kristofnemere Sep 30, 2025
7e6aaca
[MBL-17359][Student] Implement Course browser Interaction test for ho…
adamNagy56 Sep 30, 2025
e23e892
[MBL-19298][Student] - Remove Stub from testCommentsBelongToSubmissio…
kdeakinstructure Oct 1, 2025
ee1d680
[MBL-19361][Teacher] Marking 0-point assignments as Complete incorrec…
kristofnemere Oct 2, 2025
e825acb
[MBL-19378][Student][Teacher] Dash playback fix
andrasmaczak Oct 2, 2025
a94c47d
[MBL-19303][Teacher] Teachers logged in on root account in a Consorti…
kristofnemere Oct 2, 2025
7f836fe
[MBL-19363][All] Inbox messages can be sent from course participation…
kristofnemere Oct 2, 2025
49032fb
[MBL-18862][All] - Unifying automation packages and naming convention…
kdeakinstructure Oct 2, 2025
d6744db
Add agent instructions for Claude Code and GitHub Copilot (#3280)
hermannakos Oct 3, 2025
df4a1e2
[CLX-2877][Horizon] Course card redesign (#3273)
domonkosadam Oct 3, 2025
38da011
[MBL-19176][Student] K5: K5 Student is not able to open LTI tools fro…
kristofnemere Oct 3, 2025
c931d5d
[MBL-19024][Teacher] Non-Teacher Account Navigation: App Redirect Fai…
tamaskozmer Oct 3, 2025
6a4ea04
Add missing pendoAccessToken to open source data (#3283)
hermannakos Oct 3, 2025
c1f4ba9
[MBL-18997][All] Disable send button while inbox attachment uploads (…
hermannakos Oct 6, 2025
fee9667
Add GitHub Action for unit test coverage delta tracking (#3282)
hermannakos Oct 6, 2025
4a3a428
[MBL-19271][Teacher] Fix syllabus embedded images not displaying in E…
hermannakos Oct 7, 2025
93f7ca1
[MBL-19379][Parent] Fixed discussion attachment not downloading. #3287
tamaskozmer Oct 7, 2025
af06dc6
[Horizon][HackDay] Generate Horizon feature tests (#3284)
domonkosadam Oct 8, 2025
e0b437a
[MBL-19357][All] - Eliminate Splunk and basic setup for Observe (#3288)
kdeakinstructure Oct 8, 2025
9a2d05a
[MBL-19278][Teacher] Assignment List page doesn't refresh automatical…
kristofnemere Oct 8, 2025
f165758
[MBL-19199][Parent] File Upload submissions (image/PDF) fail to download
kristofnemere Oct 8, 2025
f44a0d9
[MBL-19203][Student] Push notification for teacher comment opens Assi…
tamaskozmer Oct 8, 2025
a798d99
[CLX-3022][Horizon] Learn screen accessibility (#3290)
andrasmaczak Oct 8, 2025
1a1aab3
[MBL-19300][Teacher] Fix push notification routing to open correct st…
tamaskozmer Oct 8, 2025
553ca79
[MBL-19385][All] Fix light mode button disappearing after rotation (#…
hermannakos Oct 9, 2025
d98330d
[MBL-19390][Teacher] Letter Grade assignments can’t be marked as Excu…
kristofnemere Oct 9, 2025
73ff3fa
[MBL-19392][Teacher]The comment box does not display above the keyboa…
tamaskozmer Oct 9, 2025
ec04e78
[MBL-19273][Teacher] Text submission's text size is changing automati…
tamaskozmer Oct 13, 2025
c7f5da0
[MBL-19126][Student][Parent] Assignment Details DCP
andrasmaczak Oct 13, 2025
190557f
[MBL-19275][Android] Fix file attachment duplicate uploads and infini…
hermannakos Oct 13, 2025
a2d76dd
[MBL-19391][Teacher] Fix cursor jumping when entering percentage grad…
hermannakos Oct 13, 2025
e602078
Fixed a bug in Bookmark List navigation. (Now when a user opens a boo…
kdeakinstructure Oct 14, 2025
5bf853d
[MBL-19252][Student][Teacher] Ungraded items now appear in syllabus (…
hermannakos Oct 14, 2025
2189545
Fixed a bug where on the Syllabus Summary page the quizzes icons was …
kdeakinstructure Oct 14, 2025
95f2d8f
[MBL-19124][Student] Discussion list DCP support
kristofnemere Oct 15, 2025
112cef7
[MBL-19020][Student] Navigating back to an unmarked "Mark as Done" re…
kristofnemere Oct 15, 2025
47fb6ea
[MBL-19330][All] Access denied error when trying to download files on…
tamaskozmer Oct 15, 2025
3ff18b1
[MBL-19081][All] Dependency update (#3270)
hermannakos Oct 16, 2025
32e525a
Refactor BookmarksE2ETest to handle new routing logic (route to bokma…
kdeakinstructure Oct 16, 2025
427dd4b
[MBL-19397][Parent] Observers unable to see Quiz submission feedback …
kristofnemere Oct 17, 2025
55b5386
[MBL-19423] Fix random numbers being hyperlinked in Inbox messages (#…
hermannakos Oct 17, 2025
d4c1e6d
Fix glide compiler (#3318)
domonkosadam Oct 17, 2025
9abd2b5
[MBL-19351][Student] Display discussion checkpoint dates in module li…
tamaskozmer Oct 17, 2025
97939f6
[MBL-19388][All] Remove app theme selector dialog (#3322)
tamaskozmer Oct 17, 2025
2adf6f1
[MBL-19419] Fix DCP assignment filtering in Assignment List (#3316)
hermannakos Oct 20, 2025
ceeacc0
[MBL-18923] Fix page error screen dark theme support (#3325)
tamaskozmer Oct 20, 2025
4ae1913
[MBL-18936] Hide quiz preview button during initial loading (#3327)
tamaskozmer Oct 20, 2025
8931785
[MBL-19349][Student] Syllabus summary DCP
kristofnemere Oct 20, 2025
2c9cdcd
[MBL-18930] Fix Alt text dialog OK button disabled state visibility
kristofnemere Oct 20, 2025
fa54515
Add landscape and/or tablet reminder checkbox testing to PR template
kdeakinstructure Oct 20, 2025
6b9d196
Merge pull request #3334 from instructure/kdeakinstructure-patch-1
balintbartok Oct 20, 2025
2f1b40e
Fix breaking user group file upload test. (#3332)
kdeakinstructure Oct 20, 2025
e754937
[MBL-19016][Student] - Handle if the what-if score is over the maximu…
kdeakinstructure Oct 20, 2025
361e3d9
[CLX-2880][Horizon] Time spent widget (#3309)
domonkosadam Oct 20, 2025
100f423
[CLX-2928][Horizon] My progress widget (#3312)
domonkosadam Oct 21, 2025
c9739f9
[MBL-19012][Student] - Add 'Done' button on Smart Search Filter Prefe…
kdeakinstructure Oct 21, 2025
f21a591
[MBL-18791][Student] - Remove Inbox Conversation type items from Noti…
kdeakinstructure Oct 21, 2025
5b335fc
[MBL-18637][All] Create E2E test for wrong domain page (#3328)
adamNagy56 Oct 21, 2025
2fa679e
[CLX-2879][Horizon] Skill highlights widget (#3320)
domonkosadam Oct 21, 2025
9b677c4
[MBL-19155][Student] Add E2E test for 'Add to Home Screen' bookmark f…
adamNagy56 Oct 21, 2025
bfbe933
[CLX-3082][Horizon] Skill overview widget (#3321)
domonkosadam Oct 21, 2025
ad5bc8f
Add Claude Code GitHub Workflow (#3333)
balintbartok Oct 21, 2025
b36593a
[CLX-3099][Horizon] Learner dashboard improvements (#3319)
domonkosadam Oct 21, 2025
4771c57
[HackDay][Horizon] Refactor refresh logic (#3324)
domonkosadam Oct 21, 2025
ed63041
Fix breaking testBookmarkAddToHomeScreenE2E test. (#3336)
adamNagy56 Oct 22, 2025
0d5a895
[MBL-19424][Teacher] Extend submission filtering with differentiation…
hermannakos Oct 22, 2025
08f61c0
Adds comprehensive E2E tests verifying inbox signatures display corre…
adamNagy56 Oct 22, 2025
c56ae2a
Enable inline comments for Claude Code PR reviews (#3341)
hermannakos Oct 27, 2025
e1cc698
[MBL-19421][Parent] Filter out concluded courses in Inbox course pick…
hermannakos Oct 27, 2025
df8acb8
[MBL-19440][Student] Extend Notifications E2E test to verify inbox co…
adamNagy56 Oct 28, 2025
d8ed7e8
[MBL-19441][Student][Parent] Display Discussion Checkpoint grades on …
kristofnemere Oct 28, 2025
b18653b
[CLX-3122][Horizon] Learner dashboard a11y check (#3337)
domonkosadam Oct 28, 2025
f6389ef
[CLX-3130][Horizon] Remove announcements from notifications screen (#…
domonkosadam Oct 28, 2025
698062a
[MBL-19430][Student] Fix To-Do list showing completed quiz items (#3340)
hermannakos Oct 28, 2025
1e5d5a6
[MBL-19438][Student] Fix anonymous discussion navigation from Calenda…
hermannakos Oct 29, 2025
59ba8bd
[MBL-19442][Student] DCP - Update Notifications list
kristofnemere Oct 29, 2025
7b66558
[MBL-19435][Student] - Implement E2E test for Discussion Checkpoints …
kdeakinstructure Oct 29, 2025
5fb62f1
[CLX-2927][Horizon] Announcement widget (#3343)
domonkosadam Oct 30, 2025
4002c82
[MBL-19433][Student] Fix Studio videos not working offline in new ifr…
hermannakos Oct 30, 2025
2d3269f
[CLX-3120][Horizon] Inbox list global announcement handling (#3347)
domonkosadam Oct 30, 2025
62342f4
[MBL-19329][Student] Add studio media immersive view support (#3307)
hermannakos Oct 30, 2025
43c05b3
[Horizon] Dashboard fixes (#3351)
domonkosadam Oct 30, 2025
74f351c
[MBL-19449][Teacher] Fix decimal grade rounding in SpeedGrader
kristofnemere Oct 30, 2025
f3d2752
[CLX-3184][Horizon] Widget changes (#3355)
domonkosadam Nov 3, 2025
b32234b
[MBL-19432][Student] Add submission analytics tracking (#3354)
hermannakos Nov 3, 2025
8fac7b2
Update translations (#3359)
inst-danger Nov 3, 2025
4de0843
Version bump
tamaskozmer Nov 3, 2025
bf40b44
Merge branch 'release/parent' into release/parent-4.7.0-63
tamaskozmer Nov 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
62 changes: 62 additions & 0 deletions .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Claude Code Review

on:
pull_request:
types: [opened, synchronize]
# Optional: Only run on specific file changes
# paths:
# - "src/**/*.ts"
# - "src/**/*.tsx"
# - "src/**/*.js"
# - "src/**/*.jsx"

jobs:
claude-review:
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
# github.event.pull_request.user.login == 'new-developer' ||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'

runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
issues: read
id-token: write

steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}

Please review this pull request and provide inline feedback using the GitHub review system.

Review focus areas:
- Code quality and best practices
- Potential bugs or issues
- Performance considerations
- Security concerns
- Test coverage

Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.

Instructions:
1. Use the GitHub MCP tools to fetch the PR diff
2. Add inline comments using the appropriate MCP tools for each specific piece of feedback on particular lines
3. Submit the review with event type 'COMMENT' (not 'REQUEST_CHANGES') to publish as non-blocking feedback

# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
claude_args: '--allowedTools "mcp__github__create_pending_pull_request_review,mcp__github__add_comment_to_pending_review,mcp__github__submit_pending_pull_request_review,mcp__github__get_pull_request_diff"'

50 changes: 50 additions & 0 deletions .github/workflows/claude.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
name: Claude Code

on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]

jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1

- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}

# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'

# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://docs.claude.com/en/docs/claude-code/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'

258 changes: 258 additions & 0 deletions .github/workflows/unit-test-coverage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,258 @@
name: Unit Test Coverage

on:
pull_request:
branches: [ master ]

jobs:
test-pr:
runs-on: ubuntu-latest

steps:
- name: Checkout PR branch
uses: actions/checkout@v4

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3

- name: Setup open source build
run: ./open_source.sh

- name: Run unit tests and generate coverage for PR
run: |
# Run tests in parallel - Gradle will handle parallelization
./gradle/gradlew -p apps :student:testQaDebugUnitTest :teacher:testQaDebugUnitTest :pandautils:testDebugUnitTest --parallel

# Copy exec files to expected locations for jacoco.gradle
mkdir -p apps/student/build/jacoco apps/teacher/build/jacoco libs/pandautils/build/jacoco

cp apps/student/build/outputs/unit_test_code_coverage/qaDebugUnitTest/testQaDebugUnitTest.exec apps/student/build/jacoco/testQaDebugUnitTest.exec 2>/dev/null || echo "Student exec not found"
cp apps/teacher/build/outputs/unit_test_code_coverage/qaDebugUnitTest/testQaDebugUnitTest.exec apps/teacher/build/jacoco/testQaDebugUnitTest.exec 2>/dev/null || echo "Teacher exec not found"
cp libs/pandautils/build/outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec libs/pandautils/build/jacoco/testDebugUnitTest.exec 2>/dev/null || echo "Pandautils exec not found"

# Generate JaCoCo reports in parallel
./gradle/gradlew -p apps :student:jacocoReport :teacher:jacocoReport :pandautils:jacocoReport --parallel
continue-on-error: false

- name: Upload PR coverage reports
uses: actions/upload-artifact@v4
with:
name: pr-coverage
path: |
apps/student/build/reports/jacoco/jacocoReport/jacocoReport.csv
apps/teacher/build/reports/jacoco/jacocoReport/jacocoReport.csv
libs/pandautils/build/reports/jacoco/jacocoReport/jacocoReport.csv
retention-days: 1

test-master:
runs-on: ubuntu-latest

steps:
- name: Checkout master branch
uses: actions/checkout@v4
with:
ref: master

- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3

- name: Setup open source build
run: ./open_source.sh

- name: Run unit tests and generate coverage for master
run: |
# Run tests in parallel - Gradle will handle parallelization
./gradle/gradlew -p apps :student:testQaDebugUnitTest :teacher:testQaDebugUnitTest :pandautils:testDebugUnitTest --parallel

# Copy exec files to expected locations for jacoco.gradle
mkdir -p apps/student/build/jacoco apps/teacher/build/jacoco libs/pandautils/build/jacoco

cp apps/student/build/outputs/unit_test_code_coverage/qaDebugUnitTest/testQaDebugUnitTest.exec apps/student/build/jacoco/testQaDebugUnitTest.exec 2>/dev/null || echo "Student exec not found"
cp apps/teacher/build/outputs/unit_test_code_coverage/qaDebugUnitTest/testQaDebugUnitTest.exec apps/teacher/build/jacoco/testQaDebugUnitTest.exec 2>/dev/null || echo "Teacher exec not found"
cp libs/pandautils/build/outputs/unit_test_code_coverage/debugUnitTest/testDebugUnitTest.exec libs/pandautils/build/jacoco/testDebugUnitTest.exec 2>/dev/null || echo "Pandautils exec not found"

# Generate JaCoCo reports in parallel
./gradle/gradlew -p apps :student:jacocoReport :teacher:jacocoReport :pandautils:jacocoReport --parallel
continue-on-error: true

- name: Upload master coverage reports
uses: actions/upload-artifact@v4
with:
name: master-coverage
path: |
apps/student/build/reports/jacoco/jacocoReport/jacocoReport.csv
apps/teacher/build/reports/jacoco/jacocoReport/jacocoReport.csv
libs/pandautils/build/reports/jacoco/jacocoReport/jacocoReport.csv
retention-days: 1

coverage-report:
runs-on: ubuntu-latest
needs: [test-pr, test-master]
if: always()

steps:
- name: Download PR coverage
uses: actions/download-artifact@v4
with:
name: pr-coverage
path: coverage-reports/pr

- name: Download master coverage
uses: actions/download-artifact@v4
with:
name: master-coverage
path: coverage-reports/master
continue-on-error: true

- name: Reorganize coverage files
run: |
# Reorganize downloaded artifacts to expected structure
mkdir -p coverage-reports/pr coverage-reports/master

# PR coverage
find coverage-reports/pr -name "jacocoReport.csv" -path "*/student/*" -exec cp {} coverage-reports/pr/student.csv \; 2>/dev/null || echo "Student PR coverage not found"
find coverage-reports/pr -name "jacocoReport.csv" -path "*/teacher/*" -exec cp {} coverage-reports/pr/teacher.csv \; 2>/dev/null || echo "Teacher PR coverage not found"
find coverage-reports/pr -name "jacocoReport.csv" -path "*/pandautils/*" -exec cp {} coverage-reports/pr/pandautils.csv \; 2>/dev/null || echo "Pandautils PR coverage not found"

# Master coverage
find coverage-reports/master -name "jacocoReport.csv" -path "*/student/*" -exec cp {} coverage-reports/master/student.csv \; 2>/dev/null || echo "Student master coverage not found"
find coverage-reports/master -name "jacocoReport.csv" -path "*/teacher/*" -exec cp {} coverage-reports/master/teacher.csv \; 2>/dev/null || echo "Teacher master coverage not found"
find coverage-reports/master -name "jacocoReport.csv" -path "*/pandautils/*" -exec cp {} coverage-reports/master/pandautils.csv \; 2>/dev/null || echo "Pandautils master coverage not found"

- name: Calculate coverage delta
id: coverage
run: |
python3 << 'EOF' | tee coverage-report.txt
import csv
import os
from pathlib import Path

def parse_jacoco_csv(file_path):
"""Parse JaCoCo CSV and return instruction coverage percentage"""
if not Path(file_path).exists():
return None

total_missed = 0
total_covered = 0

with open(file_path, 'r') as f:
reader = csv.DictReader(f)
for row in reader:
total_missed += int(row['INSTRUCTION_MISSED'])
total_covered += int(row['INSTRUCTION_COVERED'])

if total_missed + total_covered == 0:
return 0.0

return (total_covered / (total_missed + total_covered)) * 100

modules = ['student', 'teacher', 'pandautils']
results = []

print("## 📊 Code Coverage Report\n")

overall_pr_coverage = []
overall_master_coverage = []

for module in modules:
pr_file = f'coverage-reports/pr/{module}.csv'
master_file = f'coverage-reports/master/{module}.csv'

pr_cov = parse_jacoco_csv(pr_file)
master_cov = parse_jacoco_csv(master_file)

if pr_cov is not None and master_cov is not None:
delta = pr_cov - master_cov
emoji = '✅' if delta >= 0 else '⚠️'
sign = '+' if delta >= 0 else ''

print(f"### {emoji} {module.capitalize()}")
print(f"- **PR Coverage:** {pr_cov:.2f}%")
print(f"- **Master Coverage:** {master_cov:.2f}%")
print(f"- **Delta:** {sign}{delta:.2f}%\n")

overall_pr_coverage.append(pr_cov)
overall_master_coverage.append(master_cov)
elif pr_cov is not None:
print(f"### ℹ️ {module.capitalize()}")
print(f"- **PR Coverage:** {pr_cov:.2f}%")
print(f"- **Master Coverage:** N/A\n")
else:
print(f"### ⚠️ {module.capitalize()}")
print(f"- Coverage data not available\n")

if overall_pr_coverage and overall_master_coverage:
avg_pr = sum(overall_pr_coverage) / len(overall_pr_coverage)
avg_master = sum(overall_master_coverage) / len(overall_master_coverage)
overall_delta = avg_pr - avg_master

print("---")
print(f"### 📈 Overall Average")
print(f"- **PR Coverage:** {avg_pr:.2f}%")
print(f"- **Master Coverage:** {avg_master:.2f}%")
sign = '+' if overall_delta >= 0 else ''
print(f"- **Delta:** {sign}{overall_delta:.2f}%")

# Set output for potential failure condition
with open(os.environ['GITHUB_OUTPUT'], 'a') as f:
f.write(f"delta={overall_delta}\n")

EOF

- name: Comment PR (sticky)
if: github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
script: |
const fs = require('fs');
const output = fs.readFileSync('coverage-report.txt', 'utf8');
const marker = '<!-- unit-test-coverage-comment -->';
const body = marker + '\n' + output;

// Find existing coverage comment
const { data: comments } = await github.rest.issues.listComments({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: context.issue.number,
});

const existingComment = comments.find(comment =>
comment.body.includes(marker)
);

if (existingComment) {
// Update existing comment
await github.rest.issues.updateComment({
owner: context.repo.owner,
repo: context.repo.repo,
comment_id: existingComment.id,
body: body
});
} else {
// Create new comment
await github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: body
});
}

# Optional: Fail if coverage decreases by more than 1%
# - name: Check coverage threshold
# if: steps.coverage.outputs.delta < -1.0
# run: |
# echo "Coverage decreased by more than 1%"
# exit 1
1 change: 1 addition & 0 deletions PULL_REQUEST_TEMPLATE
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,6 @@ release note:
- [ ] Run E2E test suite
- [ ] Tested in dark mode
- [ ] Tested in light mode
- [ ] Test in landscape mode and/or tablet
- [ ] A11y checked
- [ ] Approve from product
Loading