# Git2S3
Backup GitHub projects to AWS S3
![Python][label-pyversion]
**Platform Supported**
![Platform][label-platform]
**Deployments**
[![pages][label-actions-pages]][gha_pages]
[![pypi][label-actions-pypi]][gha_pypi]
[![markdown][label-actions-markdown]][gha_md_valid]
[![Pypi][label-pypi]][pypi]
[![Pypi-format][label-pypi-format]][pypi-files]
[![Pypi-status][label-pypi-status]][pypi]
## Kick off
**Recommendations**
- Install `python` [3.10] or [3.11]
- Use a dedicated [virtual environment]
**Install Git2S3**
```shell
python -m pip install git2s3
```
**Initiate - IDE**
```python
import git2s3
if __name__ == '__main__':
git = git2s3.Git2S3()
git.start()
```
**Initiate - CLI**
```shell
git2s3 start
```
> Use `git2s3 --help` for usage instructions.
## Environment Variables
Sourcing environment variables from an env file
> _By default, `Git2S3` will look for a `.env` file in the current working directory._
> Refer [samples] directory for examples.
- **GIT_API_URL** - GitHub API endpoint. Defaults to `https://api.github.com/`
- **GIT_OWNER** - GitHub profile owner or organization name.
- **GIT_TOKEN** - GitHub token to get ALL repos (including private).
- **GIT_IGNORE** - List of repositories/gists to ignore. Defaults to `[]`
- **SOURCE** - Source options `[repo, gist, wiki]` to back up. Defaults to all.
- **LOG** - Log options to log to a `file` or `stdout`. _Does not apply when custom logger is used_
- **DEBUG** - Boolean flag to enable debug level logging. _Does not apply when custom logger is used_
- **STORE_LOCAL** - Boolean flag to store the backup locally. Defaults to `False`
- **INCOMPLETE_UPLOAD** - Boolean flag to upload incomplete cloning. Defaults to `False`
- **AWS_PROFILE_NAME** - AWS profile name. Uses the CLI config value `AWS_DEFAULT_PROFILE` by default.
- **AWS_ACCESS_KEY_ID** - AWS access key ID. Uses the CLI config value `AWS_ACCESS_KEY_ID` by default.
- **AWS_SECRET_ACCESS_KEY** - AWS secret key. Uses the CLI config value `AWS_SECRET_ACCESS_KEY` by default.
- **AWS_REGION_NAME** - S3 bucket's region. Uses the CLI config value `AWS_DEFAULT_REGION` by default.
- **AWS_BUCKET_NAME** - AWS bucket name to store the backups.
- **AWS_S3_PREFIX** - S3 prefix _(folder like)_ for the backup. Defaults to `github`
- **BOTO3_RETRY_ATTEMPTS** - Number of retries for Boto3 client config. Defaults to `10`
- **BOTO3_RETRY_MODE** - [Boto3 retry configuration][boto3-retry-config] for S3 client. Defaults to `standard`
## Coding Standards
Docstring format: [`Google`][google-docs]
Styling conventions: [`PEP 8`][pep8] and [`isort`][isort]
## [Release Notes][release-notes]
**Requirement**
```shell
python -m pip install gitverse
```
**Usage**
```shell
gitverse-release reverse -f release_notes.rst -t 'Release Notes'
```
## Linting
`pre-commit` will ensure linting, run pytest, generate runbook & release notes, and validate hyperlinks in ALL
markdown files (including Wiki pages)
**Requirement**
```shell
python -m pip install sphinx==5.1.1 pre-commit recommonmark
```
**Usage**
```shell
pre-commit run --all-files
```
## Pypi Package
[![pypi-module][label-pypi-package]][pypi-repo]
[https://pypi.org/project/git2s3/][pypi]
## Runbook
[![made-with-sphinx-doc][label-sphinx-doc]][sphinx]
[https://thevickypedia.github.io/git2s3/][runbook]
## License & copyright
© Vignesh Rao
Licensed under the [MIT License][license]
[//]: # (Labels)
[label-actions-markdown]: https://github.com/thevickypedia/git2s3/actions/workflows/markdown.yaml/badge.svg
[label-pypi-package]: https://img.shields.io/badge/Pypi%20Package-git2s3-blue?style=for-the-badge&logo=Python
[label-sphinx-doc]: https://img.shields.io/badge/Made%20with-Sphinx-blue?style=for-the-badge&logo=Sphinx
[label-pyversion]: https://img.shields.io/badge/python-3.10%20%7C%203.11-blue
[label-platform]: https://img.shields.io/badge/Platform-Linux|macOS|Windows-1f425f.svg
[label-actions-pages]: https://github.com/thevickypedia/git2s3/actions/workflows/pages/pages-build-deployment/badge.svg
[label-actions-pypi]: https://github.com/thevickypedia/git2s3/actions/workflows/python-publish.yaml/badge.svg
[label-pypi]: https://img.shields.io/pypi/v/git2s3
[label-pypi-format]: https://img.shields.io/pypi/format/git2s3
[label-pypi-status]: https://img.shields.io/pypi/status/git2s3
[3.10]: https://docs.python.org/3/whatsnew/3.10.html
[3.11]: https://docs.python.org/3/whatsnew/3.11.html
[virtual environment]: https://docs.python.org/3/tutorial/venv.html
[release-notes]: https://github.com/thevickypedia/git2s3/blob/master/release_notes.rst
[gha_pages]: https://github.com/thevickypedia/git2s3/actions/workflows/pages/pages-build-deployment
[gha_pypi]: https://github.com/thevickypedia/git2s3/actions/workflows/python-publish.yaml
[gha_md_valid]: https://github.com/thevickypedia/git2s3/actions/workflows/markdown.yaml
[google-docs]: https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings
[pep8]: https://www.python.org/dev/peps/pep-0008/
[isort]: https://pycqa.github.io/isort/
[sphinx]: https://www.sphinx-doc.org/en/master/man/sphinx-autogen.html
[pypi]: https://pypi.org/project/git2s3
[pypi-files]: https://pypi.org/project/git2s3/#files
[pypi-repo]: https://packaging.python.org/tutorials/packaging-projects/
[license]: https://github.com/thevickypedia/git2s3/blob/master/LICENSE
[runbook]: https://thevickypedia.github.io/git2s3/
[boto3-retry-config]: https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#available-retry-modes
[samples]: https://github.com/thevickypedia/git2s3/tree/main/samples