Skip to content

Commit 0e80d68

Browse files
committed
typing lints, environ
1 parent 266a025 commit 0e80d68

3 files changed

Lines changed: 23 additions & 24 deletions

File tree

scripts/instance-runtime.py

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,8 @@
1414
import subprocess
1515
import sys
1616
from concurrent.futures import ThreadPoolExecutor, as_completed
17-
from datetime import datetime, timezone, timedelta
17+
from datetime import datetime, timezone
1818
from functools import partial
19-
from typing import Dict, List, Optional
2019

2120
from dateutil import parser as date_parser
2221

@@ -34,7 +33,7 @@
3433

3534
err = partial(print, file=sys.stderr)
3635

37-
def run_command(cmd: List[str]) -> Optional[str]:
36+
def run_command(cmd: list[str]) -> str | None:
3837
"""Run a command and return output, or None on error."""
3938
try:
4039
result = subprocess.run(cmd, capture_output=True, text=True, check=True)
@@ -49,7 +48,7 @@ def run_command(cmd: List[str]) -> Optional[str]:
4948

5049

5150

52-
def get_log_streams(instance_id: str, log_group: str = None) -> List[Dict]:
51+
def get_log_streams(instance_id: str, log_group: str = None) -> list[dict]:
5352
if log_group is None:
5453
log_group = DEFAULT_CLOUDWATCH_LOG_GROUP
5554
"""Get CloudWatch log streams for an instance."""
@@ -69,7 +68,7 @@ def get_log_streams(instance_id: str, log_group: str = None) -> List[Dict]:
6968
return []
7069

7170

72-
def get_log_events(log_group: str, log_stream: str, limit: int = 100, start_from_head: bool = False) -> List[Dict]:
71+
def get_log_events(log_group: str, log_stream: str, limit: int = 100, start_from_head: bool = False) -> list[dict]:
7372
"""Get events from a CloudWatch log stream."""
7473
cmd = [
7574
"aws", "logs", "get-log-events",
@@ -91,7 +90,7 @@ def get_log_events(log_group: str, log_stream: str, limit: int = 100, start_from
9190
return []
9291

9392

94-
def parse_timestamp(ts_str: str) -> Optional[datetime]:
93+
def parse_timestamp(ts_str: str) -> datetime | None:
9594
"""Parse various timestamp formats and ensure timezone is set."""
9695
try:
9796
dt = date_parser.parse(ts_str)
@@ -103,7 +102,7 @@ def parse_timestamp(ts_str: str) -> Optional[datetime]:
103102
return None
104103

105104

106-
def extract_timestamp_from_log(message: str) -> Optional[datetime]:
105+
def extract_timestamp_from_log(message: str) -> datetime | None:
107106
"""Extract timestamp from log message."""
108107
# Pattern: [Thu Aug 14 00:29:25 UTC 2025]
109108
match = re.search(r'\[([^]]+UTC \d{4})\]', message)
@@ -118,7 +117,7 @@ def extract_timestamp_from_log(message: str) -> Optional[datetime]:
118117
return None
119118

120119

121-
def analyze_instance(instance_id: str, log_group: str = None) -> Dict:
120+
def analyze_instance(instance_id: str, log_group: str = None) -> dict:
122121
if log_group is None:
123122
log_group = DEFAULT_CLOUDWATCH_LOG_GROUP
124123
"""Analyze runtime and job execution for an instance."""
@@ -307,7 +306,7 @@ def analyze_instance(instance_id: str, log_group: str = None) -> Dict:
307306
return result
308307

309308

310-
def get_instances_from_github_url(url: str) -> List[str]:
309+
def get_instances_from_github_url(url: str) -> list[str]:
311310
"""Extract instance IDs from a GitHub Actions URL."""
312311
# Parse the URL
313312
match = re.match(r'https://github\.com/([^/]+)/([^/]+)/actions/runs/(\d+)(?:/job/(\d+))?', url)

src/ec2_gha/__main__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@
1717

1818

1919
def main():
20-
env = dict(os.environ)
20+
env = dict(environ)
2121
required = ["GH_PAT", "AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY"]
2222
# Check that everything exists
2323
check_required(env, required)
2424
# Timeout for waiting for runner to register with GitHub
25-
timeout_str = os.environ.get("INPUT_RUNNER_REGISTRATION_TIMEOUT", "").strip()
25+
timeout_str = environ.get("INPUT_RUNNER_REGISTRATION_TIMEOUT", "").strip()
2626
timeout = int(timeout_str) if timeout_str else int(RUNNER_REGISTRATION_TIMEOUT)
2727

28-
token = os.environ["GH_PAT"]
28+
token = environ["GH_PAT"]
2929
# Make a copy of environment variables for immutability
30-
env = dict(os.environ)
30+
env = dict(environ)
3131

3232
builder = (
3333
EnvVarBuilder(env)

src/ec2_gha/start.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -135,16 +135,16 @@ def _build_aws_params(self, user_data_params: dict, idx: int = None) -> dict:
135135
template_vars = {}
136136

137137
# Get repository name (just the basename)
138-
if os.environ.get("GITHUB_REPOSITORY"):
139-
template_vars["repo"] = os.environ["GITHUB_REPOSITORY"].split("/")[-1]
138+
if environ.get("GITHUB_REPOSITORY"):
139+
template_vars["repo"] = environ["GITHUB_REPOSITORY"].split("/")[-1]
140140
else:
141141
template_vars["repo"] = "unknown"
142142

143143
# Get workflow full name (e.g., "Test pip install")
144-
template_vars["workflow"] = os.environ.get("GITHUB_WORKFLOW", "unknown")
144+
template_vars["workflow"] = environ.get("GITHUB_WORKFLOW", "unknown")
145145

146146
# Get workflow filename stem and ref from GITHUB_WORKFLOW_REF
147-
workflow_ref = os.environ.get("GITHUB_WORKFLOW_REF", "")
147+
workflow_ref = environ.get("GITHUB_WORKFLOW_REF", "")
148148
if workflow_ref:
149149
import re
150150
# Extract filename and ref from path like "owner/repo/.github/workflows/test.yml@ref"
@@ -168,7 +168,7 @@ def _build_aws_params(self, user_data_params: dict, idx: int = None) -> dict:
168168
template_vars["ref"] = "unknown"
169169

170170
# Get run number
171-
template_vars["run_number"] = os.environ.get("GITHUB_RUN_NUMBER", "unknown")
171+
template_vars["run_number"] = environ.get("GITHUB_RUN_NUMBER", "unknown")
172172

173173
# Add instance index if provided (for multi-instance launches)
174174
if idx is not None:
@@ -182,16 +182,16 @@ def _build_aws_params(self, user_data_params: dict, idx: int = None) -> dict:
182182
default_tags.append({"Key": "Name", "Value": name_value})
183183

184184
# Add repository tag if available
185-
if "Repository" not in existing_keys and os.environ.get("GITHUB_REPOSITORY"):
186-
default_tags.append({"Key": "Repository", "Value": os.environ["GITHUB_REPOSITORY"]})
185+
if "Repository" not in existing_keys and environ.get("GITHUB_REPOSITORY"):
186+
default_tags.append({"Key": "Repository", "Value": environ["GITHUB_REPOSITORY"]})
187187

188188
# Add workflow tag if available
189-
if "Workflow" not in existing_keys and os.environ.get("GITHUB_WORKFLOW"):
190-
default_tags.append({"Key": "Workflow", "Value": os.environ["GITHUB_WORKFLOW"]})
189+
if "Workflow" not in existing_keys and environ.get("GITHUB_WORKFLOW"):
190+
default_tags.append({"Key": "Workflow", "Value": environ["GITHUB_WORKFLOW"]})
191191

192192
# Add run URL tag if available
193-
if "URL" not in existing_keys and os.environ.get("GITHUB_SERVER_URL") and os.environ.get("GITHUB_REPOSITORY") and os.environ.get("GITHUB_RUN_ID"):
194-
gha_url = f"{os.environ['GITHUB_SERVER_URL']}/{os.environ['GITHUB_REPOSITORY']}/actions/runs/{os.environ['GITHUB_RUN_ID']}"
193+
if "URL" not in existing_keys and environ.get("GITHUB_SERVER_URL") and environ.get("GITHUB_REPOSITORY") and environ.get("GITHUB_RUN_ID"):
194+
gha_url = f"{environ['GITHUB_SERVER_URL']}/{environ['GITHUB_REPOSITORY']}/actions/runs/{environ['GITHUB_RUN_ID']}"
195195
default_tags.append({"Key": "URL", "Value": gha_url})
196196

197197
# Combine user tags with default tags

0 commit comments

Comments
 (0)