Skip to content

Commit d160627

Browse files
authored
Fix unarchiving a repo (#164)
Before this change, `toggleArchivedRepos` would prevent the unarchiving of a repository because it didn't set the state repo's `archived` property to `false`.
1 parent 5af4bcd commit d160627

4 files changed

Lines changed: 53 additions & 6 deletions

File tree

scripts/__tests__/yaml/config.test.ts

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ import {RepositoryFile} from '../../src/resources/repository-file'
1212
import {randomUUID} from 'crypto'
1313
import {Team, Privacy as TeamPrivacy} from '../../src/resources/team'
1414
import {RepositoryBranchProtectionRule} from '../../src/resources/repository-branch-protection-rule'
15+
import {toggleArchivedRepos} from '../../src/actions/shared/toggle-archived-repos'
16+
import * as state from '../../src/terraform/state'
1517

1618
test('can retrieve resources from YAML schema', async () => {
1719
const config = Config.FromPath()
@@ -385,3 +387,43 @@ test('can add and remove resources through sync', async () => {
385387
resources = config.getAllResources()
386388
expect(resources).toHaveLength(desiredResources.length)
387389
})
390+
391+
test('clears and re-adds repository fields when archiving/unarchiving', async () => {
392+
let config = Config.FromPath()
393+
394+
const unarchivedRepo = config.getResources(Repository).find(r => !r.archived)!
395+
396+
expect(unarchivedRepo.visibility).toBeDefined()
397+
398+
unarchivedRepo.archived = true
399+
config.addResource(unarchivedRepo)
400+
401+
await toggleArchivedRepos(config)
402+
403+
const archivedRepo = config
404+
.getResources(Repository)
405+
.find(r => r.getStateAddress() == unarchivedRepo.getStateAddress())!
406+
407+
expect(archivedRepo.archived).toBe(true)
408+
expect(archivedRepo.visibility).not.toBeDefined()
409+
410+
archivedRepo.archived = false
411+
config.addResource(archivedRepo)
412+
413+
const newState = JSON.parse(await state.loadState())
414+
newState.values.root_module.resources.find(
415+
(r: any) => r.address == unarchivedRepo.getStateAddress()
416+
)!.values.archived = true
417+
418+
const loadStateMock = jest.spyOn(state, 'loadState')
419+
loadStateMock.mockImplementation(async () => JSON.stringify(newState))
420+
421+
await toggleArchivedRepos(config)
422+
423+
const toggledRepo = config
424+
.getResources(Repository)
425+
.find(r => r.getStateAddress() == unarchivedRepo.getStateAddress())!
426+
427+
expect(toggledRepo.archived).toBe(false)
428+
expect(toggledRepo.visibility).toBeDefined()
429+
})

scripts/src/actions/fix-yaml-config.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
import 'reflect-metadata'
22

3+
import {Config} from '../yaml/config'
34
import {toggleArchivedRepos} from './shared/toggle-archived-repos'
45
import {describeAccessChanges} from './shared/describe-access-changes'
56

67
import * as core from '@actions/core'
78

89
async function run(): Promise<void> {
9-
await toggleArchivedRepos()
10+
const config = Config.FromPath()
11+
await toggleArchivedRepos(config)
12+
config.save()
1013

1114
const accessChangesDescription = await describeAccessChanges()
1215

scripts/src/actions/shared/toggle-archived-repos.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ import {Config} from '../../yaml/config'
22
import {Repository} from '../../resources/repository'
33
import {State} from '../../terraform/state'
44

5-
export async function toggleArchivedRepos(): Promise<void> {
5+
export async function toggleArchivedRepos(config: Config): Promise<void> {
66
const state = await State.New()
7-
const config = Config.FromPath()
87

98
const resources = state.getAllResources()
109
const stateRepositories = state.getResources(Repository)
@@ -21,6 +20,7 @@ export async function toggleArchivedRepos(): Promise<void> {
2120
r => r.name === configRepository.name
2221
)
2322
if (stateRepository !== undefined && stateRepository.archived) {
23+
stateRepository.archived = false
2424
config.addResource(stateRepository)
2525
for (const resource of resources) {
2626
if (
@@ -33,6 +33,4 @@ export async function toggleArchivedRepos(): Promise<void> {
3333
}
3434
}
3535
}
36-
37-
config.save()
3836
}

scripts/src/main.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@ async function runSync(): Promise<void> {
1414
}
1515

1616
async function runToggleArchivedRepos(): Promise<void> {
17-
await toggleArchivedRepos()
17+
const config = Config.FromPath()
18+
19+
await toggleArchivedRepos(config)
20+
21+
config.save()
1822
}
1923

2024
async function run(): Promise<void> {

0 commit comments

Comments
 (0)