Update to Go 1.20 + run better align (#2927)

* chore(go): update go version to 1.20. Closes #2185

* chore(go): run better align against project

To optimize struct field order. Closes #2870

* chore(go): update CI jobs to use Go 1.20

* fix(go): linter warnings for Go 1.20 update
This commit is contained in:
Gabe Kangas
2023-05-30 10:31:43 -07:00
committed by GitHub
parent 7e0907e16c
commit 85e7af3d5f
47 changed files with 248 additions and 695 deletions

View File

@@ -19,27 +19,27 @@ import (
// Client represents a single chat client.
type Client struct {
mu sync.RWMutex
Id uint `json:"-"`
accessToken string
conn *websocket.Conn
User *user.User `json:"user"`
server *Server
IPAddress string `json:"-"`
ConnectedAt time.Time `json:"connectedAt"`
timeoutTimer *time.Timer
rateLimiter *rate.Limiter
conn *websocket.Conn
User *user.User `json:"user"`
server *Server
Geo *geoip.GeoDetails `json:"geo"`
// Buffered channel of outbound messages.
send chan []byte
rateLimiter *rate.Limiter
timeoutTimer *time.Timer
accessToken string
IPAddress string `json:"-"`
UserAgent string `json:"userAgent"`
MessageCount int `json:"messageCount"`
Id uint `json:"-"`
mu sync.RWMutex
inTimeout bool
Geo *geoip.GeoDetails `json:"geo"`
MessageCount int `json:"messageCount"`
UserAgent string `json:"userAgent"`
ConnectedAt time.Time `json:"connectedAt"`
}
type chatClientEvent struct {
data []byte
client *Client
data []byte
}
const (

View File

@@ -28,16 +28,16 @@ type OutboundEvent interface {
// Event is any kind of event. A type is required to be specified.
type Event struct {
Timestamp time.Time `json:"timestamp"`
Type EventType `json:"type,omitempty"`
ID string `json:"id"`
Timestamp time.Time `json:"timestamp"`
}
// UserEvent is an event with an associated user.
type UserEvent struct {
User *user.User `json:"user"`
ClientID uint `json:"clientId,omitempty"`
HiddenAt *time.Time `json:"hiddenAt,omitempty"`
ClientID uint `json:"clientId,omitempty"`
}
// MessageEvent is an event that has a message body.

View File

@@ -186,26 +186,27 @@ func makeFederatedActionChatEventFromRowData(row rowData) events.FediverseEngage
}
type rowData struct {
id string
userID *string
body string
eventType models.EventType
hiddenAt *time.Time
timestamp time.Time
title *string
subtitle *string
image *string
link *string
timestamp time.Time
image *string
previousUsernames *string
userDisplayName *string
userDisplayColor *int
userDisplayName *string
userDisplayColor *int
userID *string
title *string
subtitle *string
link *string
userType *string
userScopes *string
hiddenAt *time.Time
userCreatedAt *time.Time
userDisabledAt *time.Time
previousUsernames *string
userNameChangedAt *time.Time
userAuthenticatedAt *time.Time
userScopes *string
userType *string
userNameChangedAt *time.Time
body string
eventType models.EventType
id string
}
func getChat(rows *sql.Rows) ([]interface{}, error) {

View File

@@ -27,10 +27,7 @@ var _lastSeenCache = map[string]time.Time{}
// Server represents an instance of the chat server.
type Server struct {
mu sync.RWMutex
seq uint
clients map[uint]*Client
maxSocketConnectionLimit int64
clients map[uint]*Client
// send outbound message payload to all clients
outbound chan []byte
@@ -41,7 +38,11 @@ type Server struct {
// unregister requests from clients.
unregister chan uint // the ChatClient id
geoipClient *geoip.Client
geoipClient *geoip.Client
seq uint
maxSocketConnectionLimit int64
mu sync.RWMutex
}
// NewChat will return a new instance of the chat server.

View File

@@ -283,11 +283,11 @@ func migrateToSchema1(db *sql.DB) {
// Migrate access tokens to become chat users
type oldAccessToken struct {
createdAt time.Time
lastUsedAt *time.Time
accessToken string
displayName string
scopes string
createdAt time.Time
lastUsedAt *time.Time
}
oldAccessTokens := make([]oldAccessToken, 0)

View File

@@ -28,7 +28,13 @@ import (
// S3Storage is the s3 implementation of a storage provider.
type S3Storage struct {
sess *session.Session
host string
// If we try to upload a playlist but it is not yet on disk
// then keep a reference to it here.
queuedPlaylistUpdates map[string]string
uploader *s3manager.Uploader
host string
s3Endpoint string
s3ServingEndpoint string
@@ -38,12 +44,6 @@ type S3Storage struct {
s3Secret string
s3ACL string
s3ForcePathStyle bool
// If we try to upload a playlist but it is not yet on disk
// then keep a reference to it here.
queuedPlaylistUpdates map[string]string
uploader *s3manager.Uploader
}
// NewS3Storage returns a new S3Storage instance.

View File

@@ -22,37 +22,40 @@ var _commandExec *exec.Cmd
// Transcoder is a single instance of a video transcoder.
type Transcoder struct {
input string
stdin *io.PipeReader
segmentOutputPath string
codec Codec
stdin *io.PipeReader
TranscoderCompleted func(error)
playlistOutputPath string
variants []HLSVariant
appendToStream bool
ffmpegPath string
segmentIdentifier string
internalListenerPort string
codec Codec
input string
segmentOutputPath string
variants []HLSVariant
currentStreamOutputSettings []models.StreamOutputVariant
currentLatencyLevel models.LatencyLevel
appendToStream bool
isEvent bool
TranscoderCompleted func(error)
}
// HLSVariant is a combination of settings that results in a single HLS stream.
type HLSVariant struct {
index int
audioBitrate string // The audio bitrate
videoSize VideoSize // Resizes the video via scaling
framerate int // The output framerate
videoBitrate int // The output bitrate
isVideoPassthrough bool // Override all settings and just copy the video stream
videoSize VideoSize // Resizes the video via scaling
index int
audioBitrate string // The audio bitrate
isAudioPassthrough bool // Override all settings and just copy the audio stream
framerate int // The output framerate
videoBitrate int // The output bitrate
cpuUsageLevel int // The amount of hardware to use for encoding a stream
isVideoPassthrough bool // Override all settings and just copy the video stream
isAudioPassthrough bool // Override all settings and just copy the audio stream
cpuUsageLevel int // The amount of hardware to use for encoding a stream
}
// VideoSize is the scaled size of the video output.

View File

@@ -15,14 +15,14 @@ import (
// ExternalAPIUser represents a single 3rd party integration that uses an access token.
// This struct mostly matches the User struct so they can be used interchangeably.
type ExternalAPIUser struct {
CreatedAt time.Time `json:"createdAt"`
LastUsedAt *time.Time `json:"lastUsedAt,omitempty"`
ID string `json:"id"`
AccessToken string `json:"accessToken"`
DisplayName string `json:"displayName"`
DisplayColor int `json:"displayColor"`
CreatedAt time.Time `json:"createdAt"`
Scopes []string `json:"scopes"`
Type string `json:"type,omitempty"` // Should be API
LastUsedAt *time.Time `json:"lastUsedAt,omitempty"`
Scopes []string `json:"scopes"`
DisplayColor int `json:"displayColor"`
IsBot bool `json:"isBot"`
}

View File

@@ -27,16 +27,16 @@ const (
// User represents a single chat user.
type User struct {
ID string `json:"id"`
DisplayName string `json:"displayName"`
DisplayColor int `json:"displayColor"`
CreatedAt time.Time `json:"createdAt"`
DisabledAt *time.Time `json:"disabledAt,omitempty"`
PreviousNames []string `json:"previousNames"`
NameChangedAt *time.Time `json:"nameChangedAt,omitempty"`
Scopes []string `json:"scopes,omitempty"`
IsBot bool `json:"isBot"`
AuthenticatedAt *time.Time `json:"-"`
ID string `json:"id"`
DisplayName string `json:"displayName"`
PreviousNames []string `json:"previousNames"`
Scopes []string `json:"scopes,omitempty"`
DisplayColor int `json:"displayColor"`
IsBot bool `json:"isBot"`
Authenticated bool `json:"authenticated"`
}

View File

@@ -11,19 +11,19 @@ import (
// WebhookEvent represents an event sent as a webhook.
type WebhookEvent struct {
Type models.EventType `json:"type"` // messageSent | userJoined | userNameChange
EventData interface{} `json:"eventData,omitempty"`
Type models.EventType `json:"type"` // messageSent | userJoined | userNameChange
}
// WebhookChatMessage represents a single chat message sent as a webhook payload.
type WebhookChatMessage struct {
User *user.User `json:"user,omitempty"`
ClientID uint `json:"clientId,omitempty"`
Timestamp *time.Time `json:"timestamp,omitempty"`
Body string `json:"body,omitempty"`
RawBody string `json:"rawBody,omitempty"`
ID string `json:"id,omitempty"`
ClientID uint `json:"clientId,omitempty"`
Visible bool `json:"visible"`
Timestamp *time.Time `json:"timestamp,omitempty"`
}
// SendEventToWebhooks will send a single webhook event to all webhook destinations.