Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions schemas/supabase/types.py
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,70 @@ class LlmRequestsInsert(TypedDict):
updated_by: NotRequired[str | None]


class MarketingCoverage(TypedDict):
id: int
owner_id: int
owner_name: str
repo_id: int
repo_name: str
source: str
line_coverage: float | None
lines: int | None
created_at: datetime.datetime
updated_at: datetime.datetime


class MarketingCoverageInsert(TypedDict):
owner_id: int
owner_name: str
repo_id: int
repo_name: str
source: str
line_coverage: NotRequired[float | None]
lines: NotRequired[int | None]


class MarketingSearchHistory(TypedDict):
id: int
owner_id: int
owner_name: str
created_at: datetime.datetime


class MarketingSearchHistoryInsert(TypedDict):
owner_id: int
owner_name: str


class MarketingUsers(TypedDict):
id: int
owner_id: int
owner_name: str
repo_id: int
repo_name: str
user_id: int
username: str
first_name: str | None
last_name: str | None
email: str
email_source: str
created_at: datetime.datetime
updated_at: datetime.datetime


class MarketingUsersInsert(TypedDict):
owner_id: int
owner_name: str
repo_id: int
repo_name: str
user_id: int
username: str
first_name: NotRequired[str | None]
last_name: NotRequired[str | None]
email: str
email_source: str


class NpmTokens(TypedDict):
id: str
owner_id: int
Expand Down Expand Up @@ -550,6 +614,8 @@ class Users(TypedDict):
user_rules: str
display_name: str
deleted_at: datetime.datetime | None
display_name_override: str | None
skip_drip_emails: bool


class UsersInsert(TypedDict):
Expand All @@ -560,6 +626,8 @@ class UsersInsert(TypedDict):
user_rules: str
display_name: str
deleted_at: NotRequired[datetime.datetime | None]
display_name_override: NotRequired[str | None]
skip_drip_emails: bool


class WebhookDeliveries(TypedDict):
Expand Down
18 changes: 2 additions & 16 deletions services/efs/clone_and_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,25 +69,11 @@ async def clone_and_install(owner: str, repo: str):
await git_clone_to_efs(efs_dir, clone_url, branch)

logger.info("Installing node packages")
node_result = await ensure_node_packages(
owner=owner,
owner_id=owner_id,
repo=repo,
branch=branch,
token=token,
efs_dir=efs_dir,
)
node_result = await ensure_node_packages(owner_id=owner_id, efs_dir=efs_dir)
logger.info("node: ready=%s", node_result)

logger.info("Installing PHP packages")
php_result = await ensure_php_packages(
owner=owner,
owner_id=owner_id,
repo=repo,
branch=branch,
token=token,
efs_dir=efs_dir,
)
php_result = await ensure_php_packages(owner_id=owner_id, efs_dir=efs_dir)
logger.info("php: ready=%s", php_result)

logger.info("Clone and install completed for %s/%s", owner, repo)
Expand Down
2 changes: 1 addition & 1 deletion services/efs/copy_repo_from_efs_to_tmp.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def copy_repo_from_efs_to_tmp(efs_dir: str, clone_dir: str):

logger.info("Copying EFS to /tmp: %s -> %s", efs_dir, clone_dir)

# dirs_exist_ok=True: if clone_dir exists (e.g., read_file_content cached package.json),
# dirs_exist_ok=True: if clone_dir already exists,
# copytree overwrites existing files with EFS versions, leaves other files untouched
# symlinks=True: copy symlinks as symlinks instead of following them.
# Repos may have dangling symlinks (e.g., web/api-doc) that cause ENOENT
Expand Down
11 changes: 2 additions & 9 deletions services/eslint/ensure_eslint_relaxed_for_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

from services.github.commits.replace_remote_file import replace_remote_file_content
from services.github.types.github_types import BaseArgs
from services.node.read_file_content import read_file_content
from utils.files.read_local_file import read_local_file
from utils.error.handle_exceptions import handle_exceptions
from utils.logging.logging_config import logger

Expand Down Expand Up @@ -82,14 +82,7 @@ def ensure_eslint_relaxed_for_tests(eslint_config: dict[str, str], base_args: Ba

# For package.json, wrap back in eslintConfig key
if is_package_json:
full_package = read_file_content(
"package.json",
local_dir=base_args["clone_dir"],
owner=base_args["owner"],
repo=base_args["repo"],
branch=base_args["base_branch"],
token=base_args["token"],
)
full_package = read_local_file("package.json", base_dir=base_args["clone_dir"])
if full_package:
try:
pkg: dict = json.loads(full_package)
Expand Down
2 changes: 1 addition & 1 deletion services/eslint/test_ensure_eslint_relaxed_for_tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ def test_appends_to_existing_overrides(mock_replace: MagicMock):
assert updated["overrides"][1]["files"] == TEST_FILE_GLOBS


@patch("services.eslint.ensure_eslint_relaxed_for_tests.read_file_content")
@patch("services.eslint.ensure_eslint_relaxed_for_tests.read_local_file")
@patch("services.eslint.ensure_eslint_relaxed_for_tests.replace_remote_file_content")
def test_wraps_in_package_json(mock_replace: MagicMock, mock_read: MagicMock):
eslint_config_content = {"rules": {"semi": "error"}}
Expand Down
24 changes: 3 additions & 21 deletions services/github/files/get_eslint_config.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json

from services.github.types.github_types import BaseArgs
from services.node.read_file_content import read_file_content
from utils.files.read_local_file import read_local_file
from utils.error.handle_exceptions import handle_exceptions

# Flat configs first (ESLint 9+ default), then legacy configs
Expand All @@ -21,32 +21,14 @@
@handle_exceptions(default_return_value=None, raise_on_error=False)
def get_eslint_config(base_args: BaseArgs):
clone_dir = base_args["clone_dir"]
owner = base_args["owner"]
repo = base_args["repo"]
token = base_args["token"]
branch = base_args["base_branch"]

for config_file in CONFIG_FILES:
content = read_file_content(
config_file,
local_dir=clone_dir,
owner=owner,
repo=repo,
branch=branch,
token=token,
)
content = read_local_file(config_file, base_dir=clone_dir)
if content:
return {"filename": config_file, "content": content}

# ESLint config can also be defined in package.json under the "eslintConfig" key
package_content = read_file_content(
"package.json",
local_dir=clone_dir,
owner=owner,
repo=repo,
branch=branch,
token=token,
)
package_content = read_local_file("package.json", base_dir=clone_dir)
if package_content:
package_json = json.loads(package_content)
if "eslintConfig" in package_json:
Expand Down
24 changes: 3 additions & 21 deletions services/github/files/get_prettier_config.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import json

from services.github.types.github_types import BaseArgs
from services.node.read_file_content import read_file_content
from utils.files.read_local_file import read_local_file
from utils.error.handle_exceptions import handle_exceptions

CONFIG_FILES = [
Expand All @@ -23,32 +23,14 @@
@handle_exceptions(default_return_value=None, raise_on_error=False)
def get_prettier_config(base_args: BaseArgs):
clone_dir = base_args["clone_dir"]
owner = base_args["owner"]
repo = base_args["repo"]
token = base_args["token"]
branch = base_args["base_branch"]

for config_file in CONFIG_FILES:
content = read_file_content(
config_file,
local_dir=clone_dir,
owner=owner,
repo=repo,
branch=branch,
token=token,
)
content = read_local_file(config_file, base_dir=clone_dir)
if content:
return {"filename": config_file, "content": content}

# Prettier config can also be defined in package.json under the "prettier" key
package_content = read_file_content(
"package.json",
local_dir=clone_dir,
owner=owner,
repo=repo,
branch=branch,
token=token,
)
package_content = read_local_file("package.json", base_dir=clone_dir)
if package_content:
package_json = json.loads(package_content)
if "prettier" in package_json:
Expand Down
Loading
Loading