Fixture file not found when running on self-hosted runner
far11ven opened this issue · comments
I'm seeing the problem recenly where my tests running on selfhosted github-runner, fixture file is not found. Locally everything works fine. I'm not able to debug this as well.
I also ssh into the github runner to see if the file is physically present there (here you can see definitions.json is present:
but during running as part of an action I get following error:
Error snapshot:
I upgraded everything to latest and still this problem is there. are there any pointers to debug this?
Cypress - GitHubActions: v6.6.0
CypressVersion: v13.16.1
EDIT:
I added few cy.exec() before the actual line of code:
if (Cypress.platform === 'win32') {
cy.exec('cd', {failOnNonZeroExit: false}).then((result) => {
cy.log("CD: \n", JSON.stringify(result));
})
} else {
cy.exec('cd', {failOnNonZeroExit: false} ).then((result) => {
cy.log("CD: \n", JSON.stringify(result));
})
}
if (Cypress.platform === 'win32') {
cy.exec('cd cypress/fixtures/resources/AI-projects/DYNAMIC/requestPayloads/data-model-definition/ && type definitions.json', {failOnNonZeroExit: false}).then((result) => {
cy.log(JSON.stringify(result));
})
} else {
cy.exec('cd cypress/fixtures/resources/AI-projects/DYNAMIC/requestPayloads/data-model-definition/ && cat package.json', {failOnNonZeroExit: false} ).then((result) => {
cy.log(JSON.stringify(result));
})
}
if (Cypress.platform === 'win32') {
cy.exec('cd && cd cypress/fixtures/resources/AI-projects/' + aiProjectType.toUpperCase() + '/requestPayloads/data-model-definition/ && type definitions.json', {failOnNonZeroExit: false}).then((result) => {
cy.log("File-content: \n", JSON.stringify(result));
})
} else {
cy.exec('cd cypress/fixtures/resources/AI-projects/' + aiProjectType.toUpperCase() + '/requestPayloads/data-model-definition/ && cat definitions.json', {failOnNonZeroExit: false} ).then((result) => {
cy.log("File-content: \n", JSON.stringify(result));
})
}
cy.fixture('/resources/AI-projects/' + aiProjectType.toUpperCase() + '/requestPayloads/data-model-definition/definitions.json', "binary")
.then(data => {
...
It's unlikely that your issue is caused by cypress-io/github-action
however if you follow the steps in the README > Debugging section, you can set the DEBUG
environment variable to get more debug information:
Debug action steps:
env:
DEBUG: '@cypress/github-action'
Debug Cypress:
env:
DEBUG: 'cypress:*'
Debug action steps and Cypress:
env:
DEBUG: '@cypress/github-action, cypress:*'
You are also welcome to post your GitHub Actions workflow here to see if there is anything unusual about it.
Hey @MikeMcC399 , thanks for your comment, following is the actions workflow:
name: Doc-AI Test Automation (Manual - with envFile)
on:
workflow_dispatch:
inputs:
environment:
type: choice
description: 'The target environment-keyword relating to <env>.config.json, example: stg for (stg.config.json)'
options:
- pr
- qa
- stg
required: true
default: "qa"
tags:
required: true
default: "@all"
type: string
description: 'provide tags expression for running tests'
record:
type: boolean
description: 'Record and publish to Cypress Dashboard'
jobs:
manual_run:
runs-on: cypress
name: Manual Run
steps:
# Checkout code in omnius-qa-doc-ai-automation repository
- name: Checkout
uses: actions/checkout@v3
with:
ref: ${{ github.head.ref }}
fetch-depth: '0'
# Log Environment details
- name: User Input Details
run: |
echo "running on environment ${{ github.event.inputs.environment }} from branch ${{ github.ref }}"
echo "Tags provided: ${{ github.event.inputs.tags }}"
echo "Cypress record: ${{ github.event.inputs.record }}"
# Install dependencies by running npm install
- name: Dependency Installation
run: npm install
# Execute automated tests and send execution summary to cypress cloud dashboard with Record flag true
- name: Doc-AI Test Automation Manual Execution with Record
id: run_step_with_record
if: ${{ github.event.inputs.record == 'true' }}
uses: cypress-io/github-action@v6.6.0
with:
install: false
command: node cy-runner.js cypress run --e2e --env envFile=${{ github.event.inputs.environment }},TAGS="${{ github.event.inputs.tags }}" --record --key ${{ secrets.DOC_AI_TESTING_CYPRESS_RECORD_KEY }}
# Execute automated tests and send execution summary to cypress cloud dashboard
- name: Doc-AI Test Automation Manual Execution
id: run_step
if: ${{ github.event.inputs.record != 'true' }}
uses: cypress-io/github-action@v6.6.0
with:
install: false
command: node cy-runner.js cypress run --e2e --env envFile=${{ github.event.inputs.environment }},TAGS="${{ github.event.inputs.tags }}"
# Cypress Test Result Details
- name: Print Cypress Cloud URL
run: |
echo Cypress finished with: ${{ steps.run_step.outcome }}
echo Outputs: ${{ steps.run_step.outputs }}
echo Outputs_JSON: ${{ toJSON(steps.run_step.outputs) }}
echo See results at ${{ steps.run_step.outputs.dashboardUrl }}
# Send Notification to Teams Channel QA Team > General
- name: Send Notification to Teams Channel
uses: Skitionek/notify-microsoft-teams@v1.0.8
if: always()
with:
webhook_url: ${{ secrets.DOC_AI_TESTING_TEAMS_WEBHOOK }}
overwrite: "{ title: `Manual Test Run Status`, sections: [{ activityTitle: `Run Info:`, activitySubtitle: `Started by ${{ github.actor }}`, facts: [{ name: `Run from branch`, value: `${{ github.ref }}` }, { name: `Environment`, value: `${{ github.event.inputs.environment }}` }, { name: `Tags`, value: `${{ github.event.inputs.tags }}` }, { name: `Recorded`, value: `${{ github.event.inputs.record }}` }], markdown: true }], potentialAction: [{ \"@type\": `OpenUri`, name: `Repository`, targets: [{ os: `default`, uri: `https://github.com/${{ github.repository }}` }] }, { \"@type\": `OpenUri`, name: `Workflow Run`, targets: [{ os: `default`, uri: `https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}` }] }, { \"@type\": `OpenUri`, name: `Cypress Dashboard`, targets: [{ os: `default`, uri: `https://cloud.cypress.io/organizations/78668328-fe90-4847-a630-6b1ce6864929/projects` }] }] }"
needs: ${{ toJSON(needs) }}
steps: ${{ toJSON(steps) }}
job: ${{ toJSON(job) }}
# Upload test artifacts
- name: Upload Test Artifacts
uses: actions/upload-artifact@v3.1.0
if: success()
with:
name: reports
path: |
reports/
cypress/fixtures/state/*
retention-days: 30
Would you like to edit your posting to reformat your workflow so that it is more readable? Use triple backticks and yml
to get markdown to format correctly:
```yml
workflow code
```
Your workflow shows an unconventional use of cypress-io/github-action
using the command
parameter which overrides most of the functions of the action. I suggest you refer to the README for examples of how the action is intended to be used.
I'm going to close this issue. Your workflow specifies for instance:
uses: cypress-io/github-action@v6.6.0
with:
install: false
command: node cy-runner.js cypress run --e2e --env envFile=${{ github.event.inputs.environment }},TAGS="${{ github.event.inputs.tags }}"
- specifying
install: false
means that you by-pass installation of dependencies using a lock file which the action would normally carry out - specifying
command: node cy-runner.js cypress run
etc means that the action is not running Cypress. Instead it just passes your command through to the runner which executes your command.
So, although you are calling cypress-io/github-action@v6.6.0
, you are in fact not using any of its functionality in a meaningful way. Instead of calling the action, you could just use GitHub Actions run keyword. That also means that your problem with fixtures does not come from the action.
Thanks @MikeMcC399 for your analysis.