mirror of
https://github.com/actions/configure-pages.git
synced 2025-12-08 08:06:09 +00:00
91 lines
2.4 KiB
JavaScript
91 lines
2.4 KiB
JavaScript
const axios = require('axios')
|
|
const core = require('@actions/core')
|
|
const HPA = require('https-proxy-agent')
|
|
|
|
function getApiBaseUrl() {
|
|
return process.env.GITHUB_API_URL || 'https://api.github.com'
|
|
}
|
|
|
|
async function enablePagesSite({ repositoryNwo, githubToken, proxy }) {
|
|
const pagesEndpoint = `${getApiBaseUrl()}/repos/${repositoryNwo}/pages`
|
|
|
|
try {
|
|
const response = await axios.post(
|
|
pagesEndpoint,
|
|
{ build_type: 'workflow' },
|
|
{
|
|
...(proxy ? {httpsAgent: HPA(proxy)} : {}),
|
|
headers: {
|
|
Accept: 'application/vnd.github.v3+json',
|
|
Authorization: `Bearer ${githubToken}`,
|
|
'Content-type': 'application/json'
|
|
}
|
|
}
|
|
)
|
|
|
|
const pageObject = response.data
|
|
return pageObject
|
|
} catch (error) {
|
|
if (error.response && error.response.status === 409) {
|
|
return null
|
|
}
|
|
|
|
throw error
|
|
}
|
|
}
|
|
|
|
async function getPagesSite({ repositoryNwo, githubToken, proxy }) {
|
|
const pagesEndpoint = `${getApiBaseUrl()}/repos/${repositoryNwo}/pages`
|
|
|
|
const response = await axios.get(pagesEndpoint, {
|
|
...(proxy ? {httpsAgent: HPA(proxy)} : {}),
|
|
headers: {
|
|
Accept: 'application/vnd.github.v3+json',
|
|
Authorization: `Bearer ${githubToken}`
|
|
}
|
|
})
|
|
|
|
const pageObject = response.data
|
|
return pageObject
|
|
}
|
|
|
|
async function findOrCreatePagesSite({ repositoryNwo, githubToken, enablement = true }) {
|
|
let pageObject
|
|
|
|
// Try to find an existing Pages site first
|
|
try {
|
|
pageObject = await getPagesSite({ repositoryNwo, githubToken })
|
|
} catch (error) {
|
|
if (!enablement) {
|
|
core.error('Get Pages site failed', error)
|
|
throw error
|
|
}
|
|
core.warning('Get Pages site failed', error)
|
|
}
|
|
|
|
if (!pageObject && enablement) {
|
|
// Create a new Pages site if one doesn't exist
|
|
try {
|
|
pageObject = await enablePagesSite({ repositoryNwo, githubToken })
|
|
} catch (error) {
|
|
core.error('Create Pages site failed', error)
|
|
throw error
|
|
}
|
|
|
|
// This somehow implies that the Pages site was already created but initially failed to be retrieved.
|
|
// Try one more time for this extreme edge case!
|
|
if (pageObject == null) {
|
|
try {
|
|
pageObject = await getPagesSite({ repositoryNwo, githubToken })
|
|
} catch (error) {
|
|
core.error('Get Pages site still failed', error)
|
|
throw error
|
|
}
|
|
}
|
|
}
|
|
|
|
return pageObject
|
|
}
|
|
|
|
module.exports = { findOrCreatePagesSite, enablePagesSite, getPagesSite, getApiBaseUrl }
|