Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
02478b9
added percenatge and status with sgnus connection, and also remove th…
TechUp-24 Jan 15, 2026
f65ca4d
Adjust to processing percentage
itsafuu Jan 16, 2026
1dc9230
fixed alignment and text styling for processing
TechUp-24 Jan 16, 2026
465aa82
fixed alignment and text styling for processing
TechUp-24 Jan 16, 2026
1e6ceee
Cmake find libsecret on linux
itsafuu Jan 17, 2026
2d16d68
Update for new ABI naming setup
itsafuu Jan 27, 2026
ed76a55
Several adjustments for self hosted runner
itsafuu Feb 3, 2026
8813d7b
Include zkllvm directories. Added ndk/sdk step for android
itsafuu Feb 4, 2026
a2f3f1c
OSX PCH changes, android home definitions
itsafuu Feb 4, 2026
4b2c80e
Draft release tag builds
itsafuu Feb 6, 2026
7fb7787
Attempt to fix tag release
itsafuu Feb 6, 2026
fe89083
Fix tab
itsafuu Feb 6, 2026
6538032
Don't crease new releases, also use tag as name
itsafuu Feb 6, 2026
7d7bb51
Try to fix osx artifact generation
itsafuu Feb 6, 2026
edc4d2a
Intermediate certs for osx runner
itsafuu Feb 6, 2026
368a094
Try normal runner
itsafuu Feb 7, 2026
be1e1bc
Debugging
itsafuu Feb 7, 2026
7380899
Back to gh runner for test
itsafuu Feb 7, 2026
ca74598
Add system keychain to search
itsafuu Feb 7, 2026
5bd60e9
Debug logging whether there is a conflict with system keychain
itsafuu Feb 7, 2026
35835c6
Yet more debug logging
itsafuu Feb 7, 2026
863733b
Only osx for now
itsafuu Feb 7, 2026
37c113a
List keychains before and after, plus macos version
itsafuu Feb 9, 2026
9c847f6
Purge temp keychain
itsafuu Feb 9, 2026
3218017
Disable other platforms again. Fix cleanup step hopefully
itsafuu Feb 9, 2026
f1d6f93
Enable other platforms again
itsafuu Feb 9, 2026
6fe7f53
Second ran failed to back to debug
itsafuu Feb 9, 2026
0f62b4a
Debug logs
itsafuu Feb 9, 2026
5c4d0b5
Don't need pass for cer file
itsafuu Feb 9, 2026
26baeee
Cer is actually p12?
itsafuu Feb 9, 2026
fc154a9
Return to a very basic setup with cleanup
itsafuu Feb 9, 2026
aa8ce83
Simplify keychain cleanup
itsafuu Feb 9, 2026
e92c939
Check keychain search paths
itsafuu Feb 9, 2026
4d5a8a1
I guess this finally works even though the output is strange
itsafuu Feb 9, 2026
cf2c7da
Cleanup changes
itsafuu Feb 9, 2026
1da51bc
Use workspace directory
itsafuu Feb 9, 2026
f3f45d5
Hopefully correct directory
itsafuu Feb 9, 2026
aa80705
Don't fully delete main directory
itsafuu Feb 9, 2026
9296c66
Merge pull request #195 from GeniusVentures/dev_signingfix
itsafuu Feb 9, 2026
c1e5f04
Switch to GH runner to not corrupt keychain on gv osx large until we …
itsafuu Feb 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
275 changes: 192 additions & 83 deletions .github/workflows/build.yml

Large diffs are not rendered by default.

6 changes: 6 additions & 0 deletions cmake/CommonBuildParameters.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,11 @@ if(NOT CMAKE_SKIP_THIRD_PARTY)
set(nlohmann_json_DIR "${THIRDPARTY_BUILD_DIR}/json/share/cmake/nlohmann_json")
find_package(nlohmann_json CONFIG REQUIRED)

if(LINUX)
find_package(PkgConfig)
pkg_check_modules(LIBSECRET REQUIRED IMPORTED_TARGET libsecret-1>=0.18.4)
endif()

# --------------------------------------------------------
# Set config of crypto3
add_library(crypto3::algebra INTERFACE IMPORTED)
Expand Down Expand Up @@ -403,6 +408,7 @@ if(NOT CMAKE_SKIP_THIRD_PARTY)
)
# zkLLVM
set(zkLLVM_INCLUDE_DIR "${ZKLLVM_BUILD_DIR}/zkLLVM/include")
include_directories(${zkLLVM_INCLUDE_DIR})

# Set config of llvm
set(LLVM_DIR "${ZKLLVM_BUILD_DIR}/zkLLVM/lib/cmake/llvm")
Expand Down
32 changes: 22 additions & 10 deletions cmake/DownloadDependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -154,16 +154,6 @@ function(download_dependency DEP_NAME)

# Get platform name
get_platform_dir_name(PLATFORM_NAME)

# Determine the release tag format
if(DEFINED BRANCH_IS_TAG AND BRANCH_IS_TAG)
# For tags, use the tag name directly
set(RELEASE_TAG "${ARG_BRANCH}")
message(STATUS "Using Git tag format: ${ARG_BRANCH}")
else()
# For branches, use the platform-branch-buildtype format
set(RELEASE_TAG "${PLATFORM_NAME}-${ARG_BRANCH}-${ARG_BUILD_TYPE}")
endif()

# GitHub repository information
set(GITHUB_REPO "GeniusVentures/${DEP_NAME}")
Expand Down Expand Up @@ -194,6 +184,15 @@ function(download_dependency DEP_NAME)
continue()
endif()

# Determine the release tag format for this ABI
if(DEFINED BRANCH_IS_TAG AND BRANCH_IS_TAG)
# For tags, use the tag name directly
set(RELEASE_TAG "${ARG_BRANCH}")
else()
# For branches, use the platform-ABI-branch-buildtype format
set(RELEASE_TAG "${PLATFORM_NAME}-${ABI}-${ARG_BRANCH}-${ARG_BUILD_TYPE}")
endif()

set(ARCHIVE_NAME "${PLATFORM_NAME}-${ABI}-${ARG_BUILD_TYPE}.tar.gz")
set(RELEASE_URL "https://github.com/${GITHUB_REPO}/releases/download/${RELEASE_TAG}/${ARCHIVE_NAME}")
set(ARCHIVE_PATH "${CMAKE_BINARY_DIR}/${DEP_NAME}-${ARCHIVE_NAME}")
Expand Down Expand Up @@ -241,6 +240,19 @@ function(download_dependency DEP_NAME)
endforeach()
else()
# Non-Android download logic

# Determine the release tag format
if(DEFINED BRANCH_IS_TAG AND BRANCH_IS_TAG)
# For tags, use the tag name directly
set(RELEASE_TAG "${ARG_BRANCH}")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND ARCH)
# For Linux with ARCH, include ARCH in the release tag
set(RELEASE_TAG "${PLATFORM_NAME}-${ARCH}-${ARG_BRANCH}-${ARG_BUILD_TYPE}")
else()
# For other platforms, use the platform-branch-buildtype format
set(RELEASE_TAG "${PLATFORM_NAME}-${ARG_BRANCH}-${ARG_BUILD_TYPE}")
endif()

if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND ARCH)
set(ARCHIVE_NAME "${PLATFORM_NAME}-${ARCH}-${ARG_BUILD_TYPE}.tar.gz")
else()
Expand Down
4 changes: 1 addition & 3 deletions lib/banxa/banaxa_api_services.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ class BanxaApiService {
static const String _partnerCode = 'gnus';
static const String _apiKey = 'b8282030faffa2dc15fbf428142be5bdb1d4e346';
static const String _baseUrl =
'https://api.banxa.com/$_partnerCode/v2'; // Sandbox URL
'https://api.banxa.com/$_partnerCode/v2';

static const redirectUrl = 'geniuswallet://banxa/callback';
static const String banxaKycUrl = 'https://$_partnerCode.banxa-sandbox.com';
Expand Down Expand Up @@ -134,7 +134,6 @@ class BanxaApiService {
required String cryptoAmount,
String? fiatAmount,
String? externalCustomerId,
String? email,
String? metadata,
String? subPartnerId,
}) async {
Expand All @@ -158,7 +157,6 @@ class BanxaApiService {
'redirectUrl': redirectUrl,
'cryptoAmount': cryptoAmount,
if (fiatAmount != null) 'fiatAmount': fiatAmount,
if (email != null) 'email': email,
if (externalCustomerId != null) 'externalCustomerId': externalCustomerId,
'externalOrderId': extOrderId,
if (metadata != null) 'metadata': metadata,
Expand Down
1 change: 0 additions & 1 deletion lib/banxa/banxa_order/create_order_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -201,7 +201,6 @@ class MakeOrderCubit extends Cubit<MakeOrderState> {
cryptoAmount: state.quote!.cryptoAmount,
fiatAmount: state.quote!.fiatAmount,
externalCustomerId: 'my_id_${DateTime.now().millisecondsSinceEpoch}',
email: 'ammarajeeb567@gmail.com',
metadata: 'real',
subPartnerId: 'macOS-app',
);
Expand Down
23 changes: 15 additions & 8 deletions lib/bloc/app_bloc.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:async';
import 'dart:ffi';

import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:genius_api/ffi/genius_api_ffi.dart';

Expand Down Expand Up @@ -77,37 +78,43 @@ class AppBloc extends Bloc<AppEvent, AppState> {
subscribeToWalletStatus: AppStatus.loaded,
));
}

void _startProcessingPolling() {
void _startProcessingPolling() {
_processingTimer?.cancel();

_processingTimer = Timer.periodic(
const Duration(seconds: 1),
const Duration(milliseconds: 1000),
(_) {
add(ProcessingStatusTicked());
},
);
}



FutureOr<void> _onProcessingStatusTicked(
ProcessingStatusTicked event,
Emitter<AppState> emit,
) {
) async {
try {
final statusInfo = api.getProcessingStatus();

final isProcessing =
statusInfo.status == GeniusProcessingStatus.GENIUS_PR_STATUS_PROCESSING;
final isProcessing = statusInfo.status ==
GeniusProcessingStatus.GENIUS_PR_STATUS_PROCESSING.value;

if (state.isProcessing != isProcessing) {
emit(state.copyWith(isProcessing: isProcessing));
}

if (isProcessing) {
double percentage = statusInfo.percentage;
emit(state.copyWith(processingPercentage: percentage));
}
} catch (_) {
_processingTimer?.cancel();
emit(state.copyWith(isProcessing: false));
emit(state.copyWith(isProcessing: false, processingPercentage: 0.0));
}

}

Future<void> _onFetchAccount(
FetchAccount event,
Emitter<AppState> emit,
Expand Down
8 changes: 7 additions & 1 deletion lib/bloc/app_state.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ class AppState extends Equatable {

final AppStatus accountStatus;
final bool isProcessing;
final double? processingPercentage;

const AppState(
{this.wallets = const [],
Expand All @@ -29,6 +30,7 @@ class AppState extends Equatable {
this.testWallet,
this.isProcessing = false,
this.account,
this.processingPercentage,
this.accountStatus = AppStatus.initial});

AppState copyWith(
Expand All @@ -40,6 +42,7 @@ class AppState extends Equatable {
Pointer<Void>? testWallet,
bool? isProcessing,
Account? account,
double? processingPercentage,
AppStatus? accountStatus}) {
return AppState(
wallets: wallets ?? this.wallets,
Expand All @@ -50,6 +53,8 @@ class AppState extends Equatable {
ffiString: ffiString ?? this.ffiString,
testWallet: testWallet,
account: account ?? this.account,
processingPercentage:
processingPercentage ?? this.processingPercentage,
isProcessing: isProcessing ?? this.isProcessing,
accountStatus: accountStatus ?? this.accountStatus);
}
Expand All @@ -64,7 +69,8 @@ class AppState extends Equatable {
testWallet,
account,
accountStatus,
isProcessing
isProcessing,
processingPercentage
];
}

Expand Down
2 changes: 1 addition & 1 deletion lib/components/loading/loading.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class Loading extends StatelessWidget {
),
AutoSizeText(
text ?? "",
style: const TextStyle(fontSize: 24),
style: const TextStyle(fontSize: 14),
)
]);
}
Expand Down
87 changes: 28 additions & 59 deletions lib/components/overlay/responsive_overlay.dart
Original file line number Diff line number Diff line change
@@ -1,9 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:genius_wallet/bloc/app_bloc.dart';
import 'package:genius_wallet/bloc/overlay/navigation_overlay_cubit.dart';
import 'package:genius_wallet/bloc/overlay/navigation_overlay_state.dart';
import 'package:genius_wallet/components/loading/loading.dart';
import 'package:genius_wallet/squid_router/swap_screen.dart';
import 'package:genius_wallet/utils/breakpoints.dart';
import 'package:genius_wallet/components/overlay/desktop_overlay.dart';
Expand All @@ -24,64 +22,35 @@ class ResponsiveOverlay extends StatelessWidget {
context.read<NavigationOverlayCubit>().navigationTapped(selectedScreen!);
}

return BlocBuilder<AppBloc, AppState>(
builder: (context, appState) {
return BlocBuilder<NavigationOverlayCubit, NavigationOverlayState>(
builder: (context, navState) {
final platform = GeniusBreakpoints.getPlaform(context);

final screenMap = <NavigationScreen, Widget>{
NavigationScreen.dashboard: const DashboardScreen(),
NavigationScreen.transactions: const TransactionsScreen(),
NavigationScreen.swap: const SwapScreen(),
NavigationScreen.news: const CryptoNewsScreen(),
NavigationScreen.markets: const MarketsScreen(),
NavigationScreen.web:
const WebViewScreen(url: "https://app.uniswap.org"),
};

final selected = navState.selectedScreen;
final currentIndex = screenMap.keys.toList().indexOf(selected);

final content = IndexedStack(
index: currentIndex,
children: screenMap.values.toList(),
);

final overlay = (!GeniusBreakpoints.useDesktopOverlay(context) ||
platform == Platforms.mobile)
? MobileOverlay(child: content)
: DesktopOverlay(child: content);

return Stack(
children: [
overlay,
if (appState.isProcessing)
Positioned.fill(
child: AbsorbPointer(
absorbing: true,
child: Container(
color: Colors.black.withAlpha(115),
child: const Center(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Loading(),
SizedBox(height: 12),
Text(
'Genius Wallet is processing…',

),
],
),
),
),
),
),
],
);
},
return BlocBuilder<NavigationOverlayCubit, NavigationOverlayState>(
builder: (context, state) {
final platform = GeniusBreakpoints.getPlaform(context);

// Map screen enum to actual widget
final screenMap = <NavigationScreen, Widget>{
NavigationScreen.dashboard: const DashboardScreen(),
NavigationScreen.transactions: const TransactionsScreen(),
NavigationScreen.swap: const SwapScreen(),
NavigationScreen.news: const CryptoNewsScreen(),
NavigationScreen.markets: const MarketsScreen(),
NavigationScreen.web:
const WebViewScreen(url: "https://app.uniswap.org"),
};

final selected = state.selectedScreen;
final currentIndex = screenMap.keys.toList().indexOf(selected);

final child = IndexedStack(
index: currentIndex,
children: screenMap.values.toList(),
);

if (!GeniusBreakpoints.useDesktopOverlay(context) ||
platform == Platforms.mobile) {
return MobileOverlay(child: child);
} else {
return DesktopOverlay(child: child);
}
},
);
}
Expand Down
53 changes: 53 additions & 0 deletions lib/components/sgnus/sgnus_connection_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ import 'package:flutter_bloc/flutter_bloc.dart';

import 'package:genius_api/genius_api.dart';
import 'package:genius_api/models/sgnus_connection.dart';
import 'package:genius_wallet/bloc/app_bloc.dart';
import 'package:genius_wallet/components/animation/checkmark_animation.dart';
import 'package:genius_wallet/components/animation/x_animation.dart';
import 'package:genius_wallet/components/loading/loading.dart';
import 'package:go_router/go_router.dart';

class SGNUSConnectionWidget extends StatefulWidget {
Expand Down Expand Up @@ -103,3 +105,54 @@ class SGNUSConnectionMobileState extends State<SGNUSConnectionMobileWidget> {
);
}
}
class SGNUSConnectionStatusWidget extends StatelessWidget {
final bool? isSmallScreen;

const SGNUSConnectionStatusWidget({
Key? key,
this.isSmallScreen,
}) : super(key: key);

@override
Widget build(BuildContext context) {
final alignment =
isSmallScreen == true ? Alignment.center : Alignment.centerRight;

return BlocBuilder<AppBloc, AppState>(
builder: (context, appState) {
final isProcessing = appState.isProcessing;

final statusText = isProcessing
? '${appState.processingPercentage?.toStringAsFixed(2) ?? "0.00"}%'
: 'idle';

return Align(
alignment: alignment,
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
if (isProcessing) ...[
const Loading(text: "processing"),
const SizedBox(width: 8),
],
SizedBox(
width: 60,
child: AutoSizeText(
statusText,
maxLines: 1,
textAlign: TextAlign.right,
overflow: TextOverflow.ellipsis,
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.bold,
color: isProcessing ? Colors.white : Colors.white70,
),
),
),
],
),
);
},
);
}
}
Loading
Loading