mirror of https://github.com/coder/coder.git
103 lines
3.1 KiB
Go
103 lines
3.1 KiB
Go
// Package db2sdk provides common conversion routines from database types to codersdk types
|
|
package db2sdk
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
|
|
"github.com/coder/coder/coderd/database"
|
|
"github.com/coder/coder/coderd/parameter"
|
|
"github.com/coder/coder/codersdk"
|
|
"github.com/coder/coder/provisionersdk/proto"
|
|
)
|
|
|
|
func WorkspaceBuildParameters(params []database.WorkspaceBuildParameter) []codersdk.WorkspaceBuildParameter {
|
|
out := make([]codersdk.WorkspaceBuildParameter, len(params))
|
|
for i, p := range params {
|
|
out[i] = WorkspaceBuildParameter(p)
|
|
}
|
|
return out
|
|
}
|
|
|
|
func WorkspaceBuildParameter(p database.WorkspaceBuildParameter) codersdk.WorkspaceBuildParameter {
|
|
return codersdk.WorkspaceBuildParameter{
|
|
Name: p.Name,
|
|
Value: p.Value,
|
|
}
|
|
}
|
|
|
|
func TemplateVersionParameter(param database.TemplateVersionParameter) (codersdk.TemplateVersionParameter, error) {
|
|
var protoOptions []*proto.RichParameterOption
|
|
err := json.Unmarshal(param.Options, &protoOptions)
|
|
if err != nil {
|
|
return codersdk.TemplateVersionParameter{}, err
|
|
}
|
|
options := make([]codersdk.TemplateVersionParameterOption, 0)
|
|
for _, option := range protoOptions {
|
|
options = append(options, codersdk.TemplateVersionParameterOption{
|
|
Name: option.Name,
|
|
Description: option.Description,
|
|
Value: option.Value,
|
|
Icon: option.Icon,
|
|
})
|
|
}
|
|
|
|
descriptionPlaintext, err := parameter.Plaintext(param.Description)
|
|
if err != nil {
|
|
return codersdk.TemplateVersionParameter{}, err
|
|
}
|
|
|
|
var validationMin *int32
|
|
if param.ValidationMin.Valid {
|
|
validationMin = ¶m.ValidationMin.Int32
|
|
}
|
|
|
|
var validationMax *int32
|
|
if param.ValidationMax.Valid {
|
|
validationMax = ¶m.ValidationMax.Int32
|
|
}
|
|
|
|
return codersdk.TemplateVersionParameter{
|
|
Name: param.Name,
|
|
DisplayName: param.DisplayName,
|
|
Description: param.Description,
|
|
DescriptionPlaintext: descriptionPlaintext,
|
|
Type: param.Type,
|
|
Mutable: param.Mutable,
|
|
DefaultValue: param.DefaultValue,
|
|
Icon: param.Icon,
|
|
Options: options,
|
|
ValidationRegex: param.ValidationRegex,
|
|
ValidationMin: validationMin,
|
|
ValidationMax: validationMax,
|
|
ValidationError: param.ValidationError,
|
|
ValidationMonotonic: codersdk.ValidationMonotonicOrder(param.ValidationMonotonic),
|
|
Required: param.Required,
|
|
LegacyVariableName: param.LegacyVariableName,
|
|
}, nil
|
|
}
|
|
|
|
func ProvisionerJobStatus(provisionerJob database.ProvisionerJob) codersdk.ProvisionerJobStatus {
|
|
switch {
|
|
case provisionerJob.CanceledAt.Valid:
|
|
if !provisionerJob.CompletedAt.Valid {
|
|
return codersdk.ProvisionerJobCanceling
|
|
}
|
|
if provisionerJob.Error.String == "" {
|
|
return codersdk.ProvisionerJobCanceled
|
|
}
|
|
return codersdk.ProvisionerJobFailed
|
|
case !provisionerJob.StartedAt.Valid:
|
|
return codersdk.ProvisionerJobPending
|
|
case provisionerJob.CompletedAt.Valid:
|
|
if provisionerJob.Error.String == "" {
|
|
return codersdk.ProvisionerJobSucceeded
|
|
}
|
|
return codersdk.ProvisionerJobFailed
|
|
case database.Now().Sub(provisionerJob.UpdatedAt) > 30*time.Second:
|
|
return codersdk.ProvisionerJobFailed
|
|
default:
|
|
return codersdk.ProvisionerJobRunning
|
|
}
|
|
}
|