96 lines
2.7 KiB
Go
96 lines
2.7 KiB
Go
// Copyright 2022 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"time"
|
|
|
|
"dawn.googlesource.com/dawn/tools/src/buildbucket"
|
|
"github.com/tidwall/jsonc"
|
|
)
|
|
|
|
// Config holds the configuration data for the 'cts' command.
|
|
// Config is loaded from a JSON file stored next to the
|
|
// tools/src/cmd/cts/config.json.
|
|
type Config struct {
|
|
// Test holds configuration data for test results.
|
|
Test struct {
|
|
// The ResultDB string prefix for CTS tests.
|
|
Prefixes []string
|
|
// The time threshold used to classify tests as slow.
|
|
SlowThreshold time.Duration
|
|
}
|
|
// Gerrit holds configuration for Dawn's Gerrit server.
|
|
Gerrit struct {
|
|
// The host URL
|
|
Host string
|
|
// The project name
|
|
Project string
|
|
}
|
|
// Git holds configuration data for the various Git repositories.
|
|
Git struct {
|
|
// The CTS git repository.
|
|
CTS GitProject
|
|
// The Dawn git repository.
|
|
Dawn GitProject
|
|
}
|
|
// Builders is a map of builder name (as displayed in the UI) to buildbucket
|
|
// builder information.
|
|
Builders map[string]buildbucket.Builder
|
|
// Tags holds configuration data for cleaning result tags before processing
|
|
Tag struct {
|
|
// Remove holds tags that should be removed before processing.
|
|
// See crbug.com/dawn/1401 for more information.
|
|
Remove []string
|
|
}
|
|
// Sheets holds information about the Google Sheets document used for
|
|
// tracking CTS statistics.
|
|
Sheets struct {
|
|
ID string
|
|
}
|
|
}
|
|
|
|
// GitProject holds a git host URL and project.
|
|
type GitProject struct {
|
|
Host string
|
|
Project string
|
|
}
|
|
|
|
// HttpsURL returns the https URL of the project
|
|
func (g GitProject) HttpsURL() string {
|
|
return fmt.Sprintf("https://%v/%v", g.Host, g.Project)
|
|
}
|
|
|
|
// LoadConfig loads the JSON config file at the given path
|
|
func LoadConfig(path string) (*Config, error) {
|
|
data, err := ioutil.ReadFile(path)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to open '%v': %w", path, err)
|
|
}
|
|
|
|
// Remove comments, trailing commas.
|
|
data = jsonc.ToJSONInPlace(data)
|
|
|
|
cfg := Config{}
|
|
if err := json.NewDecoder(bytes.NewReader(data)).Decode(&cfg); err != nil {
|
|
return nil, fmt.Errorf("failed to load config: %w", err)
|
|
}
|
|
return &cfg, nil
|
|
}
|