mirror of https://github.com/databricks/cli.git
Assert SDK version is consistent in the CLI generation process (#1814)
## Changes Followup from https://github.com/databricks/cli/pull/1809#discussion_r1790045086. User will see the following error if the SDK version does not match during CLI code generation. ``` --- FAIL: TestConsistentDatabricksSdkVersion (1.34s) info_test.go:53: Error Trace: /Users/shreyas.goenka/cli/internal/build/info_test.go:53 Error: Not equal: expected: "0c86ea6dbd9a730c24ff0d4e509603e476955ac5" actual : "6f6b1371e640f2dfeba72d365ac566368656f6b6" Diff: --- Expected +++ Actual @@ -1 +1 @@ -0c86ea6dbd9a730c24ff0d4e509603e476955ac5 +6f6b1371e640f2dfeba72d365ac566368656f6b6 Test: TestConsistentDatabricksSdkVersion Messages: please update the SDK version before generating the CLI ``` ## Tests Manually asserted that: 1. Generating the CLI without the SDK bump causes an error. 2. Generating the CLI after the SDK bump works as expected. 3. The test works even when the SDK is pinned to a specific commit like `v0.47.1-0.20241002195128-6cecc224cbf7`
This commit is contained in:
parent
f0e2981596
commit
ab20624206
|
@ -11,6 +11,7 @@
|
|||
"toolchain": {
|
||||
"required": ["go"],
|
||||
"post_generate": [
|
||||
"go test -timeout 240s -run TestConsistentDatabricksSdkVersion github.com/databricks/cli/internal/build",
|
||||
"go run ./bundle/internal/schema/*.go ./bundle/schema/jsonschema.json",
|
||||
"echo 'bundle/internal/tf/schema/\\*.go linguist-generated=true' >> ./.gitattributes",
|
||||
"echo 'go.sum linguist-generated=true' >> ./.gitattributes",
|
||||
|
|
|
@ -0,0 +1,73 @@
|
|||
package build
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
"golang.org/x/mod/modfile"
|
||||
)
|
||||
|
||||
// This test ensures that the OpenAPI SHA the CLI is being generated from matches
|
||||
// the OpenAPI SHA of the Go SDK version used in the CLI. We should always upgrade
|
||||
// the Go SDK version before generating the CLI because downstream generated assets
|
||||
// like the bundle schema depend on the Go SDK itself.
|
||||
func TestConsistentDatabricksSdkVersion(t *testing.T) {
|
||||
// Read the go.mod file
|
||||
b, err := os.ReadFile("../../go.mod")
|
||||
require.NoError(t, err)
|
||||
|
||||
// Parse the go.mod file to get the databricks-sdk version
|
||||
modFile, err := modfile.Parse("../../go.mod", b, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
modulePath := "github.com/databricks/databricks-sdk-go"
|
||||
var version string
|
||||
for _, r := range modFile.Require {
|
||||
if r.Mod.Path == modulePath {
|
||||
version = r.Mod.Version
|
||||
}
|
||||
}
|
||||
require.NotEmpty(t, version)
|
||||
|
||||
// Full path of the package. For example: github.com/databricks/databricks-sdk-go@v0.47.1-0.20241002195128-6cecc224cbf7
|
||||
fullPath := fmt.Sprintf("%s@%s", modulePath, version)
|
||||
|
||||
type goListResponse struct {
|
||||
Origin struct {
|
||||
Hash string
|
||||
}
|
||||
}
|
||||
|
||||
// Using the go CLI query for the git hash corresponding to the databricks-sdk-go version
|
||||
cmd := exec.Command("go", "list", "-m", "-json", "-mod=readonly", fullPath)
|
||||
out, err := cmd.Output()
|
||||
require.NoError(t, err)
|
||||
parsedOutput := new(goListResponse)
|
||||
err = json.Unmarshal(out, parsedOutput)
|
||||
require.NoError(t, err)
|
||||
hash := parsedOutput.Origin.Hash
|
||||
require.NotEmpty(t, hash)
|
||||
|
||||
// Read the OpenAPI SHA from the Go SDK.
|
||||
url := fmt.Sprintf("https://raw.githubusercontent.com/databricks/databricks-sdk-go/%s/.codegen/_openapi_sha", hash)
|
||||
resp, err := http.Get(url)
|
||||
require.NoError(t, err)
|
||||
defer resp.Body.Close()
|
||||
require.Equal(t, http.StatusOK, resp.StatusCode)
|
||||
|
||||
sdkSha, err := io.ReadAll(resp.Body)
|
||||
require.NoError(t, err)
|
||||
|
||||
cliSha, err := os.ReadFile("../../.codegen/_openapi_sha")
|
||||
require.NoError(t, err)
|
||||
|
||||
assert.Equal(t, strings.TrimSpace(string(cliSha)), strings.TrimSpace(string(sdkSha)), "please update the SDK version before generating the CLI")
|
||||
}
|
Loading…
Reference in New Issue