FirebaseExtended / FirebaseExtended/action-hosting-deploy
`output.urls` consumption issues
- Dominant language
- TypeScript
- Stars
- 809
- Forks
- 232
- PR merge metrics
- No merged PRs in 30d
Description
It appears passing data as arrays is not natively supported by GitHub Actions and thus each consumer of the `outputs.urls` would need to support consuming arrays by converting from a string.
When first using the Hosting Channel Action I hard coded the URL for my test PR into the Lighthouse step. After successful testing, I changed the code to use the `urls` output from the Firebase Action and began seeing "Invalid URL" errors with Lighthouse.
**My GitHub Action YAML and changes**
```diff
name: Deploy to Hosting Channel on PR
"on": pull_request
jobs:
build_deploy_lighthouse:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Deploy to Firebase Hosting Channel
id: deploy_firebase_hosting_channel
uses: FirebaseExtended/action-hosting-deploy@v0.3-alpha
with:
repoToken: "${{ secrets.GITHUB_TOKEN }}"
firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT_REDACTED }}"
projectId: REDACTED
env:
FIREBASE_CLI_PREVIEWS: hostingchannels
- name: Run Lighthouse on urls and validate with lighthouserc
uses: treosh/lighthouse-ci-action@v3
with:
- urls: https://redacted--pr51-fix-hosting-channels-rwjjf6g3.web.app
+ urls: ${{ steps.deploy_firebase_hosting_channel.outputs.urls }}
configPath: ".lighthouserc.json"
runs: 3
```
**Lighthouse input config when hard coded URL**
```
Input args: ***
"urls": [
"redacted--pr51-fix-hosting-channels-rwjjf6g3.web.app"
],
```
This worked.
**New Lighthouse input config**
```
Input args: ***
"urls": [
"[\"https://redacted--pr51-fix-hosting-channels-rwjjf6g3.web.app\"]"
],
```
Note the double array.
**Lighthouse Error**
```
Running Lighthouse 3 time(s) on ["redacted--pr51-fix-hosting-channels-rwjjf6g3.web.app"]
...
Sun, 27 Sep 2020 05:16:17 GMT ChromeLauncher Killing Chrome instance 2891
Runtime error encountered: The URL you have provided appears to be invalid.
LHError: INVALID_URL
at Function.run (/home/runner/work/_actions/treosh/lighthouse-ci-action/v3/node_modules/lighthouse/lighthouse-core/runner.js:78:17)
at lighthouse (/home/runner/work/_actions/treosh/lighthouse-ci-action/v3/node_modules/lighthouse/lighthouse-core/index.js:48:17)
at runLighthouse (/home/runner/work/_actions/treosh/lighthouse-ci-action/v3/node_modules/lighthouse/lighthouse-cli/run.js:224:32)
at processTicksAndRejections (internal/process/task_queues.js:97:5)
Error: LHCI 'collect' has encountered a problem.
```
Lighthouse correctly fails to pass `["redacted--pr51-fix-hosting-channels-rwjjf6g3.web.app"]` as an URL.
**Lighthouse Action urls input**
Lighthouse's `urls` input usage is described as an array of URLs, but like so:
```yaml
urls: |
url-1.com
url-2.com
```
And so the code - https://github.com/treosh/lighthouse-ci-action/blob/3f01a66925eae1613cb01504ae14ddb29b76cf0d/src/index.js#L32 - does not perform any checks to see if the first input value is a JSON.stringified array, leading to my error.
**Workaround**
```yaml
urls: ${{ steps.deploy_firebase_hosting_channel.outputs.details_url }}
```
works as expected.
I understand this issue is less of a Firebase Hosting Action issue and so there may be no fix to this, but for future users I am commenting anyway.
Contributor guide
Assessment
This issue has not been assessed yet.