also update visibility when syncing

This commit is contained in:
Niccolo Borgioli 2023-04-05 20:48:25 +02:00
parent 494be7abe2
commit 9b535f621b
No known key found for this signature in database
GPG Key ID: D93C615F75EE4F0B
3 changed files with 21 additions and 6 deletions

View File

@ -1,5 +1,5 @@
{ {
"version": "1.0.0", "version": "1.1.0",
"type": "module", "type": "module",
"scripts": { "scripts": {
"start": "node .", "start": "node .",

View File

@ -3,6 +3,7 @@ import axios, { AxiosError } from 'axios'
import { Config } from '../config.js' import { Config } from '../config.js'
import { logger } from '../logger.js' import { logger } from '../logger.js'
import { ListRepositoriesResponse } from './gitea.types.js' import { ListRepositoriesResponse } from './gitea.types.js'
import { Repository } from './github.types.js'
const Base = axios.create({ const Base = axios.create({
baseURL: new URL('/api/v1', Config.gitea.host).href, baseURL: new URL('/api/v1', Config.gitea.host).href,
@ -77,3 +78,12 @@ export async function listAllRepositories() {
logger.debug('Listed all repositories in Gitea', { data: repos }) logger.debug('Listed all repositories in Gitea', { data: repos })
return repos return repos
} }
export async function updateRepository(owner: string, repo: string, body: Partial<Repository>) {
logger.debug('Updating repository', { owner, repo, body })
await Base({
url: `/repos/${owner}/${repo}`,
method: 'PATCH',
data: body,
})
}

View File

@ -1,4 +1,4 @@
import { listAllRepositories as giteaRepos, mirror, MirrorOptions } from './api/gitea.js' import { listAllRepositories as giteaRepos, mirror, MirrorOptions, updateRepository } from './api/gitea.js'
import { listAllRepositories as githubRepos } from './api/github.js' import { listAllRepositories as githubRepos } from './api/github.js'
import { Config } from './config.js' import { Config } from './config.js'
import { logger } from './logger.js' import { logger } from './logger.js'
@ -20,7 +20,12 @@ export async function sync() {
const sameName = syncedRepos.find((r) => r.name === repo.name || r.original_url === repo.clone_url) const sameName = syncedRepos.find((r) => r.name === repo.name || r.original_url === repo.clone_url)
if (sameName) { if (sameName) {
if (sameName.original_url === repo.clone_url) { if (sameName.original_url === repo.clone_url) {
logger.info('Already synced, skipping', { name: repo.name }) if (sameName.private === repo.private) logger.info('Already synced, skipping', { name: repo.name })
else {
logger.info('Visibility changed, updating', { name: repo.name })
const [owner, repository] = sameName.full_name.split('/')
await updateRepository(owner, repository, { private: repo.private })
}
} else { } else {
logger.error('Repo with same name but different url', { logger.error('Repo with same name but different url', {
name: repo.name, name: repo.name,
@ -42,9 +47,9 @@ export async function sync() {
logger.info('Mirrored repository', { name: repo.name }) logger.info('Mirrored repository', { name: repo.name })
} }
logger.info('Finished sync') logger.info('Finished sync')
} catch (e) { } catch (error) {
logger.error(e) logger.debug(error)
logger.error('Failed to sync') logger.error('Failed to sync', { error: error instanceof Error ? error.message : 'Unknown error' })
} finally { } finally {
running = false running = false
} }