arnaucube
arnaucube/mirror-to-giteaPublic Self-hosted repository
Merge pull request #2 from derhuerst/master

use GitHub access token, rate-limit Gitea requests
Dennis Jekubczyk dennis.jekubczyk@gmail.com
Wed, 28 Oct 2020 22:56:00 +0100
commit

e9719e5dfcca5f6829fe91109cb0f12fec41653c

parent

6033c4e16eab767c1d8b635fc2e5c41ac5efb8f2

3 files changed, 16 insertions(+), 8 deletions(-)

jump to
M README.md → README.md

@@ -43,6 +43,7 @@

### Parameters - `GITHUB_USERNAME` name of user or organization which public repos should be mirrored +- `GITHUB_TOKEN` [GitHub personal access token](https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/creating-a-personal-access-token) (optional) - `GITEA_URL` url of your gitea server - `GITEA_TOKEN` token for your gitea user
M package.json → package.json

@@ -19,6 +19,7 @@ },

"homepage": "https://github.com/jaedle/mirror-to-gitea#readme", "dependencies": { "@octokit/rest": "^16.2.0", + "p-queue": "^6.6.2", "superagent": "^4.0.0" } }
M src/index.js → src/index.js

@@ -1,8 +1,12 @@

-const octokit = require('@octokit/rest')(); +const {Octokit} = require('@octokit/rest'); const request = require('superagent'); +const {default: PQueue} = require('p-queue'); -async function getGithubRepositories(username) { +async function getGithubRepositories(username, token) { + const octokit = new Octokit({ + auth: token || null, + }); return octokit.paginate('GET /users/:username/repos', { username: username }) .then(repositories => toRepositoryList(repositories)); }

@@ -66,6 +70,7 @@ if (!githubUsername) {

console.error('No GITHUB_USERNAME specified, please specify! Exiting..'); return; } + const githubToken = process.env.GITHUB_TOKEN; const giteaUrl = process.env.GITEA_URL; if (!giteaUrl) { console.error('No GITEA_URL specified, please specify! Exiting..');

@@ -79,20 +84,21 @@ return;

} - const githubRepositories = await getGithubRepositories(githubUsername); + const githubRepositories = await getGithubRepositories(githubUsername, githubToken); console.log(`Found ${githubRepositories.length} repositories on github`); const gitea = { url: giteaUrl, token: giteaToken, }; - const giteaUser = await getGiteaUser(gitea); - githubRepositories.forEach( - async repository => { + + const queue = new PQueue({ concurrency: 4 }); + await queue.addAll(githubRepositories.map(repository => { + return async () => { await mirror(repository, gitea, giteaUser); - } - ); + }; + })); } main();