Signing, Installer, New Workflows
Some checks failed
Flutter Release / get-version (push) Successful in 7s
Flutter Release / build-windows (push) Failing after 9s
Flutter Release / create-release (push) Has been cancelled
Flutter Release / build-android (push) Has been cancelled

This commit is contained in:
2025-12-15 00:05:29 -05:00
parent 9ff0d62651
commit 110c5d99a1
25 changed files with 2647 additions and 268 deletions

View File

@@ -143,33 +143,31 @@ class UpdateService {
final baseUrl = 'https://git.hudsonriggs.systems/LambdaBankingConglomerate/rmtPocketWatcher/releases/download/v$version';
return [
// Windows Full Package
ReleaseAsset(
name: 'rmtPocketWatcher-windows-x64.exe',
downloadUrl: '$baseUrl/rmtPocketWatcher-windows-x64.exe',
name: 'rmtPocketWatcher-Windows-v$version.zip',
downloadUrl: '$baseUrl/rmtPocketWatcher-Windows-v$version.zip',
size: 0, // Unknown size from RSS
contentType: 'application/octet-stream',
contentType: 'application/zip',
),
// Windows Portable (single exe)
ReleaseAsset(
name: 'rmtPocketWatcher-windows-x64.msi',
downloadUrl: '$baseUrl/rmtPocketWatcher-windows-x64.msi',
name: 'rmtPocketWatcher-Windows-Portable-v$version.zip',
downloadUrl: '$baseUrl/rmtPocketWatcher-Windows-Portable-v$version.zip',
size: 0,
contentType: 'application/octet-stream',
contentType: 'application/zip',
),
// Windows MSIX Installer
ReleaseAsset(
name: 'rmtPocketWatcher-macos.dmg',
downloadUrl: '$baseUrl/rmtPocketWatcher-macos.dmg',
name: 'rmtPocketWatcher-v$version.msix',
downloadUrl: '$baseUrl/rmtPocketWatcher-v$version.msix',
size: 0,
contentType: 'application/octet-stream',
contentType: 'application/msix',
),
// Android APK
ReleaseAsset(
name: 'rmtPocketWatcher-linux.appimage',
downloadUrl: '$baseUrl/rmtPocketWatcher-linux.appimage',
size: 0,
contentType: 'application/octet-stream',
),
ReleaseAsset(
name: 'rmtPocketWatcher-android.apk',
downloadUrl: '$baseUrl/rmtPocketWatcher-android.apk',
name: 'rmtPocketWatcher-Android-v$version.apk',
downloadUrl: '$baseUrl/rmtPocketWatcher-Android-v$version.apk',
size: 0,
contentType: 'application/vnd.android.package-archive',
),
@@ -200,36 +198,38 @@ class UpdateInfo {
ReleaseAsset? getAssetForCurrentPlatform() {
if (kIsWeb) return null;
String platformPattern;
switch (defaultTargetPlatform) {
case TargetPlatform.windows:
platformPattern = r'windows|win|\.exe$|\.msi$';
break;
// Prefer portable version for Windows
var portable = assets.where((asset) => asset.name.contains('Portable')).firstOrNull;
if (portable != null) return portable;
// Fall back to full Windows package
var windows = assets.where((asset) => asset.name.contains('Windows') && asset.name.endsWith('.zip')).firstOrNull;
if (windows != null) return windows;
// Last resort: MSIX installer
return assets.where((asset) => asset.name.endsWith('.msix')).firstOrNull;
case TargetPlatform.macOS:
platformPattern = r'macos|mac|darwin|\.dmg$|\.pkg$';
break;
return assets.where((asset) =>
RegExp(r'macOS|macos|mac|darwin|\.dmg$|\.pkg$', caseSensitive: false).hasMatch(asset.name)
).firstOrNull;
case TargetPlatform.linux:
platformPattern = r'linux|\.deb$|\.rpm$|\.appimage$';
break;
return assets.where((asset) =>
RegExp(r'Linux|linux|\.deb$|\.rpm$|\.appimage$', caseSensitive: false).hasMatch(asset.name)
).firstOrNull;
case TargetPlatform.android:
platformPattern = r'android|\.apk$';
break;
return assets.where((asset) => asset.name.endsWith('.apk')).firstOrNull;
case TargetPlatform.iOS:
platformPattern = r'ios|\.ipa$';
break;
return assets.where((asset) => asset.name.endsWith('.ipa')).firstOrNull;
default:
return null;
}
final regex = RegExp(platformPattern, caseSensitive: false);
for (final asset in assets) {
if (regex.hasMatch(asset.name)) {
return asset;
}
}
return null;
}
}