はじめに
PyGithubを使用してファイルをコミットするコードを書いたので備忘録として書いておきます
きっかけ
前回の記事でLambdaファンクションを作るときに使用したので記事にしました
内容
まずは pip install
pip install pygithub
特定のファイルをコミットするコード
PyGithubでは内部的にGitHub Data API v3 を使用しています。なのでこちらの記事の中のRefs, Tree, Commit周りの関係性を理解しておくと良いです。
import os from github import Github from github import InputGitTreeElement token = os.environ.get("GITHUB_TOKEN") repository = "yoshiki-0428/repository" def main(): commit_file("hoge-file.md", "hogehoge, hoge") print("complete") # Repository Info def get_repo(): repo = Github(token).get_repo(repository) refs = repo.get_git_ref(branch_name) return { "repo": repo, "refs": refs } def commit_file(commit_name, commit_file_text): if commit_name == "" or commit_file_text == "": return # Repository Info repo_info = get_repo() # Commit file (Create) element = InputGitTreeElement(commit_name, '100644', 'base64', commit_file_text) # 最新版のCommit情報を取得 commit = repo_info['repo'].get_commit(repo_info['refs'].object.sha).commit base_tree = commit.tree # 新しくCommitを作成 new_tree = repo_info['repo'].create_git_tree([element], base_tree) new_commit = repo_info['repo'].create_git_commit("Create file: " + commit_name, new_tree, [commit]) repo_info['refs'].edit(new_commit.sha)
まとめ
たったこれだけのコードでGitHub APIを使用してファイルのコミットが簡単にできてしまいます!ライブラリ様様ですね。。