RyZ commited on
Commit ·
3bb4e96
1
Parent(s): 083898e
feat: git clone private repository inside Kaggle notebook with GH_TOKEN secret support
Browse files
scripts/build_kaggle_deploy.py
CHANGED
|
@@ -27,10 +27,12 @@ def build_deploy_dir():
|
|
| 27 |
"metadata": {},
|
| 28 |
"outputs": [],
|
| 29 |
"source": [
|
| 30 |
-
"# 1.
|
| 31 |
"import torch\n",
|
| 32 |
"import sys\n",
|
| 33 |
"import os\n",
|
|
|
|
|
|
|
| 34 |
"\n",
|
| 35 |
"print(\"=== Kaggle GPU & System Check ===\")\n",
|
| 36 |
"print(f\"Python Version: {sys.version}\")\n",
|
|
@@ -41,30 +43,55 @@ def build_deploy_dir():
|
|
| 41 |
"else:\n",
|
| 42 |
" print(\"WARNING: GPU is not active. Please enable GPU in the Kaggle settings for optimal performance.\")\n",
|
| 43 |
"\n",
|
| 44 |
-
"# 2.
|
| 45 |
"print(\"\\n=== Kaggle Secrets Validation ===\")\n",
|
|
|
|
| 46 |
"try:\n",
|
| 47 |
" from kaggle_secrets import UserSecretsClient\n",
|
| 48 |
" user_secrets = UserSecretsClient()\n",
|
| 49 |
" db_url = user_secrets.get_secret(\"DATABASE_URL\")\n",
|
| 50 |
" rabbitmq_url = user_secrets.get_secret(\"RABBITMQ_URL\")\n",
|
|
|
|
| 51 |
" print(f\"DATABASE_URL secret: {'FOUND' if db_url else 'MISSING'}\")\n",
|
| 52 |
" print(f\"RABBITMQ_URL secret: {'FOUND' if rabbitmq_url else 'MISSING'}\")\n",
|
|
|
|
| 53 |
"except Exception as e:\n",
|
| 54 |
" print(f\"Warning: Could not check secrets: {e}\")\n",
|
| 55 |
"\n",
|
| 56 |
-
"# 3.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 57 |
"print(\"\\n=== Installing Clean Architecture Package ===\")\n",
|
| 58 |
-
"import subprocess\n",
|
| 59 |
"try:\n",
|
| 60 |
-
" # Installs the local code in editable mode with all optional dependencies\n",
|
| 61 |
" subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-e\", \".[all]\"])\n",
|
| 62 |
" print(\"Package & dependencies installed successfully.\")\n",
|
| 63 |
"except Exception as e:\n",
|
| 64 |
" print(f\"Error installing package dependencies: {e}\")\n",
|
| 65 |
" sys.exit(1)\n",
|
| 66 |
"\n",
|
| 67 |
-
"#
|
| 68 |
"print(\"\\n=== Launching Consumer Daemon ===\")\n",
|
| 69 |
"try:\n",
|
| 70 |
" subprocess.check_call([sys.executable, \"-m\", \"src.interface.consumer.run_consumer\"])\n",
|
|
|
|
| 27 |
"metadata": {},
|
| 28 |
"outputs": [],
|
| 29 |
"source": [
|
| 30 |
+
"# 1. GPU & CUDA Check\n",
|
| 31 |
"import torch\n",
|
| 32 |
"import sys\n",
|
| 33 |
"import os\n",
|
| 34 |
+
"import subprocess\n",
|
| 35 |
+
"import shutil\n",
|
| 36 |
"\n",
|
| 37 |
"print(\"=== Kaggle GPU & System Check ===\")\n",
|
| 38 |
"print(f\"Python Version: {sys.version}\")\n",
|
|
|
|
| 43 |
"else:\n",
|
| 44 |
" print(\"WARNING: GPU is not active. Please enable GPU in the Kaggle settings for optimal performance.\")\n",
|
| 45 |
"\n",
|
| 46 |
+
"# 2. Load Kaggle User Secrets\n",
|
| 47 |
"print(\"\\n=== Kaggle Secrets Validation ===\")\n",
|
| 48 |
+
"gh_token = None\n",
|
| 49 |
"try:\n",
|
| 50 |
" from kaggle_secrets import UserSecretsClient\n",
|
| 51 |
" user_secrets = UserSecretsClient()\n",
|
| 52 |
" db_url = user_secrets.get_secret(\"DATABASE_URL\")\n",
|
| 53 |
" rabbitmq_url = user_secrets.get_secret(\"RABBITMQ_URL\")\n",
|
| 54 |
+
" gh_token = user_secrets.get_secret(\"GH_TOKEN\")\n",
|
| 55 |
" print(f\"DATABASE_URL secret: {'FOUND' if db_url else 'MISSING'}\")\n",
|
| 56 |
" print(f\"RABBITMQ_URL secret: {'FOUND' if rabbitmq_url else 'MISSING'}\")\n",
|
| 57 |
+
" print(f\"GH_TOKEN secret: {'FOUND' if gh_token else 'MISSING'}\")\n",
|
| 58 |
"except Exception as e:\n",
|
| 59 |
" print(f\"Warning: Could not check secrets: {e}\")\n",
|
| 60 |
"\n",
|
| 61 |
+
"# 3. Clone Repository (Since Kaggle CLI only uploads the notebook itself)\n",
|
| 62 |
+
"print(\"\\n=== Cloning Repository ===\")\n",
|
| 63 |
+
"repo_dir = \"/kaggle/working/ETL-Ingestion\"\n",
|
| 64 |
+
"if os.path.exists(repo_dir):\n",
|
| 65 |
+
" print(f\"Removing existing repository directory at {repo_dir}...\")\n",
|
| 66 |
+
" shutil.rmtree(repo_dir)\n",
|
| 67 |
+
"\n",
|
| 68 |
+
"if gh_token:\n",
|
| 69 |
+
" print(\"Cloning private repository using GH_TOKEN...\")\n",
|
| 70 |
+
" clone_url = f\"https://x-access-token:{gh_token}@github.com/FP-KKA/ETL-Ingestion.git\"\n",
|
| 71 |
+
"else:\n",
|
| 72 |
+
" print(\"WARNING: GH_TOKEN secret not found. Attempting public clone...\")\n",
|
| 73 |
+
" clone_url = \"https://github.com/FP-KKA/ETL-Ingestion.git\"\n",
|
| 74 |
+
"\n",
|
| 75 |
+
"try:\n",
|
| 76 |
+
" subprocess.check_call([\"git\", \"clone\", clone_url, repo_dir])\n",
|
| 77 |
+
" print(\"Repository cloned successfully.\")\n",
|
| 78 |
+
"except Exception as e:\n",
|
| 79 |
+
" print(f\"Error cloning repository: {e}\")\n",
|
| 80 |
+
" sys.exit(1)\n",
|
| 81 |
+
"\n",
|
| 82 |
+
"# 4. Change Directory & Install Dependencies\n",
|
| 83 |
+
"os.chdir(repo_dir)\n",
|
| 84 |
+
"print(f\"Changed working directory to: {os.getcwd()}\")\n",
|
| 85 |
+
"\n",
|
| 86 |
"print(\"\\n=== Installing Clean Architecture Package ===\")\n",
|
|
|
|
| 87 |
"try:\n",
|
|
|
|
| 88 |
" subprocess.check_call([sys.executable, \"-m\", \"pip\", \"install\", \"-e\", \".[all]\"])\n",
|
| 89 |
" print(\"Package & dependencies installed successfully.\")\n",
|
| 90 |
"except Exception as e:\n",
|
| 91 |
" print(f\"Error installing package dependencies: {e}\")\n",
|
| 92 |
" sys.exit(1)\n",
|
| 93 |
"\n",
|
| 94 |
+
"# 5. Launch Consumer Daemon\n",
|
| 95 |
"print(\"\\n=== Launching Consumer Daemon ===\")\n",
|
| 96 |
"try:\n",
|
| 97 |
" subprocess.check_call([sys.executable, \"-m\", \"src.interface.consumer.run_consumer\"])\n",
|