@siranjeevan/releaseflow 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/index.js +37 -21
  2. package/package.json +2 -2
  3. package/uploader.js +6 -2
package/index.js CHANGED
@@ -269,27 +269,43 @@ async function runConfigureFlow() {
269
269
  }
270
270
 
271
271
  function runPromptFlow() {
272
- console.log('\n\x1b[36m--- NEXT STEPS FOR YOUR FLUTTER APP ---\x1b[0m');
273
- console.log('1. Manual UI: Build a Force Update screen with an "Update Now" button.');
274
- console.log('2. Integration: On your button\'s "onPressed:", add the code below.');
275
- console.log('3. Security: Allow users to READ "app_config/version" in Firebase Rules.');
276
-
277
- console.log('\n\x1b[35m--- BUTTON DART CODE (COPY THIS!) ---\x1b[0m');
278
- console.log('// Place this in your button\'s onPressed:');
279
- console.log('final url = doc["download_url"]; // Field name from the CLI');
280
- console.log('if (await canLaunchUrl(Uri.parse(url))) {');
281
- console.log(' await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication);');
282
- console.log('}');
283
-
284
- console.log('\n\x1b[33m--- VERIFICATION CHECKLIST (TEST YOUR UI) ---\x1b[0m');
285
- console.log('To confirm your navigation is working:');
286
- console.log(' a. Run "releaseflow release" and set "Force Update" to TRUE.');
287
- console.log(' b. Open your app and click your "Update Now" button.');
288
- console.log(' c. Verify: Does it open Chrome and download your new APK?');
289
-
290
- console.log('\n\x1b[32m--- READY TO RELEASE? ---\x1b[0m');
291
- console.log(' releaseflow release : Build and Upload your first APK.');
292
- console.log(' releaseflow manual : View full Flutter integration guide.\n');
272
+ console.log('\n\x1b[36m--- 🚀 THE ULTIMATE ZERO-ERROR FLUTTER RELEASE GUIDE ---\x1b[0m');
273
+
274
+ console.log('\n\x1b[35m[STEP 1] - ADD DEPENDENCIES\x1b[0m');
275
+ console.log('\x1b[33mAdd these to your pubspec.yaml and run flutter pub get:\x1b[0m');
276
+ console.log(' firebase_core: ^latest_version');
277
+ console.log(' cloud_firestore: ^latest_version');
278
+ console.log(' package_info_plus: ^latest_version');
279
+ console.log(' url_launcher: ^latest_version');
280
+
281
+ console.log('\n\x1b[35m[STEP 2] - CONFIGURE THE ENGINE (CRITICAL!)\x1b[0m');
282
+ console.log('\x1b[33m2A. In android/app/src/main/AndroidManifest.xml (Before </manifest>):\x1b[0m');
283
+ console.log(' <queries>');
284
+ console.log(' <intent><action android:name="android.intent.action.VIEW" /><data android:scheme="https" /></intent>');
285
+ console.log(' <intent><action android:name="android.intent.action.VIEW" /><data android:scheme="http" /></intent>');
286
+ console.log(' </queries>');
287
+ console.log('\x1b[33m2B. In lib/main.dart (Initialize first!):\x1b[0m');
288
+ console.log(' await Firebase.initializeApp(); // Add this line inside main()');
289
+
290
+ console.log('\n\x1b[35m[STEP 3] - THE DART LOGIC (STRICT VERSION CHECK)\x1b[0m');
291
+ console.log('\x1b[33mCreate remote_config_service.dart and compare versions:\x1b[0m');
292
+ console.log(' final doc = await FirebaseFirestore.instance.collection("app_config").doc("version").get();');
293
+ console.log(' final String latest = doc["latest_version"];');
294
+ console.log(' final bool force = doc["force_update"];');
295
+ console.log(' return (latest != currentVersion) && force;');
296
+
297
+ console.log('\n\x1b[35m[STEP 4] - THE FORCE UPDATE SCREEN\x1b[0m');
298
+ console.log('\x1b[33mCreate force_update_screen.dart with an "UPDATE NOW" button:\x1b[0m');
299
+ console.log(' final url = doc["download_url"];');
300
+ console.log(' if (await canLaunchUrl(Uri.parse(url))) {');
301
+ console.log(' await launchUrl(Uri.parse(url), mode: LaunchMode.externalApplication);');
302
+ console.log(' }');
303
+
304
+ console.log('\n\x1b[35m[STEP 5] - INTEGRATION IN SPLASH SCREEN\x1b[0m');
305
+ console.log('\x1b[33mIn splash_screen.dart, check the logic then navigate:\x1b[0m');
306
+ console.log(' if (required) { Navigator.push(context, MaterialPageRoute(builder: (_) => ForceUpdateScreen())); }');
307
+
308
+ console.log('\n\x1b[32m--- 🏁 READY? RUN: releaseflow release ---\x1b[0m\n');
293
309
  }
294
310
 
295
311
  async function runRemoveConfig() {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siranjeevan/releaseflow",
3
- "version": "1.1.1",
3
+ "version": "1.1.3",
4
4
  "description": "Automated Flutter Release Manager",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -15,7 +15,7 @@
15
15
  "firebase",
16
16
  "automation"
17
17
  ],
18
- "author": "Jeevith",
18
+ "author": "Siranjeevan",
19
19
  "license": "ISC",
20
20
  "dependencies": {
21
21
  "axios": "^1.7.9",
package/uploader.js CHANGED
@@ -59,6 +59,8 @@ async function uploadApk(apkPath, version) {
59
59
  const [url] = await file.getSignedUrl({
60
60
  action: 'read',
61
61
  expires: '03-01-2099',
62
+ promptSaveAs: true,
63
+ responseDisposition: 'attachment; filename="app-update.apk"'
62
64
  });
63
65
 
64
66
  return url;
@@ -72,7 +74,7 @@ async function updateFirestore(version, url, forceUpdate) {
72
74
 
73
75
  await configRef.set({
74
76
  latest_version: version,
75
- apk_url: url,
77
+ download_url: url,
76
78
  force_update: forceUpdate,
77
79
  updated_at: new Date().toISOString()
78
80
  });
@@ -110,12 +112,14 @@ async function rollbackToVersion(version, forceUpdate) {
110
112
  const [url] = await file.getSignedUrl({
111
113
  action: 'read',
112
114
  expires: '03-01-2099',
115
+ promptSaveAs: true,
116
+ responseDisposition: 'attachment; filename="app-update.apk"'
113
117
  });
114
118
 
115
119
  const configRef = db.collection('app_config').doc('version');
116
120
  await configRef.set({
117
121
  latest_version: version,
118
- apk_url: url,
122
+ download_url: url,
119
123
  force_update: forceUpdate,
120
124
  updated_at: new Date().toISOString()
121
125
  });