add run_once and warning about tangling repos

This commit is contained in:
Niccolo Borgioli 2024-12-16 12:24:25 +01:00
parent 544d65c7eb
commit 2e34bf8ca0
4 changed files with 23 additions and 1 deletions

View File

@ -33,6 +33,12 @@ GITEA_TOKEN=
# Cron schedule # Cron schedule
CRON="0 */2 * * *" CRON="0 */2 * * *"
# Debug level
DEBUG_LEVEL=debug
# Only run one, skip cron and exit
RUN_ONCE=1
``` ```
## Known limitations ## Known limitations

View File

@ -35,5 +35,6 @@ export const Config = {
token: simple('GITEA_TOKEN'), token: simple('GITEA_TOKEN'),
}, },
cron: getEnv('CRON', '0 */2 * * *'), cron: getEnv('CRON', '0 */2 * * *'),
runOnce: getEnv('RUN_ONCE', false, Boolean),
version: getEnv('npm_package_version', 'unknown'), version: getEnv('npm_package_version', 'unknown'),
} }

View File

@ -18,10 +18,14 @@ export async function sync() {
const toSync = await githubRepos() const toSync = await githubRepos()
l.debug('loaded repos', { remote: toSync.length, local: syncedRepos.length }) l.debug('loaded repos', { remote: toSync.length, local: syncedRepos.length })
// List of all the repos in gitea, that are not on github
const notInSource = new Set(syncedRepos.map((r) => r.name))
for (const repo of toSync) { for (const repo of toSync) {
const lr = l.child({ repo: repo.name }) const lr = l.child({ repo: repo.name })
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) {
notInSource.delete(sameName.name)
if (sameName.original_url === repo.clone_url) { if (sameName.original_url === repo.clone_url) {
if (sameName.private === repo.private) logger.info('Already synced, skipping', { name: repo.name }) if (sameName.private === repo.private) logger.info('Already synced, skipping', { name: repo.name })
else { else {
@ -52,6 +56,9 @@ export async function sync() {
await mirror(options) await mirror(options)
lr.info('mirrored repository') lr.info('mirrored repository')
} }
if (notInSource.size) {
l.info(`Found ${notInSource.size} surplus repositories in gitea`, { repos: [...notInSource] })
}
l.info('Finished sync') l.info('Finished sync')
} catch (error) { } catch (error) {
l.debug(error) l.debug(error)

View File

@ -6,5 +6,13 @@ import { logger } from './logger.ts'
logger.info(`Mirror manager - ${Config.version}`, { version: Config.version }) logger.info(`Mirror manager - ${Config.version}`, { version: Config.version })
Deno.addSignalListener('SIGINT', () => {
console.log('exiting...')
Deno.exit()
})
// Run on startup once, then delegate to cron
await sync() await sync()
if (!Config.runOnce) {
cron.schedule(Config.cron, sync) cron.schedule(Config.cron, sync)
}