Skip to content

Commit

Permalink
feat: allow recording in fork with secrets
Browse files Browse the repository at this point in the history
By defining their own EXAMPLE_PROJECT_ID and EXAMPLE_RECORD_KEY as GitHub environment variables, users can successfully run the recording examples
example-custom-ci-build-id is moved from using v9 to v10
  • Loading branch information
MikeMcC399 committed Jan 13, 2023
1 parent 7ebb7b1 commit 4bc1f5f
Show file tree
Hide file tree
Showing 5 changed files with 104 additions and 35 deletions.
35 changes: 25 additions & 10 deletions .github/workflows/example-custom-ci-build-id.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,15 @@
name: example-custom-ci-build-id
#
# If this workflow is failing and you do not want to use it
# then you can disable it individually.
# See GitHub help: Disabling and enabling a workflow
# https://docs.github.com/en/actions/managing-workflow-runs/disabling-and-enabling-a-workflow).
#
# To set it up to work with your own Cypress Cloud refer to the README
# in the example directory examples/v10/recording.
#
# ---
#
# Typically you would let this action
# determine a unique build id to tie multiple parallel
# test jobs together into a single logical Cypress Cloud run.
Expand All @@ -13,12 +25,21 @@
# in 2019 so this is replaced by GitHub Environment files, see
# https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#environment-files
#
name: example-custom-ci-build-id

on:
push:
branches:
- 'master'
pull_request:

env:
# Set up the Cypress Cloud project ID and record key as environment variables
# If the Actions variable EXAMPLE_PROJECT_ID is not defined then
# the projectId is taken from cypress.json (v9) or cypress.config.js (v10 and later).
CYPRESS_PROJECT_ID: ${{ vars.EXAMPLE_PROJECT_ID }}
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
# single job that generates and outputs a common id
prepare:
Expand Down Expand Up @@ -57,11 +78,8 @@ jobs:
parallel: true
group: '1 - smoke tests'
ci-build-id: ${{ needs.prepare.outputs.uuid }}
spec: 'cypress/integration/spec-a.js'
working-directory: examples/v9/recording
env:
# pass the Cypress Cloud record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
spec: 'cypress/e2e/spec-a.cy.js'
working-directory: examples/v10/recording

# if smoke tests pass, run all tests, splitting them in parallel
# because we record with the same build id, smoke and these
Expand Down Expand Up @@ -91,7 +109,4 @@ jobs:
npx cypress run --record --parallel \
--ci-build-id ${{ needs.prepare.outputs.uuid }} \
--group "2 - all tests"
working-directory: examples/v9/recording
env:
# pass the Cypress Cloud record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
working-directory: examples/v10/recording
46 changes: 24 additions & 22 deletions .github/workflows/example-recording.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,32 @@
name: example-recording
#
# If this workflow is failing and you do not want to use it
# then you can disable it individually.
# See GitHub help: Disabling and enabling a workflow
# https://docs.github.com/en/actions/managing-workflow-runs/disabling-and-enabling-a-workflow).
#
# To set it up to work with your own Cypress Cloud refer to the README
# in the corresponding example directory examples/*/recording.
#

on:
push:
branches:
- 'master'
pull_request:
jobs:

env:
# Set up the Cypress Cloud project ID and record key as environment variables
# If the Actions variable EXAMPLE_PROJECT_ID is not defined then
# the projectId is taken from cypress.json (v9) or cypress.config.js (v10 and later).
CYPRESS_PROJECT_ID: ${{ vars.EXAMPLE_PROJECT_ID }}
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

jobs:
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cypress v9 and lower ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #

parallel:
parallel-v9:
runs-on: ubuntu-22.04
steps:
- name: Checkout
Expand All @@ -30,20 +48,16 @@ jobs:
parallel: true
group: Recording example
tag: action
env:
# pass the Dashboard record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# see "outcome" and "conclusion" of a step doc
# https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#steps-context
# https://docs.github.com/en/actions/learn-github-actions/contexts#steps-context
# "output" can be success, failure, cancelled, or skipped
- name: Print Dashboard URL
run: |
echo Cypress finished with: ${{ steps.cypress.outcome }}
echo See results at ${{ steps.cypress.outputs.dashboardUrl }}
group:
group-v9:
runs-on: ubuntu-22.04
steps:
- name: Checkout
Expand All @@ -58,12 +72,8 @@ jobs:
record: true
# no parallel flag, just the group name
group: Recording group
env:
# pass the Dashboard record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cypress v10 and higher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Cypress v10 and higher ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ #

parallel-v10:
runs-on: ubuntu-22.04
Expand All @@ -87,13 +97,9 @@ jobs:
parallel: true
group: Recording example v10
tag: action
env:
# pass the Dashboard record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# see "outcome" and "conclusion" of a step doc
# https://docs.github.com/en/actions/reference/context-and-expression-syntax-for-github-actions#steps-context
# https://docs.github.com/en/actions/learn-github-actions/contexts#steps-context
# "output" can be success, failure, cancelled, or skipped
- name: Print Dashboard URL
run: |
Expand All @@ -115,7 +121,3 @@ jobs:
record: true
# no parallel flag, just the group name
group: Recording group v10
env:
# pass the Dashboard record key as an environment variable
CYPRESS_RECORD_KEY: ${{ secrets.EXAMPLE_RECORDING_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -333,12 +333,12 @@ jobs:
with:
record: true
env:
# pass the Cypress Cloud record key as an environment variable
# pass the Cypress Cloud record key as an environment variable (Actions secret)
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
# pass GitHub token to allow accurately detecting a build vs a re-run build
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# pass the project ID from the secrets through environment variable
CYPRESS_PROJECT_ID: ${{ secrets.PROJECT_ID }}
# pass the project ID as an environment variable (Actions variable)
CYPRESS_PROJECT_ID: ${{ vars.PROJECT_ID }}
```

### Quiet flag
Expand Down
26 changes: 26 additions & 0 deletions examples/v10/recording/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# example: recording

The recording example uses [Cypress Cloud](https://docs.cypress.io/guides/cloud/introduction) to record results using the Cypress Cloud `projectId` as defined in the [cypress.config.js](cypress.config.js) configuration file.

## Using your own Cypress Cloud project

In order to use the recording example with your own Cypress Cloud project, you need to replace the `projectId` and `record key` with your own values.

Follow the [Cypress Cloud](https://docs.cypress.io/guides/cloud/introduction) documentation to sign up, if you do not already have an account, or to [sign in](https://cloud.cypress.io/) if you have an account.

Create a new project if one does not exist.

Access "Project settings" in Cypress Cloud and copy the contents of each of the following parameters for the project into the Security settings of your GitHub fork, using "Secrets and variables" > "Actions", then "Variables" for the "Project ID" and "Secrets" for the "Record Key" as in the table below:

| Cypress Cloud name | Actions name in fork | Variable type |
| ------------------ | -------------------- | ----------------- |
| Project ID | EXAMPLE_PROJECT_ID | Actions variables |
| Record Keys | EXAMPLE_RECORD_KEY | Actions secrets |

Refer to the GitHub documentation
- [Defining configuration variables for multiple workflows](https://docs.github.com/en/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows)
- [Creating encrypted secrets for a repository](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository).

When you have done this, the example recording will take the `projectId` from the `EXAMPLE_PROJECT_ID` variable instead of from the [cypress.config.js](cypress.config.js) configuration file.

This setup allows the example recording to run in your own Cypress Cloud project, whilst leaving the same example for use in the parent repository [cypress-io/github-action](https://github.com/cypress-io/github-action) unchanged. The parent repository has its own `EXAMPLE_RECORD_KEY` defined as a secret and it uses the `projectId` as defined in the [cypress.config.js](cypress.config.js) configuration file.
26 changes: 26 additions & 0 deletions examples/v9/recording/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# example: recording

The recording example uses [Cypress Cloud](https://docs.cypress.io/guides/cloud/introduction) to record results using the Cypress Cloud `projectId` as defined in the [cypress.json](cypress.json) configuration file.

## Using your own Cypress Cloud project

In order to use the recording example with your own Cypress Cloud project, you need to replace the `projectId` and `record key` with your own values.

Follow the [Cypress Cloud](https://docs.cypress.io/guides/cloud/introduction) documentation to sign up, if you do not already have an account, or to [sign in](https://cloud.cypress.io/) if you have an account.

Create a new project if one does not exist.

Access "Project settings" in Cypress Cloud and copy the contents of each of the following parameters for the project into the Security settings of your GitHub fork, using "Secrets and variables" > "Actions", then "Variables" for the "Project ID" and "Secrets" for the "Record Key" as in the table below:

| Cypress Cloud name | Actions name in fork | Variable type |
| ------------------ | -------------------- | ----------------- |
| Project ID | EXAMPLE_PROJECT_ID | Actions variables |
| Record Keys | EXAMPLE_RECORD_KEY | Actions secrets |

Refer to the GitHub documentation
- [Defining configuration variables for multiple workflows](https://docs.github.com/en/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows)
- [Creating encrypted secrets for a repository](https://docs.github.com/en/actions/security-guides/encrypted-secrets#creating-encrypted-secrets-for-a-repository).

When you have done this, the example recording will take the `projectId` from the `EXAMPLE_PROJECT_ID` variable instead of from the [cypress.json](cypress.json) configuration file.

This setup allows the example recording to run in your own Cypress Cloud project, whilst leaving the same example for use in the parent repository [cypress-io/github-action](https://github.com/cypress-io/github-action) unchanged. The parent repository has its own `EXAMPLE_RECORD_KEY` defined as a secret and it uses the `projectId` as defined in the [cypress.json](cypress.json) configuration file.

0 comments on commit 4bc1f5f

Please sign in to comment.