Skip to content

pygitops - 0.11.1

CI pipeline status

pygitops provides a convenience layer for developers wishing to automate git workflows with python.

Best of all, it works extremely well with GitPython as well as PyGithub!

pygitops' feature set improves the experience of:

  • cloning git repositories
  • keeping local repositories up to date with their remotes
  • making code changes on a repository feature branch
  • staging, commiting, and pushing changes to remote

Examples

Cloning Repo

Most automated git workflows involve interacting with a local clone of a repo. You might want to begin by having a copy of that repository on your local disk. pygitops will clone the repository for you, updating it when already present.

from pygitops.remote_git_utils import build_github_repo_url
from pygitops.operations import get_updated_repo

service_account_name = 'some-service-account-name'
service_account_token = 'some-service-account-token'
repo_owner = 'wayfair-incubator'
repo_name = 'pygitops'

repo_url = build_github_repo_url(service_account_name, service_account_token, repo_owner, repo_name)

repo = get_updated_repo(repo_url, f'/repos/{repo_name}')

Using GitPython

The repo returned by get_updated_repo is an instance of git.Repo, from the GitPython package. If you are already familiar with the package and need to leverage its functionality, pygitops won't get in your way!

>>> from git import Repo
>>> repo = Repo('some-repo')
>>> repo.working_dir
'User/repos/some-repo'

Commiting Change

A common git automation use case is to commit some changes; pushing them to a remote feature branch. Here, we create a new file chores.txt and commit / push that change to the new-chores feature branch. You may then want to use PyGithub to create a pull request from these changes.

from pathlib import Path

from pygitops.operations import feature_branch, stage_commit_push_changes
from git import Actor

repo_name = 'some-repo'
branch_name = 'new-chores'
some_actor = Actor('some-service-account', 'some-service-account@some-enterprise.com')
commit_message = 'Add list of chores'

with feature_branch(repo, branch_name):
    Path('some-clone-dir' / repo_name / 'chores.txt').write_text('haircut\ngroceries\ndishes')

    stage_commit_push_changes(repo, branch_name, some_actor, commit_message)

Where to Start?

TODO

Detailed Documentation

TODO

API Reference

TODO