Skip to content

gatewayapps/kamino

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

358 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Kamino - The GitHub issue cloning tool

All Contributors

Kamino is a Chrome and Edge Extension that creates a button on GitHub issue pages. This button can be used to clone an issue to any other repository in which you, the user, are a contributor or member.

How do I use it?

In your Google Chrome browser, simply look for Kamino in the Chrome Extensions store and install it (direct link). Once the extension is installed, go to chrome://extensions and click the Options link to enter your GitHub Personal Access Token (PAT). When creating your PAT, make sure to check the following:

  • repo - all

If you don't know how to create a PAT or need help, check out Creating a token section here

Once you have your PAT, enter it on the Options screen for Kamino and click Save. After that is done, go to any GitHub issue page in which you are a member and you should see a button labeled Clone to.

Kamino also supports GitHub Enterprise Server hosts such as https://github.mycompany.com. For Enterprise use, create the PAT on that Enterprise host; Kamino will use that host's /api/v3 API instead of api.github.com.

Features

Settings

  • Go to original repo's issue list after cloning will navigate to the issue list for the repo from which the cloning was done
  • Create tab for cloned issue will open a new tab and navigate to the newly cloned issue
  • Copy comments when cloning issue will copy all comments when the issue is cloned
  • Disable Kamino automatic comments on original issue will disable automatic comments on the original issue by Kamino

Normal operations

Clicking this button will display a dropdown list of repos. Selecting a repo will ask you to perform one of the following actions:

  • Clone and Close will clone the issue and automatically close the original issue
  • Just Clone will clone the issue and keep the original issue open. This is useful if you've got shared code bases across repos and the issue is similar or the same across repos.
  • Nevermind will close the modal and no action will be performed

Last used

Kamino will remember the last 5 repositories you cloned to so that it will be easy for you to find. If you are someone that is a member of a lot of repos, this should be very handy!

Quick clone

Kamino now supports a quick clone feature. The last repository you cloned to will be shown on a button next to the dropdown. Rather than having to pick the item from the repo list, you can simply click the button to clone to your last used repository!

Search a Repository

For those who have a large number of repositories, Kamino has now introduced a search feature. This can be used to filter the list of repositories quickly. Thanks to @CamSoper for the request!

Batch Cloning(EXPERIMENTAL!!!)

For those who require the ability to clone multiple issues all at once to a repository, there is now a Batch Clone button on the issue list page. This will display a popup that asks where the issue(s) should be cloned and which issue(s) should be cloned. Again, this is a new feature(as of May 2021) and Kamino wasn't meant to do batch cloning, so use at your own risk but I appreciate any and all feedback.

How does it work?

Kamino leverages the GitHub API to gather information about the issue you are on. Kamino is a chrome extension utilizing content scripts to create a button on specific web pages, specifically GitHub issue pages.

Wait a minute, something's not working! Or I'd like to leave feedback

If you find an issue, feel free to create an issue here. If you think of a way Kamino can be enhanced, also create an issue outlining your feature.

Privacy stuff

Outside of the use of your Personal Access Token used by Kamino to perform its core function, we do not have the ability to view or retrieve your token. We do not transmit any information stored by Kamino and it is all stored via the chrome.storage object provided by Google in the development of Chrome extensions. We do not collect or track any personal information such as addresses, IP address, name, emails, credit card numbers, etc... Any analytics package that may be installed will only be used to track number of uses as well as the way Kamino is being used. Any analytics package will NOT store or track repo names, tokens, issue numbers or names or anything else related to the GitHub data used by Kamino.

Release automation

Kamino can be packaged and uploaded to the Chrome Web Store from the command line or from a manual GitHub Actions workflow. The automation uses the Chrome Web Store API v2 documented at https://developer.chrome.com/docs/webstore/using-api.

Testing

Run unit tests with:

yarn test

Run the browser-based extension smoke tests with:

yarn playwright install chromium
yarn test:e2e

The Playwright suite loads Kamino as an unpacked Chromium extension and uses mocked GitHub pages/API responses.

Package the extension

yarn build

This creates dist/kamino-v<manifest version>.zip, which is the package to upload to the Chrome Web Store. The build includes the extension runtime files and leaves out development-only files such as tests, node_modules, and Git metadata.

Before uploading a release, update the version field in manifest.json; Chrome Web Store rejects uploads that do not increase the extension version.

Upload or publish locally

Set these environment variables before uploading:

  • CWS_CLIENT_ID
  • CWS_CLIENT_SECRET
  • CWS_REFRESH_TOKEN
  • CWS_PUBLISHER_ID
  • CWS_EXTENSION_ID

For local releases, you can put those values in a root .env file. .env is ignored by Git.

Then run one of these commands:

yarn upload:chrome
yarn release:chrome

yarn upload:chrome uploads the new zip but does not submit it for review. yarn release:chrome uploads the zip and submits it for review using the store item's existing visibility settings.

The deploy script also supports:

node scripts/deploy-chrome-web-store.js --publish --staged
node scripts/deploy-chrome-web-store.js --publish --skip-review
node scripts/deploy-chrome-web-store.js --publish --deploy-percentage 25
node scripts/deploy-chrome-web-store.js --dry-run

GitHub Actions publishing

The Publish Chrome Web Store workflow is intentionally manual. Add these repository secrets:

  • CWS_CLIENT_ID
  • CWS_CLIENT_SECRET
  • CWS_REFRESH_TOKEN
  • CWS_PUBLISHER_ID
  • CWS_EXTENSION_ID

You can store CWS_PUBLISHER_ID and CWS_EXTENSION_ID as repository variables instead if preferred. The workflow runs tests, creates the zip artifact, uploads it to the Chrome Web Store, and optionally submits it for review.

Contributors

Thanks goes to these wonderful people (emoji key):

John Murphy
John Murphy

πŸ’» 🎨 πŸ“– πŸ€” 🚧 πŸ“†
Daniel Gary
Daniel Gary

πŸ€” πŸ’» πŸ›
Mossadeq Zia
Mossadeq Zia

πŸ›
demianmnave
demianmnave

πŸ›
eswsalesapgcgemea
eswsalesapgcgemea

πŸ› πŸ€”
Cam Soper
Cam Soper

πŸ› πŸ€”
Adam Perlin
Adam Perlin

πŸ’»
Ryan Betts
Ryan Betts

πŸ€”
Jamie Woodmancy
Jamie Woodmancy

πŸ’»
Anirud Samala
Anirud Samala

πŸ’»
Paul Vogel
Paul Vogel

πŸ›
Justin Neff
Justin Neff

πŸ‘€ πŸ€”
Brandon McNew
Brandon McNew

πŸ‘€
Julia
Julia

πŸ€”
Kjeld Schouten
Kjeld Schouten

πŸ€”
Steffano Pereira
Steffano Pereira

πŸ›
William Emfinger
William Emfinger

πŸ€”
Jay Mahendru
Jay Mahendru

πŸ€”
sjsaha
sjsaha

πŸ€”
Knut Wannheden
Knut Wannheden

πŸ€”
John L. Czukkermann
John L. Czukkermann

πŸ€”
Marco Aurelio Gerosa
Marco Aurelio Gerosa

πŸ“–
FrΓ©dΓ©ric Harper
FrΓ©dΓ©ric Harper

πŸ›
Maciej Walkowiak
Maciej Walkowiak

πŸ’»
Nathan Waddell
Nathan Waddell

πŸ’»
Daksh P. Jain
Daksh P. Jain

πŸ“– πŸ€”
Holger
Holger

πŸ›
Thomas
Thomas

πŸ’» πŸ›
msrj14
msrj14

πŸ›
Peter Lindstrom
Peter Lindstrom

πŸ›
Patrick H. Lauke
Patrick H. Lauke

πŸ›
Kelson
Kelson

πŸ›
Mohammad Lotfi Akbarabadi
Mohammad Lotfi Akbarabadi

πŸ›
brandonadams5
brandonadams5

πŸ’»

This project follows the all-contributors specification. Contributions of any kind welcome!