Skip to content

Commit

Permalink
fix: create new repositories during full-sync operation
Browse files Browse the repository at this point in the history
The full-sync script now properly creates new repositories defined in the
configuration instead of only updating existing ones.
This fixes the different behavior between webhook-based sync and full-sync runs.
  • Loading branch information
PendaGTP committed Dec 11, 2024
1 parent 1c752e0 commit 9e273e2
Showing 1 changed file with 42 additions and 11 deletions.
53 changes: 42 additions & 11 deletions lib/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -357,7 +357,7 @@ ${this.results.reduce((x, y) => {
async updateAll () {
// this.subOrgConfigs = this.subOrgConfigs || await this.getSubOrgConfigs(this.github, this.repo, this.log)
// this.repoConfigs = this.repoConfigs || await this.getRepoConfigs(this.github, this.repo, this.log)
return this.eachRepositoryRepos(this.github, this.config.restrictedRepos, this.log).then(res => {
return this.eachRepositoryRepos(this.github, this.log).then(res => {
this.appendToResults(res)
})
}
Expand Down Expand Up @@ -468,19 +468,50 @@ ${this.results.reduce((x, y) => {
return restrictedRepos.filter((restrictedRepo) => { return RegExp(restrictedRepo).test(repoName) }).length > 0
}

async eachRepositoryRepos (github, restrictedRepos, log) {
async eachRepositoryRepos (github, log) {
log.debug('Fetching repositories')
return github.paginate('GET /installation/repositories').then(repositories => {
return Promise.all(repositories.map(repository => {
if (this.isRestricted(repository.name)) {
return null
}

const { owner, name } = repository
return this.updateRepos({ owner: owner.login, repo: name })
const processedRepos = new Set()
const results = []

// Process existing repositories
const existingRepoResults = await github.paginate('GET /installation/repositories')
.then(repositories => {
return Promise.all(repositories.map(repository => {
if (this.isRestricted(repository.name)) {
return null
}
const { owner, name } = repository
processedRepos.add(`${owner.login}/${name}`)
return this.updateRepos({ owner: owner.login, repo: name })
}))
})
)
})

// Process missing repositories
const repoInConfigs = Object.values(this.repoConfigs)
.filter(config => config.repository?.name)
.map(config => {
return {
name: config.repository.name,
owner: config.repository.organization || this.repo.owner
}
})
const missingRepoResults = await Promise.all(
repoInConfigs
.filter(repo => {
return !processedRepos.has(`${repo.owner}/${repo.name}`) || this.isRestricted(repo.name)
})
.map(repo => {
processedRepos.add(`${repo.owner}/${repo.name}`)
return this.updateRepos({ owner: repo.owner, repo: repo.name })
})
)

results
.concat(existingRepoResults || [], missingRepoResults || [])
.filter(result => result !== null)

return results
}

/**
Expand Down

0 comments on commit 9e273e2

Please sign in to comment.