nrwl / nx

Smart Monorepos · Fast CI
https://nx.dev
MIT License
23.53k stars 2.35k forks source link

404 with distributed task execution #14046

Closed jaredtbates closed 1 year ago

jaredtbates commented 1 year ago

Current Behavior

We are receiving 404s when using NX Cloud Distributed Tax Execution in our GitHub Actions. This just started a few days ago - I do not think it's related to our project setup, it seems to be a server-side issue.

Expected Behavior

No 404 and better handling of error, continuing without cache.

Github Repo

No response

Steps to Reproduce

This started out of the blue and is occurring randomly on our GitHub Actions workflows. I'm not sure exactly how to reproduce it.

Nx Report

Node : 16.18.1
   OS   : darwin arm64
   npm  : 9.1.1

   nx : 14.7.18
   @nrwl/angular : 14.7.18
   @nrwl/cypress : 14.7.18
   @nrwl/detox : Not Found
   @nrwl/devkit : 14.7.18
   @nrwl/eslint-plugin-nx : 14.7.18
   @nrwl/expo : Not Found
   @nrwl/express : Not Found
   @nrwl/jest : 14.7.18
   @nrwl/js : 14.7.18
   @nrwl/linter : 14.7.18
   @nrwl/nest : Not Found
   @nrwl/next : Not Found
   @nrwl/node : Not Found
   @nrwl/nx-cloud : 14.7.0
   @nrwl/nx-plugin : Not Found
   @nrwl/react : Not Found
   @nrwl/react-native : Not Found
   @nrwl/schematics : Not Found
   @nrwl/storybook : 14.7.18
   @nrwl/web : Not Found
   @nrwl/workspace : 14.7.18
   typescript : 4.7.4
   ---------------------------------------
   Local workspace plugins:
   ---------------------------------------
   Community plugins:
         @fortawesome/angular-fontawesome: 0.11.1
         @ngx-pwa/local-storage: 13.0.5
         angular-auth-oidc-client: 14.1.5
         ng-mocks: 14.4.0
         @nxext/stencil: 14.0.6

Failure Logs

2022-12-28T19:32:26.0769969Z  >  NX   Processing task XXX:build
2022-12-28T19:32:26.0770149Z 
2022-12-28T19:32:26.0770156Z 
2022-12-28T19:32:26.0771779Z  >  NX   Retrieving artifacts from https://nx-cache-production.s3-accelerate.amazonaws.com/7b4ae70a255522d698ef649143f0f14f02b865f754aca4108a643a798b6cb607?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=XXX&X-Amz-SignedHeaders=host&X-Amz-Expires=18000&X-Amz-Credential=XXX&X-Amz-Signature=XXX
2022-12-28T19:32:26.0772582Z 
2022-12-28T19:32:26.0772590Z 
2022-12-28T19:32:26.0773317Z  >  NX   Nx Cloud: Downloading 7b4ae70a255522d698ef649143f0f14f02b865f754aca4108a643a798b6cb607
2022-12-28T19:32:26.0773588Z 
2022-12-28T19:32:26.0775051Z    RETRIEVAL URL: https://nx-cache-production.s3-accelerate.amazonaws.com/7b4ae70a255522d698ef649143f0f14f02b865f754aca4108a643a798b6cb607?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=XXX&X-Amz-SignedHeaders=host&X-Amz-Expires=18000&X-Amz-Credential=XXX&X-Amz-Signature=XXX
2022-12-28T19:32:26.0775795Z 
2022-12-28T19:32:26.1757697Z 
2022-12-28T19:32:26.1760537Z  >  NX   Received 404. Retrying in 5508.2158603065855ms.

Additional Information

No response

StalkAltan commented 1 year ago

Hi @jaredtbates

As a quick patch, you should be able to resolve this by running npx nx run XXX:build --skip-nx-cache from the same branch that your pipeline is running against. This will force Nx Cloud to overwrite any previous entries and solve this problem short term.

For additional information, are you using the nrwl/ci workflows, or something more custom to your repo? Which OS are your action runners using?

jaredtbates commented 1 year ago

Thanks @StalkAltan, I'm trying that now. We're using a slight variation of the nrwl/ci workflows, but I already compared them and didn't see any difference that would cause this issue. I can share those publicly, since there's no sensitive info in them. Let me know if you see anything that I may have missed. We're using the default action runner OS, which I believe is ubuntu-latest. Thank you!

nx-cloud-main.yml ``` name: Nx Cloud Main on: workflow_call: secrets: NX_CLOUD_ACCESS_TOKEN: required: false NX_CLOUD_AUTH_TOKEN: required: false SONAR_TOKEN: required: false DATADOG_API_KEY: required: false inputs: number-of-agents: required: false type: number environment-variables: required: false type: string init-commands: required: false type: string final-commands: required: false type: string parallel-commands: required: false type: string parallel-commands-on-agents: required: false type: string node-version: required: false type: string yarn-version: required: false type: string npm-version: required: false type: string pnpm-version: required: false type: string install-commands: required: false type: string main-branch-name: required: false type: string default: main runs-on: required: false type: string default: ubuntu-latest # We needed this input in order to be able to configure out integration tests for this repo, it is not documented # so as to not cause confusion/add noise, but technically any consumer of the workflow can use it if they want to. working-directory: required: false type: string build-artifact-directory: required: false type: string outputs: nx_projects: description: The modified projects from this build value: ${{ jobs.main.outputs.nx_projects }} env: NX_CLOUD_DISTRIBUTED_EXECUTION: true NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT: ${{ inputs.number-of-agents }} NX_VERBOSE_LOGGING: true NX_BRANCH: ${{ github.event.number || github.ref_name }} NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} NX_CLOUD_AUTH_TOKEN: ${{ secrets.NX_CLOUD_AUTH_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} jobs: main: runs-on: ${{ inputs.runs-on }} # The name of the job which will invoke this one is expected to be "Nx Cloud - Main Job", and whatever we call this will be appended # to that one after a forward slash, so we keep this one intentionally short to produce "Nx Cloud - Main Job / Run" in the Github UI name: Run defaults: run: working-directory: ${{ inputs.working-directory || github.workspace }} # Specify shell to help normalize across different operating systems shell: bash outputs: # the modified projects in this build nx_projects: ${{ steps.affected.outputs.nx_projects }} steps: - uses: actions/checkout@v3 name: Checkout [Pull Request] if: ${{ github.event_name == 'pull_request' }} with: # By default, PRs will be checked-out based on the Merge Commit, but we want the actual branch HEAD. ref: ${{ github.event.pull_request.head.sha }} # We need to fetch all branches and commits so that Nx affected has a base to compare against. fetch-depth: 0 - uses: actions/checkout@v3 name: Checkout [Default Branch] if: ${{ github.event_name != 'pull_request' }} with: # We need to fetch all branches and commits so that Nx affected has a base to compare against. fetch-depth: 0 - name: Derive appropriate SHAs for base and head for `nx affected` commands uses: nrwl/nx-set-shas@v3 with: main-branch-name: ${{ inputs.main-branch-name }} - name: Detect package manager id: package_manager shell: bash run: | echo "name=$([[ -f ./yarn.lock ]] && echo "yarn" || ([[ -f ./pnpm-lock.yaml ]] && echo "pnpm") || echo "npm")" >> $GITHUB_OUTPUT # Set node/npm/yarn versions using volta, with optional overrides provided by the consumer - uses: volta-cli/action@v4 with: node-version: "${{ inputs.node-version }}" npm-version: "${{ inputs.npm-version }}" yarn-version: "${{ inputs.yarn-version }}" # Install pnpm with exact version provided by consumer or fallback to latest - name: Install PNPM if: steps.package_manager.outputs.name == 'pnpm' uses: pnpm/action-setup@v2.2.2 with: version: ${{ inputs.pnpm-version || 'latest' }} - name: Print node/npm/yarn versions id: versions run: | node_ver=$( node --version ) yarn_ver=$( yarn --version || true ) pnpm_ver=$( pnpm --version || true ) echo "Node: ${node_ver:1}" echo "NPM: $( npm --version )" if [[ $yarn_ver != '' ]]; then echo "Yarn: $yarn_ver"; fi if [[ $pnpm_ver != '' ]]; then echo "PNPM: $pnpm_ver"; fi echo "node_version=${node_ver:1}" >> $GITHUB_OUTPUT - name: Use the node_modules cache if available [npm] if: steps.package_manager.outputs.name == 'npm' uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}- - name: Use the node_modules cache if available [pnpm] if: steps.package_manager.outputs.name == 'pnpm' uses: actions/cache@v3 with: path: ~/.pnpm-store key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}- - name: Get yarn cache directory path if: steps.package_manager.outputs.name == 'yarn' id: yarn-cache-dir-path run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - name: Use the node_modules cache if available [yarn] if: steps.package_manager.outputs.name == 'yarn' uses: actions/cache@v3 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-yarn- - name: Process environment-variables if: ${{ inputs.environment-variables != '' }} uses: actions/github-script@v6 env: ENV_VARS: ${{ inputs.environment-variables }} with: script: | const { appendFileSync } = require('fs'); // trim spaces and escape quotes const cleanStr = str => str .trim() .replaceAll(/`/g, "\`"); // parse variable to correct type const parseStr = str => str === 'true' || str === 'TRUE' ? true : str === 'false' || str === 'FALSE' ? false : isNaN(str) ? str : parseFloat(str); const varsStr = process.env.ENV_VARS || ''; const vars = varsStr .split('\n') .map(variable => variable.trim()) .filter(variable => variable.indexOf('=') > 0) .map(variable => ({ name: cleanStr(variable.split('=')[0]), value: cleanStr(variable.slice(variable.indexOf('=') + 1)) })); for (const v of vars) { console.log(`Appending environment variable \`${v.name}\` with value \`${v.value}\` to ${process.env.GITHUB_ENV}`); appendFileSync(process.env.GITHUB_ENV, `${v.name}=${parseStr(v.value)}\n`); } - name: Run any configured install-commands if: ${{ inputs.install-commands != '' }} run: | ${{ inputs.install-commands }} - name: Install dependencies if: ${{ inputs.install-commands == '' }} run: | if [ "${{ steps.package_manager.outputs.name == 'yarn' }}" == "true" ]; then echo "Running yarn install --frozen-lockfile" yarn install --frozen-lockfile elif [ "${{ steps.package_manager.outputs.name == 'pnpm' }}" == "true" ]; then echo "Running pnpm install --frozen-lockfile" pnpm install --frozen-lockfile else echo "Running npm ci" npm ci fi # An unfortunate side-effect of the way reusable workflows work is that by the time they are pulled into the "caller" # repo, they are effectively completely embedded in that context. This means that we cannot reference any files which # are local to this repo which defines the workflow, and we therefore need to work around this by embedding the contents # of the shell utilities for executing commands into the workflow directly. - name: Create command utils uses: actions/github-script@v6 with: script: | const { writeFileSync } = require('fs'); const runCommandsInParallelScript = ` # Extract the provided commands from the stringified JSON array. IFS=$'\n' read -d '' -a userCommands < <((jq -c -r '.[]') <<<"$1") # Invoke the provided commands in parallel and collect their exit codes. pids=() for userCommand in "\${userCommands[@]}"; do eval "$userCommand" & pids+=($!) done # If any one of the invoked commands exited with a non-zero exit code, exit the whole thing with code 1. for pid in \${pids[*]}; do if ! wait $pid; then exit 1 fi done # All the invoked commands must have exited with code zero. exit 0 `; writeFileSync('./.github/workflows/run-commands-in-parallel.sh', runCommandsInParallelScript); - name: Prepare command utils # We need to escape the workspace path to be consistent cross-platform: https://github.com/actions/runner/issues/1066 run: chmod +x ${GITHUB_WORKSPACE//\\//}/.github/workflows/run-commands-in-parallel.sh - name: Initialize the Nx Cloud distributed CI run run: npx nx-cloud start-ci-run # The good thing about the multi-line string input for sequential commands is that we can simply forward it on as is to the bash shell and it will behave # how we want it to in terms of quote escaping, variable assignment etc - name: Run any configured init-commands sequentially if: ${{ inputs.init-commands != '' }} run: | ${{ inputs.init-commands }} - name: Process parallel commands configuration uses: actions/github-script@v6 id: parallel_commands_config env: PARALLEL_COMMANDS: ${{ inputs.parallel-commands }} PARALLEL_COMMANDS_ON_AGENTS: ${{ inputs.parallel-commands-on-agents }} with: # For the ones configured for main, explicitly set NX_CLOUD_DISTRIBUTED_EXECUTION to false, taking into account commands chained with && # within the strings. In order to properly escape single quotes we need to do some manual replacing and escaping so that the commands # are forwarded onto the run-commands-in-parallel.sh script appropriately. script: | const parallelCommandsOnMainStr = process.env.PARALLEL_COMMANDS || ''; const parallelCommandsOnAgentsStr = process.env.PARALLEL_COMMANDS_ON_AGENTS || ''; const parallelCommandsOnMain = parallelCommandsOnMainStr .split('\n') .map(command => command.trim()) .filter(command => command.length > 0) .map(s => s.replace(/'/g, '%27')); const parallelCommandsOnAgents = parallelCommandsOnAgentsStr .split('\n') .map(command => command.trim()) .filter(command => command.length > 0) .map(s => s.replace(/'/g, '%27')); const formattedArrayOfCommands = [ ...parallelCommandsOnMain.map(s => s .split(' && ') .map(s => `NX_CLOUD_DISTRIBUTED_EXECUTION=false ${s}`) .join(' && ') ), ...parallelCommandsOnAgents, ]; const stringifiedEncodedArrayOfCommands = JSON.stringify(formattedArrayOfCommands) .replace(/%27/g, "'\\''"); return stringifiedEncodedArrayOfCommands result-encoding: string - name: Run any configured parallel commands on main and agent jobs # We need to escape the workspace path to be consistent cross-platform: https://github.com/actions/runner/issues/1066 run: ${GITHUB_WORKSPACE//\\//}/.github/workflows/run-commands-in-parallel.sh '${{ steps.parallel_commands_config.outputs.result }}' # The good thing about the multi-line string input for sequential commands is that we can simply forward it on as is to the bash shell and it will behave # how we want it to in terms of quote escaping, variable assignment etc - name: Run any configured final-commands sequentially if: ${{ inputs.final-commands != '' }} run: | ${{ inputs.final-commands }} - name: Upload any artifacts that may have been generated if: ${{ inputs.build-artifact-directory != '' }} uses: actions/upload-artifact@v3 with: name: build path: ${{ inputs.build-artifact-directory }} retention-days: 1 - name: Get affected projects id: affected run: echo "nx_projects=$(npx nx print-affected --type=app --select=projects | sed 's/ //g')" >> $GITHUB_OUTPUT - name: Stop all running agents for this CI run # It's important that we always run this step, otherwise in the case of any failures in preceding non-Nx steps, the agents will keep running and waste billable minutes if: ${{ always() }} run: npx nx-cloud stop-all-agents ```
nx-cloud-agents.yml ``` name: Nx Cloud Agents on: workflow_call: secrets: NX_CLOUD_ACCESS_TOKEN: required: false NX_CLOUD_AUTH_TOKEN: required: false SONAR_TOKEN: required: false DATADOG_API_KEY: required: false inputs: number-of-agents: required: true type: number environment-variables: required: false type: string node-version: required: false type: string yarn-version: required: false type: string npm-version: required: false type: string pnpm-version: required: false type: string install-commands: required: false type: string runs-on: required: false type: string default: ubuntu-latest # We needed this input in order to be able to configure out integration tests for this repo, it is not documented # so as to not cause confusion/add noise, but technically any consumer of the workflow can use it if they want to. working-directory: required: false type: string env: NX_CLOUD_DISTRIBUTED_EXECUTION: true NX_BRANCH: ${{ github.event.number || github.ref_name }} NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} NX_CLOUD_AUTH_TOKEN: ${{ secrets.NX_CLOUD_AUTH_TOKEN }} NX_VERBOSE_LOGGING: true GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} jobs: set-agents: runs-on: ${{ inputs.runs-on }} name: Init outputs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - id: set-matrix shell: bash # Turn the number-of-agents input into a JSON structure which is compatible with a Github job matrix strategy run: | AGENTS_JSON_ARRAY=$(node -e "console.log(JSON.stringify(Array.from(new Array(${{ inputs.number-of-agents }})).map((_, i) => i + 1)));") echo $AGENTS_JSON_ARRAY echo "matrix=$AGENTS_JSON_ARRAY" >> $GITHUB_OUTPUT # Intentionally using capital letter in order to make the Github UI for the matrix look better Run: needs: set-agents runs-on: ${{ inputs.runs-on }} name: Agent ${{ matrix.agent }} strategy: matrix: agent: - ${{fromJson(needs.set-agents.outputs.matrix)}} defaults: run: working-directory: ${{ inputs.working-directory || github.workspace }} # Specify shell to help normalize across different operating systems shell: bash steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: Detect package manager id: package_manager run: | echo "name=$([[ -f ./yarn.lock ]] && echo "yarn" || ([[ -f ./pnpm-lock.yaml ]] && echo "pnpm") || echo "npm")" >> $GITHUB_OUTPUT # Set node/npm/yarn versions using volta, with optional overrides provided by the consumer - uses: volta-cli/action@v4 with: node-version: "${{ inputs.node-version }}" npm-version: "${{ inputs.npm-version }}" yarn-version: "${{ inputs.yarn-version }}" # Install pnpm with exact version provided by consumer or fallback to latest - name: Install PNPM if: steps.package_manager.outputs.name == 'pnpm' uses: pnpm/action-setup@v2.2.2 with: version: ${{ inputs.pnpm-version || 'latest' }} - name: Print node/npm/yarn versions id: versions run: | node_ver=$( node --version ) yarn_ver=$( yarn --version || true ) pnpm_ver=$( pnpm --version || true ) echo "Node: ${node_ver:1}" echo "NPM: $( npm --version )" if [[ $yarn_ver != '' ]]; then echo "Yarn: $yarn_ver"; fi if [[ $pnpm_ver != '' ]]; then echo "PNPM: $pnpm_ver"; fi echo "node_version=${node_ver:1}" >> $GITHUB_OUTPUT - name: Use the node_modules cache if available [npm] if: steps.package_manager.outputs.name == 'npm' uses: actions/cache@v3 with: path: ~/.npm key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}- - name: Use the node_modules cache if available [pnpm] if: steps.package_manager.outputs.name == 'pnpm' uses: actions/cache@v3 with: path: ~/.pnpm-store key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}- - name: Get yarn cache directory path if: steps.package_manager.outputs.name == 'yarn' id: yarn-cache-dir-path run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT - name: Use the node_modules cache if available [yarn] if: steps.package_manager.outputs.name == 'yarn' uses: actions/cache@v3 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-node-${{ steps.versions.outputs.node_version }}-yarn- - name: Process environment-variables if: ${{ inputs.environment-variables != '' }} uses: actions/github-script@v6 env: ENV_VARS: ${{ inputs.environment-variables }} with: script: | const { appendFileSync } = require('fs'); // trim spaces and escape quotes const cleanStr = str => str .trim() .replaceAll(/`/g, "\`"); // parse variable to correct type const parseStr = str => str === 'true' || str === 'TRUE' ? true : str === 'false' || str === 'FALSE' ? false : isNaN(str) ? str : parseFloat(str); const varsStr = process.env.ENV_VARS || ''; const vars = varsStr .split('\n') .map(variable => variable.trim()) .filter(variable => variable.indexOf('=') > 0) .map(variable => ({ name: cleanStr(variable.split('=')[0]), value: cleanStr(variable.slice(variable.indexOf('=') + 1)) })); for (const v of vars) { console.log(`Appending environment variable \`${v.name}\` with value \`${v.value}\` to ${process.env.GITHUB_ENV}`); appendFileSync(process.env.GITHUB_ENV, `${v.name}=${parseStr(v.value)}\n`); } - name: Run any configured install-commands if: ${{ inputs.install-commands != '' }} run: | ${{ inputs.install-commands }} - name: Install dependencies if: ${{ inputs.install-commands == '' }} run: | if [ "${{ steps.package_manager.outputs.name == 'yarn' }}" == "true" ]; then echo "Running yarn install --frozen-lockfile" yarn install --frozen-lockfile elif [ "${{ steps.package_manager.outputs.name == 'pnpm' }}" == "true" ]; then echo "Running pnpm install --frozen-lockfile" pnpm install --frozen-lockfile else echo "Running npm ci" npm ci fi - name: Start Nx Agent ${{ matrix.agent }} run: npx nx-cloud start-agent env: NX_AGENT_NAME: ${{matrix.agent}} ```
Monorepo workflow ``` build: name: Nx Cloud - Build uses: .github/workflows/nx-cloud-main.yml secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} with: number-of-agents: 3 init-commands: | npx nx-cloud start-ci-run --stop-agents-after="build" --agent-count=3 parallel-commands-on-agents: | npx nx affected --target=lint --parallel=3 npx nx affected --target=test --parallel=3 --ci --code-coverage npx nx affected --target=e2e --parallel=3 --ci --configuration=ci npx nx affected --target=build --parallel=3 --configuration=prod final-commands: | npx nx affected --target=sonar --parallel=3 --no-dte build-artifact-directory: dist/ agents: name: Nx Cloud - Agents uses: .github/workflows/nx-cloud-agents.yml secrets: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} DATADOG_API_KEY: ${{ secrets.DATADOG_API_KEY }} with: number-of-agents: 3 ```
jaredtbates commented 1 year ago

It appears the issue may have been because of implicitDependencies. For my project XXX I also had a project XXX-e2e. The 404s seemed to occur regularly on the XXX-e2e e2e target. Digging into the verbose logs, I could see that the failing build target was under that e2e target. I looked at my project.json and found that the app XXX was listed as an implicit dependency of XXX-e2e. This was creating unnecessary builds of my project (using the XXX:build target), because the e2e target would build the base project as part of the XXX:serve that happens during the e2e execution.

I see this came from the cypress generator here: https://github.com/nrwl/nx/blob/d5c93bfa39c798bc5f594aa85e37a8b0cbe0b44e/packages/cypress/src/generators/cypress-project/cypress-project.ts#L115

john-eos commented 1 year ago

We're currently facing this issue as well. Do you have any additional information on how to track down and avoid these implicit dependencies?

StalkAltan commented 1 year ago

The implicitDependencies are not the problem. Please update your @nrwl/nx-cloud package to the latest version.

Please collect all your CI logs from this occurrence and send us an email at cloud-support@nrwl.io

You will also want to enable the NX_VERBOSE_LOGGING=true environment variable on all of your pipelines.

We are almost done with a rework that will prevent this class of problems entirely.

Going to close this issue as this is a workspace-dependent problem.

For future people that find this issue, rather than comment here, please follow the instructions above and we will be in touch.

VanTigranyan commented 1 year ago

@StalkAltan Hi. The issue is not gone. Something went wrong with the caching hashes, and NX now tries to retrieve a cache that doesn't exist. Skipping the cache didn't force-override the cache in the cloud. We need something that would let us clear the cache in the cloud as well.

github-actions[bot] commented 1 year ago

This issue has been closed for more than 30 days. If this issue is still occuring, please open a new issue with more recent context.