Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
231 commits
Select commit Hold shift + click to select a range
f2cb726
Merge pull request #631 from microbit-foundation/main
microbit-matt-hillsdon Nov 20, 2025
4f45edd
Update onboarding with nudges and new welcome dialog (#629)
microbit-grace Nov 20, 2025
9357081
Initial app generation (no customisation yet)
microbit-matt-hillsdon Nov 26, 2025
a73398e
app: status bar; disable shared assets for now
microbit-matt-hillsdon Nov 26, 2025
2a1d55e
iOS and Android builds
microbit-matt-hillsdon Nov 26, 2025
80a1637
Initial workflows
microbit-matt-hillsdon Nov 26, 2025
c604d7d
Tweak Java version
microbit-matt-hillsdon Nov 26, 2025
097fd75
Add file not covered by tsconfig to make eslint happy
microbit-matt-hillsdon Nov 26, 2025
1e00cb9
The actual build times are nowhere near 45 mins
microbit-matt-hillsdon Nov 26, 2025
befb415
Keep system status bar out of the Action Bar area
glastonbridge Dec 2, 2025
367a8cc
Keep system status bar out of the Action Bar area
glastonbridge Dec 4, 2025
d47f637
Minimal apps branding (#642)
microbit-matt-hillsdon Dec 14, 2025
6d591e0
Mobile app BLE support (#643)
microbit-matt-hillsdon Jan 9, 2026
6c7e457
Switch to MEF development team for signing
microbit-matt-hillsdon Jan 9, 2026
86aaa19
Let's go with a pre-1.0 version
microbit-matt-hillsdon Jan 9, 2026
059597c
Apparently we need this string too.
microbit-matt-hillsdon Jan 9, 2026
ccfc8f1
We don't have our own crypto. Silence app store connect query.
microbit-matt-hillsdon Jan 9, 2026
105d085
Bump version
microbit-matt-hillsdon Jan 9, 2026
438fd70
Align the Android version with iOS
microbit-matt-hillsdon Jan 9, 2026
3d4f11e
Update data collection hex files with correct bluetooth pattern (#673)
microbit-grace Jan 13, 2026
51d81a3
Add a longer connect delay for Android (#674)
microbit-grace Jan 13, 2026
2457870
Use a state machine for connection and download flows; add tests (#660)
microbit-matt-hillsdon Jan 16, 2026
35cd273
Apps: Simplify "What you need to connect" (#681)
microbit-matt-hillsdon Jan 19, 2026
b0a0141
Bluetooth permissions; A+B reset (#682)
microbit-matt-hillsdon Jan 19, 2026
22f1970
Use fastlane for iOS signing; Android too (#686)
microbit-matt-hillsdon Jan 19, 2026
2874df5
An approach to tagging apps releases (#687)
microbit-matt-hillsdon Jan 19, 2026
889cf0b
Improve connection handling (#689)
microbit-matt-hillsdon Jan 21, 2026
62bc4b1
Share permission steps between data connection and download flows (#695)
microbit-matt-hillsdon Jan 21, 2026
3d92096
Fix Bluetooth name reuse across connection/download flows (#696)
microbit-matt-hillsdon Jan 21, 2026
adc71ac
Fix flicker in the download flow (#697)
microbit-matt-hillsdon Jan 21, 2026
20731c9
Add fastlane upload lanes for TestFlight and Google Play (#698)
microbit-matt-hillsdon Jan 21, 2026
d8a2fd7
Fix android connection fail after flashing (#699)
microbit-grace Jan 22, 2026
c731f97
Restore web deployment steps in build workflow (#703)
microbit-matt-hillsdon Jan 22, 2026
526b5d7
Remove reconnect delay now we wait to disconnect (#705)
microbit-matt-hillsdon Jan 23, 2026
033029c
Improve error handling for native Bluetooth (#702)
microbit-matt-hillsdon Jan 23, 2026
86ca7f4
Apps: open hex files on iOS and Android (#704)
glastonbridge Jan 23, 2026
76b34de
Update the video (#708)
microbit-matt-hillsdon Jan 26, 2026
1221de2
Wire up the Google credential for the Play upload (#707)
microbit-matt-hillsdon Jan 26, 2026
650969c
Default the language from navigator.language (#688)
microbit-matt-hillsdon Jan 26, 2026
6a26ea1
Android edge-to-edge fixes (#710)
microbit-matt-hillsdon Jan 28, 2026
17e90de
Improve native flow and handling edge cases (#711)
microbit-grace Jan 30, 2026
033e2f0
Improve dialogs on mobile (#684)
microbit-matt-hillsdon Jan 30, 2026
e0ed83e
Tweak iOS specific message to use icon (#717)
microbit-matt-hillsdon Jan 30, 2026
152fad5
Remove `ConnectionStatus.Reconnecting` and add auto-reconnect (#719)
microbit-grace Feb 5, 2026
f43d97c
Merge branch 'main' into beta
microbit-robert Feb 6, 2026
c765589
Add support for multiple projects using IndexedDB
microbit-robert Dec 5, 2025
dc9c6f5
Merge pull request #720 from microbit-foundation/beta-udpated
microbit-robert Feb 6, 2026
b360a4f
Update storage to cope with default action created upfront
microbit-robert Feb 6, 2026
bc26919
Handle text properly
microbit-robert Feb 6, 2026
96acd10
Focus visible style reverts, fix delete projects bugs
microbit-robert Feb 6, 2026
d4342f0
Only add new actions (default action) to storage when deleting an action
microbit-robert Feb 9, 2026
39fbc5a
Alternative toolbar approach (#724)
microbit-matt-hillsdon Feb 9, 2026
9e8a8e5
Fix e2e tests and add coverage for new project actions
microbit-matt-hillsdon Feb 9, 2026
74b9caf
Rename dialog updates for the new uses in project rename/dupe
microbit-matt-hillsdon Feb 9, 2026
e151615
Fix caret vs fixed version issue for Playwright
microbit-matt-hillsdon Feb 9, 2026
24e6434
Track device bond state persistently to reduce time taken to connect …
microbit-grace Feb 9, 2026
58ef758
Merge branch 'support-multiple-projects-beta' into merge-mp-into-apps
microbit-matt-hillsdon Feb 9, 2026
0683056
Reinstate bond state storage (lost with persist)
microbit-matt-hillsdon Feb 9, 2026
56a8bcb
Give the new dialog mobile treatment
microbit-matt-hillsdon Feb 10, 2026
1527957
Fix up the recent merge
microbit-matt-hillsdon Feb 10, 2026
a595b78
Reinstate skipTours flag
microbit-matt-hillsdon Feb 10, 2026
362a39b
Another merge tweak - this was removed on the apps branch then reinst…
microbit-matt-hillsdon Feb 10, 2026
39a8af2
Sync Bluetooth name filter from settings at connection time
microbit-matt-hillsdon Feb 10, 2026
a08f9a6
Fix bad merge of bottomContent
microbit-matt-hillsdon Feb 10, 2026
9c3eada
Fix recording highlight drawing duplicate start lines on live graph
microbit-matt-hillsdon Feb 10, 2026
bab3f9b
Improve projects row tooltip text
microbit-robert Feb 11, 2026
1362e42
Collect project name upfront
microbit-robert Feb 11, 2026
d3f24c8
Merge pull request #726 from microbit-foundation/merge-mp-into-apps
microbit-matt-hillsdon Feb 11, 2026
4279555
Was there an unintended package-lock.json change during merge work?
microbit-robert Feb 11, 2026
2ca1748
Move new project action into my projects row
microbit-robert Feb 11, 2026
5161534
Increasing spacing between row title and actions
microbit-robert Feb 11, 2026
89a0186
New project name dialog -> Create project
microbit-robert Feb 11, 2026
32d9326
Fix e2e tests
microbit-robert Feb 11, 2026
d5d7275
Add actions menu to home page project cards
microbit-robert Feb 11, 2026
d25ad06
Fix import
microbit-robert Feb 11, 2026
c1947a7
Fix another import
microbit-robert Feb 11, 2026
b42eb79
First cut at inline editable project name in toolbar
microbit-robert Feb 11, 2026
6cf7bbe
Pull out common style props
microbit-robert Feb 11, 2026
aaedcb7
Align editable name text left
microbit-robert Feb 11, 2026
a99b44b
More tweaks to project name inline input
microbit-robert Feb 11, 2026
7aeac52
Align import page with open shared project page
microbit-robert Feb 12, 2026
4ec594e
Home page -> Home
microbit-robert Feb 12, 2026
af4d106
Add teacher resources and help section rows
microbit-robert Feb 12, 2026
c8cc63b
Fix e2e tests
microbit-robert Feb 12, 2026
ac41030
Add latest project ideas
microbit-robert Feb 12, 2026
bb3365f
Reinstate simpler C++ data collection firmware (#732)
microbit-matt-hillsdon Feb 12, 2026
1f8226c
Merge branch 'support-multiple-projects-beta' into merge-mp-2
microbit-matt-hillsdon Feb 12, 2026
ba3b7b5
Merge pull request #734 from microbit-foundation/merge-mp-2
microbit-matt-hillsdon Feb 12, 2026
388bbf2
Fix Android fastlane upload for draft apps (#735)
microbit-matt-hillsdon Feb 12, 2026
65cc0fe
Add images to default theme (#738)
microbit-grace Feb 13, 2026
90dd14b
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 13, 2026
9e98c98
Use macOS 26 runner for iOS CI builds (#739)
microbit-matt-hillsdon Feb 13, 2026
56865f9
More reasonably sized card images
microbit-robert Feb 13, 2026
c2df956
Help section -> Help
microbit-robert Feb 13, 2026
252987c
Update theme package
microbit-robert Feb 13, 2026
9c30f43
Improve multiple projects UI (#744)
microbit-robert Feb 16, 2026
c8ecbc1
Prepare to introduce SQLite-backed storage for apps (#742)
microbit-matt-hillsdon Feb 16, 2026
3cc5b86
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 16, 2026
02f7c2b
Tweak download message (#736)
microbit-matt-hillsdon Feb 16, 2026
159c79f
Fix promise await in forEach issue
microbit-matt-hillsdon Feb 17, 2026
20633a6
Update hint when a hex is loaded and recording is deleted (#750)
microbit-grace Feb 17, 2026
2f6a9e5
Use SQLite storage on mobile replacing IndexedDB (#743)
microbit-matt-hillsdon Feb 18, 2026
0ff6d3f
Merge branch 'support-multiple-projects-beta' of github.com:microbit-…
microbit-matt-hillsdon Feb 18, 2026
344346d
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 18, 2026
ae17dfd
Bump capacitor-sqlite-vanilla for Android DDL fix
microbit-matt-hillsdon Feb 19, 2026
763c0dc
Fix rename project (#751)
microbit-grace Feb 19, 2026
0347373
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 19, 2026
8445621
The swiper code uses CSS nesting which we need to transpile
microbit-matt-hillsdon Feb 19, 2026
d5b4e07
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 19, 2026
4a1151e
Add Android back button support (#756)
microbit-matt-hillsdon Feb 20, 2026
875c35e
Fix iOS modal dialogs rendering at wrong size after app resume (#758)
microbit-matt-hillsdon Feb 20, 2026
1e1f7c7
Disable localStorage/model cleanup during migration while beta shares…
microbit-matt-hillsdon Feb 20, 2026
d8ed871
Tweak toolbar in mobile/tablet cases; faff with space for EditableName
microbit-matt-hillsdon Feb 20, 2026
12e256e
Rename makecode-data IDB store to editor-project and collapse migrations
microbit-matt-hillsdon Feb 20, 2026
6f6b373
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 20, 2026
47f479a
Merge branch 'apps' of github.com:microbit-foundation/ml-trainer into…
microbit-matt-hillsdon Feb 20, 2026
bcb12f9
Revert faff with EditableName alignment
microbit-matt-hillsdon Feb 20, 2026
e20e06c
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 20, 2026
e63602f
Remove connecting dialog in background during Web Bluetooth connectio…
microbit-grace Feb 20, 2026
6018976
Visual tweaks mainly motivated by mobile layout
microbit-matt-hillsdon Feb 20, 2026
12a740d
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 20, 2026
b03019e
Merge branch 'apps' of github.com:microbit-foundation/ml-trainer into…
microbit-matt-hillsdon Feb 20, 2026
9296ec5
The storage warning/info doesn't apply to the app.
microbit-matt-hillsdon Feb 20, 2026
f53a8ff
Include native debug symbols in Android AAB for Play Console crash re…
microbit-matt-hillsdon Feb 20, 2026
34aefbc
Replace hamburger dropdown with navigation drawer (#759)
microbit-matt-hillsdon Feb 24, 2026
b9a19df
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 24, 2026
b8b9479
Fix spacing when short of space (e.g. in French)
microbit-matt-hillsdon Feb 24, 2026
42c1c18
Merge branch 'support-multiple-projects-beta' into apps
microbit-matt-hillsdon Feb 24, 2026
736b8ec
Apps: sharing and save/download (#761)
microbit-matt-hillsdon Feb 24, 2026
a0e445f
Add homepage banner (#760)
microbit-grace Feb 24, 2026
5e256d6
Tweak message re IndexedDB to remove Safari special case
microbit-matt-hillsdon Feb 24, 2026
85949dc
Unused asset
microbit-matt-hillsdon Feb 24, 2026
d8a6019
Tweak card responsiveness
microbit-matt-hillsdon Feb 24, 2026
41d7ddd
Fix cross-tab sync for multi-delete by sending projectIds array in Br…
microbit-matt-hillsdon Feb 24, 2026
4064f2a
Remove dead getLatestProject method from storage
microbit-matt-hillsdon Feb 24, 2026
0552ab5
Fix redundant onClose in NameProjectDialog and unused effect dependency
microbit-matt-hillsdon Feb 24, 2026
343ba74
Remove broken arrow key handling from SwiperCarousel
microbit-matt-hillsdon Feb 24, 2026
5b2deee
Deduplicate between home and projects
microbit-matt-hillsdon Feb 24, 2026
1ee0029
Add banner breakpoint for landscape mobile
microbit-grace Feb 24, 2026
a3d30f5
Merge branch 'support-multiple-projects-beta' into support-mp-beta-apps
microbit-grace Feb 24, 2026
40e711d
Remove getLatestProject from sqlite version
microbit-grace Feb 24, 2026
a037698
Fix store action bugs and remove broken carousel shadow
microbit-matt-hillsdon Feb 24, 2026
5044924
Reduce unnecessary re-renders in project cards and carousel
microbit-matt-hillsdon Feb 24, 2026
63b5ba7
Separate settings from project data in storage
microbit-matt-hillsdon Feb 24, 2026
3514b10
Internationalize selection actions aria-label in ProjectsToolbar
microbit-matt-hillsdon Feb 24, 2026
ff7d577
Add missing SPDX license headers
microbit-matt-hillsdon Feb 24, 2026
baa5e49
Add e2e tests for home page card actions and projects page sort
microbit-matt-hillsdon Feb 24, 2026
70455e1
Hide carousel navigation buttons from assistive technology
microbit-matt-hillsdon Feb 24, 2026
ae1daa2
Merge branch 'support-multiple-projects-beta' of github.com:microbit-…
microbit-matt-hillsdon Feb 24, 2026
0c93360
Better phrasing
microbit-matt-hillsdon Feb 24, 2026
19d4e8f
Fix focus ring consistency
microbit-matt-hillsdon Feb 24, 2026
d4633dd
Merge pull request #722 from microbit-foundation/support-multiple-pro…
microbit-matt-hillsdon Feb 24, 2026
62bf027
Merge branch 'beta' into support-mp-beta-apps
microbit-matt-hillsdon Feb 24, 2026
8a31da7
Remove the website content flag (#766)
microbit-matt-hillsdon Feb 25, 2026
da94c84
Re-evaluate hint when data samples are drag and dropped
microbit-matt-hillsdon Feb 25, 2026
81f96fc
Fix delete confirmation showing wrong count after duplicating
microbit-matt-hillsdon Feb 25, 2026
68bb3c9
Add e2e test for delete dialog after duplicate then multi-select
microbit-matt-hillsdon Feb 25, 2026
67a432a
Merge branch 'beta' into support-mp-beta-apps
microbit-matt-hillsdon Feb 25, 2026
cf06f25
Use a carousel on AboutPage for the projects
microbit-matt-hillsdon Feb 25, 2026
165a496
Merge pull request #763 from microbit-foundation/support-mp-beta-apps
microbit-matt-hillsdon Feb 25, 2026
71925bd
Merge branch 'beta' into apps
microbit-matt-hillsdon Feb 25, 2026
8fae060
Make HomepageBanner x margins responsive and consistent with CarouselRow
microbit-matt-hillsdon Feb 25, 2026
e988fbb
Merge branch 'beta' into apps
microbit-matt-hillsdon Feb 25, 2026
d960d89
Increase native carousel x padding on tablet-sized screens
microbit-matt-hillsdon Feb 25, 2026
880a360
Whatever changes Node 24 wants to make
microbit-matt-hillsdon Feb 25, 2026
4665eda
Improve the carousel buttons
microbit-matt-hillsdon Feb 25, 2026
4391f93
Custom box shadow for offset white outline on Learn more
microbit-matt-hillsdon Feb 25, 2026
9a5ad22
Replace CSS modules with Chakra UI styling
microbit-matt-hillsdon Feb 25, 2026
22055fc
Fix box shadow poking out below button
microbit-matt-hillsdon Feb 25, 2026
c887814
Merge pull request #769 from microbit-foundation/carousl-tweaks
microbit-matt-hillsdon Feb 25, 2026
adb0c3a
Merge branch 'beta' into apps
microbit-matt-hillsdon Feb 25, 2026
da4ef64
Simplify folder structure now we lost CSS modules
microbit-matt-hillsdon Feb 25, 2026
ecee438
Merge branch 'beta' into apps
microbit-matt-hillsdon Feb 25, 2026
785f4f4
Fix recording highlight drawing duplicate start lines on live graph
microbit-matt-hillsdon Feb 10, 2026
97fc526
Fix Bluetooth pattern checks and skip verification after download (#755)
microbit-grace Feb 26, 2026
085b4c9
Show welcome dialog more often
microbit-matt-hillsdon Feb 26, 2026
89e8a9c
Script to give a translation word count estimate
microbit-matt-hillsdon Feb 26, 2026
db4d747
Merge branch 'beta' into apps
microbit-matt-hillsdon Feb 26, 2026
9480bd9
Remove partial flashing service from firmware
microbit-matt-hillsdon Mar 2, 2026
21dad4d
Update connection library
microbit-matt-hillsdon Mar 2, 2026
7392e38
Merge pull request #777 from microbit-foundation/no-pf
microbit-matt-hillsdon Mar 2, 2026
c658e82
Reload if editor is not ready when resuming app (#775)
microbit-grace Mar 3, 2026
05bb036
Tweaks for better above/below fold split
microbit-matt-hillsdon Mar 4, 2026
2ba70fa
Use brand blue for the wave
microbit-matt-hillsdon Mar 4, 2026
9653969
Share the breakpoint
microbit-matt-hillsdon Mar 4, 2026
7f84fa1
Consistently use brand.500 where possible for home page
microbit-matt-hillsdon Mar 5, 2026
489678c
Update to brand with recoloured images
microbit-matt-hillsdon Mar 5, 2026
1e41321
Merge pull request #781 from microbit-foundation/home-500
microbit-matt-hillsdon Mar 5, 2026
42eb64e
Remove AboutPage and link to createai/ai page
microbit-matt-hillsdon Mar 5, 2026
4851577
Merge pull request #782 from microbit-foundation/remove-about
microbit-matt-hillsdon Mar 5, 2026
d4a56e7
Drop in the final copy for the subtitle (#783)
microbit-matt-hillsdon Mar 5, 2026
ac304c3
Unused
microbit-matt-hillsdon Mar 5, 2026
8485c83
Merge branch 'beta' into apps
microbit-matt-hillsdon Mar 6, 2026
0e6f783
Update connection library (#784)
microbit-matt-hillsdon Mar 9, 2026
16c9205
Replace onboarding video with animation (#778)
microbit-grace Mar 12, 2026
5e2b614
Remove unused copy after changes on this branch (#788)
microbit-matt-hillsdon Mar 12, 2026
b314e5b
Fix crash when training model without a connected micro:bit (#789)
microbit-matt-hillsdon Mar 13, 2026
5b4ae53
Fix sharing issues (#792)
microbit-matt-hillsdon Mar 17, 2026
abffb02
Upgrade connection library (#791)
microbit-matt-hillsdon Mar 17, 2026
d7593c8
Show the welcome dialog once per project open (#794)
microbit-matt-hillsdon Mar 17, 2026
52df51e
Merge branch 'beta' into apps
microbit-matt-hillsdon Mar 17, 2026
71cedee
Fix download flow not using new Bluetooth name after pattern change (…
microbit-matt-hillsdon Mar 17, 2026
c7a5001
Don't center NameProjectDialog (#800)
microbit-matt-hillsdon Mar 18, 2026
1e31a32
Merge branch 'main' into beta
microbit-matt-hillsdon Mar 18, 2026
8870634
Merge branch 'beta' into apps
microbit-matt-hillsdon Mar 18, 2026
2e1bdc1
Merge branch 'apps' of github.com:microbit-foundation/ml-trainer into…
microbit-matt-hillsdon Mar 18, 2026
45ee7e0
Prevent keyboard from obscuring action names on native (#801)
microbit-matt-hillsdon Mar 18, 2026
8b591ae
Apps: smoother prediction animation (#797)
glastonbridge Mar 18, 2026
dd4f509
Fix .hex file import on Android (#802)
microbit-matt-hillsdon Mar 19, 2026
e3ce5d2
Add accessibility card and update help card images (#790)
microbit-grace Mar 19, 2026
7527bf4
Merge branch 'beta' into apps
microbit-matt-hillsdon Mar 19, 2026
a0222fd
Use "Accessibility" translated string (#804)
microbit-grace Mar 20, 2026
2472399
Upate micro:bit Button B listener (#807)
microbit-grace Mar 24, 2026
22b2595
Rename makecode projects more consistently when they are not the acti…
microbit-matt-hillsdon Mar 24, 2026
a4a78d5
Merge branch 'beta' into apps
microbit-matt-hillsdon Mar 24, 2026
0277663
Rename makecode projects more consistently when they are not the acti…
glastonbridge Mar 24, 2026
d5e9d9a
Improve project name input and focus ring visibility in toolbar (#808)
microbit-grace Mar 24, 2026
7e102c6
Merge branch 'main' into beta
microbit-matt-hillsdon Mar 24, 2026
ab00d47
Merge branch 'beta' into apps
microbit-matt-hillsdon Mar 24, 2026
ff7da84
Rename native data collection progress dialog to reference micro:bit …
microbit-grace Mar 25, 2026
2878e5c
Only reset on close if not hadSuccessfulConnection (#814)
microbit-grace Mar 25, 2026
806793e
Fix multiple attributes with the same name error (#816)
microbit-grace Mar 25, 2026
869a000
Update translations from Crowdin (beta) (#819)
microbit-matt-hillsdon Mar 25, 2026
d5d5e66
Update translations for beta (#821)
microbit-matt-hillsdon Mar 26, 2026
b23f9c1
Collapse compare/copy bluetooth pattern dialogs into one editable dia…
microbit-matt-hillsdon Mar 27, 2026
67ed6d1
Fix /new redirect not working when deployed with a base URL (#824)
microbit-matt-hillsdon Mar 27, 2026
043b032
Add iPadOS 26 window controls offset for Capacitor web view (#818)
microbit-matt-hillsdon Mar 27, 2026
5b5279b
Pause graph during training (#827)
microbit-matt-hillsdon Mar 30, 2026
55f1a98
Replace native Bluetooth "What you need" dialog with battery pack dia…
microbit-matt-hillsdon Mar 30, 2026
068ebfd
Merge branch 'beta' into apps
microbit-matt-hillsdon Mar 30, 2026
bf49dfb
Fix bad import merge
microbit-matt-hillsdon Mar 30, 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
  •  
  •  
  •  
3 changes: 3 additions & 0 deletions .eslintrc.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ module.exports = {
"bootstrap-template.js",
"playwright.config.ts",
"CMakeFiles",
"android",
"ios",
"firmware",
],
parser: "@typescript-eslint/parser",
parserOptions: {
Expand Down
105 changes: 105 additions & 0 deletions .github/workflows/android-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
name: Android Build

on:
release:
types: [created]
push:
branches:
- "**"

concurrency:
group: ${{ github.workflow }}-${{ startsWith(github.ref, 'refs/tags/v') && 'release' || github.ref }}
cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/v') }}

jobs:
build-android:
# Only run for apps releases, not web releases
if: ${{ github.event_name != 'release' || contains(github.event.release.tag_name, '-apps') }}
timeout-minutes: 15
runs-on: ubuntu-latest
permissions:
contents: read
packages: read
id-token: write
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
registry-url: "https://npm.pkg.github.com"

- uses: microbit-foundation/npm-package-versioner-action@v1

# Strip prerelease suffix - app stores require X.Y.Z format
- name: Set marketing version
run: echo "MARKETING_VERSION=$(jq -r .version package.json | sed 's/-.*//')" >> $GITHUB_ENV

- uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "21"

- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
bundler-cache: true

- run: npm ci
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- run: echo "ML_THEME_VERSION=$(jq -r '.["theme-package-version"]' workflow-config.json)" >> $GITHUB_ENV

- run: npm install --no-save @microbit-foundation/ml-trainer-microbit@${{ env.ML_THEME_VERSION }}
if: github.repository_owner == 'microbit-foundation'
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- run: npm run build:apps

- run: npx cap sync android

- name: Decode keystore
run: |
echo "SIGNING_STORE_FILE=$RUNNER_TEMP/keystore.jks" >> $GITHUB_ENV
printenv SIGNING_STORE_FILE_BASE64 | base64 -d > "$RUNNER_TEMP/keystore.jks"
env:
SIGNING_STORE_FILE_BASE64: ${{ secrets.ANDROID_SIGNING_STORE_FILE_BASE64 }}

- name: Build with Fastlane
run: bundle exec fastlane android build
env:
SIGNING_KEY_ALIAS: upload
SIGNING_KEY_PASSWORD: ${{ secrets.ANDROID_SIGNING_PASSWORD }}
SIGNING_STORE_PASSWORD: ${{ secrets.ANDROID_SIGNING_PASSWORD }}
BUILD_NUMBER: ${{ github.run_number }}
MARKETING_VERSION: ${{ env.MARKETING_VERSION }}

- name: Clean up keystore
run: rm -f "$RUNNER_TEMP/keystore.jks"
if: always()

- uses: actions/upload-artifact@v4
with:
name: android-apk-${{ github.sha }}
path: android/app/build/outputs/apk/release/*.apk
retention-days: 30

- uses: actions/upload-artifact@v4
with:
name: android-aab-${{ github.sha }}
path: android/app/build/outputs/bundle/release/*.aab
retention-days: 30

- name: Authenticate to Google Cloud
if: github.event_name == 'release'
uses: google-github-actions/auth@v2
with:
workload_identity_provider: projects/311821962964/locations/global/workloadIdentityPools/github-actions-pool/providers/github-actions
service_account: fastlane-supply@microbit-fastlane.iam.gserviceaccount.com

- name: Upload to Google Play
if: github.event_name == 'release'
run: bundle exec fastlane android upload
10 changes: 7 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ concurrency:

jobs:
build:
# Skip apps releases - handled by ios-build.yml and android-build.yml
if: ${{ github.event_name != 'release' || !contains(github.event.release.tag_name, '-apps') }}
timeout-minutes: 10
runs-on: ubuntu-latest
permissions:
Expand All @@ -32,22 +34,24 @@ jobs:
- uses: actions/checkout@v4
- uses: actions/setup-node@v3
with:
node-version: 20
node-version: 24
cache: "npm"
registry-url: "https://npm.pkg.github.com"
- uses: microbit-foundation/npm-package-versioner-action@v1
- run: npm ci
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- run: npm install --no-save @microbit-foundation/ml-trainer-microbit@0.2.0-dev.78 @microbit-foundation/website-deploy-aws@0.6 @microbit-foundation/website-deploy-aws-config@0.10
- run: echo "ML_THEME_VERSION=$(jq -r '.["theme-package-version"]' workflow-config.json)" >> $GITHUB_ENV
- run: npm install --no-save @microbit-foundation/ml-trainer-microbit@${{ env.ML_THEME_VERSION }} @microbit-foundation/website-deploy-aws@0.6 @microbit-foundation/website-deploy-aws-config@0.10
if: github.repository_owner == 'microbit-foundation'
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- run: node ./bin/print-ci-env.cjs >> $GITHUB_ENV
- run: npm run ci
- name: Run Playwright tests
if: env.STAGE == 'REVIEW' || env.STAGE == 'STAGING' || env.STAGE == 'BETA'
uses: docker://mcr.microsoft.com/playwright:v1.45.0-jammy
uses: docker://mcr.microsoft.com/playwright:v1.58.2-jammy
with:
args: npx playwright test
- name: Store reports
Expand Down
89 changes: 89 additions & 0 deletions .github/workflows/ios-build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: iOS Build

on:
release:
types: [created]
push:
branches:
- "**"

concurrency:
group: ${{ github.workflow }}-${{ startsWith(github.ref, 'refs/tags/v') && 'release' || github.ref }}
cancel-in-progress: ${{ !startsWith(github.ref, 'refs/tags/v') }}

jobs:
build-ios:
# Only run for apps releases, not web releases
if: ${{ github.event_name != 'release' || contains(github.event.release.tag_name, '-apps') }}
timeout-minutes: 25
runs-on: macos-26
permissions:
contents: read
packages: read
steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: 20
cache: "npm"
registry-url: "https://npm.pkg.github.com"

- uses: microbit-foundation/npm-package-versioner-action@v1

# Strip prerelease suffix - app stores require X.Y.Z format
- name: Set marketing version
run: echo "MARKETING_VERSION=$(jq -r .version package.json | sed 's/-.*//')" >> $GITHUB_ENV

- uses: ruby/setup-ruby@v1
with:
ruby-version: "3.3"
bundler-cache: true

- name: Setup SSH for Match
run: |
eval "$(ssh-agent -s)"
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" >> $GITHUB_ENV
echo "SSH_AGENT_PID=$SSH_AGENT_PID" >> $GITHUB_ENV
ssh-add - <<< "$FASTLANE_MATCH_DEPLOY_KEY"
env:
FASTLANE_MATCH_DEPLOY_KEY: ${{ secrets.FASTLANE_MATCH_DEPLOY_KEY }}

- run: npm ci
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- run: echo "ML_THEME_VERSION=$(jq -r '.["theme-package-version"]' workflow-config.json)" >> $GITHUB_ENV

- run: npm install --no-save @microbit-foundation/ml-trainer-microbit@${{ env.ML_THEME_VERSION }}
if: github.repository_owner == 'microbit-foundation'
env:
NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

- run: npm run build:apps

- run: npx cap sync ios

- run: pod install
working-directory: ios/App

- name: Build with Fastlane
run: bundle exec fastlane ios build
env:
MATCH_PASSWORD: ${{ secrets.FASTLANE_MATCH_PASSWORD }}
BUILD_NUMBER: ${{ github.run_number }}
MARKETING_VERSION: ${{ env.MARKETING_VERSION }}

- uses: actions/upload-artifact@v4
with:
name: ios-app-${{ github.sha }}
path: ios/App/build/output/*.ipa
retention-days: 30

- name: Upload to TestFlight
if: github.event_name == 'release'
run: bundle exec fastlane ios upload
env:
APP_STORE_CONNECT_KEY_ID: ${{ secrets.APP_STORE_CONNECT_KEY_ID }}
APP_STORE_CONNECT_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_ISSUER_ID }}
APP_STORE_CONNECT_KEY_CONTENT: ${{ secrets.APP_STORE_CONNECT_KEY_CONTENT }}
14 changes: 12 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/dist/
/.idea/
.idea/
/node_modules/

.DS_Store
Expand All @@ -16,7 +16,17 @@

.env.*

/screenshots/
/src/.DS_Store
/playwright-report/
/test-results/
/ml4f-output/
/ml4f-output/
/android/app/src/main/assets/public
/ios/App/App/public

# Fastlane
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots
fastlane/test_output
Gemfile.lock
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
src/translations.ts
src/messages/
src/images/
36 changes: 36 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# AI agent notes

## Formatting/style

Run `npm run format` to format code with Prettier.

New files should have a copyright header with the current year which is 2026. Use an existing file as a template but update the year.

When documenting properties/fields use the following style of comment:

```typescript
/**
* Example comment text.
*/
```

## Internationalization (i18n)

To add or amend UI strings:

1. Edit `lang/ui.en.json`
2. Run `find lang -type f -not -name ui.en.json | while read n; do git checkout main -- $n; done && npm run i18n:compile` to update `src/messages/` via formatjs and ensure that outdated text of new message is not preserved in translation bundles as we iterate on the text.

## Vitest

To run a subset of unit tests, pass a file pattern directly (not `--testPathPattern`):

```bash
npm test -- download-machine-browser-default
```

## Playwright

If you run the e2e tests, be sure to run them headlessly via `npm run test:e2e:headless`.

When updating `@playwright/test` in package.json, also update the Docker image version in `.github/workflows/build.yml` to match.
1 change: 1 addition & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
@AGENTS.md
3 changes: 3 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
source "https://rubygems.org"

gem "fastlane"
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,58 @@ See the section about [running tests](https://facebook.github.io/create-react-ap
Builds the app for production to the `dist` folder.\
It correctly bundles React in production mode and optimizes the build for the best performance.

## iOS/Android development

### Local development

To get a proper dev server for iOS/Android development run:

```bash
npm run cap:sync:dev
```

Then run

```bash
npm run dev:apps
```

Use e.g. `npx cap open ios` to open the IDE and run from there.

The vite dev server run by dev:apps will be running inside the app.

### Signed builds

CI builds signed artifacts using [Fastlane](https://fastlane.tools/). iOS certificates and provisioning profiles are managed via [Fastlane Match](https://docs.fastlane.tools/actions/match/) with encrypted credentials stored in a private repository. Android signing uses a keystore stored in CI secrets.

To run Fastlane locally:

```bash
bundle install
bundle exec fastlane ios build # Build signed IPA (macOS only)
bundle exec fastlane android build # Build signed APK/AAB
```

Or you can use Homebrew via `brew install fastlane` and drop the `bundle exec` (this can sidestep Ruby version issues).

Android builds require the signing keystore and passwords via environment variables. iOS builds require Match credentials to fetch certificates.

### App versioning

App releases use tags with an `-apps` suffix to distinguish them from web releases on main until we merge the apps work back. The marketing version is derived from the tag with the suffix stripped (store limitation).

When creating an apps tag we target next unreleased minor version, so if main is on v1.2.3:

| Stage | Example tag | Marketing version | Build number |
| -------- | ------------------------ | ----------------- | ------------- |
| Internal | `v1.3.0-apps.internal.1` | 1.3.0 | CI run number |
| Beta | `v1.3.0-apps.beta.1` | 1.3.0 | CI run number |
| Public | `v1.3.0-apps` | 1.3.0 | CI run number |

If main releases a new minor version (e.g., 1.3.0) before apps ships, then we'll bump the next apps version (assuming we've merged main into apps).

If we've merged apps back into main before we get to a public release we can drop the apps suffix.

## Deployments

Most users should use the supported Foundation deployment at https://createai.microbit.org/
Expand Down
Loading
Loading