PyGithubを使って特定リポジトリにファイルをコミットする

Programming

はじめに

PyGithubを使用してファイルをコミットするコードを書いたので備忘録として書いておきます

きっかけ

前回の記事でLambdaファンクションを作るときに使用したので記事にしました

https://github.com/yoshiki-0428/esa-source-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を使用してファイルのコミットが簡単にできてしまいます!ライブラリ様様ですね。。

参考URL

#GitHub#Python
Yoshiki Ohashi
2x歳の個人事業主エンジニア。SI企業1年, Webベンチャー企業2年で上流から下流の経験を経て独立。 エンジニアらしく性格は温和。プロジェクトチームに心理的安全性を求める。go gin | Spring | Java | Kotlin | Vue | Python | 筋トレ | キャンプ | 個人開発 | 新潟出身

よく読まれている記事


Gatsbyでブログを始めるまで
GatsbyにShare機能、OGPタグをつける
Gatsbyにタグ機能、カテゴリ機能をつける(基礎編)
DL実装するときに理解すること
多機能なGatsbyJSのThemeをつくってnpmに公開した話
© 2020 Yoshiki Ohashi All rights reserved.