Compare commits

...

78 Commits

Author SHA1 Message Date
Jose Diaz-Gonzalez
f1cf4cd315 Release version 0.43.1 2023-05-29 18:45:57 -04:00
Jose Diaz-Gonzalez
f3340cd9eb chore: add release requirements 2023-05-29 18:45:49 -04:00
Jose Diaz-Gonzalez
0ebaffd102 Release version 0.43.0 2023-05-29 18:44:23 -04:00
Jose Diaz-Gonzalez
2730fc3e5a fix: do not update readme 2023-05-29 18:44:13 -04:00
Jose Diaz-Gonzalez
0b2330c2c4 fix: adjust for black 2023-05-29 18:43:29 -04:00
Jose Diaz-Gonzalez
82e35fb1cf feat: commit gitchangelog.rc to repo so anyone can generate a changelog 2023-05-29 18:43:23 -04:00
Jose Diaz-Gonzalez
e8f027469e fix: adjust for black 2023-05-29 18:37:02 -04:00
Jose Diaz-Gonzalez
37ef0222e1 fix: adjust for black 2023-05-29 18:36:06 -04:00
Jose Diaz-Gonzalez
96a73b3fe8 feat: add release tagging 2023-05-29 18:35:07 -04:00
Jose Diaz-Gonzalez
8b1bfd433c chore: formatting 2023-05-29 18:34:22 -04:00
Jose Diaz-Gonzalez
cca8a851ad chore: run black 2023-05-29 18:32:39 -04:00
josegonzalez
b5d749ec46 Merge pull request #199 from eht16/add_log_level_argument
Add --log-level command line argument
2023-05-29 18:29:41 -04:00
josegonzalez
00e5c019db Merge pull request #207 from kenbailey/kenbailey-patch-1
Check both updated_at and pushed_at properties
2023-05-29 18:29:29 -04:00
Ken Bailey
fbb977acf4 Check both updated_at and pushed_at properties
Check both updated_at and pushed_at dates to get the last_update to reduce data retrieved on incremental api calls using since.
2023-02-28 15:44:14 -07:00
Jose Diaz-Gonzalez
07e32b186c Release version 0.42.0 2022-11-28 00:25:13 -05:00
josegonzalez
dcc90b747a Merge pull request #204 from Assimila/exclude_repositories
Add option to exclude repositories
2022-11-28 00:23:20 -05:00
josegonzalez
f414fac108 Merge pull request #202 from TheOneric/pull_backup-regular-comments
Backup regular pull request comments as well
2022-11-28 00:23:08 -05:00
josegonzalez
38692bc836 Merge pull request #201 from TRAdEWORKS/fix-bug-request-url-error-forever-retry
Fix a bug forever retry when request url error
2022-11-28 00:22:54 -05:00
josegonzalez
81362e5596 Merge pull request #200 from TRAdEWORKS/no-prune-flag
Add --no-prune command line argument to disable prune option when doing git fetch
2022-11-28 00:22:40 -05:00
npounder
753a26d0d6 add option to exclude repositories 2022-11-25 12:35:24 +00:00
Oneric
b629a865f4 Backup regular pull request comments as well
Before, only review comments were backed up;
regular comments need to be fetched via issue API.

Fixes: https://github.com/josegonzalez/python-github-backup/issues/150
2022-07-12 18:38:11 +02:00
kornpisey
75ec773a6f fix bug forever retry when request url error 2022-05-30 13:50:23 +09:00
kornpisey
f8a16ee0f8 added --no-prune option to disable prune option when doing git fetch 2022-05-30 13:46:41 +09:00
Enrico Tröger
3d5eb359e2 Add --log-level command line argument
Support changing the log level to the desired value easily.
For example, this is useful to suppress progress messages but
keep logging warnings and errors.
2022-05-26 10:04:36 +02:00
Jose Diaz-Gonzalez
63441ebfbc Release version 0.41.0 2022-03-02 02:36:41 -05:00
Jose Diaz-Gonzalez
7ad324225e Merge pull request #191 from SkySoft-ATM/bug/lfs_mirror
git lfs clone does not respect --mirror
2022-03-02 02:34:17 -05:00
Louis Parisot
885e94a102 git lfs clone doe snot respect --mirror 2022-02-03 11:45:59 +01:00
Jose Diaz-Gonzalez
9e1800f56e Release version 0.40.2 2021-12-29 12:49:10 -05:00
Jose Diaz-Gonzalez
d057ee0d04 Merge pull request #186 from atinary-afoulon/patch-1
Fix lint issues raised by Flake8
2021-12-29 12:48:30 -05:00
atinary-afoulon
64562f2460 Fix lint issues raised by Flake8
According to job: 
[ https://app.circleci.com/pipelines/github/josegonzalez/python-github-backup/30/workflows/74eb93f2-2505-435d-b728-03b3cc04c14a/jobs/23 ]

Failed on the following checks:
./github_backup/github_backup.py:20:1: F811 redefinition of unused 'logging' from line 14
./github_backup/github_backup.py:45:1: E302 expected 2 blank lines, found 1
./github_backup/github_backup.py:136:20: E251 unexpected spaces around keyword / parameter equals
2021-12-13 14:33:21 +01:00
Jose Diaz-Gonzalez
f7f9ffd017 Release version 0.40.1 2021-09-22 12:29:08 -04:00
Jose Diaz-Gonzalez
048ef04e2a Merge pull request #180 from whwright/revert-to-fetch
Revert to fetch
2021-09-22 11:06:18 -04:00
Harrison Wright
b1acfed83a Revert to fetch 2021-07-14 10:53:14 -05:00
Jose Diaz-Gonzalez
18e78a4d66 Release version 0.40.0 2021-07-12 00:44:33 -04:00
Jose Diaz-Gonzalez
1ed5427043 Merge pull request #177 from jacekn/retry
Add retry on certain network errors
2021-07-12 00:43:19 -04:00
Jose Diaz-Gonzalez
c2e3665ed8 Merge pull request #178 from pew/patch-1
pull changes from remote
2021-07-12 00:43:10 -04:00
Jonas
0a30a92fe4 pull changes from remote
use `git pull` to pull actual files from the remote instead of using `fetch` for only the metadata
2021-07-06 06:21:06 +02:00
Jacek Nykis
cc52587f52 Add retry on certain network errors
This change includes certain network level errors in the retry logic.
It partially address #110 but I think more comprehensive fix would be useful.
2021-07-01 14:39:10 +01:00
Jose Diaz-Gonzalez
853b7c46a1 Release version 0.39.0 2021-03-18 23:16:04 -04:00
Jose Diaz-Gonzalez
e23d12d490 Merge pull request #173 from gallofeliz/make-compatible-python-call
Try to make compatible code with direct Python call ; reduce the hard link of the code with the cli
2021-03-18 22:51:01 -04:00
Jose Diaz-Gonzalez
f8e1151111 Merge pull request #174 from atorrescogollo/master
Fixed release_name with slash bug
2021-03-18 22:50:21 -04:00
Álvaro Torres Cogollo
664c2a765e Fixed release_name with slash bug 2021-03-03 11:36:44 +01:00
Gallo Feliz
fa7148d38f fix: fix missing INFO logs 2021-02-16 13:25:16 +01:00
Gallo Feliz
480ce3ce2a Try to make compatible code with direct Python call ; reduce the hard link of the code with the cli 2021-02-16 13:13:51 +01:00
Jose Diaz-Gonzalez
943e84e3d9 Release version 0.38.0 2021-02-13 03:55:02 -05:00
Jose Diaz-Gonzalez
0c924c3158 Merge pull request #172 from samanthaq/always-use-oauth-when-provided
fix: Always clone with OAuth token when provided
2021-02-13 03:53:26 -05:00
Samantha Baldwin
f62c4eaf8b fix: Always clone with OAuth token when provided
Github Enterprise servers with 'Anonymous Git read access' disabled
cause `git ls-remote` to fail (128) for a repo's `clone_url`. Using the
OAuth token when provided allows cloning private AND public repos when
Anonymous Git read access is disabled.
2021-02-12 00:46:06 -05:00
Jose Diaz-Gonzalez
a53d7f6849 Merge pull request #170 from Mindavi/bugfix/broken-url
Fix broken and incorrect link to github repository
2021-01-18 00:12:09 -05:00
Rick van Schijndel
4e571d0735 Change broken link to a fork to a working link to upstream 2021-01-03 23:08:58 +01:00
Jose Diaz-Gonzalez
5a71bc5e5a Release version 0.37.2 2021-01-01 21:31:06 -05:00
Jose Diaz-Gonzalez
794ccf3996 fix: use distutils.core on error 2021-01-01 21:30:54 -05:00
Jose Diaz-Gonzalez
977424c153 Release version 0.37.1 2021-01-01 21:28:25 -05:00
Jose Diaz-Gonzalez
613576dd25 fix: use twine for releases
The old method of releasing to pypi broke for whatever reason and switching to a supported toolchain is easier than debugging the old one.

Additionally:

- Update gitchangelog
- Fix license entry
- Set long description type
- Gitignore the temporary readme file
2021-01-01 21:28:03 -05:00
Jose Diaz-Gonzalez
638bf7a77e Release version 0.37.0 2021-01-01 21:23:49 -05:00
Jose Diaz-Gonzalez
725f2c3b8f Merge pull request #158 from albertyw/python3
Remove support for python 2
2021-01-01 21:22:30 -05:00
Jose Diaz-Gonzalez
41ece08152 Merge pull request #165 from garymoon/add-skip-archived
Add option to skip archived repositories
2021-01-01 21:22:15 -05:00
Gary Moon
3a5ef5158d Add ability to skip archived repositories 2020-10-30 15:39:32 -04:00
Albert Wang
cb1b0b6c6b Add support for python 3.7 and 3.8 in package classifiers 2020-08-28 23:45:30 -07:00
Albert Wang
d7f0747432 Remove support for python 2.7 in package classifiers 2020-08-28 23:45:30 -07:00
Albert Wang
d411e20580 Remove python 2 specific import logic 2020-08-28 23:45:30 -07:00
Albert Wang
d7b85264cd Remove python 2 specific logic 2020-08-28 23:45:30 -07:00
Jose Diaz-Gonzalez
031a984434 Release version 0.36.0 2020-08-29 02:37:48 -04:00
Jose Diaz-Gonzalez
9e16f39e3e Merge pull request #157 from albertyw/lint 2020-08-29 02:37:19 -04:00
Albert Wang
2de96390be Add flake8 instructions to readme 2020-08-28 23:13:24 -07:00
Albert Wang
78cff47a91 Fix regex string 2020-08-28 23:13:24 -07:00
Albert Wang
fa27988c1c Update boolean check 2020-08-28 23:13:23 -07:00
Albert Wang
bb2e2b8c6f Fix whitespace issues 2020-08-28 23:13:23 -07:00
Albert Wang
8fd0f2b64f Do not use bare excepts 2020-08-28 23:13:23 -07:00
Jose Diaz-Gonzalez
753a551961 Merge pull request #161 from albertyw/circleci-project-setup
Add circleci config
2020-08-29 01:48:49 -04:00
Albert Wang
607b6ca69b Add .circleci/config.yml 2020-08-28 02:33:51 -07:00
Jose Diaz-Gonzalez
ef71655b01 Merge pull request #160 from wbolster/patch-1
Include --private flag in example
2020-08-27 13:23:28 -04:00
wouter bolsterlee
d8bcbfa644 Include --private flag in example
By default, private repositories are not included. This is surprising.
It took me a while to figure this out, and making that clear in the
example can help others to be aware of that.
2020-08-27 17:01:56 +02:00
Jose Diaz-Gonzalez
751b0d6e82 Release version 0.35.0 2020-08-05 12:02:21 -04:00
Jose Diaz-Gonzalez
ea633ca2bb Merge pull request #156 from samanthaq/restore-optional-throttling
Make API request throttling optional
2020-08-05 12:01:56 -04:00
Samantha Baldwin
a2115ce3e5 Make API request throttling optional 2020-08-05 11:53:17 -04:00
Jose Diaz-Gonzalez
8a00bb1903 Release version 0.34.0 2020-07-24 13:31:03 -04:00
Jose Diaz-Gonzalez
e53f8d4724 Merge pull request #153 from 0x6d617474/gist_ssh
Add logic for transforming gist repository urls to ssh
2020-07-24 13:30:40 -04:00
Matt Fields
356f5f674b Add logic for transforming gist repository urls to ssh 2020-07-07 17:54:16 -04:00
12 changed files with 1203 additions and 609 deletions

23
.circleci/config.yml Normal file
View File

@@ -0,0 +1,23 @@
version: 2.1
orbs:
python: circleci/python@0.3.2
jobs:
build-and-test:
executor: python/default
steps:
- checkout
- python/load-cache
- run:
command: pip install flake8
name: Install dependencies
- python/save-cache
- run:
command: flake8 --ignore=E501
name: Lint
workflows:
main:
jobs:
- build-and-test

117
.gitchangelog.rc Normal file
View File

@@ -0,0 +1,117 @@
#
# Format
#
# ACTION: [AUDIENCE:] COMMIT_MSG [@TAG ...]
#
# Description
#
# ACTION is one of 'chg', 'fix', 'new'
#
# Is WHAT the change is about.
#
# 'chg' is for refactor, small improvement, cosmetic changes...
# 'fix' is for bug fixes
# 'new' is for new features, big improvement
#
# SUBJECT is optional and one of 'dev', 'usr', 'pkg', 'test', 'doc'
#
# Is WHO is concerned by the change.
#
# 'dev' is for developpers (API changes, refactors...)
# 'usr' is for final users (UI changes)
# 'pkg' is for packagers (packaging changes)
# 'test' is for testers (test only related changes)
# 'doc' is for doc guys (doc only changes)
#
# COMMIT_MSG is ... well ... the commit message itself.
#
# TAGs are additionnal adjective as 'refactor' 'minor' 'cosmetic'
#
# 'refactor' is obviously for refactoring code only
# 'minor' is for a very meaningless change (a typo, adding a comment)
# 'cosmetic' is for cosmetic driven change (re-indentation, 80-col...)
#
# Example:
#
# new: usr: support of bazaar implemented
# chg: re-indentend some lines @cosmetic
# new: dev: updated code to be compatible with last version of killer lib.
# fix: pkg: updated year of licence coverage.
# new: test: added a bunch of test around user usability of feature X.
# fix: typo in spelling my name in comment. @minor
#
# Please note that multi-line commit message are supported, and only the
# first line will be considered as the "summary" of the commit message. So
# tags, and other rules only applies to the summary. The body of the commit
# message will be displayed in the changelog with minor reformating.
#
# ``ignore_regexps`` is a line of regexps
#
# Any commit having its full commit message matching any regexp listed here
# will be ignored and won't be reported in the changelog.
#
ignore_regexps = [
r'(?i)^(Merge pull request|Merge branch|Release|Update)',
]
#
# ``replace_regexps`` is a dict associating a regexp pattern and its replacement
#
# It will be applied to get the summary line from the full commit message.
#
# Note that you can provide multiple replacement patterns, they will be all
# tried. If None matches, the summary line will be the full commit message.
#
replace_regexps = {
# current format (ie: 'chg: dev: my commit msg @tag1 @tag2')
r'^([cC]hg|[fF]ix|[nN]ew)\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n@]*)(@[a-z]+\s+)*$':
r'\4',
}
# ``section_regexps`` is a list of 2-tuples associating a string label and a
# list of regexp
#
# Commit messages will be classified in sections thanks to this. Section
# titles are the label, and a commit is classified under this section if any
# of the regexps associated is matching.
#
section_regexps = [
('New', [
r'^[nN]ew\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('Changes', [
r'^[cC]hg\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('Fix', [
r'^[fF]ix\s*:\s*((dev|use?r|pkg|test|doc)\s*:\s*)?([^\n]*)$',
]),
('Other', None # Match all lines
),
]
# ``body_split_regexp`` is a regexp
#
# Commit message body (not the summary) if existing will be split
# (new line) on this regexp
#
body_split_regexp = r'[\n-]'
# ``tag_filter_regexp`` is a regexp
#
# Tags that will be used for the changelog must match this regexp.
#
# tag_filter_regexp = r'^[0-9]+$'
tag_filter_regexp = r'^(?:[vV])?[0-9\.]+$'
# ``unreleased_version_label`` is a string
#
# This label will be used as the changelog Title of the last set of changes
# between last valid tag and HEAD if any.
unreleased_version_label = "%%version%% (unreleased)"

19
.github/workflows/tagged-release.yml vendored Normal file
View File

@@ -0,0 +1,19 @@
---
name: "tagged-release"
# yamllint disable-line rule:truthy
on:
push:
tags:
- '*'
jobs:
tagged-release:
name: tagged-release
runs-on: ubuntu-20.04
steps:
- uses: "marvinpinto/action-automatic-releases@v1.2.1"
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: false

1
.gitignore vendored
View File

@@ -34,3 +34,4 @@ doc/aws_hostname.1
.vscode .vscode
.atom .atom
README

View File

@@ -1,8 +1,177 @@
Changelog Changelog
========= =========
0.33.1 (2020-05-28) 0.43.1 (2023-05-29)
------------------- -------------------
------------------------
- Chore: add release requirements. [Jose Diaz-Gonzalez]
0.43.0 (2023-05-29)
-------------------
Fix
~~~
- Do not update readme. [Jose Diaz-Gonzalez]
- Adjust for black. [Jose Diaz-Gonzalez]
- Adjust for black. [Jose Diaz-Gonzalez]
- Adjust for black. [Jose Diaz-Gonzalez]
Other
~~~~~
- Feat: commit gitchangelog.rc to repo so anyone can generate a
changelog. [Jose Diaz-Gonzalez]
- Feat: add release tagging. [Jose Diaz-Gonzalez]
- Chore: formatting. [Jose Diaz-Gonzalez]
- Chore: run black. [Jose Diaz-Gonzalez]
- Add --log-level command line argument. [Enrico Tröger]
Support changing the log level to the desired value easily.
For example, this is useful to suppress progress messages but
keep logging warnings and errors.
- Check both updated_at and pushed_at properties. [Ken Bailey]
Check both updated_at and pushed_at dates to get the last_update to reduce data retrieved on incremental api calls using since.
0.42.0 (2022-11-28)
-------------------
- Add option to exclude repositories. [npounder]
- Backup regular pull request comments as well. [Oneric]
Before, only review comments were backed up;
regular comments need to be fetched via issue API.
- Fix bug forever retry when request url error. [kornpisey]
- Added --no-prune option to disable prune option when doing git fetch.
[kornpisey]
0.41.0 (2022-03-02)
-------------------
- Git lfs clone doe snot respect --mirror. [Louis Parisot]
0.40.2 (2021-12-29)
-------------------
- Fix lint issues raised by Flake8. [atinary-afoulon]
According to job:
[ https://app.circleci.com/pipelines/github/josegonzalez/python-github-backup/30/workflows/74eb93f2-2505-435d-b728-03b3cc04c14a/jobs/23 ]
Failed on the following checks:
./github_backup/github_backup.py:20:1: F811 redefinition of unused 'logging' from line 14
./github_backup/github_backup.py:45:1: E302 expected 2 blank lines, found 1
./github_backup/github_backup.py:136:20: E251 unexpected spaces around keyword / parameter equals
0.40.1 (2021-09-22)
-------------------
- Revert to fetch. [Harrison Wright]
0.40.0 (2021-07-12)
-------------------
- Add retry on certain network errors. [Jacek Nykis]
This change includes certain network level errors in the retry logic.
It partially address #110 but I think more comprehensive fix would be useful.
- Pull changes from remote. [Jonas]
use `git pull` to pull actual files from the remote instead of using `fetch` for only the metadata
0.39.0 (2021-03-19)
-------------------
Fix
~~~
- Fix missing INFO logs. [Gallo Feliz]
Other
~~~~~
- Try to make compatible code with direct Python call ; reduce the hard
link of the code with the cli. [Gallo Feliz]
- Fixed release_name with slash bug. [Álvaro Torres Cogollo]
0.38.0 (2021-02-13)
-------------------
Fix
~~~
- Always clone with OAuth token when provided. [Samantha Baldwin]
Github Enterprise servers with 'Anonymous Git read access' disabled
cause `git ls-remote` to fail (128) for a repo's `clone_url`. Using the
OAuth token when provided allows cloning private AND public repos when
Anonymous Git read access is disabled.
Other
~~~~~
- Change broken link to a fork to a working link to upstream. [Rick van
Schijndel]
0.37.2 (2021-01-02)
-------------------
Fix
~~~
- Use distutils.core on error. [Jose Diaz-Gonzalez]
0.37.1 (2021-01-02)
-------------------
Fix
~~~
- Use twine for releases. [Jose Diaz-Gonzalez]
The old method of releasing to pypi broke for whatever reason and switching to a supported toolchain is easier than debugging the old one.
Additionally:
- Update gitchangelog
- Fix license entry
- Set long description type
- Gitignore the temporary readme file
0.37.0 (2021-01-02)
-------------------
- Add support for python 3.7 and 3.8 in package classifiers. [Albert
Wang]
- Remove support for python 2.7 in package classifiers. [Albert Wang]
- Remove python 2 specific import logic. [Albert Wang]
- Remove python 2 specific logic. [Albert Wang]
- Add ability to skip archived repositories. [Gary Moon]
0.36.0 (2020-08-29)
-------------------
- Add flake8 instructions to readme. [Albert Wang]
- Fix regex string. [Albert Wang]
- Fix whitespace issues. [Albert Wang]
- Do not use bare excepts. [Albert Wang]
- Add .circleci/config.yml. [Albert Wang]
- Include --private flag in example. [wouter bolsterlee]
By default, private repositories are not included. This is surprising.
It took me a while to figure this out, and making that clear in the
example can help others to be aware of that.
0.35.0 (2020-08-05)
-------------------
- Make API request throttling optional. [Samantha Baldwin]
0.34.0 (2020-07-24)
-------------------
- Add logic for transforming gist repository urls to ssh. [Matt Fields]
0.33.0 (2020-04-13)
------------------- -------------------
- Add basic API request throttling. [Enrico Tröger] - Add basic API request throttling. [Enrico Tröger]

View File

@@ -30,19 +30,19 @@ Usage
CLI Usage is as follows:: CLI Usage is as follows::
github-backup [-h] [-u USERNAME] [-p PASSWORD] [-t TOKEN] [--as-app] github-backup [-h] [-u USERNAME] [-p PASSWORD] [-t TOKEN] [--as-app]
[-o OUTPUT_DIRECTORY] [-i] [--starred] [--all-starred] [-o OUTPUT_DIRECTORY] [-l LOG_LEVEL] [-i] [--starred]
[--watched] [--followers] [--following] [--all] [--all-starred] [--watched] [--followers] [--following]
[--issues] [--issue-comments] [--issue-events] [--pulls] [--all] [--issues] [--issue-comments] [--issue-events]
[--pull-comments] [--pull-commits] [--pull-details] [--pulls] [--pull-comments] [--pull-commits]
[--labels] [--hooks] [--milestones] [--repositories] [--pull-details] [--labels] [--hooks] [--milestones]
[--bare] [--lfs] [--wikis] [--gists] [--starred-gists] [--repositories] [--bare] [--lfs] [--wikis] [--gists]
[--skip-existing] [-L [LANGUAGES [LANGUAGES ...]]] [--starred-gists] [--skip-archived] [--skip-existing]
[-N NAME_REGEX] [-H GITHUB_HOST] [-O] [-R REPOSITORY] [-L [LANGUAGES ...]] [-N NAME_REGEX] [-H GITHUB_HOST]
[-P] [-F] [--prefer-ssh] [-v] [-O] [-R REPOSITORY] [-P] [-F] [--prefer-ssh] [-v]
[--keychain-name OSX_KEYCHAIN_ITEM_NAME] [--keychain-name OSX_KEYCHAIN_ITEM_NAME]
[--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT] [--keychain-account OSX_KEYCHAIN_ITEM_ACCOUNT]
[--releases] [--assets] [--throttle-limit THROTTLE_LIMIT] [--releases] [--assets] [--exclude [REPOSITORY [REPOSITORY ...]]
[--throttle-pause THROTTLE_PAUSE] [--throttle-limit THROTTLE_LIMIT] [--throttle-pause THROTTLE_PAUSE]
USER USER
Backup a github account Backup a github account
@@ -63,6 +63,9 @@ CLI Usage is as follows::
--as-app authenticate as github app instead of as a user. --as-app authenticate as github app instead of as a user.
-o OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY -o OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY
directory at which to backup the repositories directory at which to backup the repositories
-l LOG_LEVEL, --log-level LOG_LEVEL
log level to use (default: info, possible levels:
debug, info, warning, error, critical)
-i, --incremental incremental backup -i, --incremental incremental backup
--starred include JSON output of starred repositories in backup --starred include JSON output of starred repositories in backup
--all-starred include starred repositories in backup [*] --all-starred include starred repositories in backup [*]
@@ -112,6 +115,8 @@ CLI Usage is as follows::
binaries binaries
--assets include assets alongside release information; only --assets include assets alongside release information; only
applies if including releases applies if including releases
--exclude [REPOSITORY [REPOSITORY ...]]
names of repositories to exclude from backup.
--throttle-limit THROTTLE_LIMIT --throttle-limit THROTTLE_LIMIT
start throttling of GitHub API requests after this start throttling of GitHub API requests after this
amount of API requests remain amount of API requests remain
@@ -153,10 +158,10 @@ Instructions on how to do this can be found on https://git-lfs.github.com.
Examples Examples
======== ========
Backup all repositories:: Backup all repositories, including private ones::
export ACCESS_TOKEN=SOME-GITHUB-TOKEN export ACCESS_TOKEN=SOME-GITHUB-TOKEN
github-backup WhiteHouse --token $ACCESS_TOKEN --organization --output-directory /tmp/white-house --repositories github-backup WhiteHouse --token $ACCESS_TOKEN --organization --output-directory /tmp/white-house --repositories --private
Backup a single organization repository with everything else (wiki, pull requests, comments, issues etc):: Backup a single organization repository with everything else (wiki, pull requests, comments, issues etc)::
@@ -166,7 +171,16 @@ Backup a single organization repository with everything else (wiki, pull request
# e.g. git@github.com:docker/cli.git # e.g. git@github.com:docker/cli.git
github-backup $ORGANIZATION -P -t $ACCESS_TOKEN -o . --all -O -R $REPO github-backup $ORGANIZATION -P -t $ACCESS_TOKEN -o . --all -O -R $REPO
Testing
=======
This project currently contains no unit tests. To run linting::
pip install flake8
flake8 --ignore=E501
.. |PyPI| image:: https://img.shields.io/pypi/v/github-backup.svg .. |PyPI| image:: https://img.shields.io/pypi/v/github-backup.svg
:target: https://pypi.python.org/pypi/github-backup/ :target: https://pypi.python.org/pypi/github-backup/
.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/github-backup.svg .. |Python Versions| image:: https://img.shields.io/pypi/pyversions/github-backup.svg
:target: https://github.com/albertyw/github-backup :target: https://github.com/josegonzalez/python-github-backup

View File

@@ -1,6 +1,6 @@
#!/usr/bin/env python #!/usr/bin/env python
import os import os, sys, logging
from github_backup.github_backup import ( from github_backup.github_backup import (
backup_account, backup_account,
@@ -9,11 +9,17 @@ from github_backup.github_backup import (
filter_repositories, filter_repositories,
get_authenticated_user, get_authenticated_user,
log_info, log_info,
log_warning,
mkdir_p, mkdir_p,
parse_args, parse_args,
retrieve_repositories, retrieve_repositories,
) )
logging.basicConfig(
format='%(asctime)s.%(msecs)03d: %(message)s',
datefmt='%Y-%m-%dT%H:%M:%S',
level=logging.INFO
)
def main(): def main():
args = parse_args() args = parse_args()
@@ -26,6 +32,11 @@ def main():
if args.lfs_clone: if args.lfs_clone:
check_git_lfs_install() check_git_lfs_install()
if args.log_level:
log_level = logging.getLevelName(args.log_level.upper())
if isinstance(log_level, int):
logging.root.setLevel(log_level)
if not args.as_app: if not args.as_app:
log_info('Backing up user {0} to {1}'.format(args.user, output_directory)) log_info('Backing up user {0} to {1}'.format(args.user, output_directory))
authenticated_user = get_authenticated_user(args) authenticated_user = get_authenticated_user(args)
@@ -39,4 +50,8 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
try:
main() main()
except Exception as e:
log_warning(str(e))
sys.exit(1)

View File

@@ -1 +1 @@
__version__ = '0.33.1' __version__ = "0.43.1"

File diff suppressed because it is too large Load Diff

22
release
View File

@@ -6,7 +6,7 @@ if [[ ! -f setup.py ]]; then
exit 1 exit 1
fi fi
PACKAGE_NAME="$(cat setup.py | grep "name='" | head | cut -d "'" -f2)" PACKAGE_NAME="$(cat setup.py | grep 'name="' | head | cut -d '"' -f2)"
INIT_PACKAGE_NAME="$(echo "${PACKAGE_NAME//-/_}")" INIT_PACKAGE_NAME="$(echo "${PACKAGE_NAME//-/_}")"
PUBLIC="true" PUBLIC="true"
@@ -22,7 +22,7 @@ CYAN="\033[0;36m" # cyan
pip install wheel > /dev/null pip install wheel > /dev/null
command -v gitchangelog >/dev/null 2>&1 || { command -v gitchangelog >/dev/null 2>&1 || {
echo -e "${RED}WARNING: Missing gitchangelog binary, please run: pip install gitchangelog==2.2.0${COLOR_OFF}\n" echo -e "${RED}WARNING: Missing gitchangelog binary, please run: pip install gitchangelog==3.0.4${COLOR_OFF}\n"
exit 1 exit 1
} }
@@ -31,6 +31,11 @@ command -v rst-lint > /dev/null || {
exit 1 exit 1
} }
command -v twine > /dev/null || {
echo -e "${RED}WARNING: Missing twine binary, please run: pip install twine==3.2.0${COLOR_OFF}\n"
exit 1
}
if [[ "$@" != "major" ]] && [[ "$@" != "minor" ]] && [[ "$@" != "patch" ]]; then if [[ "$@" != "major" ]] && [[ "$@" != "minor" ]] && [[ "$@" != "patch" ]]; then
echo -e "${RED}WARNING: Invalid release type, must specify 'major', 'minor', or 'patch'${COLOR_OFF}\n" echo -e "${RED}WARNING: Invalid release type, must specify 'major', 'minor', or 'patch'${COLOR_OFF}\n"
exit 1 exit 1
@@ -81,18 +86,12 @@ TMPFILE=$(mktemp /tmp/${tempfoo}.XXXXXX) || {
exit 1 exit 1
} }
find_this="__version__ = '$current_version'" find_this="__version__ = \"$current_version\""
replace_with="__version__ = '$next_version'" replace_with="__version__ = \"$next_version\""
echo -e "${YELLOW}--->${COLOR_OFF} Updating ${INIT_PACKAGE_NAME}/__init__.py" echo -e "${YELLOW}--->${COLOR_OFF} Updating ${INIT_PACKAGE_NAME}/__init__.py"
sed "s/$find_this/$replace_with/" ${INIT_PACKAGE_NAME}/__init__.py > $TMPFILE && mv $TMPFILE ${INIT_PACKAGE_NAME}/__init__.py sed "s/$find_this/$replace_with/" ${INIT_PACKAGE_NAME}/__init__.py > $TMPFILE && mv $TMPFILE ${INIT_PACKAGE_NAME}/__init__.py
find_this="${PACKAGE_NAME}.git@$current_version"
replace_with="${PACKAGE_NAME}.git@$next_version"
echo -e "${YELLOW}--->${COLOR_OFF} Updating README.rst"
sed "s/$find_this/$replace_with/" README.rst > $TMPFILE && mv $TMPFILE README.rst
if [ -f docs/conf.py ]; then if [ -f docs/conf.py ]; then
echo -e "${YELLOW}--->${COLOR_OFF} Updating docs" echo -e "${YELLOW}--->${COLOR_OFF} Updating docs"
find_this="version = '${current_version}'" find_this="version = '${current_version}'"
@@ -125,7 +124,8 @@ git push -q origin master && git push -q --tags
if [[ "$PUBLIC" == "true" ]]; then if [[ "$PUBLIC" == "true" ]]; then
echo -e "${YELLOW}--->${COLOR_OFF} Creating python release" echo -e "${YELLOW}--->${COLOR_OFF} Creating python release"
cp README.rst README cp README.rst README
python setup.py sdist bdist_wheel upload > /dev/null python setup.py sdist bdist_wheel > /dev/null
twine upload dist/*
rm README rm README
fi fi

31
release-requirements.txt Normal file
View File

@@ -0,0 +1,31 @@
bleach==6.0.0
certifi==2023.5.7
charset-normalizer==3.1.0
colorama==0.4.6
docutils==0.20.1
flake8==6.0.0
gitchangelog==3.0.4
idna==3.4
importlib-metadata==6.6.0
jaraco.classes==3.2.3
keyring==23.13.1
markdown-it-py==2.2.0
mccabe==0.7.0
mdurl==0.1.2
more-itertools==9.1.0
pkginfo==1.9.6
pycodestyle==2.10.0
pyflakes==3.0.1
Pygments==2.15.1
readme-renderer==37.3
requests==2.31.0
requests-toolbelt==1.0.0
restructuredtext-lint==1.4.0
rfc3986==2.0.0
rich==13.3.5
six==1.16.0
tqdm==4.65.0
twine==4.0.2
urllib3==2.0.2
webencodings==0.5.1
zipp==3.15.0

View File

@@ -5,6 +5,7 @@ from github_backup import __version__
try: try:
from setuptools import setup from setuptools import setup
setup # workaround for pyflakes issue #13 setup # workaround for pyflakes issue #13
except ImportError: except ImportError:
from distutils.core import setup from distutils.core import setup
@@ -15,6 +16,7 @@ except ImportError:
# http://www.eby-sarna.com/pipermail/peak/2010-May/003357.html) # http://www.eby-sarna.com/pipermail/peak/2010-May/003357.html)
try: try:
import multiprocessing import multiprocessing
multiprocessing multiprocessing
except ImportError: except ImportError:
pass pass
@@ -25,24 +27,26 @@ def open_file(fname):
setup( setup(
name='github-backup', name="github-backup",
version=__version__, version=__version__,
author='Jose Diaz-Gonzalez', author="Jose Diaz-Gonzalez",
author_email='github-backup@josediazgonzalez.com', author_email="github-backup@josediazgonzalez.com",
packages=['github_backup'], packages=["github_backup"],
scripts=['bin/github-backup'], scripts=["bin/github-backup"],
url='http://github.com/josegonzalez/python-github-backup', url="http://github.com/josegonzalez/python-github-backup",
license=open('LICENSE.txt').read(), license="MIT",
classifiers=[ classifiers=[
'Development Status :: 5 - Production/Stable', "Development Status :: 5 - Production/Stable",
'Topic :: System :: Archiving :: Backup', "Topic :: System :: Archiving :: Backup",
'License :: OSI Approved :: MIT License', "License :: OSI Approved :: MIT License",
'Programming Language :: Python :: 2.7', "Programming Language :: Python :: 3.5",
'Programming Language :: Python :: 3.5', "Programming Language :: Python :: 3.6",
'Programming Language :: Python :: 3.6', "Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
], ],
description='backup a github user or organization', description="backup a github user or organization",
long_description=open_file('README.rst').read(), long_description=open_file("README.rst").read(),
install_requires=open_file('requirements.txt').readlines(), long_description_content_type="text/x-rst",
install_requires=open_file("requirements.txt").readlines(),
zip_safe=True, zip_safe=True,
) )