mirror of
https://github.com/arnaucube/mirror-to-gitea.git
synced 2026-02-07 03:26:45 +01:00
initial commit
This commit is contained in:
98
src/index.js
Normal file
98
src/index.js
Normal file
@@ -0,0 +1,98 @@
|
||||
const octokit = require('@octokit/rest')();
|
||||
const request = require('superagent');
|
||||
|
||||
|
||||
async function getGithubRepositories(username) {
|
||||
return octokit.paginate('GET /users/:username/repos', { username: username })
|
||||
.then(repositories => toRepositoryList(repositories));
|
||||
}
|
||||
|
||||
function toRepositoryList(repositories) {
|
||||
return repositories.map(repository => {
|
||||
return { name: repository.name, url: repository.clone_url }
|
||||
});
|
||||
}
|
||||
|
||||
async function getGiteaUser(gitea) {
|
||||
return request.get(gitea.url
|
||||
+ '/api/v1/user')
|
||||
.query(`access_token=${gitea.token}`)
|
||||
.then(response => {
|
||||
return { id: response.body.id, name: response.body.username }
|
||||
});
|
||||
}
|
||||
|
||||
function isAlreadyMirroredOnGitea(repository, gitea, giteaUser) {
|
||||
const requestUrl = `${gitea.url}/api/v1/repos/${giteaUser.name}/${repository}`;
|
||||
return request.get(
|
||||
requestUrl)
|
||||
.query(`access_token=${gitea.token}`)
|
||||
.then(() => true)
|
||||
.catch(() => false);
|
||||
}
|
||||
|
||||
function mirrorOnGitea(repository, gitea, giteaUser) {
|
||||
request.post(`${gitea.url}/api/v1/repos/migrate`)
|
||||
.query(`access_token=${gitea.token}`)
|
||||
.send({
|
||||
clone_addr: repository.url,
|
||||
mirror: true,
|
||||
repo_name: repository.name,
|
||||
uid: giteaUser.id,
|
||||
})
|
||||
.then(() => {
|
||||
console.log('Did it!');
|
||||
})
|
||||
.catch(err => {
|
||||
console.log('Failed', err);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
async function mirror(repository, gitea, giteaUser) {
|
||||
if (await isAlreadyMirroredOnGitea(repository.name,
|
||||
gitea,
|
||||
giteaUser)) {
|
||||
console.log('Repository is already mirrored; doing nothing: ', repository.name);
|
||||
return;
|
||||
}
|
||||
console.log('Mirroring repository to gitea: ', repository.name);
|
||||
await mirrorOnGitea(repository, gitea, giteaUser);
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const githubUsername = process.env.GITHUB_USERNAME;
|
||||
if (!githubUsername) {
|
||||
console.error('No GITHUB_USERNAME specified, please specify! Exiting..');
|
||||
return;
|
||||
}
|
||||
const giteaUrl = process.env.GITEA_URL;
|
||||
if (!giteaUrl) {
|
||||
console.error('No GITEA_URL specified, please specify! Exiting..');
|
||||
return;
|
||||
}
|
||||
|
||||
const giteaToken = process.env.GITEA_TOKEN;
|
||||
if (!giteaToken) {
|
||||
console.error('No GITEA_TOKEN specified, please specify! Exiting..');
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
const githubRepositories = await getGithubRepositories(githubUsername);
|
||||
console.log(`Found ${githubRepositories.length} repositories on github`);
|
||||
|
||||
const gitea = {
|
||||
url: giteaUrl,
|
||||
token: giteaToken,
|
||||
};
|
||||
|
||||
const giteaUser = await getGiteaUser(gitea);
|
||||
githubRepositories.forEach(
|
||||
async repository => {
|
||||
await mirror(repository, gitea, giteaUser);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user