| // This package defines a test that ensures the "puppeteer" and "puppeteer-core" NPM packages have |
| // the same exact version. This ensures that chrome_downloader.ts faithfully reproduces Puppeteer's |
| // post-install hook. See //.puppeteerrc.js for additional context. |
| |
| package chrome_downloader |
| |
| import ( |
| "encoding/json" |
| "os" |
| "path/filepath" |
| "testing" |
| |
| "github.com/stretchr/testify/assert" |
| "github.com/stretchr/testify/require" |
| "go.skia.org/infra/bazel/go/bazel" |
| ) |
| |
| type packageJSON struct { |
| Name string `json:"name"` |
| Version string `json:"version"` |
| } |
| |
| func TestPuppeteerAndPuppeteerCoreNPMPackagesVersionsMatch(t *testing.T) { |
| deps := parseDepsFromPackageJSONFile(t) |
| |
| puppeteerVersion, ok := deps["puppeteer"] |
| require.True(t, ok) |
| puppeteerCoreVersion, ok := deps["puppeteer-core"] |
| require.True(t, ok) |
| |
| // Package versions must match. |
| assert.Equal( |
| t, |
| puppeteerVersion, |
| puppeteerCoreVersion, |
| `NPM packages "puppeteer" and "puppeteer-core" must be the same version. |
| |
| "puppeteer" NPM package version: %s |
| "puppeteer-core" NPM package version: %s |
| |
| To fix this issue, update the above NPM packages via the "npm" command, e.g.: |
| |
| $ bazel run --config=remote //:npm -- install --save-exact puppeteer@<version> |
| $ bazel run --config=remote //:npm -- install --save-exact puppeteer-core@<version> |
| |
| See the following links for a list of valid versions: |
| |
| - https://www.npmjs.com/package/puppeteer?activeTab=versions" |
| - https://www.npmjs.com/package/puppeteer-core?activeTab=versions |
| `, |
| puppeteerVersion, |
| puppeteerCoreVersion) |
| |
| // It is important that we specify an exact version, or (at least in theory) NPM might resolve |
| // slightly different versions of the puppeteer and pupppeteer-core packages. |
| assert.Regexp(t, `^[0-9].*$`, puppeteerVersion, "Puppeteer version specifier must be exact (no range prefixes such as ^ or ~).") |
| |
| } |
| |
| func parseDepsFromPackageJSONFile(t *testing.T) map[string]string { |
| b, err := os.ReadFile(filepath.Join(bazel.RunfilesDir(), "package.json")) |
| require.NoError(t, err) |
| var packageJSON struct { |
| Dependencies map[string]string `json:"dependencies"` |
| } |
| require.NoError(t, json.Unmarshal(b, &packageJSON)) |
| return packageJSON.Dependencies |
| } |