-
-
Notifications
You must be signed in to change notification settings - Fork 2.4k
Standalone #9189
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
eliandoran
wants to merge
617
commits into
main
Choose a base branch
from
standalone
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Standalone #9189
Changes from all commits
Commits
Show all changes
617 commits
Select commit
Hold shift + click to select a range
a05c582
chore: fix the rest of the type errors
eliandoran 8b98fdc
feat(standalone): support app CSS
eliandoran c059370
refactor(core): use own path replacement
eliandoran a2cace6
feat(standalone): add support for environment variables
eliandoran ebbb8b3
fix(standalone): unable to switch themes
eliandoran b47ede7
Merge remote-tracking branch 'origin/main' into feature/standalone_ex…
eliandoran 1a8075e
fix(server): server-side translations missing
eliandoran 247108f
fix(core): desktop crashing due to missing platform check
eliandoran 04136cd
chore(desktop): strange cannot write file because it would overwrite …
eliandoran e778942
fix(server): custom route depending on helper function
eliandoran d2524ad
fix(server): wrong use of isElectron
eliandoran e1079f9
chore(core): fix one more type error
eliandoran c7cf8d5
chore(core): set up basic vitest
eliandoran 995f39d
Revert "chore(core): set up basic vitest"
eliandoran 296579f
test(server): initialize core
eliandoran 61d37c4
Merge remote-tracking branch 'origin/main' into feature/standalone_ex…
eliandoran b864c33
chore(standalone): align deps with client
eliandoran a7001be
chore(standalone): addres requested changes
eliandoran 4c93366
Standalone extra improvements (#9191)
eliandoran 4ffaadd
chore(import): move all services to core (with errors)
eliandoran ecb467f
chore(import): fix a few type errors
eliandoran 6ce1d31
chore(import): integrate import route into core
eliandoran ce1f7a4
chore(scripts): deduplicate errors listing
eliandoran f1d7d34
chore(core): align tsconfig
eliandoran f81369d
feat(core): support md5 hash
eliandoran f069b41
chore(standalone): upload middleware with error handling
eliandoran 55f09fe
chore(core): fix usage of Buffer
eliandoran 050cdd0
chore(core): add a few missing constants
eliandoran a0573c4
fix(core): extension lookup failing in standalone
eliandoran 22c86cf
feat(standalone): basic ZIP support
eliandoran 91d526b
feat(standalone/import): improve importing speed
eliandoran d29d142
feat(standalone/import): import demo DB
eliandoran 24650ed
fix(setup): demo DB not respected
eliandoran 5b3fb31
fix(core): on new database, opening hidden notes instead of the root
eliandoran 2d4027c
fix(server): depending on unexported zip import service
eliandoran 0211535
fix(edit-docs): missing zip primitives
eliandoran 6c75df7
chore: solve type errors
eliandoran 0ec2160
Standalone import (#9204)
eliandoran c94ca00
chore(core): relocate export service
eliandoran 21e2cf1
chore(core): relocate export route
eliandoran a59d6df
chore(core): fix most errors with export
eliandoran 4458d5b
chore(core): fix more errors related to export
eliandoran d2a0c54
fix(core): get rid of Node dependencies from ZIP export
eliandoran 73f401f
fix(standalone/export): redirects to URL without downloading
eliandoran 0c37b2c
fix(export/single): crash due to use of Buffer
eliandoran 1d050e8
fix(core): use of Node.js path
eliandoran aee005b
refactor(core): move zip provider out of import
eliandoran 8cd7e48
fix(server): unable to export as share
eliandoran 8b1d006
fix(standalone): unable to download ZIPs
eliandoran d0abcfe
chore(export): bring back content CSS
eliandoran 6dea4ae
chore(server): address requested changes
eliandoran 3624294
feat(standalone): hide share export
eliandoran 82bac7b
fix(standalone): OPML export failing
eliandoran 8ada23c
feat(server): improve error logging using banner
eliandoran f04f295
feat(core): use real console width in console banner
eliandoran 9b6c796
fix(server): ws not working
eliandoran fa6e70a
feat(standalone): get enex import to work
eliandoran 0b784af
chore(core): reintroduce basic non-blocking import for ENEX
eliandoran 7f6a43c
chore(server): fix error in Electron port handling
eliandoran b4802e9
chore: address requested changes
eliandoran d084c42
Feature/standalone export (#9205)
eliandoran 4f6de0c
Merge remote-tracking branch 'origin/main' into standalone
eliandoran 3a053d3
refactor(client): fix types related to script execution
eliandoran b02e9ba
chore(core): integrate scripting services
eliandoran 3bd6777
chore(core): integrate scripting routes
eliandoran ef70fd2
chore(server): fix references to script service
eliandoran 4d98558
chore(core): set up sucrase
eliandoran 377e874
chore(core): integrate scheduler
eliandoran 936165f
fix(standalone): hidden subtree is slow due to lack of transaction
eliandoran 8e50c9b
chore(core): remove unnecessary newlines
eliandoran 9d6c9ac
chore(core): address requested changes
eliandoran 39b2e8e
Feature/standalone scripting (#9219)
eliandoran 5158df2
fix(build-docs): wailing due to introduction of core
eliandoran ca0c640
fix(build-docs): backend script generation fails
eliandoran 5fce728
Merge remote-tracking branch 'origin/main' into standalone
eliandoran 93b126d
chore(deps): update pnpm lock
eliandoran 12b9461
Merge remote-tracking branch 'origin/main' into standalone
Copilot b52e652
Merge remote-tracking branch 'origin/main' into standalone
eliandoran 62a34e9
chore(standalone): fix type errors after merge with main
eliandoran 65176ac
chore(standalone): fix accidental port change
eliandoran 38385ac
Merge remote-tracking branch 'origin/main' into standalone
eliandoran ae3a96b
fix(standalone): broken due to vite-plugin-static-copy update
eliandoran 6019289
fix(standalone): sqlite3-opfs failing
eliandoran 3cc52b2
fix(standalone): start-prod doesn't have CORS headers
eliandoran 2432112
chore(standalone): update version
eliandoran 0b1122d
Merge remote-tracking branch 'origin/main' into standalone
eliandoran 34c5cfb
fix(scripts): update build info no longer updating
eliandoran 9beb756
feat(standalone): update build info
eliandoran 6945ef5
Merge remote-tracking branch 'origin/main' into standalone
eliandoran b2e886f
fix(core): wrong package version
eliandoran 94de760
Merge remote-tracking branch 'origin/main' into standalone
eliandoran d35b55f
fix(server): tests failing due to SQL initialization order
eliandoran d34ba8b
test(server): integration database not initialized properly
eliandoran 66a18d1
fix(server): in-app help not integrated
eliandoran dc0fcad
test(server): run core tests
eliandoran 3a7ce0c
test(core): fix initialization issues due to SQL
eliandoran f40de0a
test(core): fix more tests
eliandoran 6e0e784
fix(server): share tests no longer working
eliandoran acf9aa8
fix(core): issues with some utils
eliandoran bfb9df4
test(ocr): broken due to change in architecture
eliandoran 86da56d
test(e2e): broken due to missing rebuild mechanism
eliandoran 515ea96
refactor(core): cleanup expected fails
eliandoran 2f7c054
test(standalone): start running tests
eliandoran de050b3
test(core): crash due to default test script
eliandoran aac8c80
test(standalone): use real platform provider
eliandoran 2c2a20b
chore(server): bypass build warning
eliandoran 21302e4
test(standalone): get most tests to pass
eliandoran 7463674
fix(standalone): zip fix wasn't integrated
eliandoran c83531a
e2e(server): bring back loading of the integration test database
eliandoran f3f1ce5
test(standalone): happy-dom issue with Markdown import
eliandoran 8e7bd16
fix(docker): cannot access schema and DB
eliandoran c041c25
fix(server): cannot run server in e2e
eliandoran 7e02e6a
ci(dev): run standalone tests as well
eliandoran 9f32717
Update apps/server/src/in_app_help_provider.ts
eliandoran 10dd506
Reintegrate tests (#9352)
eliandoran 047b6ff
Merge remote-tracking branch 'origin/main' into standalone
eliandoran 231d099
chore(deps): align with main
eliandoran 64764a7
fix(build-docs): process hanging
eliandoran 2dd1dd1
fix(standalone): cyclic dependency breaking prod
eliandoran 8494e0c
Merge remote-tracking branch 'origin/main' into standalone
eliandoran 102cf4c
chore(standalone): reintegrate changes from main lost in the merge
eliandoran 73743b6
fix(server): reintegrate backend log mechanism
eliandoran 814a961
chore(client): dev server not working due to prefresh bug
eliandoran e7c931d
chore(core): integrate backend log route
eliandoran 24112a9
feat(standalone): introduce backend log handling
eliandoran 8c61cc8
core(standalone): integrate backup management using provider
eliandoran 876008e
refactor(backup): keep only one implementation in core with abstract …
eliandoran 065afd0
chore(standalone): start implementing backup service
eliandoran 9d4ff50
feat(standalone): start working on an image service
eliandoran b921c3c
chore(core): integrate backup routes
eliandoran 7453740
chore(core): reintroduce image routes
eliandoran 0d5c998
chore(backup): implement standalone regular backup
eliandoran 35317b3
fix(core): error due to CLS on standalone
eliandoran f034454
refactor(backup): constructor-based dependency injection for options
eliandoran 3ad20e4
refactor(core): get rid of as any for image routes
eliandoran 89b3dec
refactor(backup): pass in options service directly
eliandoran 9f24a44
fix(standalone): crash in logs due to refresh
eliandoran b46c1e6
feat(standalone): allow downloading backups
eliandoran f75adfe
fix(standalone): PDFjs not working in dev mode
eliandoran 262ac05
fix(standalone): PDFjs not working in prod mode
eliandoran 3b437d8
chore(core): fix type issue
eliandoran 4b4ef35
feat(standalone): start introducing crypto
eliandoran 8f3f2cc
chore(core): reintroduce encryption and password reset
eliandoran de037b3
feat(standalone): disable LLM features
eliandoran 395c71f
fix(standalone): encrypt subtree not working
eliandoran 91d4e77
chore(standalone): remove async encryption
eliandoran 1fdc623
fix(core): corruption caused by encryption
eliandoran 8c2e2cc
chore(standalone): address requested changes
eliandoran 113a962
chore(standalone): address second set of requested changes
eliandoran 60540c3
Merge remote-tracking branch 'origin/main' into standalone_stabilization
eliandoran cae3d14
chore(core): integrate sync timeout migration
eliandoran 5cd1ffb
Standalone stabilization (#9395)
eliandoran 7c53fe5
fix(edit-docs): missing core providers
eliandoran 417228e
e2e: make tests reusable for standalone
eliandoran 2a9976c
feat(ci): run e2e for standalone
eliandoran 3a3f49e
feat(ci): run standalone tests with one worker
eliandoran c995c15
fix(ci): standalone timing out during build
eliandoran 0f68993
fix(ci): wrong host for standalone
eliandoran a43cecb
e2e(standalone): integration test database not loaded
eliandoran c0e01be
e2e(standalone): change startup script
eliandoran 735c112
e2e(standalone): change startup script again
eliandoran 4162806
e2e(standalone): server not starting due to wrong port
eliandoran 2b07e88
e2e(standalone): another attempt at getting the database to load
eliandoran f44a1f6
e2e(standalone): use different mechanism for handling integration test
eliandoran c3b1cfd
e2e(standalone): get database to load
eliandoran 1e4c6eb
e2e(standalone): use different seeding mechanism
eliandoran 7fd50a2
e2e(standalone): settings change not intercepted
eliandoran 24d0b3f
e2e(standalone): test failing due to reload mechanism
eliandoran fb85af4
fix(standalone): change locale after DB init
eliandoran e30f61b
e2e: make tests reusable for standalone (#9491)
eliandoran 28c6826
Merge remote-tracking branch 'origin/main' into standalone
eliandoran d97818a
chore(standalone): fix typecheck
eliandoran b438411
fix(anchors): detection no longer working
eliandoran e64608d
feat(setup): add RTL support
eliandoran 132c725
feat(standalone): display a more compact badge
eliandoran 095d287
feat(standalone): improve standalone badge on mobile
eliandoran 9ac3fcb
feat(standalone): improve error handling for accessing over HTTP
eliandoran 6a2e48d
feat(standalone): migrate to SAHPool for faster DB
eliandoran fbbeee9
fix(migration): avoid mutating MIGRATIONS array in-place during sort
github-actions[bot] 7141f23
chore(mobile): start with an empty capacitor app
eliandoran ed54a7d
chore(mobile): wire it up to client-standalone build
eliandoran 8b44e7c
chore(mobile): init Android project
eliandoran d6070da
fix(mobile): splash screen never ending
eliandoran a822f25
Merge branch 'standalone' of github.com:TriliumNext/Trilium into stan…
eliandoran c703575
Merge remote-tracking branch 'origin/standalone' into standalone-mobi…
eliandoran 6625c60
chore(mobile): build on sync
eliandoran bf6a2f2
chore(mobile): remove warnings related to COOP/COEP
eliandoran 124603c
feat(ci): build mobile debug APK
eliandoran 9295c86
fix(ci): gradle not executable
eliandoran 4f9304c
feat(server): bake in CORS origins for mobile
eliandoran a65f9cb
chore(docker): deploy docker for standalone branch
eliandoran e956d95
chore(mobile): basic icon set
eliandoran 89d8931
chore(mobile): add script to sync
eliandoran f4790e5
chore(mobile): icon clipped on Pixel 10
eliandoran 97438ed
chore(mobile): icon clipped on Samsung with squircle
eliandoran 4914ff7
chore(mobile): icon clipped on Samsung with squircle
eliandoran 07608a0
feat(mobile): provide monochrome icon too
eliandoran 0e678a6
chore(mobile): add a slighter warmer background
eliandoran 70c42fa
chore(mobile/setup): smaller headings
eliandoran 8c3cbf3
chore(setup): apply mobile class
eliandoran 849afaa
chore(setup): tweak language selection
eliandoran bb9ff4f
chore(setup): improve language selection
eliandoran e551e77
chore(setup): improve illustration sizes
eliandoran 8e1e161
chore(setup/mobile): improve safe margins
eliandoran c3488c0
chore(setup): improve layout on both mobile & desktop
eliandoran 706a75b
chore(mobile): address requested changes
eliandoran 4db5d86
chore(mobile): fix deps
eliandoran d90f7f2
fix(mobile): close button in unsafe area
eliandoran 4a52bae
feat(mobile/about): hide data directory
eliandoran a6ddf7d
feat(mobile): add a dedicated badge
eliandoran ca4e10b
Standalone mobile test (#9513)
eliandoran 683e5ce
Merge remote-tracking branch 'origin/main' into standalone
eliandoran baf6d33
chore: add standalone:test script
eliandoran 941d75b
Merge branch 'standalone' of https://github.com/TriliumNext/Trilium i…
eliandoran b92f559
feat(mobile): basic drill-down note navigation
eliandoran c110930
chore(mobile): enable drill-down only for standalone for now
eliandoran 9e681a7
fix(mobile/nav): initial tree is not shown
eliandoran e2bce67
feat(mobile/nav): add preview for current note
eliandoran 1714adc
feat(mobile/nav): special handling for leaf children
eliandoran 24469b3
feat(mobile/nav): avoid flicker caused by preview rendering
eliandoran 5d6f4cb
feat(mobile/nav): reduce flickering by showing spinner inline
eliandoran 2e6a643
feat(mobile/nav): reduce flickering when navigating
eliandoran 449a9f1
fix(mobile/nav): no children flickering while navigating
eliandoran fd3ea7a
feat(mobile/nav): add a short transition
eliandoran eb5e4fd
fix(tests/standalone): keep core specs passing under happy-dom
eliandoran bf6bc53
feat(mobile/nav): use different presentation for note content
eliandoran 17fdbf0
feat(mobile/nav): display previous note in the back arrow
eliandoran ac49c97
feat(mobile/nav): improve handling of empty notes
eliandoran 9784051
feat(mobile/nav): add basic long press menu
eliandoran 6c6d331
feat(mobile/nav): basic support for note colors
eliandoran 167a400
fix(mobile/nav): colors not refreshing
eliandoran 39d85d3
chore(mobile/nav): use reactive note titles
eliandoran 51e687c
fix(mobile/nav): preview gradient shows even when not needed
eliandoran ac7ccbc
feat(mobile/nav): integrate full context menu for mobile
eliandoran 2afea94
feat(mobile/nav): integrate clipboard and other options
eliandoran 4fabe3c
chore(mobile/nav): hide collapse/expand subtree
eliandoran 547f005
feat(mobile/nav): basic handling of hidden subtree
eliandoran 73af598
fix(mobile/nav): basic handling of hidden subtree
eliandoran 41f5a32
fix(mobile/nav): hoisting doesn't work
eliandoran 4b40ada
feat(mobile/nav): hoisted badge indicator
eliandoran c509371
chore(mobile/nav): always enable new widget
eliandoran 8d00975
feat(mobile/nav): functional +/[...] buttons for header
eliandoran 2f7f4e9
feat(mobile/nav): improve layout for root
eliandoran b5735c1
fix(mobile/nav): tree not reacting to changes
eliandoran 885b0b9
chore(mobile/nav): use a thinner border
eliandoran e135e3a
Merge branch 'standalone' of https://github.com/TriliumNext/Trilium i…
eliandoran f53cb43
Merge remote-tracking branch 'origin/standalone' into standalone_mobi…
eliandoran 34f09ae
e2e(support): failing after changes in mobile structure
eliandoran 7556c38
Standalone mobile nav (#9525)
eliandoran 29dfd99
Merge remote-tracking branch 'origin/main' into standalone
eliandoran File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,70 @@ | ||
| name: Deploy Standalone App | ||
|
|
||
| on: | ||
| # Trigger on push to main branch | ||
| push: | ||
| branches: | ||
| - standalone | ||
| # Only run when app files change | ||
| paths: | ||
| - 'apps/client/**' | ||
| - 'apps/client-standalone/**' | ||
| - 'packages/trilium-core/**' | ||
| - '.github/workflows/deploy-app.yml' | ||
|
|
||
| # Allow manual triggering from Actions tab | ||
| workflow_dispatch: | ||
|
|
||
| # Run on pull requests for preview deployments | ||
| pull_request: | ||
| paths: | ||
| - 'apps/client/**' | ||
| - 'apps/client-standalone/**' | ||
| - 'packages/trilium-core/**' | ||
| - '.github/workflows/deploy-app.yml' | ||
| jobs: | ||
| build-and-deploy: | ||
| name: Build and Deploy App | ||
| runs-on: ubuntu-latest | ||
| timeout-minutes: 10 | ||
|
|
||
| # Required permissions for deployment | ||
| permissions: | ||
| contents: read | ||
| deployments: write | ||
| pull-requests: write # For PR preview comments | ||
| id-token: write # For OIDC authentication (if needed) | ||
|
|
||
| steps: | ||
| - name: Checkout Repository | ||
| uses: actions/checkout@v6 | ||
|
|
||
| - name: Setup pnpm | ||
| uses: pnpm/action-setup@v4 | ||
|
|
||
| - name: Setup Node.js | ||
| uses: actions/setup-node@v6 | ||
| with: | ||
| node-version: '24' | ||
| cache: 'pnpm' | ||
|
|
||
| - name: Install Dependencies | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Update build info | ||
| run: pnpm run chore:update-build-info | ||
|
|
||
| - name: Trigger build of app | ||
| run: pnpm --filter=client-standalone build | ||
|
|
||
| - name: Deploy | ||
| uses: ./.github/actions/deploy-to-cloudflare-pages | ||
| if: github.repository == vars.REPO_MAIN | ||
| with: | ||
| project_name: "trilium-app" | ||
| comment_body: "🖥️ App preview is ready" | ||
| production_url: "https://app.triliumnotes.org" | ||
| deploy_dir: "apps/client-standalone/dist" | ||
| cloudflare_api_token: ${{ secrets.CLOUDFLARE_API_TOKEN }} | ||
| cloudflare_account_id: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} | ||
| github_token: ${{ secrets.GITHUB_TOKEN }} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| name: Mobile | ||
|
|
||
| on: | ||
| push: | ||
| workflow_dispatch: | ||
|
|
||
| concurrency: | ||
| group: ${{ github.workflow }}-${{ github.ref }} | ||
| cancel-in-progress: true | ||
|
|
||
| jobs: | ||
| build_android: | ||
| name: Build Android APK | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: Checkout the repository | ||
| uses: actions/checkout@v6 | ||
|
|
||
| - uses: pnpm/action-setup@v6 | ||
|
|
||
| - name: Set up Node.js | ||
| uses: actions/setup-node@v6 | ||
| with: | ||
| node-version: 24 | ||
| cache: "pnpm" | ||
|
|
||
| - name: Set up JDK 21 | ||
| uses: actions/setup-java@v5 | ||
| with: | ||
| distribution: temurin | ||
| java-version: 21 | ||
|
|
||
| - name: Set up Gradle | ||
| uses: gradle/actions/setup-gradle@v5 | ||
|
|
||
| - name: Install dependencies | ||
| run: pnpm install --frozen-lockfile | ||
|
|
||
| - name: Update build info | ||
| run: pnpm run chore:update-build-info | ||
|
|
||
| - name: Build client-standalone (webDir for Capacitor) | ||
| run: pnpm --filter @triliumnext/mobile build | ||
|
|
||
| - name: Sync Capacitor Android project | ||
| run: pnpm --filter @triliumnext/mobile exec cap sync android | ||
|
|
||
| - name: Assemble debug APK | ||
| working-directory: apps/mobile/android | ||
| run: ./gradlew assembleDebug --no-daemon | ||
|
|
||
| - name: Upload APK | ||
| uses: actions/upload-artifact@v7 | ||
| with: | ||
| name: trilium-mobile-debug-apk | ||
| path: apps/mobile/android/app/build/outputs/apk/debug/*.apk | ||
| retention-days: 14 | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -51,3 +51,6 @@ upload | |
| site/ | ||
| apps/*/coverage | ||
| scripts/translation/.language*.json | ||
|
|
||
| # AI | ||
| .claude/settings.local.json | ||
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Check warning
Code scanning / CodeQL
Workflow does not contain permissions Medium
Copilot Autofix
AI 2 days ago
Add an explicit
permissionsblock in.github/workflows/mobile.ymlat the workflow root (top-level), so it applies to all jobs unless overridden.For this workflow, the minimal safe baseline is:
contents: readThis preserves existing behavior (checkout/build/upload-artifact) while enforcing least privilege for
GITHUB_TOKEN. No imports, methods, or dependencies are needed since this is YAML configuration only.