Skip to content

Commit

Permalink
Pull in next version from package lock
Browse files Browse the repository at this point in the history
PiperOrigin-RevId: 600575957
Change-Id: I0022a6bc13724d662ddcf47f50052bdb9bd1d723
  • Loading branch information
GCP Buildpacks Team authored and copybara-github committed Jan 22, 2024
1 parent 57ee5d2 commit 0645605
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 1 deletion.
29 changes: 28 additions & 1 deletion cmd/nodejs/firebasenextjs/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
package main

import (
"encoding/json"

"github.com/GoogleCloudPlatform/buildpacks/pkg/nodejs"
"github.com/Masterminds/semver"

Expand Down Expand Up @@ -61,8 +63,9 @@ func buildFn(ctx *gcp.Context) error {
if err != nil {
return err
}
version := version(ctx, pjs)

err = validateVersion(ctx, pjs.Dependencies["next"])
err = validateVersion(ctx, version)
if err != nil {
return err
}
Expand Down Expand Up @@ -100,3 +103,27 @@ func validateVersion(ctx *gcp.Context, depVersion string) error {
}
return nil
}

type nextVersionJSON struct {
Name string `json:"name"`
Dependencies struct {
Next struct {
Version string `json:"version"`
Resolved string `json:"resolved"`
Overridden bool `json:"overridden"`
} `json:"next"`
} `json:"dependencies"`
}

// tries to get the concrete nextjs version used, otherwise falls back on package.json
func version(ctx *gcp.Context, pjs *nodejs.PackageJSON) string {
result, err := ctx.Exec([]string{"npm", "list", "next", "--json"})
if err != nil {
return pjs.Dependencies["next"]
}
var nextVersionnpm nextVersionJSON
if err := json.Unmarshal([]byte(result.Stdout), &nextVersionnpm); err != nil {
return pjs.Dependencies["next"]
}
return nextVersionnpm.Dependencies.Next.Version
}
45 changes: 45 additions & 0 deletions cmd/nodejs/firebasenextjs/main_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,51 @@ func TestBuild(t *testing.T) {
},
wantExitCode: 1,
},
{
name: "read supported concrete version from npm list",
files: map[string]string{
"package.json": `{
"dependencies": {
"next": "12.0.0 - 14.0.0"
}
}`,
},
mocks: []*mockprocess.Mock{
mockprocess.New(`npm list next --json`, mockprocess.WithStdout(`{
"name": "test",
"dependencies": {
"next": {
"version": "14.0.0",
"resolved": "https://registry.npmjs.org/next/-/next-14.1.0.tgz",
"overridden": false
}
}
}`)),
},
},
{
name: "read unsupported concrete version from npm list",
files: map[string]string{
"package.json": `{
"dependencies": {
"next": "12.0.0 - 14.0.0"
}
}`,
},
wantExitCode: 1,
mocks: []*mockprocess.Mock{
mockprocess.New(`npm list next --json`, mockprocess.WithStdout(`{
"name": "test",
"dependencies": {
"next": {
"version": "12.0.0",
"resolved": "https://registry.npmjs.org/next/-/next-12.0.0.tgz",
"overridden": false
}
}
}`)),
},
},
}

for _, tc := range testCases {
Expand Down

0 comments on commit 0645605

Please sign in to comment.