Commit Graph

63 Commits

Author SHA1 Message Date
Juan José Mata
e70865e939 Sync Helm chart and Rails app versions in CI and release workflows (#1030)
* Sync Helm chart and Rails app versions in CI and release workflows

- values.yaml: default image.tag to "" so it uses Chart.appVersion
  (was hardcoded to stale "0.6.6" while app was at 0.6.8-alpha.13)
- chart-ci.yml: add version-sync job that fails if version.rb,
  Chart.yaml version, and Chart.yaml appVersion diverge; trigger on
  version.rb changes too
- chart-release.yml: derive chart version from version.rb (single
  source of truth) instead of auto-incrementing independent chart-v* tags

https://claude.ai/code/session_01Eq3WHBn3Uwjezxb6ctdjMB

* Default to `false` AI_DEBUG_MODE

* Apply suggestions from CodeRabbit

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Juan José Mata <jjmata@jjmata.com>

---------

Signed-off-by: Juan José Mata <jjmata@jjmata.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-02-20 10:04:07 +01:00
Claude
efcc3583d5 Fix mobile-build using tag name instead of branch for filenames
When workflow_dispatch is triggered from a tag (e.g. v0.6.7) instead
of a branch, github.ref_name returns the tag name, causing filenames
like sure-v0.6.7-{stamp}.apk instead of sure-main-{stamp}.apk.

Guard against this by checking github.ref_type and falling back to the
repository's default branch when a tag is selected.

https://claude.ai/code/session_01TDfNkNxQ6uWxQxLAwJY5Qa
2026-02-20 00:18:32 +01:00
Juan José Mata
f339414257 Add workflow to build mobile apps from main without tagging (#1028)
* Add workflow to build mobile apps from main without tagging

Adds a new `mobile-main-build.yml` workflow that can be triggered
manually via workflow_dispatch to build Android APK and iOS unsigned
builds from the main branch. Uses a `main-YYYYMMDDHHMI` stamp for
versioning (e.g. sure-main-202602181259.apk) and updates the gh-pages
README.md MOBILE_DOWNLOADS section with direct download links.

https://claude.ai/code/session_01TDfNkNxQ6uWxQxLAwJY5Qa

* Rename to mobile-build.yml and support any branch

Instead of hardcoding "main", derive the branch name from
github.ref_name, sanitise it for filenames/tags (slashes → hyphens),
and use it throughout: version, tag, release notes, and gh-pages
README. The checkout step now explicitly pins ref: ${{ github.ref }}
so the tag always matches the dispatched branch.

Example artifacts from main:  sure-main-202602181259.apk
Example from feature/foo:    sure-feature-foo-202602181259.apk

https://claude.ai/code/session_01TDfNkNxQ6uWxQxLAwJY5Qa

* Add continue-on-error to artifact download steps

If either the Android or iOS build fails, the download step would
hard-fail and abort the release job before the conditional logic in
"Prepare release assets" could handle the partial result. Adding
continue-on-error lets the workflow proceed so a release can still
be created with whichever artifacts succeeded.

https://claude.ai/code/session_01TDfNkNxQ6uWxQxLAwJY5Qa

* Fix in-place replacement of MOBILE_DOWNLOADS section in README

The previous logic stripped the marker block then appended the new
section at the end of the file, causing it to drift to the bottom on
every run. Now writes the section to a temp file and uses awk to
replace the block between the markers in-place, preserving the
section's original position in the README.

https://claude.ai/code/session_01TDfNkNxQ6uWxQxLAwJY5Qa

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-20 00:02:02 +01:00
Juan José Mata
150e0f7fda Enable inclusion of hidden files in helm chart package
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-19 22:09:11 +01:00
Juan José Mata
69fa440558 Refactor GitHub Actions workflows (#1023)
* Unify release workflows and add chart/mobile wrappers

* Update chart CI to kube 1.25

* Fetch tagged commit before pushing release branch

* Old `azure/setup-helm`

* Base chart dispatch version on existing chart tags

* `grep` failure with `pipefail` bypasses the user-friendly error message

* `gh-pages` push lacks retry logic

* Auto-incremented chart tag collision

* `grep -Ev` pipeline will crash

* Missed one
2026-02-19 21:36:47 +01:00
Juan José Mata
a63e1c5a89 Syntax error in workflow 2026-02-18 16:47:03 +01:00
Juan José Mata
9dd3aad250 No credentials = no TestFlight 2026-02-18 13:42:33 +01:00
Juan José Mata
5dfa8e6760 Upload to TestFlight after release / fix version name 2026-02-18 13:41:01 +01:00
Juan José Mata
e9bba43554 Wire TestFlight up to mobile releases 2026-02-18 10:31:24 +01:00
Juan José Mata
65f1daa995 iOS build fixes/prep for TestFlight 2026-02-18 10:11:16 +01:00
Juan José Mata
fe5419c1fd Ignore changes in mobile/ directory for publish workflow
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-18 01:40:27 +01:00
Juan José Mata
41bc05a7ac Enhance mobile release workflow with dispatch and script
Added workflow_dispatch trigger and updated GitHub Release step to use a script for release notes and asset uploads.

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-02-18 01:11:37 +01:00
Juan José Mata
d933d2a82f New icon 2026-02-18 00:58:15 +01:00
Juan José Mata
a68f329dbd feat: Update gh-pages README with latest mobile release links (#1003)
Add steps to the mobile-release workflow that checkout the gh-pages
branch and update its README.md with direct download links to the
latest Flutter mobile clients (Android APK, debug APK, iOS unsigned
build). Uses HTML comment markers for idempotent updates on subsequent
releases.

https://claude.ai/code/session_01GuUjjmMzxvdSwfvhrjvJr1

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-16 17:10:54 +01:00
BitToby
e573896efe fix: locale-dependent category duplication bug (#956)
* fix: locale-dependent category duplication bug

* fix: use family locale for investment contributions category to prevent duplicates and handle legacy data

* Remove v* tag trigger from flutter-build to fix double-runs

publish.yml already calls flutter-build via workflow_call on v* tags,
so the direct push trigger was causing duplicate workflow runs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Refactor mobile release asset flow

* fix: category uniqueness and workflow issues

* fix: fix test issue

* fix: solve test issue

* fix: resolve legacy problem

* fix: solve lint test issue

* fix: revert unrelated changes

---------

Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:33:51 +01:00
Juan José Mata
c4824bf34d Mobile-only GitHub workflow builds (#975)
* Mobile build only

* Fix copy on debug

* PR review comments
2026-02-12 23:35:00 +01:00
Juan José Mata
2df4406af3 fix: bump pre-release version on source branch instead of main (#875)
The bump-pre_release-version job was hardcoded to push to main, which
caused version bumps to land on main even when tags were created from
release branches (e.g., v0.6.7-rc.2).

This fix:
- Adds a step to detect which branch contains the tagged commit
- Prefers non-main branches (release branches) over main
- Checks out and pushes to the detected source branch

https://claude.ai/code/session_01XsxnhP8ZaGbWUMsQwA5F5V

Co-authored-by: Claude <noreply@anthropic.com>
2026-02-02 19:18:00 +01:00
Juan José Mata
51c7f7a3f0 Bump Helm chart version in pre-release workflow (#792)
* Update chart version in pre-release bump

Keep Helm chart version and appVersion aligned with app releases.

* Publish Helm chart with releases

Package the Helm chart on tag releases, upload it to GitHub Pages, and attach it to the GitHub Release assets.

* Move Helm chart release to helm workflow

Publish Helm chart packages from the helm-release workflow on tags and keep publish.yml focused on app release assets.

* Derive nightly chart version from latest release

Use the most recent v* tag as the base for nightly Helm chart versions.
2026-01-27 12:04:11 +01:00
Juan José Mata
7bc20e38e2 Generalize pre-release bump workflow (#779)
* Generalize pre-release bump workflow

Handle alpha, beta, and rc tags when incrementing the version.

* Change commit message for version bump in workflow

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-25 20:33:42 +01:00
Juan José Mata
8eb9d9cf28 Add GitHub Actions workflow to update documentation
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-21 21:56:46 +01:00
Juan José Mata
d4be209ce5 Point people looking for mobile builds. 2026-01-19 22:47:55 +00:00
Juan José Mata
726c84580d Update token in publish.yml from GITHUB_TOKEN to GH_PAT
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-11 18:49:39 +01:00
Juan José Mata
b99e2ecd5e Fixing version bump
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-10 22:57:45 +01:00
Juan José Mata
14c169e6b9 Include actual iOS IPA
Added debugging information to list downloaded artifacts and check for mobile and iOS build directories.

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-10 17:12:55 +01:00
Juan José Mata
61caaf056c Actually change the version!
Add logic to update version file and handle commits.

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2026-01-10 16:14:57 +01:00
Juan José Mata
2f4e2eab8d Workflow chores: publish Flutter builds & bump alpha versions (#599)
* Add debug mobile artifacts to GitHub releases

- Modify flutter-build.yml to trigger on version tags (v*) and support
  workflow_call for use by other workflows
- Add mobile job to publish.yml that calls flutter-build workflow
- Add release job that creates GitHub release with debug APK and
  unsigned iOS build when a version tag is pushed
- Auto-detect debug vs release APK and name appropriately
- Mark alpha/beta/rc versions as pre-releases

* Add automatic alpha version bump after release

When an alpha tag (e.g., v0.6.7-alpha.3) is published and the Docker
image is built, automatically bump the alpha number in version.rb
(e.g., alpha.3 -> alpha.4) and push to main branch.

* Fix APK copying to include both debug and release builds

Change if/elif to separate if statements so both app-debug.apk and
app-release.apk are copied to release assets when both exist.

* Rename artifact names in publish workflow

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>

* Revert rename of artifact names

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>

* Enhance version bump process in publish.yml

Refactor version bump script to ensure version file exists and improve error handling.

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>

---------

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
2026-01-10 10:59:15 +01:00
Lazy Bone
7866598057 Mobile native client via Flutter (#426)
* feat: mobile support.

Basic functionality development includes adding and deleting transactions,viewing balances,

* Fix mobile support issues in PR #426

This commit addresses the critical issues identified in the mobile-support PR:

1. **GitHub Actions Workflow Path Issues (Critical)**
   - Add mobile/ prefix to all path filters in flutter-build.yml
   - Add working-directory to all Flutter commands
   - Fix Android keystore and iOS CocoaPods paths
   - Fix artifact upload paths

2. **Error Handling Improvements**
   - Add try-catch blocks to all HTTP requests in services
   - Wrap all JSON parsing operations in error handling
   - Add proper error messages for network failures

3. **HTTP Request Timeout Configuration**
   - Add 30-second timeout to all HTTP requests
   - Prevents hanging on network failures

4. **Defensive Null Checks in Providers**
   - Add containsKey() checks before accessing result maps
   - Add proper type casting with null safety
   - Add fallback error messages

These changes ensure the workflow triggers correctly on mobile/ directory
changes and improves overall code robustness.

* Fix transactions exposure and error handling issues

- Add UnmodifiableListView to transactions getter to prevent external mutation
- Call notifyListeners() immediately after setting _isLoading = false
- Move jsonDecode to run only after successful statusCode verification
- Replace string concatenation with Uri.replace() for proper URL encoding
- Add try/catch for jsonDecode on non-2xx responses to handle non-JSON errors

* Fix exception handling and duplicate parsing in auth_service.dart

- Replace broad catch-all exception handlers with targeted exception handling
- Add specific catches for SocketException, TimeoutException, HttpException, FormatException, and TypeError
- Return safe, user-friendly error messages instead of exposing internal details
- Log full exception details and stack traces using debugPrint for debugging
- Fix duplicate User.fromJson calls in login and signup methods by parsing once and reusing the instance
- Improve code efficiency and security by preventing information leakage

* Fix 2FA login crash and improve UX

Fixed the crash that occurred when logging in with 2FA-enabled accounts
and improved the user experience by not showing error messages when MFA
is required (it's a normal flow, not an error).

Changes:
- Added mounted check before setState() in login screen
- Modified AuthProvider to not set error message when MFA is required
- Ensures smooth transition from password entry to OTP entry
- Prevents "setState() called after dispose()" error

The flow now works correctly:
1. User enters email/password → clicks Sign In
2. Backend responds with mfa_required
3. OTP input field appears with friendly blue prompt (no red error)
4. User enters 6-digit code → clicks Sign In again
5. Login succeeds

* Add debug logs to trace 2FA login flow

Added comprehensive debug logging to understand why OTP field
is not showing when MFA is required:
- Log backend response status and body
- Log login result in AuthProvider
- Log MFA required state
- Log when OTP field should be shown

This will help identify if the issue is:
1. Backend not returning mfa_required flag
2. Response parsing issue
3. State management issue
4. UI rendering issue

* Fix 2FA login flow by moving MFA state to AuthProvider

PROBLEM:
The LoginScreen was being recreated when AuthProvider called notifyListeners(),
causing all internal state (_showOtpField) to be lost. This resulted in the
OTP input field never appearing, making 2FA login impossible.

ROOT CAUSE:
The AppWrapper uses a Consumer<AuthProvider> that rebuilds the entire widget
tree when auth state changes. When login() sets isLoading=false and calls
notifyListeners(), a brand new LoginScreen instance is created, resetting
all internal state.

SOLUTION:
- Moved _showMfaInput state from LoginScreen to AuthProvider
- AuthProvider now manages when to show the MFA input field
- LoginScreen uses Consumer to read this state reactively
- State survives widget rebuilds

FLOW:
1. User enters email/password → clicks Sign In
2. Backend responds with mfa_required: true
3. AuthProvider sets _showMfaInput = true
4. Consumer rebuilds, showing OTP field (state preserved)
5. User enters code → clicks Sign In
6. Backend validates → returns tokens → login succeeds

Backend is confirmed working via tests (auth_controller_test.rb).

* Fix mobile 2FA login requiring double password entry

Problem:
When 2FA is required during mobile login, the LoginScreen was being
destroyed and recreated, causing text controllers to reset and forcing
users to re-enter their credentials.

Root cause:
AppWrapper was checking authProvider.isLoading and showing a full-screen
loading indicator during login attempts. This caused LoginScreen to be
unmounted when isLoading=true, destroying the State and text controllers.
When the backend returned mfa_required, isLoading=false triggered
recreation of LoginScreen with empty fields.

Solution:
- Add isInitializing state to AuthProvider to distinguish initial auth
  check from active login attempts
- Update AppWrapper to only show loading spinner during isInitializing,
  not during login flow
- LoginScreen now persists across login attempts, preserving entered
  credentials

Flow after fix:
1. User enters email/password
2. LoginScreen stays mounted (shows loading in button only)
3. Backend returns mfa_required
4. MFA field appears, email/password fields retain values
5. User enters OTP and submits (email/password automatically included)

Files changed:
- mobile/lib/providers/auth_provider.dart: Add isInitializing state
- mobile/lib/main.dart: Use isInitializing instead of isLoading in AppWrapper

* Add OTP error feedback for mobile 2FA login

When users enter an incorrect OTP code during 2FA login, the app now:
- Displays an error message indicating the code was invalid
- Keeps the MFA input field visible for retry
- Automatically clears the OTP field for easy re-entry

Changes:
- mobile/lib/providers/auth_provider.dart:
  * Distinguish between first MFA request vs invalid OTP error
  * Show error message when OTP code was submitted but invalid
  * Keep MFA input visible when in MFA flow with errors

- mobile/lib/screens/login_screen.dart:
  * Clear OTP field after failed login attempt
  * Improve UX by allowing easy retry without re-entering credentials

User flow after fix:
1. User enters email/password
2. MFA required - OTP field appears
3. User enters wrong OTP
4. Error message shows "Two-factor authentication required"
5. OTP field clears, ready for new code
6. User can immediately retry without re-entering email/password

* Improve OTP error message clarity

When user enters an invalid OTP code, show clearer error message
"Invalid authentication code. Please try again." instead of the
confusing "Two-factor authentication required" from backend.

This makes it clear that the OTP was wrong, not that they need to
start the 2FA process.

* chore: delete generation ai create test flow md.

* Update mobile/lib/screens/login_screen.dart

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* feat: add pubspec.lock file.

* Linter

* Update mobile/android/app/build.gradle

Co-authored-by: Pedro Piñera Buendía <663605+pepicrft@users.noreply.github.com>
Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* Update mobile/android/app/build.gradle

com.sure.mobile -> am.sure.mobile

Co-authored-by: Pedro Piñera Buendía <663605+pepicrft@users.noreply.github.com>
Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* Update mobile/ios/Runner.xcodeproj/project.pbxproj

Co-authored-by: Pedro Piñera Buendía <663605+pepicrft@users.noreply.github.com>
Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* Update mobile/ios/Runner.xcodeproj/project.pbxproj

Co-authored-by: Pedro Piñera Buendía <663605+pepicrft@users.noreply.github.com>
Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* Update mobile/ios/Runner.xcodeproj/project.pbxproj

Co-authored-by: Pedro Piñera Buendía <663605+pepicrft@users.noreply.github.com>
Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* Fix iOS deployment target and update documentation

- Update iOS minimum deployment target from 12.0 to 13.0 in Podfile for Flutter compatibility
- Translate SIGNING_SETUP.md from Chinese to English for better accessibility
- Remove TECHNICAL_GUIDE.md as requested

* Restore TECHNICAL_GUIDE.md with partial content removal

- Restore mobile/docs/TECHNICAL_GUIDE.md (previously deleted)
- Remove only License, Contributing, and Related Links sections (from line 445 onwards)
- Keep all technical documentation content (lines 1-444)

* Fix setState after dispose errors across mobile app

This commit fixes 5 critical setState/dispose errors identified by Cursor:

1. backend_config_screen.dart: Add mounted checks in _testConnection()
   and _saveAndContinue() methods to prevent setState calls after async
   operations (http.get, SharedPreferences) when widget is disposed.

2. transaction_form_screen.dart: Add mounted check in _selectDate()
   after showDatePicker to prevent setState when modal is dismissed
   while date picker is open.

3. main.dart: Add mounted check in _checkBackendConfig() after
   ApiConfig.initialize() to handle disposal during async initialization.

4. transactions_list_screen.dart: Add mounted check in the .then()
   callback of _showAddTransactionForm() to prevent calling
   _loadTransactions() on a disposed widget when modal is closed.

5. transactions_provider.dart: Fix premature notifyListeners() by
   removing intermediate notification after _isLoading = false,
   ensuring listeners only get notified once with complete state updates
   to prevent momentary stale UI state.

All setState calls after async operations now properly check mounted
status to prevent "setState() called after dispose()" errors.

* Fix Android build: Remove package attribute from AndroidManifest.xml

Remove deprecated package attribute from AndroidManifest.xml. The namespace
is now correctly defined only in build.gradle as required by newer versions
of Android Gradle Plugin.

This fixes the build error:
"Incorrect package="com.sure.mobile" found in source AndroidManifest.xml.
Setting the namespace via the package attribute in the source
AndroidManifest.xml is no longer supported."

* Update issue templates

* Change package name from com.sure.mobile to am.sure.mobile

Updated Android package name across all files:
- build.gradle: namespace and applicationId
- MainActivity.kt: package declaration and file path
- Moved MainActivity.kt from com/sure/mobile to am/sure/mobile

This aligns with the package name change made in the mobile-support branch
and fixes app crashes caused by package name mismatch.

* Fix mobile app code quality issues

- Add mounted check in backend_config_screen.dart to prevent setState after dispose
- Translate Chinese comments to English in transactions_list_screen.dart for better maintainability
- Replace brittle string-split date conversion with DateFormat in transaction_form_screen.dart for safer date handling

These changes address code review feedback and improve code robustness.

* Remove feature request template

Delete unused feature request issue template file.

* Fix mobile app code quality issues

- Fix URL construction in backend_config_screen.dart to prevent double slashes by normalizing base URL (removing trailing slashes) before appending paths
- Update pubspec.yaml to require Flutter 3.27.0+ for withValues API compatibility
- Improve amount parsing robustness in transactions_list_screen.dart with proper locale handling, sign detection, and fallback error handling
- Fix dismissible delete handler to prevent UI/backend inconsistency by moving deletion to confirmDismiss and only allowing dismissal on success

* Fix mobile app performance and security issues

- Eliminate duplicate _getAmountDisplayInfo calls in transactions list by computing display info once per transaction item
- Upgrade flutter_secure_storage from 9.0.0 to 10.0.0 for AES-GCM encryption
- Update dev dependencies: flutter_lints to 6.0.0 and flutter_launcher_icons to 0.14.4

* Update Android SDK requirements for flutter_secure_storage v10

- Increase compileSdk from 35 to 36
- Increase minSdkVersion from 21 to 24

This is required by flutter_secure_storage v10+ which uses newer Android APIs for AES-GCM encryption.

* Fix transaction deletion message not displaying properly

The success message was being shown in the onDismissed callback, which
executes after the dismissal animation completes. By that time, the
context may have become invalid due to widget tree rebuilds, causing
the SnackBar to not display.

Moved the success message to the confirmDismiss callback where we
already have a captured scaffoldMessenger reference, ensuring the
message displays reliably before the dismissal animation begins.

* Add mounted check before showing SnackBar after async operation

* Update mobile/android/app/build.gradle

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* Fix empty state refresh and auth error feedback in mobile transactions screen

- Wrap empty state in RefreshIndicator with CustomScrollView to enable pull-to-refresh when no transactions exist
- Wrap error state in RefreshIndicator as well for consistency
- Add SnackBar feedback when auth token is null in _loadTransactions instead of silent failure
- Ensure mounted check before showing SnackBar to prevent errors after widget disposal

* Fix flash of 'No accounts yet' page on app startup

Added initialization state tracking to AccountsProvider to prevent
the empty state from briefly showing while accounts are being loaded
for the first time.

Changes:
- Add _isInitializing flag to AccountsProvider (starts as true)
- Set to false after first fetchAccounts() completes
- Reset to true when clearAccounts() is called
- Update DashboardScreen to show loading during initialization

This ensures a smooth user experience without visual flashing on app launch.

* Refactor: Extract transaction deletion logic into dedicated method

Improved code readability by extracting the 67-line confirmDismiss
callback into a separate _confirmAndDeleteTransaction method.

Changes:
- Add Transaction model import
- Create _confirmAndDeleteTransaction method that handles:
  - Confirmation dialog
  - Token retrieval
  - Deletion API call
  - Success/failure feedback
- Simplify confirmDismiss to single line calling new method

This separation of concerns makes the code more maintainable and
the Dismissible widget configuration more concise.

* Enhance Flutter build workflow with keystore checks

Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

* Implement conditional signing configuration

Added a check for keystore properties before configuring signing.

Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>

---------

Signed-off-by: Lazy Bone <89256478+dwvwdv@users.noreply.github.com>
Co-authored-by: dwvwdv <dwvwdv@protonmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Juan José Mata <juanjo.mata@gmail.com>
Co-authored-by: Pedro Piñera Buendía <663605+pepicrft@users.noreply.github.com>
2026-01-08 11:27:31 +01:00
luo jiyin
828c53f62d Fix variable injection vulnerability in helm-release workflow (#541)
* Fix variable injection vulnerability in helm-release workflow

  - Use explicit env block to pass GitHub context variables safely
  - Remove duplicate hardcoded git config that overwrote earlier settings
  - Prevents potential shell injection via  expansion

Signed-off-by: luojiyin <luojiyin@hotmail.com>

* Fix git config for gh-pages repository checkout

   Apply git user config inside gh-pages directory before commit,
   as the earlier config only applies to the main repository checkout.

Signed-off-by: luojiyin <luojiyin@hotmail.com>

---------

Signed-off-by: luojiyin <luojiyin@hotmail.com>
2026-01-07 21:12:08 +01:00
Juan José Mata
b3330a318d Tag stable images as latest as well
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-31 19:50:49 +01:00
Juan José Mata
60809dbf61 Helm chart is WIP
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-23 15:47:04 +01:00
Juan José Mata
92cf98551b Monorepo with Helm - don't act when modifying charts/ 2025-12-13 20:56:34 +00:00
Juan José Mata
47ab93de79 Fix indentation and git username
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-13 20:02:27 +01:00
Juan José Mata
9658745eb8 Add Helm dependency build steps
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-13 19:48:07 +01:00
Juan José Mata
3ba63454e4 Modify Helm release workflow for nightly builds
Updated the Helm release workflow to generate a nightly version and package the chart accordingly.

Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-13 19:44:43 +01:00
Juan José Mata
e19b90370f Add GitHub Actions workflow for Helm chart release
Signed-off-by: Juan José Mata <juanjo.mata@gmail.com>
2025-12-13 19:35:41 +01:00
Juan José Mata
ed99a4dcab Tag latest image on release (#162)
* Restrict stable tag to v-prefixed releases

* refactor: rewrite regex for categorizing alpha releases

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Signed-off-by: Himank Dave <93311724+steadyfall@users.noreply.github.com>

---------

Signed-off-by: Himank Dave <93311724+steadyfall@users.noreply.github.com>
Co-authored-by: Himank Dave <93311724+steadyfall@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-10-01 19:40:20 +02:00
Himank Dave
eba42e2f71 build: allow main branch publishing and add comprehensive OCI metadata for multi-arch images (#65)
* feat(ci): add OCI annotations and metadata to multi-arch images

- Include created, source, revision, ref-name, vendor & license
- Add title and description for Sure Rails app multi-arch image
- Dynamically annotate version when tag builds are triggered

* chore(ci): add nightly tag with weekday pattern to tag config

* fix(ci): allow publish workflow to push images from main branch

- Update conditional checks to include refs/heads/main
- Reflect new condition in workflow comments for clarity

* fix(ci): set image version label only for tag builds in metadata

* fix(ci): avoid quotations being passed as CLI argument

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Himank Dave <93311724+steadyfall@users.noreply.github.com>

* refactor(ci): remove deprecated `::set-output` command

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Himank Dave <93311724+steadyfall@users.noreply.github.com>

---------

Signed-off-by: Himank Dave <93311724+steadyfall@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2025-08-05 00:41:05 +02:00
Himank Dave
a14b0535ec feat: introduce multi-arch build matrix and OCI-compliant multi-arch images (#46)
* chore: update Docker image description to 'Sure'

* chore: adjust Docker metadata tags in publish workflow

- Disable automatic 'latest' tag generation
- Add 'nightly' tag for scheduled builds

* feat: add optional 'push' input to control image publishing

- Allow toggling push behavior via workflow input
- Allow push to 'ghcr.io' on tags, scheduled events, or when
	input is true

* chore: switch Docker cache to use registry-based build cache

* feat(ci): add multi-arch matrix image build & manifest merge

- Build and push images for amd64 and arm64 with platform-specific cache
- Export and upload image digests for each platform
- Merge digests into multi-arch manifest with retry logic
- Remove QEMU setup, use platform-specific runners
- Dynamic tag configuration for nightly, stable, and SHA tags

* chore(deps): pin external actions to specific minor versions

* Bump actions/checkout to v4.2.0
* Bump docker/setup-buildx-action to v3.10.0
* Bump docker/login-action to v3.3.0
* Bump docker/metadata-action to v5.6.0
* Bump docker/build-push-action to v6.16.0

* chore(ci): improve publish workflow robustness

- Set artifact upload to error if no files found & limit retention to 1 day

* chore(ci): enable OCI media types in Docker build outputs

* feat(ci): add scheduled nightly publish at 01:30 UTC

* chore(ci): refine image publish workflow and clarify multi-arch steps

- Add reference and conditions for push in workflow comments
- Rename build step for clarity on published platform target
- Ensure oci-mediatypes is preserved for annotations to show
- Rename merge job to indicate pushing multi-arch manifest tag
2025-08-03 08:23:49 +02:00
Zach Gollwitzer
9fabcf4c72 Redis check for self hosted apps (#2353)
* Redis check for self hosted apps

* Run linter with autocorrect

* Add Redis to CI
2025-06-09 18:30:52 -04:00
Zach Gollwitzer
03a146222d Plaid sync domain improvements (#2267)
Breaks our Plaid sync process out into more manageable classes. Notably, this moves the sync process to a distinct, 2-step flow:

1. Import stage - we first make API calls and import Plaid data to "mirror" tables
2. Processing stage - read the raw data, apply business rules, build internal domain models and sync balances

This provides several benefits:

- Plaid syncs can now be "replayed" without fetching API data again
- Mirror tables provide better audit and debugging capabilities
- Eliminates the "all or nothing" sync behavior that is currently in place, which is brittle
2025-05-23 18:58:22 -04:00
Zach Gollwitzer
5b2fa3d707 Fix commit resolution for Docker builds 2025-03-04 07:50:21 -05:00
Zach Gollwitzer
4e96ca8376 Add manual Docker publishing trigger in GH action workflow 2025-03-03 14:34:56 -05:00
Zach Gollwitzer
fd95f8d2bd Drop linux/arm/v7 support
linux/arm/v7 is not compatible with the latest Tailwind package + takes a significant amount of time when using buildx.  Most Raspberry Pi OS now run on 64 bit ARM architecture, so we should still have significant coverage with linux/amd + linux/arm builds.

Signed-off-by: Zach Gollwitzer <zach@maybe.co>
2025-02-21 17:12:06 -05:00
Zach Gollwitzer
c0e290a07e Add max time to Docker publish
Signed-off-by: Zach Gollwitzer <zach@maybe.co>
2025-02-12 15:07:24 -05:00
Zach Gollwitzer
3b0f8ae8c2 Only build armv7 on official releases (#1732) 2025-01-28 14:08:04 -05:00
oxdev03
4ad28d6eff Add BiomeJS for Linting and Formatting JavaScript relates to #1295 (#1299)
* chore: add formatting and linting for javascript code relates to #1295

* use spaces instaed

* add to recommended extensions

* only enforce lint

* auto save
2024-10-14 17:09:27 -04:00
Zach Gollwitzer
5c7d2f2b01 Better import instructions, remove ambiguous field (#1284)
* Remove ambiguous institution field

* Add import instructions

* Fix system test

* Remove lint and i18n normalization checks in CI
2024-10-10 11:18:58 -04:00
Zach Gollwitzer
c6bdf49f10 Account::Sync model and test fixture simplifications (#968)
* Add sync model

* Fresh fixtures for sync tests

* Sync tests overhaul

* Fix entry tests

* Complete remaining model test updates

* Update system tests

* Update demo data task

* Add system tests back to PR checks

* More simplifications, add empty family to fixtures for easier testing
2024-07-10 11:22:59 -04:00
dependabot[bot]
cb3fd34f90 Bump docker/build-push-action from 5 to 6 (#916)
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 5 to 6.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](https://github.com/docker/build-push-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-06-24 10:58:38 -04:00
Zach Gollwitzer
32e647f0fb Support 32 and 64 bit ARM architectures for Docker image
Fixes #816

Signed-off-by: Zach Gollwitzer <zach@maybe.co>
2024-05-30 21:42:09 -04:00