Skip to content

rednafi/fork-purger

main
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Fork Purger

>> Delete all of your forked repositories on Github <<

python github_actions

Installation

  • Install using pip:

    pip install fork-purger
    

Exploration

  • Create and collect your Github user access token.

  • Inspect the --help menu. Run:

    fork-purger --help
    

    This will print the following:

    +-+-+-+-+ +-+-+-+-+-+-+
    |F|o|r|k| |P|u|r|g|e|r|
    +-+-+-+-+ +-+-+-+-+-+-+
    
    Usage: fork-purger [OPTIONS]
    
    Options:
    --username TEXT       Your Github username.  [required]
    --token TEXT          Your Github access token with delete permission.
                            [required]
    --debug / --no-debug  See full traceback in case of HTTP error.
    --delete              Delete the forked repos.
    --help                Show this message and exit.
    
  • By default, fork-purger runs in dry mode and doesn't do anything other than just listing the repositories that are about to be deleted. Run:

    fork-purger --username <gh-username> --token <gh-access-token>
    

    You'll see the following output:

    +-+-+-+-+ +-+-+-+-+-+-+
    |F|o|r|k| |P|u|r|g|e|r|
    +-+-+-+-+ +-+-+-+-+-+-+
    
    These forks will be deleted:
    =============================
    
    https://api.github.com/repos/<gh-username>/ddosify
    https://api.github.com/repos/<gh-username>/delete-github-forks
    https://api.github.com/repos/<gh-username>/dependabot-core
    https://api.github.com/repos/<gh-username>/fork-purger
    
  • To delete the listed repositories, run the CLI with the --delete flag:

    fork-purger --username <gh-username> --token <gh-access-token> --delete
    

    The output should look similar to this:

    +-+-+-+-+ +-+-+-+-+-+-+
    |F|o|r|k| |P|u|r|g|e|r|
    +-+-+-+-+ +-+-+-+-+-+-+
    
    Deleting forked repos:
    =======================
    
    Deleting... https://api.github.com/repos/<gh-username>/ddosify
    Deleting... https://api.github.com/repos/<gh-username>/delete-github-forks
    Deleting... https://api.github.com/repos/<gh-username>/dependabot-core
    Deleting... https://api.github.com/repos/<gh-username>/fork-purger
    
  • In case of exceptions, if you need more information, you can run the CLI with the --debug flag. This will print out the Python stack trace on the stdout.

    fork-purger --username <gh-username> --token <gh-access-token> --delete --debug
    

Architecture

Internally, fork-purger leverages Python's coroutine objects to collect the URLs of the forked repositories from GitHub and delete them asynchronously. Asyncio coordinates this workflow in a producer-consumer orientation which is choreographed in the orchestrator function. The following diagram can be helpful to understand how the entire workflow operates:

fork-purger

Here, the square boxes are async functions and each one of them is dedicated to carrying out a single task.

In the first step, an async function calls a GitHub GET API to collect the URLs of the forked repositories. The enqueue function then aggregates those URLs and puts them in a queue. The dequeue function pops the URLs from the queue and sends them to multiple worker functions to achieve concurrency. Finally, the worker functions leverage a DELETE API to purge the forked repositories.

🍰