diff --git a/src/get-pages-base-url.js b/src/get-pages-base-url.js new file mode 100644 index 0000000..eda3053 --- /dev/null +++ b/src/get-pages-base-url.js @@ -0,0 +1,33 @@ +const core = require('@actions/core') +const axios = require('axios') + +async function getPagesBaseUrl({ repositoryNwo, githubToken}) { + try { + const pagesEndpoint = `https://api.github.com/repos/${repositoryNwo}/pages` + + core.info(`Get the Base URL to the page with endpoint ${pagesEndpoint}`) + const response = await axios.get( + pagesEndpoint, + { + headers: { + Accept: 'application/vnd.github.v3+json', + Authorization: `Bearer ${githubToken}` + } + } + ) + + pageObject = response.data + core.info(JSON.stringify(pageObject)) + + const siteUrl = new URL(pageObject.html_url) + core.setOutput('base_url', siteUrl.href) + core.setOutput('origin', siteUrl.origin) + core.setOutput('host', siteUrl.host) + core.setOutput('base_path', siteUrl.pathname) + } catch (error) { + core.error('Get on the Page failed', error) + throw error + } +} + +module.exports = getPagesBaseUrl diff --git a/src/get-pages-base-url.test.js b/src/get-pages-base-url.test.js new file mode 100644 index 0000000..a8ec246 --- /dev/null +++ b/src/get-pages-base-url.test.js @@ -0,0 +1,68 @@ +const core = require('@actions/core') +const axios = require('axios') +//const { expect, jest } = require('@jest/globals') + +const getPagesBaseUrl = require('./get-pages-base-url') + +describe('getPagesBaseUrl', () => { + const GITHUB_REPOSITORY = 'paper-spa/is-awesome' + const GITHUB_TOKEN = 'gha-token' + + beforeEach(() => { + jest.restoreAllMocks() + + jest.spyOn(core, 'setOutput').mockImplementation((key, value) => { key, value }) + jest.spyOn(core, 'setFailed').mockImplementation(param => param) + + // Mock error/warning/info/debug + jest.spyOn(core, 'error').mockImplementation(jest.fn()) + jest.spyOn(core, 'warning').mockImplementation(jest.fn()) + jest.spyOn(core, 'info').mockImplementation(jest.fn()) + jest.spyOn(core, 'debug').mockImplementation(jest.fn()) + }) + + it('gets expected outputs for profile site', async () => { + const baseUrl = 'https://octocat.github.io/' + + jest + .spyOn(axios, 'get') + .mockImplementationOnce(() => Promise.resolve({ data: { html_url: baseUrl } })) + + await getPagesBaseUrl({ repositoryNwo: GITHUB_REPOSITORY, githubToken: GITHUB_TOKEN }) + + expect(core.setOutput).toHaveBeenCalledWith('base_url', baseUrl) + expect(core.setOutput).toHaveBeenCalledWith('origin', 'https://octocat.github.io') + expect(core.setOutput).toHaveBeenCalledWith('host', 'octocat.github.io') + expect(core.setOutput).toHaveBeenCalledWith('base_path', '/') + }) + + it('gets expected outputs for project site', async () => { + const baseUrl = 'https://octocat.github.io/my-repo/' + + jest + .spyOn(axios, 'get') + .mockImplementationOnce(() => Promise.resolve({ data: { html_url: baseUrl } })) + + await getPagesBaseUrl({ repositoryNwo: GITHUB_REPOSITORY, githubToken: GITHUB_TOKEN }) + + expect(core.setOutput).toHaveBeenCalledWith('base_url', baseUrl) + expect(core.setOutput).toHaveBeenCalledWith('origin', 'https://octocat.github.io') + expect(core.setOutput).toHaveBeenCalledWith('host', 'octocat.github.io') + expect(core.setOutput).toHaveBeenCalledWith('base_path', '/my-repo/') + }) + + it('gets expected outputs for site with custom domain name', async () => { + const baseUrl = 'https://www.example.com/' + + jest + .spyOn(axios, 'get') + .mockImplementationOnce(() => Promise.resolve({ data: { html_url: baseUrl } })) + + await getPagesBaseUrl({ repositoryNwo: GITHUB_REPOSITORY, githubToken: GITHUB_TOKEN }) + + expect(core.setOutput).toHaveBeenCalledWith('base_url', baseUrl) + expect(core.setOutput).toHaveBeenCalledWith('origin', 'https://www.example.com') + expect(core.setOutput).toHaveBeenCalledWith('host', 'www.example.com') + expect(core.setOutput).toHaveBeenCalledWith('base_path', '/') + }) +}) diff --git a/src/index.js b/src/index.js index 2a9e3a7..31b5785 100644 --- a/src/index.js +++ b/src/index.js @@ -1,48 +1,16 @@ const core = require('@actions/core') -const axios = require('axios') + +const getPagesBaseUrl = require('./get-pages-base-url') // All variables we need from the runtime are loaded here const getContext = require('./context') -async function getPageBaseUrl() { - try { - const context = getContext() - - const pagesEndpoint = `https://api.github.com/repos/${context.repositoryNwo}/pages` - - core.info("GITHUB_TOKEN : " + context.githubToken) - - core.info(`Get the Base URL to the page with endpoint ${pagesEndpoint}`) - const response = await axios.get( - pagesEndpoint, - { - headers: { - Accept: 'application/vnd.github.v3+json', - Authorization: `Bearer ${context.githubToken}` - } - } - ) - - pageObject = response.data - core.info(JSON.stringify(pageObject)) - - const siteUrl = new URL(pageObject.html_url) - core.setOutput('base_url', siteUrl.href) - core.setOutput('origin', siteUrl.origin) - core.setOutput('host', siteUrl.host) - core.setOutput('base_path', siteUrl.pathname) - } catch (e) { - console.info('Get on the Page failed', e) - process.exit(1) - } -} - - async function main() { try { - await getPageBaseUrl() + await getPagesBaseUrl(context) } catch (error) { core.setFailed(error) + process.exit(1) } } diff --git a/src/index.test.js b/src/index.test.js deleted file mode 100644 index 9fff564..0000000 --- a/src/index.test.js +++ /dev/null @@ -1,32 +0,0 @@ -const core = require('@actions/core') -const path = require('path') -const cp = require('child_process') -const nock = require('nock') -const axios = require('axios') -const { expect, jest } = require('@jest/globals') - -describe('GET', () => { - beforeAll(() => { - process.env.GITHUB_REPOSITORY = 'paper-spa/is-awesome' - process.env.GITHUB_TOKEN = 'gha-token' - - jest.spyOn(core, 'setOutput').mockImplementation(param => { - return param - }) - - jest.spyOn(core, 'setFailed').mockImplementation(param => { - return param - }) - // Mock error/warning/info/debug - jest.spyOn(core, 'error').mockImplementation(jest.fn()) - jest.spyOn(core, 'warning').mockImplementation(jest.fn()) - jest.spyOn(core, 'info').mockImplementation(jest.fn()) - jest.spyOn(core, 'debug').mockImplementation(jest.fn()) - }) - - - it('can successfully get the page', async () => { - axios.get = jest.fn().mockResolvedValue({ data: { html_url: "blah" } )) - - - }