[bazel] //cmd/presbmit/presubmit.go: Run "npm ci" step on CI.

In https://skia-review.googlesource.com/c/buildbot/+/787329 I updated Prettier to v3.1.0. Since then, we have seen some (but not all) Housekeeper-OnDemand-Presubmit tasks fail with:

    npm WARN exec The following package was not found and will be installed: prettier
    npm ERR! code E451
    npm ERR! 451 unknown - GET https://npm.skia.org/skia-infra/prettier/-/prettier-3.1.1.tgz

Example: https://task-scheduler.skia.org/job/fybXDSw4BolKQ8FgX6ZP.

The reason for this failure is that:

 - Bazel used to manage the node_modules directory for us, but this has ceased to be true since we upgraded to Bazel 6.0.0. This means we don't get a node_modules directory unless we explicitly create one, e.g. with "npm ci".

 - The "npx prettier" command first looks for a "prettier" package in node_modules, and if it does not find it, it tries to download the latest "prettier" version, apparently ignoring the exact version specified in //package.json and/or //package-lock.json.

 - "npx" fails to download "prettier" because the latest version (3.1.1) is too new, and therefore npm-audit-mirror rejects it, hence the 451 error.

The solution I've found is to run "npm ci" right before "npx prettier", which ensures we have a node_modules directory.

Bug: b/314813928
Change-Id: I2de92c62c82a682afd852f416330766eacfa5e9e
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/789219
Commit-Queue: Kevin Lubick <kjlubick@google.com>
Reviewed-by: Kevin Lubick <kjlubick@google.com>
Auto-Submit: Leandro Lovisolo <lovisolo@google.com>
1 file changed
tree: 343d2baf773afe7bc98a096373f88e98e42c0f15
  1. am/
  2. android_ingest/
  3. android_stats/
  4. api/
  5. autoroll/
  6. bash/
  7. bazel/
  8. bisection/
  9. blamer/
  10. bugs-central/
  11. cabe/
  12. cd/
  13. cherrypick-watcher/
  14. cmd/
  15. codereview-watcher/
  16. codesize/
  17. comments/
  18. cq_watcher/
  19. ct/
  20. datahopper/
  21. debugger-app/
  22. demos/
  23. docker/
  24. docker_pushes_watcher/
  25. docs/
  26. docsyserver/
  27. ds/
  28. elements-sk/
  29. email/
  30. external/
  31. fiddlek/
  32. firestore/
  33. get_service_account/
  34. gitsync/
  35. go/
  36. gold-client/
  37. golden/
  38. helloworld/
  39. infra/
  40. infra-sk/
  41. jsdoc/
  42. jsfiddle/
  43. k8s-checker/
  44. k8s-deployer/
  45. kube/
  46. leasing/
  47. licenses/
  48. machine/
  49. make/
  50. modules/
  51. named-fiddles/
  52. new_element/
  53. npm-audit-mirror/
  54. npm_deps/
  55. perdiff/
  56. perf/
  57. periodic-trigger/
  58. proberk/
  59. promk/
  60. puppeteer-tests/
  61. sa-keys-checker/
  62. scrap/
  63. scripts/
  64. shaders/
  65. sk/
  66. skbug/
  67. skcq/
  68. skfe/
  69. skolo/
  70. skottie/
  71. static_server/
  72. status/
  73. task_driver/
  74. task_scheduler/
  75. temporal/
  76. test-service/
  77. tools/
  78. tree_status/
  79. trybot_updater/
  80. .bazelignore
  81. .bazelrc
  82. .bazelversion
  83. .eslintrc.js
  84. .gitattributes
  85. .gitignore
  86. .mockery.yaml
  87. .npmrc
  88. .prettierignore
  89. .prettierrc.json
  90. .puppeteerrc.js
  91. .vpython
  92. BAZEL_CHEATSHEET.md
  93. BUILD.bazel
  94. build_infra_prod.sh
  95. CDB.md
  96. cipd.ensure
  97. codereview.settings
  98. DATASTORE.md
  99. demopage.sh
  100. DEPS
  101. go.mod
  102. go.sum
  103. go_repositories.bzl
  104. karmatest.sh
  105. launch.md
  106. LICENSE
  107. Makefile
  108. OWNERS
  109. package-lock.json
  110. package.json
  111. PRESUBMIT.py
  112. PRIVACY_POLICY.md
  113. README.md
  114. STYLEGUIDE.md
  115. tools.go
  116. tsconfig.json
  117. whitespace.txt
  118. WORKSPACE
README.md

Skia-Buildbot Repository

This repo contains infrastructure code for Skia.

Getting the Source Code

The main source code repository is a Git repository hosted at https://skia.googlesource.com/buildbot.git. It is possible to check out this repository directly with git clone or via go get.

Using git clone allows you to work in whatever directory you want. You will still need to set GOPATH in order to build some apps (recommended to put this in a cache dir). E.g.:

$ cd ${WORKDIR}
$ git clone https://skia.googlesource.com/buildbot.git
$ export GOPATH=${HOME}/.cache/gopath/$(basename ${WORKDIR})
$ mkdir $GOPATH
$ cd buildbot

Install dependencies

Almost all applications are built with Bazel, and bazelisk is the recommended tool to ensure you have the right version of bazel installed:

go install github.com/bazelbuild/bazelisk@latest
go install github.com/bazelbuild/buildtools/buildifier@latest
go install github.com/kisielk/errcheck@latest
go install golang.org/x/tools/cmd/goimports@latest
go install github.com/mikefarah/yq/v4@latest
go install go.chromium.org/luci/client/cmd/...@latest

Install other dependencies:

sudo apt-get install jq

Build ~everything

bazelisk build --config=mayberemote //...

Test everything

bazelisk test --config=mayberemote //...

Generated Code

To update generated code run the following in any directory:

go generate ./...

Running unit tests

Install Cloud SDK.

Use this command to run the presubmit tests:

./run_unittests --small