Compare commits

..

46 Commits

Author SHA1 Message Date
James M. Greene
a87638c69c Merge pull request #52 from actions/dependabot/npm_and_yarn/actions/core-1.9.1
Bump @actions/core from 1.6.0 to 1.9.1
2022-08-19 12:16:59 -05:00
James M. Greene
85d735dc73 Update distributables 2022-08-19 12:14:36 -05:00
dependabot[bot]
2e87ed0ac6 Bump @actions/core from 1.6.0 to 1.9.1
Bumps [@actions/core](https://github.com/actions/toolkit/tree/HEAD/packages/core) from 1.6.0 to 1.9.1.
- [Release notes](https://github.com/actions/toolkit/releases)
- [Changelog](https://github.com/actions/toolkit/blob/main/packages/core/RELEASES.md)
- [Commits](https://github.com/actions/toolkit/commits/HEAD/packages/core)

---
updated-dependencies:
- dependency-name: "@actions/core"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-08-18 19:49:21 +00:00
James M. Greene
e490850a64 Lowercase the README title 2022-08-10 14:01:18 -05:00
James M. Greene
5743579482 Merge pull request #49 from actions/marketplace-unique-name
Update Action name to enable Marketplace publishing
2022-08-10 14:00:26 -05:00
James M. Greene
5fd268dcdd Update name per suggestion 2022-08-10 12:59:11 -05:00
James M. Greene
fbb46fa661 Update Action name for Marketplace publishing 2022-08-09 22:15:35 -05:00
Mingzi
eaaccf9fc5 Merge pull request #46 from actions/bug-fixing
Fix hardcoded api endpoint and artifact name lookup
2022-08-04 18:06:53 -07:00
yimysty
8daa1e0ead add syntax sugar back 2022-08-04 17:11:26 -07:00
yimysty
99f9079292 roll into right node syntax 2022-08-04 17:09:46 -07:00
yimysty
06d025f427 update node test version 2022-08-04 17:05:51 -07:00
yimysty
7f629c4ce0 apply the syntax 2022-08-04 17:04:26 -07:00
yimysty
35e615a00c check if it's due to "." 2022-08-04 16:56:13 -07:00
yimysty
462df77e16 add more log to debug 2022-08-04 16:52:07 -07:00
yimysty
9ebae0d26b try print error message 2022-08-04 16:25:55 -07:00
yimysty
d0b379e44d move artifact url out of context 2022-08-04 16:23:15 -07:00
yimysty
225abf7840 increase test timeout 2022-08-04 16:13:28 -07:00
yimysty
1f0422c0df add some debug log? 2022-08-04 16:07:20 -07:00
yimysty
85b0d1617e moke get artifact name 2022-08-04 16:02:46 -07:00
yimysty
3e976523d7 adjust pages hard code endpoint + fix artifact look up 2022-08-04 15:43:58 -07:00
Yoann Chaudet
38e42fe573 Merge pull request #42 from actions/more-doc
Update README to document a few things
2022-07-27 13:33:20 -07:00
Yoann Chaudet
44ea2ec0c1 Fix titles 2022-07-26 11:16:01 -07:00
Yoann Chaudet
b4e423ab11 Update README.md
Co-authored-by: Tommy Byrd <tcbyrd@github.com>
2022-07-26 11:14:52 -07:00
Yoann Chaudet
58b7d54130 Update README.md
Co-authored-by: Tommy Byrd <tcbyrd@github.com>
2022-07-26 11:14:35 -07:00
Yoann Chaudet
974e2a6ded Update README.md
Co-authored-by: Tommy Byrd <tcbyrd@github.com>
2022-07-26 11:11:30 -07:00
Yoann Chaudet
f5d172a561 Update README.md
Co-authored-by: Tommy Byrd <tcbyrd@github.com>
2022-07-26 11:11:16 -07:00
Yoann Chaudet
33bba0fd45 Update README.md
Co-authored-by: Tommy Byrd <tcbyrd@github.com>
2022-07-26 11:10:56 -07:00
Yoann Chaudet
1f18c7a3ba Document default too 2022-07-26 11:09:31 -07:00
Yoann Chaudet
86843fdbb5 Update README to document a few things 2022-07-26 10:47:31 -07:00
Mingzi
4d0af465be Merge pull request #41 from DarkC35/patch-1
Fix compare URL in Release
2022-07-05 14:44:51 -07:00
DarkC
bea9114e88 fix compare url in release 2022-07-05 12:24:09 +02:00
Mingzi
41f0a8ab89 Merge pull request #40 from actions/improve-error-message
Improve error message
2022-06-29 10:37:48 -07:00
yimysty
b918908973 run npm generate file 2022-06-29 10:35:08 -07:00
Mingzi
1ae5d2452b Update src/deployment.js
Co-authored-by: Yoann Chaudet <yoannchaudet@github.com>
2022-06-29 10:16:32 -07:00
yimysty
e2219a89b1 fix broken test cases 2022-06-28 18:18:42 -07:00
yimysty
72b116b825 fix unintended changes 2022-06-28 18:01:48 -07:00
yimysty
11a13019c2 adjust debugging message 2022-06-28 17:58:10 -07:00
yimysty
801d74db09 switch to console.log 2022-06-28 17:55:21 -07:00
yimysty
64c69a5fdf normalize error message 2022-06-28 17:50:08 -07:00
yimysty
03d70e4a19 info stack trace 2022-06-28 17:44:21 -07:00
yimysty
64e33b2a0d info stack trace 2022-06-28 17:39:10 -07:00
yimysty
c3d24faf75 info stack trace 2022-06-28 17:38:14 -07:00
yimysty
2b0c6eaf67 try output stacktrace as well 2022-06-28 17:35:03 -07:00
yimysty
358b034ef8 improve error message 2022-06-28 16:08:07 -07:00
Yoann Chaudet
13ef0cb0a0 Merge pull request #39 from actions/joshmgross/add-codeowners
Add CODEOWNERS
2022-06-14 13:30:16 -07:00
Josh Gross
2bf05927ae Add CODEOWNERS 2022-06-14 14:39:58 -04:00
18 changed files with 3083 additions and 591 deletions

View File

@@ -4,7 +4,7 @@ tag-template: 'v$RESOLVED_VERSION'
template: | template: |
# Changelog # Changelog
$CHANGES $CHANGES
See details of [all code changes](https://github.com/actions/jekyll-build-pages/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION) since previous release See details of [all code changes](https://github.com/actions/deploy-pages/compare/$PREVIOUS_TAG...v$RESOLVED_VERSION) since previous release
categories: categories:
- title: '🚀 Features' - title: '🚀 Features'
labels: labels:

View File

@@ -15,7 +15,7 @@ jobs:
- name: Set Node.JS - name: Set Node.JS
uses: actions/setup-node@v2 uses: actions/setup-node@v2
with: with:
node-version: 12.x node-version: 16.x
- name: Install dependencies - name: Install dependencies
run: npm install run: npm install

1
CODEOWNERS Normal file
View File

@@ -0,0 +1 @@
* @actions/pages

View File

@@ -1,17 +1,73 @@
# Deploy-Pages # deploy-pages
This deploys artifacts to GitHub Pages. This action is used to deploy [Actions artifacts][artifacts] to GitHub Pages.
# Scope ## Scope
⚠️ Official support for building Pages with Actions is in public beta at the moment. The scope is currently limited to **public repositories only**. ⚠️ Official support for building Pages with Actions is in public beta at the moment.
# Usage ## Usage
See [action.yml](action.yml) See [action.yml](action.yml) for the various `inputs` this action supports.
<!-- TODO: document custom workflow --> For examples that make use of this action, check out our [starter-workflows][starter-workflows] in a variety of frameworks.
# License This action expects an artifact named `github-pages` to have been created prior to execution. This is done automatically using [`actions/upload-pages-artifact`][upload-pages-artifact].
We recommend this action to be used in a dedicated job:
```yaml
jobs:
# Build job
build:
# <Not provided for brevity>
# At a minimum this job should upload artifacts using actions/upload-pages-artifact
# Deploy job
deploy:
# Add a dependency to the build job
needs: build
# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
# Specify runner + deployment step
runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v1
```
## Security considerations
There are a few important considerations to be aware of:
1. The artifact being deployed must have been uploaded in a previous step, either in the same job or a separate job that doesn't execute until the upload is complete.
2. The job that executes the deployment must at minimum have the following permissions:
- `pages: write`
- `id-token: write`
3. The deployment should target the `github-pages` environment (you may use a different environment name if needed, but this is not recommended.)
4. If your Pages site is using a source branch, the deployment must originate from this source branch unless [your environment is protected][environment-protection] in which case the environment protection rules take precedence over the source branch rule
5. If your Pages site is using GitHub Actions as the source, while not required we highly recommend you also [protect your environment][environment-protection] (we do it by default for you)
## License
The scripts and documentation in this project are released under the [MIT License](LICENSE). The scripts and documentation in this project are released under the [MIT License](LICENSE).
<!-- references -->
[starter-workflows]: https://github.com/actions/starter-workflows/tree/main/pages
[upload-pages-artifact]: https://github.com/actions/upload-pages-artifact
[artifacts]: https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts
[environment-protection]: https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#environment-protection-rules

View File

@@ -1,5 +1,6 @@
name: 'Deploy to GitHub Pages' name: 'Deploy GitHub Pages site'
description: 'A GitHub Action to deploy an artifact to GitHub Pages' description: 'A GitHub Action to deploy an artifact as a GitHub Pages site'
author: 'GitHub'
runs: runs:
using: 'node16' using: 'node16'
main: 'dist/index.js' main: 'dist/index.js'
@@ -24,6 +25,10 @@ inputs:
description: 'Time in milliseconds between two deployment status report (default: 5 seconds)' description: 'Time in milliseconds between two deployment status report (default: 5 seconds)'
required: false required: false
default: "5000" default: "5000"
artifact_name:
description: 'Name of the artifact to deploy'
required: false
default: "github-pages"
outputs: outputs:
page_url: page_url:
description: 'URL to deployed GitHub Pages' description: 'URL to deployed GitHub Pages'

1713
dist/index.js vendored

File diff suppressed because it is too large Load Diff

2
dist/index.js.map vendored

File diff suppressed because one or more lines are too long

13
dist/licenses.txt vendored
View File

@@ -258,3 +258,16 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
uuid
MIT
The MIT License (MIT)
Copyright (c) 2010-2020 Robert Kieffer and other contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

51
package-lock.json generated
View File

@@ -10,7 +10,7 @@
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/artifact": "^0.5.2", "@actions/artifact": "^0.5.2",
"@actions/core": "^1.6.0", "@actions/core": "^1.9.1",
"@babel/plugin-transform-runtime": "^7.16.0", "@babel/plugin-transform-runtime": "^7.16.0",
"axios": "^0.24.0", "axios": "^0.24.0",
"axios-retry": "^3.2.4", "axios-retry": "^3.2.4",
@@ -42,11 +42,20 @@
} }
}, },
"node_modules/@actions/core": { "node_modules/@actions/core": {
"version": "1.6.0", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz",
"integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==",
"dependencies": { "dependencies": {
"@actions/http-client": "^1.0.11" "@actions/http-client": "^2.0.1",
"uuid": "^8.3.2"
}
},
"node_modules/@actions/core/node_modules/@actions/http-client": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"dependencies": {
"tunnel": "^0.0.6"
} }
}, },
"node_modules/@actions/http-client": { "node_modules/@actions/http-client": {
@@ -7210,6 +7219,14 @@
"punycode": "^2.1.0" "punycode": "^2.1.0"
} }
}, },
"node_modules/uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
"bin": {
"uuid": "dist/bin/uuid"
}
},
"node_modules/v8-compile-cache": { "node_modules/v8-compile-cache": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -7470,11 +7487,22 @@
} }
}, },
"@actions/core": { "@actions/core": {
"version": "1.6.0", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/@actions/core/-/core-1.6.0.tgz", "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.9.1.tgz",
"integrity": "sha512-NB1UAZomZlCV/LmJqkLhNTqtKfFXJZAUPcfl/zqG7EfsQdeUJtaWO98SGbuQ3pydJ3fHl2CvI/51OKYlCYYcaw==", "integrity": "sha512-5ad+U2YGrmmiw6du20AQW5XuWo7UKN2052FjSV7MX+Wfjf8sCqcsZe62NfgHys4QI4/Y+vQvLKYL8jWtA1ZBTA==",
"requires": { "requires": {
"@actions/http-client": "^1.0.11" "@actions/http-client": "^2.0.1",
"uuid": "^8.3.2"
},
"dependencies": {
"@actions/http-client": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.0.1.tgz",
"integrity": "sha512-PIXiMVtz6VvyaRsGY268qvj57hXQEpsYogYOu2nrQhlf+XCGmZstmuZBbAybUl1nQGnvS1k1eEsQ69ZoD7xlSw==",
"requires": {
"tunnel": "^0.0.6"
}
}
} }
}, },
"@actions/http-client": { "@actions/http-client": {
@@ -12785,6 +12813,11 @@
"punycode": "^2.1.0" "punycode": "^2.1.0"
} }
}, },
"uuid": {
"version": "8.3.2",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
},
"v8-compile-cache": { "v8-compile-cache": {
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",

View File

@@ -5,7 +5,7 @@
"main": "./dist/index.js", "main": "./dist/index.js",
"dependencies": { "dependencies": {
"@actions/artifact": "^0.5.2", "@actions/artifact": "^0.5.2",
"@actions/core": "^1.6.0", "@actions/core": "^1.9.1",
"@babel/plugin-transform-runtime": "^7.16.0", "@babel/plugin-transform-runtime": "^7.16.0",
"axios": "^0.24.0", "axios": "^0.24.0",
"regenerator-runtime": "^0.13.9", "regenerator-runtime": "^0.13.9",

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

View File

@@ -258,3 +258,16 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE. THE SOFTWARE.
uuid
MIT
The MIT License (MIT)
Copyright (c) 2010-2020 Robert Kieffer and other contributors
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -10,7 +10,9 @@ function getRequiredVars() {
buildVersion: process.env.GITHUB_SHA, buildVersion: process.env.GITHUB_SHA,
buildActor: process.env.GITHUB_ACTOR, buildActor: process.env.GITHUB_ACTOR,
actionsId: process.env.GITHUB_ACTION, actionsId: process.env.GITHUB_ACTION,
githubToken: core.getInput('token') githubToken: core.getInput('token'),
githubApiUrl: process.env.GITHUB_API_URL ?? 'https://api.github.com',
artifactName: core.getInput('artifact_name') ?? 'github-pages'
} }
} }

View File

@@ -25,6 +25,8 @@ class Deployment {
this.workflowRun = context.workflowRun this.workflowRun = context.workflowRun
this.requestedDeployment = false this.requestedDeployment = false
this.deploymentInfo = null this.deploymentInfo = null
this.githubApiUrl = context.githubApiUrl
this.artifactName = context.artifactName
} }
// Ask the runtime for the unsigned artifact URL and deploy to GitHub Pages // Ask the runtime for the unsigned artifact URL and deploy to GitHub Pages
@@ -33,7 +35,7 @@ class Deployment {
try { try {
core.info(`Actor: ${this.buildActor}`) core.info(`Actor: ${this.buildActor}`)
core.info(`Action ID: ${this.actionsId}`) core.info(`Action ID: ${this.actionsId}`)
const pagesDeployEndpoint = `https://api.github.com/repos/${this.repositoryNwo}/pages/deployment` const pagesDeployEndpoint = `${this.githubApiUrl}/repos/${this.repositoryNwo}/pages/deployment`
const artifactExgUrl = `${this.runTimeUrl}_apis/pipelines/workflows/${this.workflowRun}/artifacts?api-version=6.0-preview` const artifactExgUrl = `${this.runTimeUrl}_apis/pipelines/workflows/${this.workflowRun}/artifacts?api-version=6.0-preview`
core.info(`Artifact URL: ${artifactExgUrl}`) core.info(`Artifact URL: ${artifactExgUrl}`)
const {data} = await axios.get(artifactExgUrl, { const {data} = await axios.get(artifactExgUrl, {
@@ -43,10 +45,12 @@ class Deployment {
} }
}) })
core.info(JSON.stringify(data)) core.info(JSON.stringify(data))
if (data.value.length == 0) { const artifactRawUrl = data?.value?.find(artifact => artifact.name === this.artifactName)?.url
throw new Error('No uploaded artifact was found! Please check if there are any errors at build step.') if (!artifactRawUrl) {
throw new Error('No uploaded artifact was found! Please check if there are any errors at build step, or uploaded artifact name is correct.')
} }
const artifactUrl = `${data.value[0].url}&%24expand=SignedContent`
const artifactUrl = `${artifactRawUrl}&%24expand=SignedContent`
const payload = { const payload = {
artifact_url: artifactUrl, artifact_url: artifactUrl,
pages_build_version: this.buildVersion, pages_build_version: this.buildVersion,
@@ -62,15 +66,41 @@ class Deployment {
}) })
this.requestedDeployment = true this.requestedDeployment = true
core.info(`Created deployment for ${this.buildVersion}`) core.info(`Created deployment for ${this.buildVersion}`)
core.info(JSON.stringify(response.data)) if (response && response.data) {
this.deploymentInfo = response.data core.info(JSON.stringify(response.data))
} catch (error) { this.deploymentInfo = response.data
core.info(`Failed to create deployment for ${this.buildVersion}.`) }
if (error.response && error.response.data) { } catch (error) {
core.info(JSON.stringify(error.response.data))
core.info(error.stack)
// output raw error in debug mode.
core.debug(JSON.stringify(error))
// build customized error message based on server response
if (error.response) {
let errorMessage = `Failed to create deployment (status: ${error.response.status}) with build version ${this.buildVersion}. `
if (error.response.status == 400) {
let message = ""
if (error.response.data && error.response.data.message) {
message = error.response.data.message
} else {
message = error.response.data
}
errorMessage += `Responded with: ${message}`
}
else if (error.response.status == 403) {
errorMessage += `Ensure GITHUB_TOKEN has permission "pages: write".`
} else if (error.response.status == 404) {
errorMessage += `Ensure GitHub Pages has been enabled.`
}
else if (error.response.status >= 500) {
errorMessage += `Server error, is githubstatus.com reporting a Pages outage? Please re-run the deployment at a later time.`
}
throw errorMessage
} else {
throw error
} }
core.setFailed(error)
throw error
} }
} }
@@ -79,7 +109,7 @@ class Deployment {
try { try {
const statusUrl = this.deploymentInfo != null ? const statusUrl = this.deploymentInfo != null ?
this.deploymentInfo["status_url"] : this.deploymentInfo["status_url"] :
`https://api.github.com/repos/${this.repositoryNwo}/pages/deployment/status/${process.env['GITHUB_SHA']}` `${this.githubApiUrl}/repos/${this.repositoryNwo}/pages/deployment/status/${process.env['GITHUB_SHA']}`
core.setOutput('page_url', this.deploymentInfo != null ? this.deploymentInfo["page_url"] : "") core.setOutput('page_url', this.deploymentInfo != null ? this.deploymentInfo["page_url"] : "")
const timeout = Number(core.getInput('timeout')) const timeout = Number(core.getInput('timeout'))
const reportingInterval = Number(core.getInput('reporting_interval')) const reportingInterval = Number(core.getInput('reporting_interval'))

View File

@@ -17,7 +17,7 @@ const deployment = new Deployment()
async function cancelHandler(evtOrExitCodeOrError) { async function cancelHandler(evtOrExitCodeOrError) {
try { try {
if (deployment.requestedDeployment) { if (deployment.requestedDeployment) {
const pagesCancelDeployEndpoint = `https://api.github.com/repos/${process.env.GITHUB_REPOSITORY}/pages/deployment/cancel/${process.env.GITHUB_SHA}` const pagesCancelDeployEndpoint = `${deployment.githubApiUrl}/repos/${process.env.GITHUB_REPOSITORY}/pages/deployment/cancel/${process.env.GITHUB_SHA}`
await axios.put( await axios.put(
pagesCancelDeployEndpoint, pagesCancelDeployEndpoint,
{}, {},
@@ -32,14 +32,21 @@ async function cancelHandler(evtOrExitCodeOrError) {
core.info(`Deployment cancelled with ${pagesCancelDeployEndpoint}`) core.info(`Deployment cancelled with ${pagesCancelDeployEndpoint}`)
} }
} catch (e) { } catch (e) {
console.info('Deployment cancellation failed', e) console.log('Deployment cancellation failed', e)
} }
process.exit(isNaN(+evtOrExitCodeOrError) ? 1 : +evtOrExitCodeOrError) process.exit(isNaN(+evtOrExitCodeOrError) ? 1 : +evtOrExitCodeOrError)
} }
async function main() { async function main() {
let idToken = ""
try {
idToken = await core.getIDToken()
} catch (error) {
console.log(error)
core.setFailed(`Ensure GITHUB_TOKEN has permission "idToken: write".`)
return
}
try { try {
const idToken = await core.getIDToken()
await deployment.create(idToken) await deployment.create(idToken)
await deployment.check() await deployment.check()
} catch (error) { } catch (error) {

View File

@@ -55,6 +55,14 @@ describe('create', () => {
process.env.GITHUB_ACTOR = 'monalisa' process.env.GITHUB_ACTOR = 'monalisa'
process.env.GITHUB_ACTION = '__monalisa/octocat' process.env.GITHUB_ACTION = '__monalisa/octocat'
process.env.GITHUB_ACTION_PATH = 'something' process.env.GITHUB_ACTION_PATH = 'something'
jest.spyOn(core, 'getInput').mockImplementation(param => {
switch (param) {
case 'artifact_name':
return 'github-pages'
case 'token':
return process.env.GITHUB_TOKEN
}
})
jest.spyOn(core, 'setOutput').mockImplementation(param => { jest.spyOn(core, 'setOutput').mockImplementation(param => {
return param return param
@@ -75,7 +83,7 @@ describe('create', () => {
const fakeJwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiNjllMWIxOC1jOGFiLTRhZGQtOGYxOC03MzVlMzVjZGJhZjAiLCJzdWIiOiJyZXBvOnBhcGVyLXNwYS9taW55aTplbnZpcm9ubWVudDpQcm9kdWN0aW9uIiwiYXVkIjoiaHR0cHM6Ly9naXRodWIuY29tL3BhcGVyLXNwYSIsInJlZiI6InJlZnMvaGVhZHMvbWFpbiIsInNoYSI6ImEyODU1MWJmODdiZDk3NTFiMzdiMmM0YjM3M2MxZjU3NjFmYWM2MjYiLCJyZXBvc2l0b3J5IjoicGFwZXItc3BhL21pbnlpIiwicmVwb3NpdG9yeV9vd25lciI6InBhcGVyLXNwYSIsInJ1bl9pZCI6IjE1NDY0NTkzNjQiLCJydW5fbnVtYmVyIjoiMzQiLCJydW5fYXR0ZW1wdCI6IjIiLCJhY3RvciI6IllpTXlzdHkiLCJ3b3JrZmxvdyI6IkNJIiwiaGVhZF9yZWYiOiIiLCJiYXNlX3JlZiI6IiIsImV2ZW50X25hbWUiOiJwdXNoIiwicmVmX3R5cGUiOiJicmFuY2giLCJlbnZpcm9ubWVudCI6IlByb2R1Y3Rpb24iLCJqb2Jfd29ya2Zsb3dfcmVmIjoicGFwZXItc3BhL21pbnlpLy5naXRodWIvd29ya2Zsb3dzL2JsYW5rLnltbEByZWZzL2hlYWRzL21haW4iLCJpc3MiOiJodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwibmJmIjoxNjM4ODI4MDI4LCJleHAiOjE2Mzg4Mjg5MjgsImlhdCI6MTYzODgyODYyOH0.1wyupfxu1HGoTyIqatYg0hIxy2-0bMO-yVlmLSMuu2w' const fakeJwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiJiNjllMWIxOC1jOGFiLTRhZGQtOGYxOC03MzVlMzVjZGJhZjAiLCJzdWIiOiJyZXBvOnBhcGVyLXNwYS9taW55aTplbnZpcm9ubWVudDpQcm9kdWN0aW9uIiwiYXVkIjoiaHR0cHM6Ly9naXRodWIuY29tL3BhcGVyLXNwYSIsInJlZiI6InJlZnMvaGVhZHMvbWFpbiIsInNoYSI6ImEyODU1MWJmODdiZDk3NTFiMzdiMmM0YjM3M2MxZjU3NjFmYWM2MjYiLCJyZXBvc2l0b3J5IjoicGFwZXItc3BhL21pbnlpIiwicmVwb3NpdG9yeV9vd25lciI6InBhcGVyLXNwYSIsInJ1bl9pZCI6IjE1NDY0NTkzNjQiLCJydW5fbnVtYmVyIjoiMzQiLCJydW5fYXR0ZW1wdCI6IjIiLCJhY3RvciI6IllpTXlzdHkiLCJ3b3JrZmxvdyI6IkNJIiwiaGVhZF9yZWYiOiIiLCJiYXNlX3JlZiI6IiIsImV2ZW50X25hbWUiOiJwdXNoIiwicmVmX3R5cGUiOiJicmFuY2giLCJlbnZpcm9ubWVudCI6IlByb2R1Y3Rpb24iLCJqb2Jfd29ya2Zsb3dfcmVmIjoicGFwZXItc3BhL21pbnlpLy5naXRodWIvd29ya2Zsb3dzL2JsYW5rLnltbEByZWZzL2hlYWRzL21haW4iLCJpc3MiOiJodHRwczovL3Rva2VuLmFjdGlvbnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tIiwibmJmIjoxNjM4ODI4MDI4LCJleHAiOjE2Mzg4Mjg5MjgsImlhdCI6MTYzODgyODYyOH0.1wyupfxu1HGoTyIqatYg0hIxy2-0bMO-yVlmLSMuu2w'
const scope = nock(`http://my-url`) const scope = nock(`http://my-url`)
.get('/_apis/pipelines/workflows/123/artifacts?api-version=6.0-preview') .get('/_apis/pipelines/workflows/123/artifacts?api-version=6.0-preview')
.reply(200, { value: [{ url: 'https://fake-artifact.com' }] }) .reply(200, { value: [ {url: 'https://another-artifact.com', name: 'another-artifact'}, { url: 'https://fake-artifact.com', name: 'github-pages' }] })
core.getIDToken = jest.fn().mockResolvedValue(fakeJwt) core.getIDToken = jest.fn().mockResolvedValue(fakeJwt)
axios.post = jest.fn().mockResolvedValue('test') axios.post = jest.fn().mockResolvedValue('test')
@@ -94,7 +102,7 @@ describe('create', () => {
{ {
headers: { headers: {
Accept: 'application/vnd.github.v3+json', Accept: 'application/vnd.github.v3+json',
Authorization: 'Bearer ', Authorization: `Bearer gha-token`,
'Content-type': 'application/json' 'Content-type': 'application/json'
} }
} }
@@ -112,7 +120,7 @@ describe('create', () => {
process.env.GITHUB_SHA = 'invalid-build-version' process.env.GITHUB_SHA = 'invalid-build-version'
const scope = nock(`http://my-url`) const scope = nock(`http://my-url`)
.get('/_apis/pipelines/workflows/123/artifacts?api-version=6.0-preview') .get('/_apis/pipelines/workflows/123/artifacts?api-version=6.0-preview')
.reply(200, { value: [{ url: 'https://invalid-artifact.com' }] }) .reply(200, { value: [{ url: 'https://invalid-artifact.com', name: 'github-pages' }] })
axios.post = jest.fn().mockRejectedValue({ axios.post = jest.fn().mockRejectedValue({
status: 400 status: 400
@@ -161,6 +169,7 @@ describe('check', () => {
process.env.GITHUB_ACTOR = 'monalisa' process.env.GITHUB_ACTOR = 'monalisa'
process.env.GITHUB_ACTION = '__monalisa/octocat' process.env.GITHUB_ACTION = '__monalisa/octocat'
process.env.GITHUB_ACTION_PATH = 'something' process.env.GITHUB_ACTION_PATH = 'something'
process.env.ARTIFACT_NAME = 'github-pages'
jest.spyOn(core, 'setOutput').mockImplementation(param => { jest.spyOn(core, 'setOutput').mockImplementation(param => {
return param return param
@@ -209,7 +218,7 @@ describe('check', () => {
`https://api.github.com/repos/${repositoryNwo}/pages/deployment/status/${buildVersion}`, `https://api.github.com/repos/${repositoryNwo}/pages/deployment/status/${buildVersion}`,
{ {
headers: { headers: {
Authorization: 'token ' Authorization: 'token gha-token'
} }
} }
) )

View File

@@ -21,7 +21,7 @@ const {Deployment} = require('./deployment')
async function emitTelemetry() { async function emitTelemetry() {
// All variables we need from the runtime are set in the Deployment constructor // All variables we need from the runtime are set in the Deployment constructor
const deployment = new Deployment() const deployment = new Deployment()
const telemetryUrl = `https://api.github.com/repos/${deployment.repositoryNwo}/pages/telemetry` const telemetryUrl = `${deployment.githubApiUrl}/repos/${deployment.repositoryNwo}/pages/telemetry`
core.info(`Sending telemetry for run id ${deployment.workflowRun}`) core.info(`Sending telemetry for run id ${deployment.workflowRun}`)
await axios await axios
.post( .post(