Skip to content

Commit e293c44

Browse files
authored
Detect and update config if default branch was changed (#163)
Detect and update config if default branch was changed
2 parents 19d1b1a + 08cda99 commit e293c44

File tree

3 files changed

+176
-4
lines changed

3 files changed

+176
-4
lines changed

index.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
const mergeArrayByName = require('./lib/mergeArrayByName')
22

33
module.exports = (robot, _, Settings = require('./lib/settings')) => {
4+
async function syncSettings (context, repo = context.repo()) {
5+
const config = await context.config('settings.yml', {}, { arrayMerge: mergeArrayByName })
6+
return Settings.sync(context.github, repo, config)
7+
}
8+
49
robot.on('push', async context => {
510
const { payload } = context
611
const { repository } = payload
@@ -21,7 +26,20 @@ module.exports = (robot, _, Settings = require('./lib/settings')) => {
2126
return
2227
}
2328

24-
const config = await context.config('settings.yml', {}, { arrayMerge: mergeArrayByName })
25-
return Settings.sync(context.github, context.repo(), config)
29+
return syncSettings(context)
30+
})
31+
32+
robot.on('repository.edited', async context => {
33+
const { payload } = context
34+
const { changes, repository } = payload
35+
36+
if (!Object.prototype.hasOwnProperty.call(changes, 'default_branch')) {
37+
robot.log.debug('Repository configuration was edited but the default branch was not affected, returning...')
38+
return
39+
}
40+
41+
robot.log.debug(`Default branch changed from '${changes.default_branch.from}' to '${repository.default_branch}'`)
42+
43+
return syncSettings(context)
2644
})
2745
}
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
{
2+
"action": "edited",
3+
"changes": {
4+
"default_branch": {
5+
"from": "mvegter-patch-2"
6+
}
7+
},
8+
"repository": {
9+
"id": 220051293,
10+
"node_id": "MDEwOlJlcG9zaXRvcnkyMjAwNTEyOTM=",
11+
"name": "repo-a",
12+
"full_name": "Martijn-Workspace/repo-a",
13+
"private": false,
14+
"owner": {
15+
"login": "Martijn-Workspace",
16+
"id": 57455045,
17+
"node_id": "MDEyOk9yZ2FuaXphdGlvbjU3NDU1MDQ1",
18+
"avatar_url": "https://avatars0.githubusercontent.com/u/57455045?v=4",
19+
"gravatar_id": "",
20+
"url": "https://api.github.com/users/Martijn-Workspace",
21+
"html_url": "https://github.com/Martijn-Workspace",
22+
"followers_url": "https://api.github.com/users/Martijn-Workspace/followers",
23+
"following_url": "https://api.github.com/users/Martijn-Workspace/following{/other_user}",
24+
"gists_url": "https://api.github.com/users/Martijn-Workspace/gists{/gist_id}",
25+
"starred_url": "https://api.github.com/users/Martijn-Workspace/starred{/owner}{/repo}",
26+
"subscriptions_url": "https://api.github.com/users/Martijn-Workspace/subscriptions",
27+
"organizations_url": "https://api.github.com/users/Martijn-Workspace/orgs",
28+
"repos_url": "https://api.github.com/users/Martijn-Workspace/repos",
29+
"events_url": "https://api.github.com/users/Martijn-Workspace/events{/privacy}",
30+
"received_events_url": "https://api.github.com/users/Martijn-Workspace/received_events",
31+
"type": "Organization",
32+
"site_admin": false
33+
},
34+
"html_url": "https://github.com/Martijn-Workspace/repo-a",
35+
"description": "description of repo",
36+
"fork": false,
37+
"url": "https://api.github.com/repos/Martijn-Workspace/repo-a",
38+
"forks_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/forks",
39+
"keys_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/keys{/key_id}",
40+
"collaborators_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/collaborators{/collaborator}",
41+
"teams_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/teams",
42+
"hooks_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/hooks",
43+
"issue_events_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/issues/events{/number}",
44+
"events_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/events",
45+
"assignees_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/assignees{/user}",
46+
"branches_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/branches{/branch}",
47+
"tags_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/tags",
48+
"blobs_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/git/blobs{/sha}",
49+
"git_tags_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/git/tags{/sha}",
50+
"git_refs_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/git/refs{/sha}",
51+
"trees_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/git/trees{/sha}",
52+
"statuses_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/statuses/{sha}",
53+
"languages_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/languages",
54+
"stargazers_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/stargazers",
55+
"contributors_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/contributors",
56+
"subscribers_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/subscribers",
57+
"subscription_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/subscription",
58+
"commits_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/commits{/sha}",
59+
"git_commits_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/git/commits{/sha}",
60+
"comments_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/comments{/number}",
61+
"issue_comment_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/issues/comments{/number}",
62+
"contents_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/contents/{+path}",
63+
"compare_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/compare/{base}...{head}",
64+
"merges_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/merges",
65+
"archive_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/{archive_format}{/ref}",
66+
"downloads_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/downloads",
67+
"issues_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/issues{/number}",
68+
"pulls_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/pulls{/number}",
69+
"milestones_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/milestones{/number}",
70+
"notifications_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/notifications{?since,all,participating}",
71+
"labels_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/labels{/name}",
72+
"releases_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/releases{/id}",
73+
"deployments_url": "https://api.github.com/repos/Martijn-Workspace/repo-a/deployments",
74+
"created_at": "2019-11-06T17:19:47Z",
75+
"updated_at": "2019-12-01T16:02:54Z",
76+
"pushed_at": "2019-11-24T11:18:20Z",
77+
"git_url": "git://github.com/Martijn-Workspace/repo-a.git",
78+
"ssh_url": "[email protected]:Martijn-Workspace/repo-a.git",
79+
"clone_url": "https://github.com/Martijn-Workspace/repo-a.git",
80+
"svn_url": "https://github.com/Martijn-Workspace/repo-a",
81+
"homepage": "https://example.github.io/",
82+
"size": 11,
83+
"stargazers_count": 0,
84+
"watchers_count": 0,
85+
"language": null,
86+
"has_issues": false,
87+
"has_projects": true,
88+
"has_downloads": true,
89+
"has_wiki": true,
90+
"has_pages": false,
91+
"forks_count": 0,
92+
"mirror_url": null,
93+
"archived": false,
94+
"disabled": false,
95+
"open_issues_count": 0,
96+
"license": null,
97+
"forks": 0,
98+
"open_issues": 0,
99+
"watchers": 0,
100+
"default_branch": "master"
101+
},
102+
"organization": {
103+
"login": "Martijn-Workspace",
104+
"id": 57455045,
105+
"node_id": "MDEyOk9yZ2FuaXphdGlvbjU3NDU1MDQ1",
106+
"url": "https://api.github.com/orgs/Martijn-Workspace",
107+
"repos_url": "https://api.github.com/orgs/Martijn-Workspace/repos",
108+
"events_url": "https://api.github.com/orgs/Martijn-Workspace/events",
109+
"hooks_url": "https://api.github.com/orgs/Martijn-Workspace/hooks",
110+
"issues_url": "https://api.github.com/orgs/Martijn-Workspace/issues",
111+
"members_url": "https://api.github.com/orgs/Martijn-Workspace/members{/member}",
112+
"public_members_url": "https://api.github.com/orgs/Martijn-Workspace/public_members{/member}",
113+
"avatar_url": "https://avatars0.githubusercontent.com/u/57455045?v=4",
114+
"description": null
115+
},
116+
"sender": {
117+
"login": "probot-settings-label[bot]",
118+
"id": 58135831,
119+
"node_id": "MDM6Qm90NTgxMzU4MzE=",
120+
"avatar_url": "https://avatars3.githubusercontent.com/u/25134477?v=4",
121+
"gravatar_id": "",
122+
"url": "https://api.github.com/users/probot-settings-label%5Bbot%5D",
123+
"html_url": "https://github.com/apps/probot-settings-label",
124+
"followers_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/followers",
125+
"following_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/following{/other_user}",
126+
"gists_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/gists{/gist_id}",
127+
"starred_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/starred{/owner}{/repo}",
128+
"subscriptions_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/subscriptions",
129+
"organizations_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/orgs",
130+
"repos_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/repos",
131+
"events_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/events{/privacy}",
132+
"received_events_url": "https://api.github.com/users/probot-settings-label%5Bbot%5D/received_events",
133+
"type": "Bot",
134+
"site_admin": false
135+
},
136+
"installation": {
137+
"id": 5368170,
138+
"node_id": "MDIzOkludGVncmF0aW9uSW5zdGFsbGF0aW9uNTM2ODE3MA=="
139+
}
140+
}

test/index.test.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,23 @@ describe('plugin', () => {
4545
event.payload = require('./fixtures/events/push.readme.json')
4646
})
4747

48-
it('does not sync settings', () => {
49-
app.receive(event)
48+
it('does not sync settings', async () => {
49+
await app.receive(event)
5050
expect(sync).not.toHaveBeenCalled()
5151
})
5252
})
53+
54+
describe('default branch changed', () => {
55+
beforeEach(() => {
56+
event = {
57+
name: 'repository',
58+
payload: require('./fixtures/events/repository.edited.json')
59+
}
60+
})
61+
62+
it('does sync settings', async () => {
63+
await app.receive(event)
64+
expect(sync).toHaveBeenCalled()
65+
})
66+
})
5367
})

0 commit comments

Comments
 (0)