2023-02-22 07:55:03 -06:00
|
|
|
const core = require('@actions/core')
|
|
|
|
|
const github = require('@actions/github')
|
2023-03-08 19:43:11 -06:00
|
|
|
|
2023-10-27 16:34:41 -04:00
|
|
|
async function getArtifactMetadata({ githubToken, runId, artifactName }) {
|
2023-10-27 16:13:35 -04:00
|
|
|
const octokit = github.getOctokit(githubToken)
|
|
|
|
|
|
|
|
|
|
try {
|
2023-10-27 17:40:12 -04:00
|
|
|
core.info(`Fetching artifact metadata for ${artifactName} in run ${runId}`)
|
2023-10-27 16:34:41 -04:00
|
|
|
|
2023-10-30 14:58:12 -04:00
|
|
|
const response = await octokit.request(
|
|
|
|
|
'GET /repos/{owner}/{repo}/actions/runs/{run_id}/artifacts?name={artifactName}',
|
|
|
|
|
{
|
|
|
|
|
owner: github.context.repo.owner,
|
|
|
|
|
repo: github.context.repo.repo,
|
|
|
|
|
run_id: runId,
|
|
|
|
|
artifactName: artifactName
|
|
|
|
|
}
|
|
|
|
|
)
|
2023-10-27 16:13:35 -04:00
|
|
|
|
2023-10-27 17:40:12 -04:00
|
|
|
const artifactCount = response.data.total_count
|
|
|
|
|
core.debug(`List artifact count: ${artifactCount}`)
|
|
|
|
|
|
|
|
|
|
if (artifactCount === 0) {
|
2023-10-30 14:58:12 -04:00
|
|
|
throw new Error(
|
|
|
|
|
`No artifacts found for workflow run ${runId}. Ensure artifacts are uploaded with actions/artifact@v4 or later.`
|
|
|
|
|
)
|
2023-10-27 17:40:12 -04:00
|
|
|
} else if (artifactCount > 1) {
|
2023-10-30 14:58:12 -04:00
|
|
|
throw new Error(
|
|
|
|
|
`Multiple artifact unexpectedly found for workflow run ${runId}. Artifact count is ${artifactCount}.`
|
|
|
|
|
)
|
2023-10-27 17:40:12 -04:00
|
|
|
}
|
2023-10-30 14:58:12 -04:00
|
|
|
|
2023-10-27 17:40:12 -04:00
|
|
|
const artifact = response.data.artifacts[0]
|
|
|
|
|
core.debug(`Artifact: ${JSON.stringify(artifact)}`)
|
|
|
|
|
|
|
|
|
|
const artifactSize = artifact.size_in_bytes
|
|
|
|
|
if (!artifactSize) {
|
|
|
|
|
core.warning('Artifact size was not found. Unable to verify if artifact size exceeds the allowed size.')
|
|
|
|
|
}
|
2023-10-30 14:58:12 -04:00
|
|
|
|
2023-10-27 17:40:12 -04:00
|
|
|
return {
|
|
|
|
|
id: artifact.id,
|
|
|
|
|
size: artifactSize
|
|
|
|
|
}
|
2023-10-27 16:13:35 -04:00
|
|
|
} catch (error) {
|
|
|
|
|
core.error('Fetching artifact metadata failed', error)
|
|
|
|
|
throw error
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-10-27 17:50:16 -04:00
|
|
|
async function createPagesDeployment({ githubToken, artifactId, buildVersion, idToken, isPreview = false }) {
|
2023-02-22 07:55:03 -06:00
|
|
|
const octokit = github.getOctokit(githubToken)
|
|
|
|
|
|
|
|
|
|
const payload = {
|
2023-10-27 17:50:16 -04:00
|
|
|
artifact_id: artifactId,
|
2023-02-22 07:55:03 -06:00
|
|
|
pages_build_version: buildVersion,
|
|
|
|
|
oidc_token: idToken
|
|
|
|
|
}
|
|
|
|
|
if (isPreview === true) {
|
|
|
|
|
payload.preview = true
|
|
|
|
|
}
|
|
|
|
|
core.info(`Creating Pages deployment with payload:\n${JSON.stringify(payload, null, '\t')}`)
|
|
|
|
|
|
|
|
|
|
try {
|
2023-03-15 15:33:59 -04:00
|
|
|
const response = await octokit.request('POST /repos/{owner}/{repo}/pages/deployments', {
|
2023-02-22 07:55:03 -06:00
|
|
|
owner: github.context.repo.owner,
|
|
|
|
|
repo: github.context.repo.repo,
|
|
|
|
|
...payload
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return response.data
|
|
|
|
|
} catch (error) {
|
|
|
|
|
core.error('Creating Pages deployment failed', error)
|
|
|
|
|
throw error
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function getPagesDeploymentStatus({ githubToken, deploymentId }) {
|
|
|
|
|
const octokit = github.getOctokit(githubToken)
|
|
|
|
|
|
|
|
|
|
core.info('Getting Pages deployment status...')
|
|
|
|
|
try {
|
2023-03-15 15:33:59 -04:00
|
|
|
const response = await octokit.request('GET /repos/{owner}/{repo}/pages/deployments/{deploymentId}', {
|
2023-02-22 07:55:03 -06:00
|
|
|
owner: github.context.repo.owner,
|
|
|
|
|
repo: github.context.repo.repo,
|
|
|
|
|
deploymentId
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return response.data
|
|
|
|
|
} catch (error) {
|
|
|
|
|
core.error('Getting Pages deployment status failed', error)
|
|
|
|
|
throw error
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
async function cancelPagesDeployment({ githubToken, deploymentId }) {
|
|
|
|
|
const octokit = github.getOctokit(githubToken)
|
|
|
|
|
|
|
|
|
|
core.info('Canceling Pages deployment...')
|
|
|
|
|
try {
|
2023-03-15 15:33:59 -04:00
|
|
|
const response = await octokit.request('POST /repos/{owner}/{repo}/pages/deployments/{deploymentId}/cancel', {
|
2023-02-22 07:55:03 -06:00
|
|
|
owner: github.context.repo.owner,
|
|
|
|
|
repo: github.context.repo.repo,
|
|
|
|
|
deploymentId
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
return response.data
|
|
|
|
|
} catch (error) {
|
|
|
|
|
core.error('Canceling Pages deployment failed', error)
|
|
|
|
|
throw error
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
module.exports = {
|
2023-10-27 16:13:35 -04:00
|
|
|
getArtifactMetadata,
|
2023-02-22 07:55:03 -06:00
|
|
|
createPagesDeployment,
|
|
|
|
|
getPagesDeploymentStatus,
|
|
|
|
|
cancelPagesDeployment
|
|
|
|
|
}
|