Skip to content

Commit fc89b04

Browse files
committed
Merge branch 'jeremy-daley-kr-main'
2 parents 2396801 + 83d8e1a commit fc89b04

9 files changed

+13859
-14146
lines changed

dist/index.js

Lines changed: 13016 additions & 13727 deletions
Large diffs are not rendered by default.

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

dist/licenses.txt

Lines changed: 443 additions & 161 deletions
Large diffs are not rendered by default.

package-lock.json

Lines changed: 327 additions & 156 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
"homepage": "https://github.com/actions/configure-pages#readme",
2626
"dependencies": {
2727
"@actions/core": "^1.10.0",
28-
"axios": "^1.3.3",
28+
"@actions/github": "^5.1.1",
2929
"espree": "^9.4.1"
3030
},
3131
"devDependencies": {

src/api-client.js

Lines changed: 18 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,15 @@
1-
const axios = require('axios')
21
const core = require('@actions/core')
2+
const github = require('@actions/github')
33

4-
function getApiBaseUrl() {
5-
return process.env.GITHUB_API_URL || 'https://api.github.com'
6-
}
7-
8-
async function enablePagesSite({ repositoryNwo, githubToken }) {
9-
const pagesEndpoint = `${getApiBaseUrl()}/repos/${repositoryNwo}/pages`
4+
async function enablePagesSite({ githubToken }) {
5+
const octokit = github.getOctokit(githubToken)
106

117
try {
12-
const response = await axios.post(
13-
pagesEndpoint,
14-
{ build_type: 'workflow' },
15-
{
16-
headers: {
17-
Accept: 'application/vnd.github.v3+json',
18-
Authorization: `Bearer ${githubToken}`,
19-
'Content-type': 'application/json'
20-
}
21-
}
22-
)
8+
const response = await octokit.rest.repos.createPagesSite({
9+
owner: github.context.repo.owner,
10+
repo: github.context.repo.repo,
11+
build_type: 'workflow'
12+
})
2313

2414
const pageObject = response.data
2515
return pageObject
@@ -32,26 +22,24 @@ async function enablePagesSite({ repositoryNwo, githubToken }) {
3222
}
3323
}
3424

35-
async function getPagesSite({ repositoryNwo, githubToken }) {
36-
const pagesEndpoint = `${getApiBaseUrl()}/repos/${repositoryNwo}/pages`
25+
async function getPagesSite({ githubToken }) {
26+
const octokit = github.getOctokit(githubToken)
3727

38-
const response = await axios.get(pagesEndpoint, {
39-
headers: {
40-
Accept: 'application/vnd.github.v3+json',
41-
Authorization: `Bearer ${githubToken}`
42-
}
28+
const response = await octokit.rest.repos.getPages({
29+
owner: github.context.repo.owner,
30+
repo: github.context.repo.repo
4331
})
4432

4533
const pageObject = response.data
4634
return pageObject
4735
}
4836

49-
async function findOrCreatePagesSite({ repositoryNwo, githubToken, enablement = true }) {
37+
async function findOrCreatePagesSite({ githubToken, enablement = true }) {
5038
let pageObject
5139

5240
// Try to find an existing Pages site first
5341
try {
54-
pageObject = await getPagesSite({ repositoryNwo, githubToken })
42+
pageObject = await getPagesSite({ githubToken })
5543
} catch (error) {
5644
if (!enablement) {
5745
core.error('Get Pages site failed', error)
@@ -63,7 +51,7 @@ async function findOrCreatePagesSite({ repositoryNwo, githubToken, enablement =
6351
if (!pageObject && enablement) {
6452
// Create a new Pages site if one doesn't exist
6553
try {
66-
pageObject = await enablePagesSite({ repositoryNwo, githubToken })
54+
pageObject = await enablePagesSite({ githubToken })
6755
} catch (error) {
6856
core.error('Create Pages site failed', error)
6957
throw error
@@ -73,7 +61,7 @@ async function findOrCreatePagesSite({ repositoryNwo, githubToken, enablement =
7361
// Try one more time for this extreme edge case!
7462
if (pageObject == null) {
7563
try {
76-
pageObject = await getPagesSite({ repositoryNwo, githubToken })
64+
pageObject = await getPagesSite({ githubToken })
7765
} catch (error) {
7866
core.error('Get Pages site still failed', error)
7967
throw error
@@ -84,4 +72,4 @@ async function findOrCreatePagesSite({ repositoryNwo, githubToken, enablement =
8472
return pageObject
8573
}
8674

87-
module.exports = { findOrCreatePagesSite, enablePagesSite, getPagesSite, getApiBaseUrl }
75+
module.exports = { findOrCreatePagesSite, enablePagesSite, getPagesSite }

src/api-client.test.js

Lines changed: 51 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,34 @@
11
const core = require('@actions/core')
2-
const axios = require('axios')
3-
42
const apiClient = require('./api-client')
53

4+
const mockGetPages = jest.fn()
5+
const mockCreatePagesSite = jest.fn()
6+
7+
jest.mock('@actions/github', () => ({
8+
context: {
9+
repo: {
10+
owner: 'actions',
11+
repo: 'is-awesome'
12+
}
13+
},
14+
getOctokit: () => ({
15+
rest: {
16+
repos: {
17+
getPages: mockGetPages,
18+
createPagesSite: mockCreatePagesSite
19+
}
20+
}
21+
})
22+
}))
23+
624
describe('apiClient', () => {
7-
const GITHUB_REPOSITORY = 'actions/is-awesome'
825
const GITHUB_TOKEN = 'gha-token'
926
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
1027

1128
beforeEach(() => {
1229
jest.restoreAllMocks()
30+
jest.clearAllMocks()
31+
jest.resetAllMocks()
1332

1433
// Mock error/warning/info/debug
1534
jest.spyOn(core, 'error').mockImplementation(jest.fn())
@@ -18,59 +37,33 @@ describe('apiClient', () => {
1837
jest.spyOn(core, 'debug').mockImplementation(jest.fn())
1938
})
2039

21-
describe('getApiBaseUrl', () => {
22-
it('returns GITHUB_API_URL environment variable when set', async () => {
23-
const expectedBaseUrl = 'https://api.ghe.com'
24-
process.env.GITHUB_API_URL = expectedBaseUrl
25-
const result = apiClient.getApiBaseUrl()
26-
delete process.env.GITHUB_API_URL
27-
expect(result).toEqual(expectedBaseUrl)
28-
})
29-
30-
it('defaults to GitHub API if GITHUB_API_URL environment variable is empty', async () => {
31-
process.env.GITHUB_API_URL = ''
32-
const result = apiClient.getApiBaseUrl()
33-
delete process.env.GITHUB_API_URL
34-
expect(result).toEqual('https://api.github.com')
35-
})
36-
37-
it('defaults to GitHub API if GITHUB_API_URL environment variable is not set', async () => {
38-
delete process.env.GITHUB_API_URL
39-
const result = apiClient.getApiBaseUrl()
40-
expect(result).toEqual('https://api.github.com')
41-
})
42-
})
43-
4440
describe('enablePagesSite', () => {
4541
it('makes a request to create a page', async () => {
46-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
42+
mockCreatePagesSite.mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
4743

4844
const result = await apiClient.enablePagesSite({
49-
repositoryNwo: GITHUB_REPOSITORY,
5045
githubToken: GITHUB_TOKEN
5146
})
5247
expect(result).toEqual(PAGE_OBJECT)
5348
})
5449

5550
it('handles a 409 response when the page already exists', async () => {
56-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.reject({ response: { status: 409 } }))
51+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 409 } }))
5752

5853
// Simply assert that no error is raised
5954
const result = await apiClient.enablePagesSite({
60-
repositoryNwo: GITHUB_REPOSITORY,
6155
githubToken: GITHUB_TOKEN
6256
})
6357

6458
expect(result).toBe(null)
6559
})
6660

6761
it('re-raises errors on failure status codes', async () => {
68-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
62+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
6963

7064
let erred = false
7165
try {
7266
await apiClient.enablePagesSite({
73-
repositoryNwo: GITHUB_REPOSITORY,
7467
githubToken: GITHUB_TOKEN
7568
})
7669
} catch (error) {
@@ -84,22 +77,20 @@ describe('apiClient', () => {
8477
describe('getPagesSite', () => {
8578
it('makes a request to get a page', async () => {
8679
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
87-
jest.spyOn(axios, 'get').mockImplementationOnce(() => Promise.resolve({ status: 200, data: PAGE_OBJECT }))
80+
mockGetPages.mockImplementationOnce(() => Promise.resolve({ status: 200, data: PAGE_OBJECT }))
8881

8982
const result = await apiClient.getPagesSite({
90-
repositoryNwo: GITHUB_REPOSITORY,
9183
githubToken: GITHUB_TOKEN
9284
})
9385
expect(result).toEqual(PAGE_OBJECT)
9486
})
9587

9688
it('re-raises errors on failure status codes', async () => {
97-
jest.spyOn(axios, 'get').mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
89+
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
9890

9991
let erred = false
10092
try {
10193
await apiClient.getPagesSite({
102-
repositoryNwo: GITHUB_REPOSITORY,
10394
githubToken: GITHUB_TOKEN
10495
})
10596
} catch (error) {
@@ -113,55 +104,51 @@ describe('apiClient', () => {
113104
describe('findOrCreatePagesSite', () => {
114105
it('does not make a request to create a page if it already exists', async () => {
115106
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
116-
jest.spyOn(axios, 'get').mockImplementationOnce(() => Promise.resolve({ status: 200, data: PAGE_OBJECT }))
117-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
107+
mockGetPages.mockImplementationOnce(() => Promise.resolve({ status: 200, data: PAGE_OBJECT }))
108+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
118109

119110
const result = await apiClient.findOrCreatePagesSite({
120-
repositoryNwo: GITHUB_REPOSITORY,
121111
githubToken: GITHUB_TOKEN
122112
})
123113
expect(result).toEqual(PAGE_OBJECT)
124-
expect(axios.get).toHaveBeenCalledTimes(1)
125-
expect(axios.post).toHaveBeenCalledTimes(0)
114+
expect(mockGetPages).toHaveBeenCalledTimes(1)
115+
expect(mockCreatePagesSite).toHaveBeenCalledTimes(0)
126116
})
127117

128118
it('makes request to create a page by default if it does not exist', async () => {
129119
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
130-
jest.spyOn(axios, 'get').mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
131-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
120+
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
121+
mockCreatePagesSite.mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
132122

133123
const result = await apiClient.findOrCreatePagesSite({
134-
repositoryNwo: GITHUB_REPOSITORY,
135124
githubToken: GITHUB_TOKEN
136125
})
137126
expect(result).toEqual(PAGE_OBJECT)
138-
expect(axios.get).toHaveBeenCalledTimes(1)
139-
expect(axios.post).toHaveBeenCalledTimes(1)
127+
expect(mockGetPages).toHaveBeenCalledTimes(1)
128+
expect(mockCreatePagesSite).toHaveBeenCalledTimes(1)
140129
})
141130

142131
it('makes a request to create a page when explicitly enabled if it does not exist', async () => {
143132
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
144-
jest.spyOn(axios, 'get').mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
145-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
133+
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
134+
mockCreatePagesSite.mockImplementationOnce(() => Promise.resolve({ status: 201, data: PAGE_OBJECT }))
146135

147136
const result = await apiClient.findOrCreatePagesSite({
148-
repositoryNwo: GITHUB_REPOSITORY,
149137
githubToken: GITHUB_TOKEN,
150138
enablement: true
151139
})
152140
expect(result).toEqual(PAGE_OBJECT)
153-
expect(axios.get).toHaveBeenCalledTimes(1)
154-
expect(axios.post).toHaveBeenCalledTimes(1)
141+
expect(mockGetPages).toHaveBeenCalledTimes(1)
142+
expect(mockCreatePagesSite).toHaveBeenCalledTimes(1)
155143
})
156144

157145
it('does not make a request to create a page when explicitly disabled even if it does not exist', async () => {
158-
jest.spyOn(axios, 'get').mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
159-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.reject({ response: { status: 500 } })) // just so they both aren't 404
146+
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
147+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 500 } })) // just so they both aren't 404
160148

161149
let erred = false
162150
try {
163151
await apiClient.findOrCreatePagesSite({
164-
repositoryNwo: GITHUB_REPOSITORY,
165152
githubToken: GITHUB_TOKEN,
166153
enablement: false
167154
})
@@ -171,18 +158,17 @@ describe('apiClient', () => {
171158
expect(error.response.status).toEqual(404)
172159
}
173160
expect(erred).toBe(true)
174-
expect(axios.get).toHaveBeenCalledTimes(1)
175-
expect(axios.post).toHaveBeenCalledTimes(0)
161+
expect(mockGetPages).toHaveBeenCalledTimes(1)
162+
expect(mockCreatePagesSite).toHaveBeenCalledTimes(0)
176163
})
177164

178165
it('does not make a second request to get page if create fails for reason other than existence', async () => {
179-
jest.spyOn(axios, 'get').mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
180-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.reject({ response: { status: 500 } })) // just so they both aren't 404
166+
mockGetPages.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
167+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 500 } })) // just so they both aren't 404
181168

182169
let erred = false
183170
try {
184171
await apiClient.findOrCreatePagesSite({
185-
repositoryNwo: GITHUB_REPOSITORY,
186172
githubToken: GITHUB_TOKEN
187173
})
188174
} catch (error) {
@@ -191,25 +177,23 @@ describe('apiClient', () => {
191177
expect(error.response.status).toEqual(500)
192178
}
193179
expect(erred).toBe(true)
194-
expect(axios.get).toHaveBeenCalledTimes(1)
195-
expect(axios.post).toHaveBeenCalledTimes(1)
180+
expect(mockGetPages).toHaveBeenCalledTimes(1)
181+
expect(mockCreatePagesSite).toHaveBeenCalledTimes(1)
196182
})
197183

198184
it('makes second request to get page if create fails because of existence', async () => {
199185
const PAGE_OBJECT = { html_url: 'https://actions.github.io/is-awesome/' }
200-
jest
201-
.spyOn(axios, 'get')
186+
mockGetPages
202187
.mockImplementationOnce(() => Promise.reject({ response: { status: 404 } }))
203188
.mockImplementationOnce(() => Promise.resolve({ status: 200, data: PAGE_OBJECT }))
204-
jest.spyOn(axios, 'post').mockImplementationOnce(() => Promise.reject({ response: { status: 409 } }))
189+
mockCreatePagesSite.mockImplementationOnce(() => Promise.reject({ response: { status: 409 } }))
205190

206191
const result = await apiClient.findOrCreatePagesSite({
207-
repositoryNwo: GITHUB_REPOSITORY,
208192
githubToken: GITHUB_TOKEN
209193
})
210194
expect(result).toEqual(PAGE_OBJECT)
211-
expect(axios.get).toHaveBeenCalledTimes(2)
212-
expect(axios.post).toHaveBeenCalledTimes(1)
195+
expect(mockGetPages).toHaveBeenCalledTimes(2)
196+
expect(mockCreatePagesSite).toHaveBeenCalledTimes(1)
213197
})
214198
})
215199
})

src/context.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ const core = require('@actions/core')
33
// Load variables from Actions runtime
44
function getRequiredVars() {
55
return {
6-
repositoryNwo: process.env.GITHUB_REPOSITORY,
76
githubToken: core.getInput('token'),
87
staticSiteGenerator: core.getInput('static_site_generator'),
98
generatorConfigFile: core.getInput('generator_config_file'),

src/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ const outputPagesBaseUrl = require('./output-pages-base-url')
99

1010
async function main() {
1111
try {
12-
const { repositoryNwo, githubToken, enablement, staticSiteGenerator, generatorConfigFile } = getContext()
12+
const { githubToken, enablement, staticSiteGenerator, generatorConfigFile } = getContext()
1313

14-
const pageObject = await findOrCreatePagesSite({ repositoryNwo, githubToken, enablement })
14+
const pageObject = await findOrCreatePagesSite({ githubToken, enablement })
1515
const siteUrl = new URL(pageObject.html_url)
1616

1717
if (staticSiteGenerator) {

0 commit comments

Comments
 (0)