blob: ef367b4a7f969ad16d8b79fbd5fb4c4e02de004f [file] [log] [blame]
// 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
}