@@ -69,12 +69,78 @@ jobs:
6969
7070 - name : Setup Development Config
7171 working-directory : ${{ env.COMMONS_DIR }}
72+ env :
73+ SUPABASE_URL : ${{ secrets.SUPABASE_URL }}
74+ SUPABASE_ANON_KEY : ${{ secrets.SUPABASE_ANON_KEY }}
75+ BUILD_TOKEN : ${{ secrets.BUILD_TOKEN }}
7276 run : |
73- # Create development_config.cpp from template (gitignored)
74- if [ -f src/infrastructure/network/development_config.cpp.template ]; then
75- cp src/infrastructure/network/development_config.cpp.template \
76- src/infrastructure/network/development_config.cpp
77- fi
77+ # Generate development_config.cpp with real credentials from secrets
78+ cat > src/infrastructure/network/development_config.cpp << 'DEVCONFIG_EOF'
79+ /**
80+ * @file development_config.cpp
81+ * @brief Development mode configuration with credentials from CI secrets
82+ */
83+
84+ #include <cstring>
85+
86+ #include "rac/core/rac_logger.h"
87+ #include "rac/infrastructure/network/rac_dev_config.h"
88+
89+ namespace {
90+
91+ DEVCONFIG_EOF
92+
93+ # Inject secrets (avoiding heredoc variable expansion issues)
94+ echo "constexpr const char* SUPABASE_URL = \"${SUPABASE_URL}\";" >> src/infrastructure/network/development_config.cpp
95+ echo "constexpr const char* SUPABASE_ANON_KEY = \"${SUPABASE_ANON_KEY}\";" >> src/infrastructure/network/development_config.cpp
96+ echo "constexpr const char* BUILD_TOKEN = \"${BUILD_TOKEN:-bt_release_build}\";" >> src/infrastructure/network/development_config.cpp
97+ echo "constexpr const char* SENTRY_DSN = nullptr;" >> src/infrastructure/network/development_config.cpp
98+
99+ cat >> src/infrastructure/network/development_config.cpp << 'DEVCONFIG_EOF'
100+
101+ } // anonymous namespace
102+
103+ extern "C" {
104+
105+ bool rac_dev_config_is_available(void) {
106+ if (SUPABASE_URL == nullptr || SUPABASE_ANON_KEY == nullptr) return false;
107+ if (std::strlen(SUPABASE_URL) == 0 || std::strlen(SUPABASE_ANON_KEY) == 0) return false;
108+ if (std::strstr(SUPABASE_URL, "YOUR_") != nullptr) return false;
109+ if (std::strstr(SUPABASE_ANON_KEY, "YOUR_") != nullptr) return false;
110+ return true;
111+ }
112+
113+ const char* rac_dev_config_get_supabase_url(void) {
114+ return SUPABASE_URL;
115+ }
116+
117+ const char* rac_dev_config_get_supabase_key(void) {
118+ return SUPABASE_ANON_KEY;
119+ }
120+
121+ const char* rac_dev_config_get_build_token(void) {
122+ return BUILD_TOKEN;
123+ }
124+
125+ const char* rac_dev_config_get_sentry_dsn(void) {
126+ return SENTRY_DSN;
127+ }
128+
129+ bool rac_dev_config_has_supabase(void) {
130+ return rac_dev_config_is_available();
131+ }
132+
133+ bool rac_dev_config_has_build_token(void) {
134+ return BUILD_TOKEN != nullptr && std::strlen(BUILD_TOKEN) > 0;
135+ }
136+
137+ } // extern "C"
138+ DEVCONFIG_EOF
139+
140+ echo "=== Generated development_config.cpp ==="
141+ head -30 src/infrastructure/network/development_config.cpp
142+ echo "..."
143+ echo "(credentials redacted)"
78144
79145 - name : Build RACommons XCFramework
80146 working-directory : ${{ env.COMMONS_DIR }}
@@ -145,6 +211,78 @@ jobs:
145211 echo "y" | sdkmanager --install "ndk;${NDK_VERSION}" --sdk_root=${ANDROID_SDK_ROOT}
146212 echo "ANDROID_NDK_HOME=${ANDROID_SDK_ROOT}/ndk/${NDK_VERSION}" >> $GITHUB_ENV
147213
214+ - name : Setup Development Config
215+ working-directory : ${{ env.COMMONS_DIR }}
216+ env :
217+ SUPABASE_URL : ${{ secrets.SUPABASE_URL }}
218+ SUPABASE_ANON_KEY : ${{ secrets.SUPABASE_ANON_KEY }}
219+ BUILD_TOKEN : ${{ secrets.BUILD_TOKEN }}
220+ run : |
221+ # Generate development_config.cpp with real credentials from secrets
222+ cat > src/infrastructure/network/development_config.cpp << 'DEVCONFIG_EOF'
223+ /**
224+ * @file development_config.cpp
225+ * @brief Development mode configuration with credentials from CI secrets
226+ */
227+
228+ #include <cstring>
229+
230+ #include "rac/core/rac_logger.h"
231+ #include "rac/infrastructure/network/rac_dev_config.h"
232+
233+ namespace {
234+
235+ DEVCONFIG_EOF
236+
237+ # Inject secrets
238+ echo "constexpr const char* SUPABASE_URL = \"${SUPABASE_URL}\";" >> src/infrastructure/network/development_config.cpp
239+ echo "constexpr const char* SUPABASE_ANON_KEY = \"${SUPABASE_ANON_KEY}\";" >> src/infrastructure/network/development_config.cpp
240+ echo "constexpr const char* BUILD_TOKEN = \"${BUILD_TOKEN:-bt_release_build}\";" >> src/infrastructure/network/development_config.cpp
241+ echo "constexpr const char* SENTRY_DSN = nullptr;" >> src/infrastructure/network/development_config.cpp
242+
243+ cat >> src/infrastructure/network/development_config.cpp << 'DEVCONFIG_EOF'
244+
245+ } // anonymous namespace
246+
247+ extern "C" {
248+
249+ bool rac_dev_config_is_available(void) {
250+ if (SUPABASE_URL == nullptr || SUPABASE_ANON_KEY == nullptr) return false;
251+ if (std::strlen(SUPABASE_URL) == 0 || std::strlen(SUPABASE_ANON_KEY) == 0) return false;
252+ if (std::strstr(SUPABASE_URL, "YOUR_") != nullptr) return false;
253+ if (std::strstr(SUPABASE_ANON_KEY, "YOUR_") != nullptr) return false;
254+ return true;
255+ }
256+
257+ const char* rac_dev_config_get_supabase_url(void) {
258+ return SUPABASE_URL;
259+ }
260+
261+ const char* rac_dev_config_get_supabase_key(void) {
262+ return SUPABASE_ANON_KEY;
263+ }
264+
265+ const char* rac_dev_config_get_build_token(void) {
266+ return BUILD_TOKEN;
267+ }
268+
269+ const char* rac_dev_config_get_sentry_dsn(void) {
270+ return SENTRY_DSN;
271+ }
272+
273+ bool rac_dev_config_has_supabase(void) {
274+ return rac_dev_config_is_available();
275+ }
276+
277+ bool rac_dev_config_has_build_token(void) {
278+ return BUILD_TOKEN != nullptr && std::strlen(BUILD_TOKEN) > 0;
279+ }
280+
281+ } // extern "C"
282+ DEVCONFIG_EOF
283+
284+ echo "=== Generated development_config.cpp for Android ==="
285+
148286 - name : Build Android ${{ matrix.abi }}
149287 working-directory : ${{ env.COMMONS_DIR }}
150288 run : |
0 commit comments