From 9251e62decf3259d901288c80ce8e0b7e598b7e2 Mon Sep 17 00:00:00 2001 From: leeeeeoy Date: Sun, 22 Feb 2026 21:38:33 +0900 Subject: [PATCH 1/3] =?UTF-8?q?feat:=20dev,=20prod=20=EB=B6=84=EB=A6=AC,?= =?UTF-8?q?=20workflow=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/backend-worker-deploy.yml | 12 ++++- .github/workflows/frontend-pages-deploy.yml | 14 +++-- backend/package.json | 2 + backend/wrangler.jsonc | 57 ++++++++++----------- frontend/lib/core/config/app_config.dart | 12 +++++ frontend/lib/core/network/api_service.dart | 3 +- frontend/lib/main_dev.dart | 15 ++++++ 7 files changed, 80 insertions(+), 35 deletions(-) create mode 100644 frontend/lib/core/config/app_config.dart create mode 100644 frontend/lib/main_dev.dart diff --git a/.github/workflows/backend-worker-deploy.yml b/.github/workflows/backend-worker-deploy.yml index c2d4d9b..2d8e024 100644 --- a/.github/workflows/backend-worker-deploy.yml +++ b/.github/workflows/backend-worker-deploy.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - develop # Add develop branch paths: - 'backend/**' # Trigger only on changes in the backend directory @@ -23,8 +24,15 @@ jobs: run: npm install working-directory: ./backend - - name: Deploy Worker - run: npx wrangler deploy + - name: Determine environment and deploy + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + npm run deploy:prod + elif [[ "${{ github.ref }}" == "refs/heads/develop" ]]; then + npm run deploy:dev + else + echo "Not deploying from main or develop branch." + fi working-directory: ./backend env: CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} diff --git a/.github/workflows/frontend-pages-deploy.yml b/.github/workflows/frontend-pages-deploy.yml index 6985e1b..ec17251 100644 --- a/.github/workflows/frontend-pages-deploy.yml +++ b/.github/workflows/frontend-pages-deploy.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - develop # Add develop branch paths: - 'frontend/**' # Trigger only on changes in the frontend directory @@ -24,7 +25,14 @@ jobs: working-directory: ./frontend - name: Build Flutter web app - run: flutter build web --release + run: | + if [[ "${{ github.ref }}" == "refs/heads/main" ]]; then + flutter build web --release --target=lib/main.dart + elif [[ "${{ github.ref }}" == "refs/heads/develop" ]]; then + flutter build web --release --target=lib/main_dev.dart + else + flutter build web --release # Default for other branches, can be adjusted + fi working-directory: ./frontend - name: Deploy to Cloudflare Pages @@ -34,5 +42,5 @@ jobs: accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} projectName: 'better-way-frontend' # Replace with your Cloudflare Pages project name directory: 'frontend/build/web' # Output directory of Flutter web build - # Optional: If you have a custom build command in Cloudflare Pages, you might not need to specify this here. - # command: 'flutter build web --release' + # For preview deployments on develop branch + branch: ${{ github.ref == 'refs/heads/develop' && 'develop' || '' }} diff --git a/backend/package.json b/backend/package.json index 33ea971..a12a376 100644 --- a/backend/package.json +++ b/backend/package.json @@ -4,6 +4,8 @@ "private": true, "scripts": { "deploy": "wrangler deploy", + "deploy:prod": "wrangler deploy --env production", + "deploy:dev": "wrangler deploy --env development", "dev": "wrangler dev", "start": "wrangler dev", "test": "vitest", diff --git a/backend/wrangler.jsonc b/backend/wrangler.jsonc index 812bdca..d12ed54 100644 --- a/backend/wrangler.jsonc +++ b/backend/wrangler.jsonc @@ -18,34 +18,33 @@ "binding": "DB", "database_name": "better-way", "database_id": "6d28c3bc-8d02-4b49-ba94-bef717c79fd8" + }, + { + "binding": "DB_BETTER_WAY_DEV", + "database_name": "better-way-dev", + "database_id": "2149f868-57ae-438a-bf98-372380047600" + } + ], + "env": { + "production": { + "name": "better-way-worker-prod", + "d1_databases": [ + { + "binding": "DB", + "database_name": "better-way", + "database_id": "6d28c3bc-8d02-4b49-ba94-bef717c79fd8" + } + ] + }, + "development": { + "name": "better-way-worker-dev", + "d1_databases": [ + { + "binding": "DB", + "database_name": "better-way-dev", + "database_id": "2149f868-57ae-438a-bf98-372380047600" + } + ] } - ] - /** - * Smart Placement - * https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement - */ - // "placement": { "mode": "smart" } - /** - * Bindings - * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including - * databases, object storage, AI inference, real-time communication and more. - * https://developers.cloudflare.com/workers/runtime-apis/bindings/ - */ - /** - * Environment Variables - * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables - * Note: Use secrets to store sensitive data. - * https://developers.cloudflare.com/workers/configuration/secrets/ - */ - // "vars": { "MY_VARIABLE": "production_value" } - /** - * Static Assets - * https://developers.cloudflare.com/workers/static-assets/binding/ - */ - // "assets": { "directory": "./public/", "binding": "ASSETS" } - /** - * Service Bindings (communicate between multiple Workers) - * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings - */ - // "services": [ { "binding": "MY_SERVICE", "service": "my-service" } ] + } } \ No newline at end of file diff --git a/frontend/lib/core/config/app_config.dart b/frontend/lib/core/config/app_config.dart new file mode 100644 index 0000000..8bd0a76 --- /dev/null +++ b/frontend/lib/core/config/app_config.dart @@ -0,0 +1,12 @@ +AppConfig appConfig = AppConfig.prod(); + +enum Flavor { dev, prod } + +class AppConfig { + final String baseUrl; + final Flavor flavor; + + AppConfig.dev() : flavor = .dev, baseUrl = 'https://api-dev-betterway.leeeeeoy.xyz'; + + AppConfig.prod() : flavor = .prod, baseUrl = 'https://api-betterway.leeeeeoy.xyz'; +} diff --git a/frontend/lib/core/network/api_service.dart b/frontend/lib/core/network/api_service.dart index dfa9cd5..c241062 100644 --- a/frontend/lib/core/network/api_service.dart +++ b/frontend/lib/core/network/api_service.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'package:better_way/core/config/app_config.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:http/http.dart' as http; @@ -37,7 +38,7 @@ class ApiService { } final apiServiceProvider = Provider((ref) { - const workerBaseUrl = 'https://api-betterway.leeeeeoy.xyz'; + final workerBaseUrl = appConfig.baseUrl; return ApiService(workerBaseUrl); }); diff --git a/frontend/lib/main_dev.dart b/frontend/lib/main_dev.dart new file mode 100644 index 0000000..d5b2940 --- /dev/null +++ b/frontend/lib/main_dev.dart @@ -0,0 +1,15 @@ +import 'package:better_way/app.dart'; +import 'package:better_way/core/config/app_config.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_web_plugins/url_strategy.dart'; + +void main() { + usePathUrlStrategy(); + + WidgetsFlutterBinding.ensureInitialized(); + + appConfig = AppConfig.dev(); + + runApp(ProviderScope(child: App())); +} From 667142c74607fa133ee5c7a2ce4da5aa1cd17135 Mon Sep 17 00:00:00 2001 From: leeeeeoy Date: Sun, 22 Feb 2026 21:42:28 +0900 Subject: [PATCH 2/3] =?UTF-8?q?feat:=20Pages=20=ED=94=84=EB=A1=9C=EC=A0=9D?= =?UTF-8?q?=ED=8A=B8=20=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/frontend-pages-deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/frontend-pages-deploy.yml b/.github/workflows/frontend-pages-deploy.yml index ec17251..87185f1 100644 --- a/.github/workflows/frontend-pages-deploy.yml +++ b/.github/workflows/frontend-pages-deploy.yml @@ -40,7 +40,7 @@ jobs: with: apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - projectName: 'better-way-frontend' # Replace with your Cloudflare Pages project name + projectName: 'better-way' # Replace with your Cloudflare Pages project name directory: 'frontend/build/web' # Output directory of Flutter web build # For preview deployments on develop branch branch: ${{ github.ref == 'refs/heads/develop' && 'develop' || '' }} From 66cd11fca599f849339bd01fc134e7787d2a5ef2 Mon Sep 17 00:00:00 2001 From: leeeeeoy Date: Sun, 22 Feb 2026 21:43:42 +0900 Subject: [PATCH 3/3] =?UTF-8?q?feat:=20=EC=9B=B9=ED=8E=98=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20title=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/lib/app.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/frontend/lib/app.dart b/frontend/lib/app.dart index 1205b84..0f53719 100644 --- a/frontend/lib/app.dart +++ b/frontend/lib/app.dart @@ -1,3 +1,4 @@ +import 'package:better_way/core/config/app_config.dart'; import 'package:better_way/resources/resources.dart'; import 'package:better_way/router/app_router.dart'; import 'package:flutter/material.dart'; @@ -8,7 +9,10 @@ class App extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp.router( - title: 'Better Way', + title: switch (appConfig.flavor) { + .dev => 'Better Way Dev', + .prod => 'Better Way', + }, debugShowCheckedModeBanner: false, routerConfig: appRouter, theme: AppTheme.lightTheme,