None: """ BacklogのGitリポジトリをクローンする。 Args: repo_url (str): クローンするリポジトリのURL(認証情報を除く) username (str): ユーザー名またはメールアドレス password (str): パスワード target_path (str): クローンしたリポジトリを保存するディレクトリのパス Returns: None: 関数は直接的な戻り値は持ちませんが、指定されたパスにリポジトリをクローンします。 """ # 認証情報をURLに組み込むためのURLエンコーディング quoted_username: str = quote_plus(username) quoted_password: str = quote_plus(password) auth_url: str = repo_url.replace( "https://", f"https://{quoted_username}:{quoted_password}@" ) # リポジトリをクローン Repo.clone_from(auth_url, target_path) 急いで書きました import json import os import tempfile import zipfile from typing import Any, Dict from urllib.parse import quote_plus from git import Repo def lambda_handler(event: Dict[str, Any], context: Any) -> Dict[str, str]: """ AWS Lambda関数。環境変数から取得したGitHubリポジトリのmainブランチをクローンし、Zip圧縮します。 Args: event (Dict[str, Any]): Lambda関数に渡されるイベントデータ。 context (Any): Lambda実行のコンテキスト情報。この関数では使用していませんが、Lambda標準の引数です。 Returns: Dict[str, str]: 処理の結果としてHTTPステータスコードとメッセージを含む辞書型のレスポンスを返します。 """ # 環境変数からリポジトリのURLを取得 repo_url: str = os.getenv("REPO_URL", "") # 一時ディレクトリを作成し、そこにリポジトリの内容をクローンする with tempfile.TemporaryDirectory() as tmpdirname: # 出力するZipファイルのパスを一時ディレクトリ内に設定 output_zip: str = os.path.join(tmpdirname, "source.zip") # GitPythonを使用してリポジトリをクローン clone_repo( repo_url, os.getenv("GIT_USER", ""), os.getenv("GIT_PASS", ""), tmpdirname ) # Zipファイルを作成し、クローンした内容を追加する with zipfile.ZipFile(output_zip, "w", zipfile.ZIP_DEFLATED) as zipf: # tmpdirname内のファイルとディレクトリを走査 for root, dirs, files in os.walk(tmpdirname): for file in files: file_path: str = os.path.join(root, file) # ファイルのフルパス zipf.write( file_path, os.path.relpath(file_path, start=tmpdirname) ) # 相対パスでZipに追加 return { "statusCode": "200", "body": json.dumps("Repository has been cloned and zipped successfully."), }