Skip to content

Commit e229453

Browse files
authored
chore: remove repo config encoding (#426)
1 parent 05fcbff commit e229453

File tree

8 files changed

+64
-124
lines changed

8 files changed

+64
-124
lines changed

src/codegen/git/repo_operator/local_git_repo.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,14 @@ def user_email(self) -> str | None:
6060

6161
def get_language(self, access_token: str | None = None) -> str:
6262
"""Returns the majority language of the repository"""
63-
if access_token is None:
64-
return str(determine_project_language(self.repo_path))
65-
66-
repo_config = RepoConfig.from_repo_path(repo_path=self.repo_path)
67-
repo_config.full_name = self.full_name
68-
remote_git = GitRepoClient(repo_config=repo_config, access_token=access_token)
69-
return remote_git.repo.language.upper()
63+
if access_token is not None:
64+
repo_config = RepoConfig.from_repo_path(repo_path=self.repo_path)
65+
repo_config.full_name = self.full_name
66+
remote_git = GitRepoClient(repo_config=repo_config, access_token=access_token)
67+
if (language := remote_git.repo.language) is not None:
68+
return language.upper()
69+
70+
return str(determine_project_language(self.repo_path))
7071

7172
def has_remote(self) -> bool:
7273
return bool(self.git_cli.remotes)
Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import base64
21
import logging
32
import os.path
43

@@ -15,32 +14,27 @@ class RepoConfig(BaseModel):
1514

1615
name: str
1716
full_name: str | None = None
18-
organization_name: str | None = None
1917
visibility: RepoVisibility | None = None
2018

2119
# Codebase fields
2220
base_dir: str = "/tmp" # parent directory of the git repo
21+
language: ProgrammingLanguage = ProgrammingLanguage.PYTHON
22+
respect_gitignore: bool = True
2323
base_path: str | None = None # root directory of the codebase within the repo
24-
language: ProgrammingLanguage | None = ProgrammingLanguage.PYTHON
2524
subdirectories: list[str] | None = None
26-
respect_gitignore: bool = True
27-
28-
@property
29-
def repo_path(self) -> str:
30-
return f"{self.base_dir}/{self.name}"
3125

3226
@classmethod
3327
def from_repo_path(cls, repo_path: str) -> "RepoConfig":
3428
name = os.path.basename(repo_path)
3529
base_dir = os.path.dirname(repo_path)
3630
return cls(name=name, base_dir=base_dir)
3731

38-
# TODO: remove
39-
def encoded_json(self):
40-
return base64.b64encode(self.model_dump_json().encode("utf-8")).decode("utf-8")
32+
@property
33+
def repo_path(self) -> str:
34+
return f"{self.base_dir}/{self.name}"
4135

42-
# TODO: remove, read from shared config instead
43-
@staticmethod
44-
def from_encoded_json(encoded_json: str) -> "RepoConfig":
45-
decoded = base64.b64decode(encoded_json).decode("utf-8")
46-
return RepoConfig.model_validate_json(decoded)
36+
@property
37+
def organization_name(self) -> str | None:
38+
if self.full_name is not None:
39+
return self.full_name.split("/")[0]
40+
return None

src/codegen/runner/clients/sandbox_client.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99
from fastapi import params
1010

1111
from codegen.git.schemas.repo_config import RepoConfig
12-
from codegen.runner.constants.envvars import FEATURE_FLAGS_BASE64, GITHUB_TOKEN, REPO_CONFIG_BASE64
1312
from codegen.runner.models.apis import SANDBOX_SERVER_PORT
14-
from codegen.runner.models.configs import RunnerFeatureFlags
1513

1614
logger = logging.getLogger(__name__)
1715

@@ -33,15 +31,14 @@ def __init__(self, repo_config: RepoConfig, git_access_token: str | None, host:
3331

3432
def _start_server(self, repo_config: RepoConfig, git_access_token: str | None) -> None:
3533
"""Start the FastAPI server in a subprocess"""
36-
# encoded_flags = runner_flags_from_posthog(repo_config.name).encoded_json() # TODO: once migrated to dockerized image, uncomment this line
37-
encoded_flags = RunnerFeatureFlags().encoded_json()
3834
env = os.environ.copy()
3935
env.update(
4036
{
41-
REPO_CONFIG_BASE64: repo_config.encoded_json(),
42-
FEATURE_FLAGS_BASE64: encoded_flags,
43-
"OPENAI_PASS": "open-ai-password",
44-
GITHUB_TOKEN: git_access_token,
37+
"CODEGEN_REPOSITORY__REPO_PATH": repo_config.repo_path,
38+
"CODEGEN_REPOSITORY__REPO_NAME": repo_config.name,
39+
"CODEGEN_REPOSITORY__FULL_NAME": repo_config.full_name,
40+
"CODEGEN_REPOSITORY__LANGUAGE": repo_config.language.value,
41+
"CODEGEN_SECRETS__GITHUB_TOKEN": git_access_token,
4542
}
4643
)
4744

src/codegen/runner/models/configs.py

Lines changed: 0 additions & 56 deletions
This file was deleted.

src/codegen/runner/sandbox/runner.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
from codegen.git.repo_operator.remote_repo_operator import RemoteRepoOperator
77
from codegen.git.schemas.repo_config import RepoConfig
88
from codegen.runner.models.apis import CreateBranchRequest, CreateBranchResponse, GetDiffRequest, GetDiffResponse
9-
from codegen.runner.models.configs import get_codebase_config
109
from codegen.runner.sandbox.executor import SandboxExecutor
11-
from codegen.sdk.codebase.config import ProjectConfig, SessionOptions
10+
from codegen.sdk.codebase.config import CodebaseConfig, GSFeatureFlags, ProjectConfig, SessionOptions
1211
from codegen.sdk.codebase.factory.codebase_factory import CodebaseType
1312
from codegen.sdk.core.codebase import Codebase
13+
from codegen.sdk.secrets import Secrets
1414
from codegen.shared.compilation.string_to_code import create_execute_function_from_codeblock
1515
from codegen.shared.configs.config import config
1616
from codegen.shared.performance.stopwatch_utils import stopwatch
@@ -30,12 +30,9 @@ class SandboxRunner:
3030
codebase: CodebaseType
3131
executor: SandboxExecutor
3232

33-
def __init__(
34-
self,
35-
repo_config: RepoConfig,
36-
) -> None:
33+
def __init__(self, repo_config: RepoConfig, access_token: str) -> None:
3734
self.repo = repo_config
38-
self.op = RemoteRepoOperator(repo_config=repo_config, access_token=config.secrets.github_token)
35+
self.op = RemoteRepoOperator(repo_config=self.repo, access_token=access_token)
3936
self.commit = self.op.git_cli.head.commit
4037

4138
async def warmup(self) -> None:
@@ -48,9 +45,11 @@ async def warmup(self) -> None:
4845

4946
async def _build_graph(self) -> Codebase:
5047
logger.info("> Building graph...")
51-
programming_language = self.op.repo_config.language
52-
projects = [ProjectConfig(programming_language=programming_language, repo_operator=self.op, base_path=self.op.repo_config.base_path, subdirectories=self.op.repo_config.subdirectories)]
53-
return Codebase(projects=projects, config=get_codebase_config())
48+
projects = [ProjectConfig(programming_language=self.repo.language, repo_operator=self.op, base_path=self.repo.base_path, subdirectories=self.repo.subdirectories)]
49+
gs_ffs = GSFeatureFlags(**config.feature_flags.model_dump())
50+
secrets = Secrets(openai_key=config.secrets.openai_api_key)
51+
codebase_config = CodebaseConfig(secrets=secrets, feature_flags=gs_ffs)
52+
return Codebase(projects=projects, config=codebase_config)
5453

5554
@stopwatch
5655
def reset_runner(self) -> None:

src/codegen/runner/sandbox/server.py

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import psutil
88
from fastapi import FastAPI
99

10+
from codegen.git.schemas.repo_config import RepoConfig
1011
from codegen.runner.enums.warmup_state import WarmupState
1112
from codegen.runner.models.apis import (
1213
BRANCH_ENDPOINT,
@@ -20,9 +21,10 @@
2021
SignalShutdownResponse,
2122
UtilizationMetrics,
2223
)
23-
from codegen.runner.models.configs import get_repo_config
2424
from codegen.runner.sandbox.middlewares import CodemodRunMiddleware
2525
from codegen.runner.sandbox.runner import SandboxRunner
26+
from codegen.shared.configs.config import config
27+
from codegen.shared.enums.programming_language import ProgrammingLanguage
2628
from codegen.shared.performance.memory_utils import get_memory_stats
2729

2830
logger = logging.getLogger(__name__)
@@ -37,11 +39,15 @@ async def lifespan(server: FastAPI):
3739
global runner
3840

3941
try:
40-
repo_config = get_repo_config()
41-
server_info = ServerInfo(repo_name=repo_config.full_name)
42+
server_info = ServerInfo(repo_name=config.repository.full_name)
4243
logger.info(f"Starting up sandbox fastapi server for repo_name={server_info.repo_name}")
43-
44-
runner = SandboxRunner(repo_config=repo_config)
44+
repo_config = RepoConfig(
45+
name=config.repository.repo_name,
46+
full_name=config.repository.full_name,
47+
base_dir=os.path.dirname(config.repository.repo_path),
48+
language=ProgrammingLanguage(config.repository.language.upper()),
49+
)
50+
runner = SandboxRunner(repo_config=repo_config, access_token=config.secrets.github_token)
4551
server_info.warmup_state = WarmupState.PENDING
4652
await runner.warmup()
4753
server_info.warmup_state = WarmupState.COMPLETED

src/codegen/shared/configs/models.py

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,25 @@
88
from codegen.shared.configs.constants import CONFIG_PATH, ENV_PATH
99

1010

11-
class TypescriptConfig(BaseModel):
11+
def _get_setting_config(group_name: str) -> SettingsConfigDict:
12+
return SettingsConfigDict(
13+
env_prefix=f"CODEGEN_{group_name}__",
14+
env_file=ENV_PATH,
15+
case_sensitive=False,
16+
extra="ignore",
17+
exclude_defaults=False,
18+
)
19+
20+
21+
class TypescriptConfig(BaseSettings):
22+
model_config = _get_setting_config("FEATURE_FLAGS_TYPESCRIPT")
1223
ts_dependency_manager: bool | None = None
1324
ts_language_engine: bool | None = None
1425
v8_ts_engine: bool | None = None
1526

1627

17-
class CodebaseFeatureFlags(BaseModel):
28+
class CodebaseFeatureFlags(BaseSettings):
29+
model_config = _get_setting_config("FEATURE_FLAGS")
1830
debug: bool | None = None
1931
verify_graph: bool | None = None
2032
track_graph: bool | None = None
@@ -28,25 +40,23 @@ class CodebaseFeatureFlags(BaseModel):
2840
typescript: TypescriptConfig = Field(default_factory=TypescriptConfig)
2941

3042

31-
class RepositoryConfig(BaseModel):
43+
class RepositoryConfig(BaseSettings):
3244
"""Configuration for the repository context to run codegen.
3345
To populate this config, call `codegen init` from within a git repository.
3446
"""
3547

48+
model_config = _get_setting_config("REPOSITORY")
49+
3650
repo_path: str | None = None
3751
repo_name: str | None = None
3852
full_name: str | None = None
53+
language: str | None = None
3954
user_name: str | None = None
4055
user_email: str | None = None
41-
language: str | None = None
4256

4357

4458
class SecretsConfig(BaseSettings):
45-
model_config = SettingsConfigDict(
46-
env_prefix="CODEGEN_SECRETS__",
47-
env_file=ENV_PATH,
48-
case_sensitive=False,
49-
)
59+
model_config = _get_setting_config("SECRETS")
5060
github_token: str | None = None
5161
openai_api_key: str | None = None
5262

tests/unit/codegen/runner/sandbox/conftest.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44
import pytest
55

66
from codegen.git.repo_operator.local_repo_operator import LocalRepoOperator
7-
from codegen.runner.models.configs import RunnerFeatureFlags
87
from codegen.runner.sandbox.executor import SandboxExecutor
98
from codegen.runner.sandbox.runner import SandboxRunner
10-
from codegen.sdk.codebase.config import CodebaseConfig, GSFeatureFlags, ProjectConfig
9+
from codegen.sdk.codebase.config import ProjectConfig
1110
from codegen.sdk.core.codebase import Codebase
12-
from codegen.sdk.secrets import Secrets
1311
from codegen.shared.enums.programming_language import ProgrammingLanguage
1412

1513

@@ -33,13 +31,4 @@ def runner(codebase: Codebase, tmpdir):
3331
mock_init_codebase.return_value = codebase
3432
mock_op.return_value = codebase.op
3533

36-
yield SandboxRunner(repo_config=codebase.op.repo_config)
37-
38-
39-
@pytest.fixture(autouse=True)
40-
def mock_codebase_config():
41-
with patch("codegen.runner.sandbox.runner.get_codebase_config") as mock_config:
42-
gs_ffs = GSFeatureFlags(**RunnerFeatureFlags().model_dump())
43-
secrets = Secrets(openai_key="test-key")
44-
mock_config.return_value = CodebaseConfig(secrets=secrets, feature_flags=gs_ffs)
45-
yield mock_config
34+
yield SandboxRunner(repo_config=codebase.op.repo_config, access_token="test-token")

0 commit comments

Comments
 (0)