Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
67 commits
Select commit Hold shift + click to select a range
f7325a3
Release Teacher 2.1.0 (83)
kristofnemere Sep 22, 2025
b98ae48
Release Parent 4.6.0 (62)
kristofnemere Sep 22, 2025
f0ef6ee
Rubric score input fix
kristofnemere Sep 26, 2025
a171aab
Release Parent 4.6.0 (62)
kristofnemere Sep 29, 2025
5773a1a
Release Teacher 2.1.0 (83)
kristofnemere Sep 29, 2025
b31ca9d
Version bump
tamaskozmer Nov 3, 2025
4de0843
Version bump
tamaskozmer Nov 3, 2025
adb5e05
Merge branch 'release/teacher' into release/teacher-2.2.0-84
tamaskozmer Nov 3, 2025
bf40b44
Merge branch 'release/parent' into release/parent-4.7.0-63
tamaskozmer Nov 3, 2025
8ce3eb3
[MBL-19399][Student] To Do List UI Implementation (#3353)
tamaskozmer Nov 3, 2025
ce7d449
Fix Syllabus issues.
tamaskozmer Nov 4, 2025
c12f823
Actions PR pipeline (#3368)
hermannakos Nov 5, 2025
a349f01
[MBL-19400][Student] To Do List - Implement actions (swipe, checkbox)…
tamaskozmer Nov 6, 2025
6f4add1
Fix PR pipeline (#3370)
hermannakos Nov 6, 2025
e1c9574
Release Teacher 2.2.0 (84)
tamaskozmer Nov 10, 2025
de0a0b7
Release Parent 4.7.0 (63)
tamaskozmer Nov 10, 2025
4915d18
[CLX-3127][Horizon] Learner dashboard landscape mode (#3364)
domonkosadam Nov 10, 2025
01d9af0
[MBL-17287][Teacher] Add dashboard card reordering functionality
kristofnemere Nov 10, 2025
d6dc9fc
[CLX-3200][Horizon] ModuleItemSequence screen notebook changes (#3369)
domonkosadam Nov 11, 2025
0e92d24
[MBL-19452][Student] Dashboard Redesign Infrastructure (#3372)
hermannakos Nov 11, 2025
dbd6745
[MBL-17351][Student] Extend AssignmentDetails interaction test with m…
adamNagy56 Nov 11, 2025
a4904e2
[MBL-19479][Student][Parent] DCP - Support Submitted/NotSubmitted status
kristofnemere Nov 11, 2025
70f2fd1
[MBL-19500][Student] Add expand/collapse functionality to conference …
kdeakinstructure Nov 11, 2025
473c4fb
[MBL-19179][Parent] - Implement search in Grades page (#3363)
kdeakinstructure Nov 11, 2025
1574757
[MBL-19183][Student][Teacher] - Add loading indicator when opening in…
kdeakinstructure Nov 11, 2025
24ebca9
[MBL-19402][Student] Implement navigation from To Do List
kristofnemere Nov 11, 2025
2a4766e
[MBL-19401][Student] Implement To-Do List Filters (#3377)
tamaskozmer Nov 12, 2025
5e1f142
[MBL-19511] Add BackHandler to AssignmentListScreen for filter naviga…
hermannakos Nov 13, 2025
03cd241
Merge pull request #3388 from instructure/release/teacher
tamaskozmer Nov 13, 2025
2269d56
Merge pull request #3389 from instructure/release/parent
tamaskozmer Nov 13, 2025
e4ca2b8
[MBL-19495][Parent] Add notification permission request and toast for…
hermannakos Nov 13, 2025
450f89e
[MBL-19494][Student] Fix assignment submission for students with sect…
hermannakos Nov 13, 2025
c56dc0f
[MBL-19401][Student] Add analytics tracking to To Do List
kristofnemere Nov 13, 2025
d444f0f
[MBL-19453][Student] Add widget foundation architecture and Welcome w…
hermannakos Nov 14, 2025
4fe8761
[MBL-19403][Student] Adjust widgets to be consistent with the todo list
tamaskozmer Nov 14, 2025
d15f34d
[MBL-19486][Teacher] - Disable front page option in course home selec…
kdeakinstructure Nov 14, 2025
7e3e018
[MBL-19113][All] - Implement E2E tests for custom statuses (#3393)
kdeakinstructure Nov 14, 2025
285773c
[CLX-3253][Horizon] Dashboard widgets improvements (#3371)
domonkosadam Nov 17, 2025
75accd6
Merge pull request #3394 from instructure/release/student
hermannakos Nov 17, 2025
0b1dbd2
[MBL-19488][Teacher] Fix People page filter state loss on orientation…
hermannakos Nov 17, 2025
f9b55cd
[MBL-19456][Student] Course Invitations Widget (#3395)
hermannakos Nov 17, 2025
93cd8c7
[MBL-19522][All] Fix crash when downloading attachments with null URL…
hermannakos Nov 18, 2025
8e20899
[MBL-19523][All] Fix offline sync database crash (#3398)
hermannakos Nov 18, 2025
ee67dfb
[CLX-3245][Horizon] Add horizon workflows (#3392)
domonkosadam Nov 18, 2025
b42eef2
[CLX-3254][Horizon] Dashboard courses widget refactor (#3391)
domonkosadam Nov 18, 2025
7597e8e
[MBL-19406][Student] Add comprehensive ToDoList interaction tests
kristofnemere Nov 19, 2025
00abf4d
[MBL-19540][Teacher] Fix letter grade rounding issue for low-point as…
hermannakos Nov 21, 2025
60eb51d
[MBL-19457][Student] Institutional Announcements Widget (#3401)
hermannakos Nov 21, 2025
c20cee8
[CLX-3244][Horizon] Replace deprecated hiltViewModel calls (#3402)
domonkosadam Nov 21, 2025
0228abb
[MBL-19455][Student] Implement Welcome Widget with time-based greetin…
hermannakos Nov 21, 2025
1ec8745
[CLX-3203][Horizon] Notebook details changes (#3407)
domonkosadam Nov 24, 2025
06fe5fe
[CLX-3201][Horizon] Notebook list design update (#3390)
andrasmaczak Nov 25, 2025
bf39849
[MBL-19489] Fix webview dark mode not preserved on orientation change…
hermannakos Nov 27, 2025
9f41e62
[MBL-19515][Student] Fix cross-shard user submissions
kristofnemere Nov 27, 2025
c3bbf78
[MBL-19553][Student] Android Student ToDo list QA fixes and test cove…
kristofnemere Nov 27, 2025
834d441
Add unit test results sticky comment to PRs (#3416)
hermannakos Nov 27, 2025
4b3f1a4
[MBL-19566][All] - Fix Custom Statuses E2E tests (#3415)
kdeakinstructure Nov 27, 2025
2c578cc
[CLX-3202][Horizon] Notebook list item changes (#3413)
domonkosadam Nov 28, 2025
33b3a58
[MBL-19559][Student] Fix New Quizzes LTI error handling for expired a…
kristofnemere Nov 28, 2025
b2aa88b
[MBL-19497][Student] Fix bookmark URL placeholders from notifications
kristofnemere Nov 28, 2025
27681d1
[MBL-19546] Fix missing submissions with retry logic and state tracki…
hermannakos Nov 28, 2025
80a2e64
[MBL-19567][Student] Update ToDo filter default time periods
kristofnemere Nov 28, 2025
5c1cd61
[MBL-19490] Invalidate inbox cache when refreshing after message send…
hermannakos Nov 28, 2025
b2bb0ca
[MBL-19563][Student] Add retry parameter to Pendo submission analytic…
hermannakos Nov 28, 2025
eb5324a
Update translations (#3421)
inst-danger Nov 28, 2025
d44654b
version bump
hermannakos Nov 28, 2025
ce3dfc8
test fix
hermannakos Dec 1, 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
  •  
  •  
  •  
189 changes: 189 additions & 0 deletions .github/workflows/build-app.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
name: Build App

on:
workflow_call:
inputs:
app-type:
description: 'App type (Parent, Student, or Teacher)'
required: true
type: string
app-type-lower:
description: 'App type in lowercase (parent, student, or teacher)'
required: true
type: string
firebase-app-id-secret:
description: 'Name of the Firebase App ID secret'
required: true
type: string
secrets:
ACCESS_TOKEN:
required: true
ANDROID_RELEASE_KEYSTORE_B64:
required: true
FIREBASE_SERVICE_ACCOUNT_KEY:
required: true
FIREBASE_APP_ID:
required: true

jobs:
build:
name: ${{ inputs.app-type-lower }}-build
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'recursive'
fetch-depth: 1
token: ${{ secrets.ACCESS_TOKEN }}

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

- name: Cache Gradle packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-

- name: Cache Gradle Build Cache
uses: actions/cache@v4
with:
path: |
~/.gradle/caches/build-cache-*
.gradle
key: ${{ runner.os }}-gradle-build-cache-${{ github.sha }}
restore-keys: |
${{ runner.os }}-gradle-build-cache-

- name: Decode Release Keystore
run: |
echo "${{ secrets.ANDROID_RELEASE_KEYSTORE_B64 }}" | base64 --decode > release.jks
chmod 600 release.jks

- name: Setup Service account
env:
FIREBASE_SERVICE_ACCOUNT_KEY: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_KEY }}
run: |
if [ -z "${FIREBASE_SERVICE_ACCOUNT_KEY}" ]; then
echo "Error: Firebase service account key is not configured"
exit 1
fi
echo "${FIREBASE_SERVICE_ACCOUNT_KEY}" > service-account-key.json
chmod 600 service-account-key.json

- name: Build Release Notes
id: get_release_notes
run: |
echo "RELEASE_NOTES<<EOF" >> $GITHUB_OUTPUT
echo "${{ github.event.pull_request.title }}" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT

- name: Install Firebase CLI
run: npm install -g firebase-tools

- name: Setup Firebase App Id
run: |
if [ -z "${{ secrets.FIREBASE_APP_ID }}" ]; then
echo "Error: Firebase App ID is not configured"
exit 1
fi
echo "${{ secrets.FIREBASE_APP_ID }}" > firebase_app_id.txt

- name: Build debug and test APKs
run: |
./gradle/gradlew -p apps :${{ inputs.app-type-lower }}:assembleQaDebug \
:${{ inputs.app-type-lower }}:assembleQaDebugAndroidTest \
:${{ inputs.app-type-lower }}:assembleDevDebugMinify \
--build-cache \
--parallel \
--max-workers=4 \
--no-daemon \
-Dorg.gradle.jvmargs="-Xmx6g -XX:+HeapDumpOnOutOfMemoryError" \
-Dkotlin.compiler.execution.strategy=in-process \
-Pandroid.injected.signing.store.file=$(pwd)/release.jks

- name: Upload QA debug APK
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.app-type-lower }}-qa-debug.apk
path: apps/${{ inputs.app-type-lower }}/build/outputs/apk/qa/debug/${{ inputs.app-type-lower }}-qa-debug.apk

- name: Upload QA test APK
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.app-type-lower }}-qa-debug-androidTest.apk
path: apps/${{ inputs.app-type-lower }}/build/outputs/apk/androidTest/qa/debug/${{ inputs.app-type-lower }}-qa-debug-androidTest.apk

- name: Upload Dev debug APK
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.app-type-lower }}-dev-debugMinify.apk
path: apps/${{ inputs.app-type-lower }}/build/outputs/apk/dev/debugMinify/${{ inputs.app-type-lower }}-dev-debugMinify.apk

- name: Distribute app to Firebase App Distribution
env:
GOOGLE_APPLICATION_CREDENTIALS: ${{ github.workspace }}/service-account-key.json
run: |
firebase --version
FIREBASE_APP_ID="$(cat firebase_app_id.txt)"

if ! firebase appdistribution:distribute "apps/${{ inputs.app-type-lower }}/build/outputs/apk/dev/debugMinify/${{ inputs.app-type-lower }}-dev-debugMinify.apk" \
--app "$FIREBASE_APP_ID" \
--release-notes "${{ steps.get_release_notes.outputs.RELEASE_NOTES }}" \
--groups "Testers" > result.txt 2>&1; then
echo "Firebase distribution failed:"
cat result.txt
exit 1
fi
cat result.txt

- name: Prepare Comment Body
id: prepare_comment
run: |
INSTALL_URL=$(grep -o 'https://appdistribution\.firebase[^[:space:]]*' result.txt | head -1)

if [ -z "$INSTALL_URL" ]; then
echo "Error: Could not extract install URL from Firebase output"
cat result.txt
exit 1
fi

INSTALL_URL_ESCAPED=$(printf '%s' "$INSTALL_URL" | sed 's/:/%3A/g; s/\//%2F/g; s/?/%3F/g; s/=/%3D/g; s/&/%26/g')
{
echo "body<<EOF"
echo "<!-- qr-code-${{ inputs.app-type }} -->"
echo "<p>${{ inputs.app-type }} Install Page</p><img src=\"https://api.qrserver.com/v1/create-qr-code/?data=${INSTALL_URL_ESCAPED}\" width=\"200\">"
echo "EOF"
} >> $GITHUB_OUTPUT

- name: Find Previous Comment
id: find_comment
uses: peter-evans/find-comment@v2
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: '<!-- qr-code-${{ inputs.app-type }} -->'

- name: Create or Update Comment
uses: peter-evans/create-or-update-comment@v4
with:
comment-id: ${{ steps.find_comment.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: ${{ steps.prepare_comment.outputs.body }}
edit-mode: replace

- name: Cleanup sensitive files
if: always()
run: |
rm -f release.jks
rm -f service-account-key.json
rm -f firebase_app_id.txt
rm -f result.txt
35 changes: 32 additions & 3 deletions .github/workflows/claude-code-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ jobs:
prompt: |
REPO: ${{ github.repository }}
PR NUMBER: ${{ github.event.pull_request.number }}
EVENT ACTION: ${{ github.event.action }}

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

Expand All @@ -52,11 +53,39 @@ jobs:
Use the repository's CLAUDE.md for guidance on style and conventions. Be constructive and helpful in your feedback.

Instructions:
${{ github.event.action == 'synchronize' && '
## SYNCHRONIZE EVENT - UPDATE EXISTING REVIEW
This is an update to an existing PR. You must:
1. Use the GitHub MCP tools to fetch your previous reviews on this PR
2. Fetch the latest PR diff and identify what has changed since your last review
3. Find your previous review summary comment (the one that starts with "## PR Review Summary" or similar)
4. Post a NEW PR comment (not a review) with an update status that includes:
- Reference to your previous review
- Progress update using checkboxes:
- [x] Previously identified issues that have been resolved
- [ ] Previously identified issues still present
- [ ] New issues found in this update
- Brief summary of what changed
- Any new concerns or positive feedback
5. For inline review comments:
- Resolve threads where the issue has been fixed
- Update existing review comment threads if partially addressed
- Add new inline review comments ONLY for new issues that require changes
- Do NOT add inline comments for positive feedback
6. DO NOT create a new review summary - only post a progress update comment

Use mcp__github__create_or_update_issue_comment to post the update.' || '
## NEW REVIEW EVENT
This is a new PR or initial review. You must:
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
2. Create a review summary with checkboxes for any issues found:
- [ ] Issue description and location
3. Add inline comments ONLY for specific code that needs changes
4. DO NOT add inline comments for positive feedback - include positive feedback in the summary section only
5. 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"'
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,mcp__github__list_reviews,mcp__github__get_review,mcp__github__list_review_comments,mcp__github__update_review_comment,mcp__github__create_or_update_pull_request_review_comment,mcp__github__create_or_update_issue_comment,mcp__github__list_issue_comments,mcp__github__resolve_review_thread"'

Loading