autogit is a command line tool for updating multiple GitLab or GitHub repositories with a single command.
Project description
autogit is a command line tool for updating multiple GitLab or GitHub repositories with a single command.
Usage
Generate an access token at GitLab or GitHub and set it as environment variable:
export GITLAB_ACCESS_TOKEN=<token>
export GITHUB_OAUTH_TOKEN=<token>
export GIT_TOKEN=<token> # This one is used if previous ones are not found
Provide a list of repositories and a script or a command to run inside each of them:
autogit --repos repos.txt update_repo.py
Where repos.txt could be:
https://gitlab.com/<handle>/<repo-title>
https://gitlab.com/<handle>/<repo-title2>.git
https://gitlab.com/<group>/<namespace>/<repo-title3>
https://github.com/<handle>/<repo-title4>
https://yourmanagedgit.com/<handle>/<repo-title5>
# https://yourmanagedgit.com/<handle>/<repo-title6> - this line is commented out
Try it yourself:
autogit \
--repo https://github.com/<handle>/<repo-title> \
--branch=add-hello-world-file \
--clone-to=tmp \
--commit-message="Add hello-world.txt file" \
touch hello-world.txt
These steps will be executed for each specified repository:
- The repository will be cloned into
/tmp/directory. - A new branch
add-hello-world-filewill be created or fetched if it already exists. - The command or a script will be executed inside the repository.
- A commit containing all the changes will be created.
- Newly created commit will be pushed to remote repository.
- A pull request will be created.
- [optional] A comment will be left next to the PR.
- [optional] The pull request will be merged.
These options could be used to specify more details:
| Option | Description | Type | Required |
|---|---|---|---|
--branch |
A name of a branch which will be used to commit changes to and to create Pull Request from (this branch will be created if it does not exist) | String | Yes |
--source-branch |
Base branch which will be used as a basis for a new branch creation. Target branch will be used by default. | String | No |
--target-branch |
Branch to be used as a target in a Pull Request. | String | No |
--commit-message |
A commit message which will be used for all of the changes made. | String | No |
--clone-to |
Path to temporal directory which will be used to clone repositories to | String | No |
--repo |
Link to repository | String | No |
--repos |
Filename which contains a list of repository links | String | No |
--merge |
Merge PR by skipping CI pipeline and other checks | Boolean | No |
--merge-on-success |
Set auto merge flag that automatically merges the PR when CI pipeline succeeds | Boolean | No |
Options to be added in the future releases:
| Option | Description | Type | Required |
| --pr-title | Title of the Pull Request (commit message is used by default) | String | No |
| --pr-description | Pull Request description in Markdown format (empty by default) | String | No |
| --pr-reviewers | Comma separated list of usernames to assign as reviewers in newly created Pull Requests | String | No |
| --stop-on-failure | Exits immediately when an issue for at least one repo is detected (tries to create any possible PR by default, even if some repos failed to be processed) | Boolean | No |
| --max-api-concurrency | Max number of concurrent API requests (default 2) | Int | No |
More examples:
autogit --repos repos.txt ./examples/update_mypy_version.py
Efficiency
autogit is implemented in Python and uses coroutines to make multiple parallel API calls. Delays are being made after each API call in order not to get throttled.
Roadmap
-
Add unit tests for all the paths (mock gitpython, httpx requests)
- Implement state change dependencies on the tests.
- Implement RecorderMock for packages.
-
Package and release to PyPi
-
Run command as command line tool
- Stand-alone executable file download in Github releases.
-
Make API calls to GitLab
-
Support different API calls
-
Advanced features:
- Merge PRs which have all requirements like approvals met.
Development
make venv - will create virtual env with dev dependencies.
make check - will run Flake8, MyPy and PyTest checks.
Related projects
This tool was inspired by:
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file autogit-0.0.48.tar.gz.
File metadata
- Download URL: autogit-0.0.48.tar.gz
- Upload date:
- Size: 18.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
691bf44ab2b95d9ab89eecf96c500b86c753f37fe798cbbffde8cd369b88911a
|
|
| MD5 |
20e27a68c45bcd7672a323026ef3c617
|
|
| BLAKE2b-256 |
d4afb5a41c9f699eb48829ff3a5c6c94f4e2998270e2ddb450b70b8bd7ac0b56
|
File details
Details for the file autogit-0.0.48-py3-none-any.whl.
File metadata
- Download URL: autogit-0.0.48-py3-none-any.whl
- Upload date:
- Size: 24.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.28.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c36416c92f5cdffd324542db4ba618a723125a9f5cfd051e194b9019b11089e3
|
|
| MD5 |
d2e66b5774db622ac64582d0f32a4d9b
|
|
| BLAKE2b-256 |
8ade06f1d945530e661c9590a5fa6abe6ec5a4c0f2a955fa2bff5baa9d9c5ae7
|