FirebaseExtended / FirebaseExtended/action-hosting-deploy

`output.urls` consumption issues

Open
#29 2 comments 4 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.