Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
200 commits
Select commit Hold shift + click to select a range
d53fa9d
[MBL-18831] Implement edge-to-edge for Student Dashboard
hermannakos Oct 17, 2025
27e0908
[MBL-18831] Implement edge-to-edge rendering for Student app
hermannakos Oct 17, 2025
97ad8ba
[MBL-18831] Add edge-to-edge support for Compose screens
hermannakos Oct 17, 2025
9408c71
Implement edge-to-edge rendering for Student app
hermannakos Oct 20, 2025
7395524
Implement edge-to-edge rendering for pandautils library fragments
hermannakos Oct 20, 2025
5102cda
Fix edge-to-edge for screens with bottom navigation and update Compos…
hermannakos Oct 20, 2025
c307ab3
Complete edge-to-edge rendering implementation for all apps
hermannakos Oct 27, 2025
952723b
[MBL-18831] Complete edge-to-edge implementation with expert review f…
hermannakos Oct 27, 2025
342c97c
Merge master into MBL-18831-edge-to-edge
hermannakos Oct 27, 2025
7f8be15
Fix horizon dialogs
domonkosadam Oct 28, 2025
8982016
Fix critical edge-to-edge issues from QA feedback
hermannakos Nov 3, 2025
44c6e7e
Apply horizontal system bar insets at container level
hermannakos Nov 3, 2025
67e9e64
Fix Teacher syllabus orientation change crash
hermannakos Nov 3, 2025
a5a0a9d
Fix bottom button and navigation bar spacing for edge-to-edge
hermannakos Nov 3, 2025
43fc00f
Fix FAB and bottom navigation spacing for edge-to-edge
hermannakos Nov 3, 2025
fab0e8b
Fix video playback controls overlap with system navigation bar
hermannakos Nov 3, 2025
9d0cebc
Fix Parent app FAB and webview toolbar overlap with system bars
hermannakos Nov 3, 2025
348b64f
Fix Teacher app HTML file viewer toolbar overlap with status bar
hermannakos Nov 3, 2025
c56b060
Fix Sync Progress screen edge-to-edge display issues
hermannakos Nov 3, 2025
36026e7
Refactor: Fix fully qualified imports in AnnotationCommentListFragment
hermannakos Nov 3, 2025
6e41e6e
Refactor: Extract IME handling into reusable extension function
hermannakos Nov 3, 2025
50b5ba7
Fix FAB positioning by using padding instead of margin for system bar…
hermannakos Nov 3, 2025
a07c229
Add horizontal system bar padding to navigation drawers in landscape …
hermannakos Nov 3, 2025
4d6f63a
Fix inbox FAB positioning with conditional inset handling
hermannakos Nov 4, 2025
221717a
Enable edge-to-edge rendering for full-screen dialogs and fix grade p…
hermannakos Nov 4, 2025
73211ed
fix assignment details
hermannakos Nov 4, 2025
53397ae
Fix landscape mode navigation bar overlap by handling horizontal syst…
hermannakos Nov 4, 2025
2970633
Merge master into MBL-18831-edge-to-edge
hermannakos Nov 4, 2025
f3e28b1
file fragments
hermannakos Nov 4, 2025
e2f4bd9
fix CRs
hermannakos Nov 10, 2025
d7cbcac
Fix keyboard horizontal padding in landscape mode by handling display…
hermannakos Nov 10, 2025
4472a73
Merge master into MBL-18831-edge-to-edge
hermannakos Nov 10, 2025
5555743
fix speedgrader
hermannakos Nov 12, 2025
9fd80b6
fix qr login
hermannakos Nov 12, 2025
5c00563
fix aup
hermannakos Nov 12, 2025
88cc923
login fixes
hermannakos Nov 12, 2025
0494397
fix drawer
hermannakos Nov 12, 2025
6268ee0
fix home fragments
hermannakos Nov 12, 2025
bfa22c8
Fix edge-to-edge insets and window dimming issues
hermannakos Nov 12, 2025
3100501
Merge branch 'master' into MBL-18831-edge-to-edge
hermannakos Nov 13, 2025
1b8f159
Fix edge-to-edge display for InternalWebView and InboxDetails
hermannakos Nov 17, 2025
b86bb1f
[CLX-3243][HackDay][Horizon] Edge to edge mode (#3374)
domonkosadam Nov 19, 2025
3b0d810
Merge master into MBL-18831-edge-to-edge
hermannakos Jan 14, 2026
03d20a5
Improve edge-to-edge support and window insets handling
hermannakos Jan 21, 2026
d059a11
Merge master into MBL-18831-edge-to-edge
hermannakos Jan 21, 2026
419da51
[Horizon] Edge To Edge support - part 2 (#3486)
domonkosadam Feb 2, 2026
dfd5872
teacher fixes
hermannakos Feb 2, 2026
ac8634b
Fix Parent QA V5 1. finding (I don't have Canvas Account page issue).
kdeakinstructure Feb 2, 2026
cf09996
Fix Parent QA V5 2. finding (Left Side menu portrait/landscape issue).
kdeakinstructure Feb 2, 2026
98207f9
Fix Parent QA V5 4. finding (Canvas Network Page portrait issue. Will…
kdeakinstructure Feb 2, 2026
f2bdb4a
Fix Parent QA V5 5. finding (Quiz Assignment Details in portrait mode…
kdeakinstructure Feb 2, 2026
7336b76
Fix GradesScreen Grade List "Empty gap" at the bottom, above the andr…
kdeakinstructure Feb 2, 2026
3ce42b6
Fix Parent QA V5 6. finding (Inbox Conversation List in portrait mode…
kdeakinstructure Feb 2, 2026
7611889
Additional findings fixes: Alerts and Manage Students screen has a 'g…
kdeakinstructure Feb 2, 2026
4df9fa2
Fix Student QA V5 - Part 1 - 1. finding (Sync button position and dou…
kdeakinstructure Feb 3, 2026
293b5d0
Fix Student QA V5 - Part 1 - 3. finding (Left Side navigation bar in …
kdeakinstructure Feb 3, 2026
334667c
Fix Student QA V5 - Part 1 - 4. finding (Panda Avatar Creation issues).
kdeakinstructure Feb 3, 2026
6128b20
Fix Student QA V5 - Part 1 - 5. finding (Smart Search android bottom …
kdeakinstructure Feb 3, 2026
d300e29
Fix Student QA V5 - Part 1 - 6. finding (Course image does not disapp…
kdeakinstructure Feb 3, 2026
8344d82
Fix Student QA V5 - Part 1 - 7. finding (Image openinng overlapping w…
kdeakinstructure Feb 3, 2026
5cdd9b7
Fix Student QA V5 - Part 1 - 7. finding (Image openinng overlapping w…
kdeakinstructure Feb 3, 2026
b8e15e5
Fix Student QA V5 - Part 1 - 8. finding (Panda image landscape issue …
kdeakinstructure Feb 3, 2026
c801e2e
Fix Student QA V5 - Part 2 - 1. finding (Module item bottom module ba…
kdeakinstructure Feb 4, 2026
1549242
Fix Student QA V5 - Part 2 - 1. finding (Module item bottom module ba…
kdeakinstructure Feb 4, 2026
08c9d6d
Fix Student QA V5 - Part 2 - 2. finding (Conferences Details page and…
kdeakinstructure Feb 4, 2026
73c9711
Fix Student QA V5 - Part 2 - 3. finding (Calendar filter page android…
kdeakinstructure Feb 4, 2026
fe64ae7
Fix Student QA V5 - Part 2 - 5. finding (Todo and Inbox conversation …
kdeakinstructure Feb 4, 2026
7a48f51
Fix Student QA V5 - Part 2 - 6. finding (Offline banner overlaps with…
kdeakinstructure Feb 4, 2026
8dac51a
Fix Student QA V5 - Part 2 - 7. finding (K5 homeroom dashboard big ga…
kdeakinstructure Feb 4, 2026
e84477a
Teacher extra finding fix: Course Browser page toolbar overlaps with …
kdeakinstructure Feb 4, 2026
d230ce0
Fix Student QA V5 - Part 2 - 4. finding (ToDo list Preferences page g…
kdeakinstructure Feb 4, 2026
ffb364c
Merge branch 'master' into MBL-18831-edge-to-edge
hermannakos Feb 9, 2026
bb57e51
Fix Parent QA V6 - Part 1 - 1. finding (Not a Parent android bottom b…
kdeakinstructure Feb 9, 2026
8304854
Fix Parent QA V6 - Part 1 - 2. finding (Left side menu landscape mode…
kdeakinstructure Feb 9, 2026
9957b71
Fix Parent QA V6 - Part 1 - 4. finding (All courses inbox filter scre…
kdeakinstructure Feb 9, 2026
23a1c82
Fix Parent QA V6 - Part 1 - 5. finding (Inbox page FAB icon in right …
kdeakinstructure Feb 9, 2026
1915820
Fix Parent QA V6 - Part 1 - 6. finding (Inbox conversation details pa…
kdeakinstructure Feb 9, 2026
7aafc9b
Merge branch 'master' into MBL-18831-edge-to-edge
domonkosadam Feb 9, 2026
42f7c4b
Fix Parent QA V6 - Part 1 - 8. finding (Create calendar To Do landsca…
kdeakinstructure Feb 9, 2026
94acec8
Fix Parent QA V6 - Part 1 - 9. finding (To Do Event (which belongs to…
kdeakinstructure Feb 9, 2026
d4d4ab2
Fix Parent QA V6 - Part 2 - 2. finding (Quiz assignemnt details conte…
kdeakinstructure Feb 9, 2026
2ed9803
Fix merge issues
domonkosadam Feb 10, 2026
03fa941
Merge pull request #3505 from instructure/MBL-18831-edge-to-edge-stud…
kdeakinstructure Feb 10, 2026
7e524b9
Fix Teacher QA V6 - Part 1 - 3. finding (Left side menu horizontal li…
kdeakinstructure Feb 10, 2026
81e05fd
Merge remote-tracking branch 'origin/MBL-18831-edge-to-edge' into MBL…
kdeakinstructure Feb 10, 2026
cb3f92a
Teacher extra finding: Fix top android statusbar color issues in ligh…
kdeakinstructure Feb 10, 2026
1fa4e18
Fix Teacher QA V6 - Part 1 - 4. finding (CourseBrowser top bar issues…
kdeakinstructure Feb 10, 2026
33be6cb
Fix Teacher QA V6 - Part 1 - 6. finding (Keyboard with issue + camera…
kdeakinstructure Feb 10, 2026
3724983
Fix Teacher QA V6 - Part 1 - 7. finding (Edit Profile input text gap …
kdeakinstructure Feb 10, 2026
dad60df
Fix RemoteConfigParamsFragment in all apps
kdeakinstructure Feb 10, 2026
d0eb6be
Fix Teacher QA V6 - Part 2 - 1. finding (Calendar filter page initial…
kdeakinstructure Feb 10, 2026
365e7a3
Fix Teacher QA V6 - Part 2 - 2. finding (Calendar create/update todo/…
kdeakinstructure Feb 10, 2026
ceed464
Fix Teacher QA V6 - Part 2 - 7. finding (Global issue with applyBotto…
kdeakinstructure Feb 10, 2026
d55c5a4
Fix Teacher QA V6 - Part 1 - 2. finding (CourseBrowser page camera cu…
kdeakinstructure Feb 11, 2026
75ae345
Fix Teacher QA V6 - Part 1 - 2. finding (Announcement/Discussion list…
kdeakinstructure Feb 11, 2026
df2fc8d
Fix Teacher QA V6 - Part 1 - 2. finding (Syllabus page camera cutout …
kdeakinstructure Feb 11, 2026
a6ba359
Fix Teacher QA V6 - Part 1 - 2. finding (Modules page camera cutout i…
kdeakinstructure Feb 11, 2026
3c3c98a
Fix Teacher QA V6 - Part 1 - 2. finding (Quiz list page camera cutout…
kdeakinstructure Feb 11, 2026
8a9d70f
Fix Teacher QA V6 - Part 1 - 2. finding (Pages list page camera cutou…
kdeakinstructure Feb 11, 2026
c2eec6d
Fix Teacher QA V6 - Part 1 - 2. finding (People list page camera cuto…
kdeakinstructure Feb 11, 2026
2e53a79
Fix Teacher QA V6 - Part 1 - 2. finding (Assignment list page camera …
kdeakinstructure Feb 11, 2026
4b435fa
Fix Teacher QA V6 - Part 1 - 2. finding (Email and Push notifications…
kdeakinstructure Feb 11, 2026
122479b
Fix Teacher QA V6 - Part 1 - 2. finding (Inbox Signature Settings pag…
kdeakinstructure Feb 11, 2026
4af126a
Fix Teacher QA V6 - Part 1 - 2. finding (Inbox Conversation Details p…
kdeakinstructure Feb 11, 2026
b3613f6
Fix Teacher QA V6 - Part 1 - 2. finding (Course Settings page camera …
kdeakinstructure Feb 11, 2026
256f19b
Fix Teacher QA V6 - Part 1 - 2. finding (Assignment Details page came…
kdeakinstructure Feb 11, 2026
d015e4d
Fix Teacher QA V6 - Part 1 - 2. finding (Classic Quiz Details page ca…
kdeakinstructure Feb 11, 2026
b0aee50
Fix Teacher QA V6 - Part 1 - 2. finding (Submission List page camera …
kdeakinstructure Feb 11, 2026
ea8a3df
Fix Teacher QA V6 - Part 1 - 2. finding (New Speedgrader page camera …
kdeakinstructure Feb 11, 2026
859db83
Fix Teacher Extra finding: fix calendar toolbar in landscape mode
kdeakinstructure Feb 11, 2026
5eea13d
Fix Teacher QA V6 - Part 1 - 2. finding (Settings page camera cutout …
kdeakinstructure Feb 12, 2026
e6e93cf
Fix Student QA V6 - Part 1 - 2. finding (Left side menu right side 'g…
kdeakinstructure Feb 12, 2026
f3d54cc
Fix Student QA V6 - Part 1 - 3. finding (Remote Config Param camera c…
kdeakinstructure Feb 12, 2026
c9222e7
Fix Student QA V6 - Part 1 - 4-5-6. finding (InternalWebView camera c…
kdeakinstructure Feb 12, 2026
6e2a6a0
Fix Student extra finding - Bottom menu overlaps with android navigat…
kdeakinstructure Feb 13, 2026
424f910
Fix Student QA V6 - Part 1 - 8. finding (ToDo list preferences page t…
kdeakinstructure Feb 13, 2026
e53a934
Fix Student QA V6 - Part 1 - 9. finding (Announcements/Discussion lis…
kdeakinstructure Feb 13, 2026
fe6ef31
Fix Student QA V6 - Part 1 - 10. finding (Smart Search Preferences pa…
kdeakinstructure Feb 13, 2026
87c092e
Fix Student QA V6 - Part 2 - 1 and 4. finding (Assignment List and Gr…
kdeakinstructure Feb 13, 2026
b884040
Fix Student Extra finding: Conferences Details page bottom content ov…
kdeakinstructure Feb 13, 2026
a0f4d7e
Fix Student QA V6 - Part 2 - 6. finding (Comment input field overlaps…
kdeakinstructure Feb 13, 2026
7986af9
Fix Student QA V6 - Part 2 - 8. finding (Syllabus page portrait mode …
kdeakinstructure Feb 13, 2026
c61659f
Cross-App fix: Fix different camera cutout handling in teacher and st…
kdeakinstructure Feb 13, 2026
10bba82
Merge branch 'master' into MBL-18831-edge-to-edge
hermannakos Feb 16, 2026
744a1bf
Fix breaking student unit test.
kdeakinstructure Feb 16, 2026
41ab99d
Fix breaking student testGetFragment_discussion unit test.
kdeakinstructure Feb 16, 2026
8d60d54
Remove expected illegalState from PASSED test.
kdeakinstructure Feb 16, 2026
4e1a8fd
Fix testFilterForAssignmentSectionsE2E test (by using the view parame…
kdeakinstructure Feb 16, 2026
fd944cb
Fix testQuizEditAndPreviewE2E test (by using the view parameter inste…
kdeakinstructure Feb 16, 2026
2d7bce8
Fix testFilterCustomStatusesAndDifferentiationTagsE2E test (wait issu…
kdeakinstructure Feb 16, 2026
a61d152
Fix Teacher extra finding: Camera cutout issue on LtiLaunchFragment (…
kdeakinstructure Feb 17, 2026
9beb4ac
Fix Teacher extra finding: Camera cutout issue on DueDatesFragment in…
kdeakinstructure Feb 17, 2026
fdb25a1
Fix Teacher extra finding: Camera cutout issue on EditAssignmentDetai…
kdeakinstructure Feb 17, 2026
131feea
Fix Teacher extra finding: Camera cutout issue on EditQuizDetailsFrag…
kdeakinstructure Feb 17, 2026
c5327a0
Fix Teacher extra finding: LtiLaunchFragment android navigation butto…
kdeakinstructure Feb 17, 2026
30fb3d6
Merge branch 'master' into MBL-18831-edge-to-edge
hermannakos Feb 17, 2026
5ba0565
Fix logout test issues + wait for toast to appear.
kdeakinstructure Feb 18, 2026
ca96e0b
Fix many test by making an API Lvl "guard" on edge to edge helper.
kdeakinstructure Feb 18, 2026
2e73b26
Merge branch 'master' into MBL-18831-edge-to-edge
hermannakos Feb 18, 2026
e3db828
Merge remote-tracking branch 'origin/MBL-18831-edge-to-edge' into MBL…
hermannakos Feb 18, 2026
225b72b
Fix parent breaking unit tests.
kdeakinstructure Feb 18, 2026
197cb6c
Fix submodule reference
kristofnemere Feb 19, 2026
cc06515
Fix breaking student interaction test.
kdeakinstructure Feb 19, 2026
d95f313
Merge branch 'master' into MBL-18831-edge-to-edge
kdeakinstructure Feb 20, 2026
841595f
version bump
hermannakos Feb 23, 2026
a8615c1
version bump
hermannakos Feb 23, 2026
ee5c5b7
Merge pull request #3346 from instructure/MBL-18831-edge-to-edge
kdeakinstructure Feb 23, 2026
242ea94
Fix Calendar E2E tests (new todo in future date now should automatica…
kdeakinstructure Feb 23, 2026
e61be34
[MBL-19802][All] - Fix Calendar E2E tests (#3549)
kdeakinstructure Feb 23, 2026
8331e2f
[MBL-19025][All] Fix calendar rotation date shift issue#3544
tamaskozmer Feb 24, 2026
7394dc7
[MBL-19757][Student][Teacher] Update "Todo" and "To-Do" to "To-do" (#…
tamaskozmer Feb 24, 2026
c0825d5
fix switch visibility
hermannakos Feb 26, 2026
a92ad0a
[MBL-19698][All] Add native document scanner for file uploads (#3552)
hermannakos Mar 3, 2026
f8b1c84
Implement E2E test for SpeedGrader Quick Access icon + Swiping among …
kdeakinstructure Mar 3, 2026
8f9f2f7
Merge pull request #3545 from instructure/release/student-8.6.0-288
hermannakos Mar 3, 2026
9211474
Merge pull request #3546 from instructure/release/teacher-2.5.0-89
hermannakos Mar 3, 2026
8c3f1ab
migrate from canvas.instructure.com to sso.canvaslms.com for login urls.
hermannakos Mar 5, 2026
46a81b2
[MBL-19484][All] Migrate release pipeline from Bitrise to GitHub Acti…
hermannakos Mar 5, 2026
4948e28
version bump
hermannakos Mar 5, 2026
315c53f
migrate from canvas.instructure.com to sso.canvaslms.com for login urls.
hermannakos Mar 5, 2026
06cab9c
version bump
hermannakos Mar 5, 2026
bf83cd3
[MBL-19596][All] Add video file download/playback E2E tests for all o…
adamNagy56 Mar 5, 2026
723fa7d
Release exclude for flaky tests.
tamaskozmer Mar 6, 2026
5362731
Release Teacher 2.5.1 (90)
tamaskozmer Mar 9, 2026
d9991d1
Release Student 8.6.1 (289)
tamaskozmer Mar 9, 2026
860f8dd
Implement offline E2E tests for discussion and announcement with atta…
adamNagy56 Mar 11, 2026
12297d3
Implement E2E test for hidden grade visibility in Student Context pag…
adamNagy56 Mar 11, 2026
96c6e9f
[MBL-19169][All] - Calendar Discussion Checkpoint E2E Tests (#3558)
kdeakinstructure Mar 11, 2026
373a46b
[MBL-19650][Student][Teacher] Update PSPDFKit to 11.1.1 (#3556)
tamaskozmer Mar 12, 2026
a20b6f7
Merge branch 'master' into release-parent-to-master
hermannakos Mar 12, 2026
380dea4
[MBL-19284][Student] - Implement To Do Discussion Checkpoints E2E Tes…
kdeakinstructure Mar 12, 2026
78cda5c
Merge pull request #3572 from instructure/release/teacher
hermannakos Mar 13, 2026
d5661e8
Merge pull request #3573 from instructure/release-parent-to-master
hermannakos Mar 13, 2026
4373580
Merge branch 'master' into student-to-master
hermannakos Mar 13, 2026
3924022
Merge pull request #3576 from instructure/student-to-master
hermannakos Mar 16, 2026
154160c
[MBL-19801][All] Fix edge-to-edge issues (#3569)
tamaskozmer Mar 16, 2026
489552c
[MBL-19723][All] - Implement 'How do I find my school?' E2E tests (#3…
kdeakinstructure Mar 17, 2026
7eeb65d
[MBL-19803][Teacher] Implement E2E test for send message from All Sub…
adamNagy56 Mar 18, 2026
8cfa54c
[MBL-17993][Teacher] Add SpeedGrader E2E tests for late penalty and o…
adamNagy56 Mar 18, 2026
943048b
[MBL-19815][All] Refactor account domain search to use repository pat…
hermannakos Mar 19, 2026
d67f279
[MBL-19842][Parent] Always show Front Page tab if it has content
kristofnemere Mar 19, 2026
165b0a6
[MBL-19833][Student] Fix logout issue on embedded LTI pages #3582
tamaskozmer Mar 19, 2026
8089f49
[MBL-19820][Student] Hide graded status in calendar when grade is unp…
kristofnemere Mar 20, 2026
91b35a3
[MBL-19823][All] Hide archive option from Sent conversation details m…
kristofnemere Mar 20, 2026
61e0d29
Add E2E test for Student Alert Settings with below/above threshold va…
adamNagy56 Mar 20, 2026
1b26a61
[MBL-19659][All] Fix top crashes across Student, Teacher, and Parent …
kristofnemere Mar 20, 2026
e23a848
[CLXR-215][Horizon] Learning Library implementation (#3588)
domonkosadam Mar 20, 2026
7285fd8
[MBL-19795][Student] Support offline playback of Studio video Externa…
hermannakos Mar 23, 2026
d786891
[MBL-19798][Teacher] QR Login with masquerade may ignore masquerade
kristofnemere Mar 23, 2026
99b6b41
[MBL-19827][Teacher] Fix assignment details counters not refreshing a…
kristofnemere Mar 23, 2026
a4afbf0
[MBL-19860][Student] Add Pendo tags to dashboard widget actions (#3590)
hermannakos Mar 23, 2026
778b162
Migrate import-translations from Bitrise to GitHub Actions (#3592)
hermannakos Mar 23, 2026
c6f3821
Migrate import-translations from Bitrise to GitHub Actions (#3593)
hermannakos Mar 23, 2026
f33545c
Migrate import-translations from Bitrise to GitHub Actions (#3594)
hermannakos Mar 23, 2026
1aab4fc
Update translations (#3595)
github-actions[bot] Mar 23, 2026
8b12662
Version bump.
tamaskozmer Mar 23, 2026
cd5f5c4
Fix token handling in e2e tests according to new login flow. (#3600)
kdeakinstructure Mar 23, 2026
f00ddab
[MBL-19864][All] - Fix New Login UI changes in E2E tests (#3602)
kdeakinstructure Mar 24, 2026
1a969c2
GraphQLClientModule fix
kristofnemere Mar 24, 2026
1f2fd85
Fixed single use token issues in Parent Submission details webview
kristofnemere Mar 26, 2026
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
  •  
  •  
  •  
15 changes: 13 additions & 2 deletions .github/workflows/build-app.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ on:
required: true
type: string
secrets:
ACCESS_TOKEN:
GH_APP_ID:
required: true
GH_APP_PRIVATE_KEY:
required: true
ANDROID_RELEASE_KEYSTORE_B64:
required: true
Expand All @@ -30,12 +32,21 @@ jobs:
name: ${{ inputs.app-type-lower }}-build
runs-on: ubuntu-latest
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: canvas-android,android-vault

- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'recursive'
fetch-depth: 1
token: ${{ secrets.ACCESS_TOKEN }}
token: ${{ steps.app-token.outputs.token }}

- name: Set up JDK 17
uses: actions/setup-java@v4
Expand Down
99 changes: 99 additions & 0 deletions .github/workflows/create-tag.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Create Tag

on:
push:
branches:
- 'release/student'
- 'release/teacher'
- 'release/parent'

jobs:
create-tag:
name: create-tag
runs-on: ubuntu-latest
timeout-minutes: 10
permissions:
contents: write
env:
JIRA_USERNAME: ${{ secrets.JIRA_USERNAME }}
JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: canvas-android,android-vault

- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ steps.app-token.outputs.token }}

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: '18'

- name: Determine app from branch
id: app-info
run: |
APP_NAME=$(echo "${GITHUB_REF_NAME}" | sed 's|release/||')
echo "app-name=${APP_NAME}" >> "$GITHUB_OUTPUT"

VERSION_CODE=$(grep 'versionCode' apps/${APP_NAME}/build.gradle | head -1 | awk '{print $NF}')
VERSION_NAME=$(grep 'versionName' apps/${APP_NAME}/build.gradle | head -1 | awk '{print $NF}')
VERSION_NAME=${VERSION_NAME//\"/}
VERSION_NAME=${VERSION_NAME//\'/}

TAG="${APP_NAME}-${VERSION_NAME}-${VERSION_CODE}"
echo "version-code=${VERSION_CODE}" >> "$GITHUB_OUTPUT"
echo "version-name=${VERSION_NAME}" >> "$GITHUB_OUTPUT"
echo "tag=${TAG}" >> "$GITHUB_OUTPUT"

echo "App: ${APP_NAME}"
echo "Version: ${VERSION_NAME} (${VERSION_CODE})"
echo "Tag: ${TAG}"

- name: Configure git
run: |
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"

- name: Create and push tag
id: create-tag
run: |
TAG="${{ steps.app-info.outputs.tag }}"
if git rev-parse "$TAG" >/dev/null 2>&1; then
echo "Tag $TAG already exists, skipping tag creation"
echo "tag-exists=true" >> "$GITHUB_OUTPUT"
else
git tag "$TAG"
git push origin "$TAG"
echo "tag-exists=false" >> "$GITHUB_OUTPUT"
fi

- name: Create GitHub Release
if: steps.create-tag.outputs.tag-exists != 'true'
env:
GH_TOKEN: ${{ steps.app-token.outputs.token }}
run: |
APP_NAME="${{ steps.app-info.outputs.app-name }}"
VERSION_NAME="${{ steps.app-info.outputs.version-name }}"
VERSION_CODE="${{ steps.app-info.outputs.version-code }}"
TAG="${{ steps.app-info.outputs.tag }}"

gh release create "$TAG" \
--title "${APP_NAME} ${VERSION_NAME} (${VERSION_CODE})" \
--notes "${APP_NAME} ${VERSION_NAME} (${VERSION_CODE})" \
--draft

- name: Update JIRA fix versions
if: steps.create-tag.outputs.tag-exists != 'true' && env.JIRA_USERNAME != ''
run: |
cd scripts
npm install jira-client@4.0.1
node update-jira-issues.js "${{ steps.app-info.outputs.tag }}"
79 changes: 79 additions & 0 deletions .github/workflows/deploy-parent.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
name: Deploy Parent

on:
push:
tags:
- 'parent-*'

concurrency:
group: deploy-parent
cancel-in-progress: false

jobs:
build-and-deploy:
name: build-and-deploy
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: canvas-android,android-vault

- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'recursive'
token: ${{ steps.app-token.outputs.token }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: wrapper
java-version: '17'

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

- name: Build production release
run: |
./gradle/gradlew -p apps \
:parent:assembleProdRelease \
:parent:bundleProdRelease \
--stacktrace \
--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 \
-Pandroid.injected.signing.store.password="${KEYSTORE_PASSWORD}" \
-Pandroid.injected.signing.key.alias="${KEYSTORE_KEY_ALIAS}" \
-Pandroid.injected.signing.key.password="${KEYSTORE_KEY_PASSWORD}"
env:
GRADLE_OPTS: "-Djava.net.preferIPv4Stack=true"
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
KEYSTORE_KEY_ALIAS: ${{ secrets.ANDROID_KEYSTORE_ALIAS }}
KEYSTORE_KEY_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD }}

- name: Upload to Google Play
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.GPLAY_SERVICE_ACCOUNT_KEY }}
packageName: com.instructure.parentapp
releaseFiles: apps/parent/build/outputs/bundle/prodRelease/parent-prod-release.aab
track: internal
status: completed

- name: Cleanup sensitive files
if: always()
run: rm -f release.jks
86 changes: 86 additions & 0 deletions .github/workflows/deploy-student.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Deploy Student

on:
push:
tags:
- 'student-*'

concurrency:
group: deploy-student
cancel-in-progress: false

jobs:
build-and-deploy:
name: build-and-deploy
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: canvas-android,android-vault

- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'recursive'
token: ${{ steps.app-token.outputs.token }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: wrapper
java-version: '17'

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

- name: Build production release
run: |
./gradle/gradlew -p apps \
:student:assembleProdRelease \
:student:bundleProdRelease \
--stacktrace \
--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 \
-Pandroid.injected.signing.store.password="${KEYSTORE_PASSWORD}" \
-Pandroid.injected.signing.key.alias="${KEYSTORE_KEY_ALIAS}" \
-Pandroid.injected.signing.key.password="${KEYSTORE_KEY_PASSWORD}"
env:
GRADLE_OPTS: "-Djava.net.preferIPv4Stack=true"
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
KEYSTORE_KEY_ALIAS: ${{ secrets.ANDROID_KEYSTORE_ALIAS }}
KEYSTORE_KEY_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD }}

- name: Extract update priority
id: priority
run: |
UPDATE_PRIORITY=$(grep 'updatePriority' apps/student/build.gradle | head -1 | awk '{print $NF}')
echo "value=${UPDATE_PRIORITY}" >> "$GITHUB_OUTPUT"

- name: Upload to Google Play
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.GPLAY_SERVICE_ACCOUNT_KEY }}
packageName: com.instructure.candroid
releaseFiles: apps/student/build/outputs/bundle/prodRelease/student-prod-release.aab
track: internal
inAppUpdatePriority: ${{ steps.priority.outputs.value }}
status: completed

- name: Cleanup sensitive files
if: always()
run: rm -f release.jks
86 changes: 86 additions & 0 deletions .github/workflows/deploy-teacher.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
name: Deploy Teacher

on:
push:
tags:
- 'teacher-*'

concurrency:
group: deploy-teacher
cancel-in-progress: false

jobs:
build-and-deploy:
name: build-and-deploy
runs-on: ubuntu-latest
timeout-minutes: 60
steps:
- name: Generate GitHub App token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
owner: ${{ github.repository_owner }}
repositories: canvas-android,android-vault

- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'recursive'
token: ${{ steps.app-token.outputs.token }}

- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
with:
gradle-version: wrapper
java-version: '17'

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

- name: Build production release
run: |
./gradle/gradlew -p apps \
:teacher:assembleProdRelease \
:teacher:bundleProdRelease \
--stacktrace \
--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 \
-Pandroid.injected.signing.store.password="${KEYSTORE_PASSWORD}" \
-Pandroid.injected.signing.key.alias="${KEYSTORE_KEY_ALIAS}" \
-Pandroid.injected.signing.key.password="${KEYSTORE_KEY_PASSWORD}"
env:
GRADLE_OPTS: "-Djava.net.preferIPv4Stack=true"
KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
KEYSTORE_KEY_ALIAS: ${{ secrets.ANDROID_KEYSTORE_ALIAS }}
KEYSTORE_KEY_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD }}

- name: Extract update priority
id: priority
run: |
UPDATE_PRIORITY=$(grep 'updatePriority' apps/teacher/build.gradle | head -1 | awk '{print $NF}')
echo "value=${UPDATE_PRIORITY}" >> "$GITHUB_OUTPUT"

- name: Upload to Google Play
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.GPLAY_SERVICE_ACCOUNT_KEY }}
packageName: com.instructure.teacher
releaseFiles: apps/teacher/build/outputs/bundle/prodRelease/teacher-prod-release.aab
track: internal
inAppUpdatePriority: ${{ steps.priority.outputs.value }}
status: completed

- name: Cleanup sensitive files
if: always()
run: rm -f release.jks
Loading
Loading