refactor: update golintci-lint and linter issues

* Update golangci-lint

Update golangci-lint to v2.

Signed-off-by: SuperQ <superq@gmail.com>

* Fixup various linter issues.

Signed-off-by: SuperQ <superq@gmail.com>

---------

Signed-off-by: SuperQ <superq@gmail.com>
This commit is contained in:
Ben Kochie 2025-04-13 02:55:30 +01:00 committed by GitHub
parent 951e673e0c
commit 009b0abbe9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
11 changed files with 72 additions and 54 deletions

View File

@ -26,12 +26,12 @@ jobs:
- name: Install Go - name: Install Go
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
with: with:
go-version: 1.23.x go-version: 1.24.x
- name: Create empty resource directory - name: Create empty resource directory
run: | run: |
mkdir -p static && touch static/.gitkeep mkdir -p static && touch static/.gitkeep
- name: Lint - name: Lint
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1 uses: golangci/golangci-lint-action@1481404843c368bc19ca9406f87d6e0fc97bdcfd # v7.0.0
with: with:
args: --verbose args: --verbose
version: v1.62.0 version: v2.0.2

View File

@ -1,22 +1,37 @@
--- version: "2"
linters: linters:
enable: enable:
- forbidigo - forbidigo
- goimports - misspell
- misspell - whitespace
# - revive settings:
- whitespace forbidigo:
forbid:
issues: - pattern: ^fmt\.Print.*$
exclude-rules: msg: Do not commit print statements. Use logger package.
- path: _test.go - pattern: ^log\.(Fatal|Panic|Print)(f|ln)?.*$
linters: msg: Do not commit log statements. Use logger package.
- errcheck exclusions:
generated: lax
linters-settings: presets:
forbidigo: - comments
forbid: - common-false-positives
- p: ^fmt\.Print.*$ - legacy
msg: Do not commit print statements. Use logger package. - std-error-handling
- p: ^log\.(Fatal|Panic|Print)(f|ln)?.*$ rules:
msg: Do not commit log statements. Use logger package. - linters:
- errcheck
path: _test.go
paths:
- third_party$
- builtin$
- examples$
formatters:
enable:
- goimports
exclusions:
generated: lax
paths:
- third_party$
- builtin$
- examples$

View File

@ -34,16 +34,17 @@ func (r remoteImageBackend) ReadAt(p []byte, off int64) (n int, err error) {
readLen = mountedImageSize - off readLen = mountedImageSize - off
} }
var data []byte var data []byte
if source == WebRTC { switch source {
case WebRTC:
data, err = webRTCDiskReader.Read(ctx, off, readLen) data, err = webRTCDiskReader.Read(ctx, off, readLen)
if err != nil { if err != nil {
return 0, err return 0, err
} }
n = copy(p, data) n = copy(p, data)
return n, nil return n, nil
} else if source == HTTP { case HTTP:
return httpRangeReader.ReadAt(p, off) return httpRangeReader.ReadAt(p, off)
} else { default:
return 0, errors.New("unknown image source") return 0, errors.New("unknown image source")
} }
} }

View File

@ -228,7 +228,7 @@ func startBacklightTickers() {
defer dimTicker.Stop() defer dimTicker.Stop()
go func() { go func() {
for { //nolint:gosimple for { //nolint:staticcheck
select { select {
case <-dimTicker.C: case <-dimTicker.C:
tick_displayDim() tick_displayDim()
@ -243,7 +243,7 @@ func startBacklightTickers() {
defer offTicker.Stop() defer offTicker.Stop()
go func() { go func() {
for { //nolint:gosimple for { //nolint:staticcheck
select { select {
case <-offTicker.C: case <-offTicker.C:
tick_displayOff() tick_displayOff()

View File

@ -37,7 +37,7 @@ func (f *WebRTCStreamFile) Getattr(ctx context.Context, fh fs.FileHandle, out *f
f.mu.Lock() f.mu.Lock()
defer f.mu.Unlock() defer f.mu.Unlock()
out.Attr = f.Attr out.Attr = f.Attr
out.Attr.Size = f.size out.Size = f.size
return fs.OK return fs.OK
} }

View File

@ -49,12 +49,12 @@ func (s *CertStore) ensureStorePath() error {
s.log.Trace().Str("path", s.storePath).Msg("TLS store directory does not exist, creating directory") s.log.Trace().Str("path", s.storePath).Msg("TLS store directory does not exist, creating directory")
err = os.MkdirAll(s.storePath, 0755) err = os.MkdirAll(s.storePath, 0755)
if err != nil { if err != nil {
return fmt.Errorf("Failed to create TLS store path: %w", err) return fmt.Errorf("failed to create TLS store path: %w", err)
} }
return nil return nil
} }
return fmt.Errorf("Failed to check TLS store path: %w", err) return fmt.Errorf("failed to check TLS store path: %w", err)
} }
func (s *CertStore) LoadCertificates() { func (s *CertStore) LoadCertificates() {
@ -115,7 +115,7 @@ func (s *CertStore) GetCertificate(hostname string) *tls.Certificate {
func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key string, ignoreWarning bool) (error, error) { func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key string, ignoreWarning bool) (error, error) {
tlsCert, err := tls.X509KeyPair([]byte(cert), []byte(key)) tlsCert, err := tls.X509KeyPair([]byte(cert), []byte(key))
if err != nil { if err != nil {
return fmt.Errorf("Failed to parse certificate: %w", err), nil return fmt.Errorf("failed to parse certificate: %w", err), nil
} }
// this can be skipped as current implementation supports one custom certificate only // this can be skipped as current implementation supports one custom certificate only
@ -129,7 +129,7 @@ func (s *CertStore) ValidateAndSaveCertificate(hostname string, cert string, key
if err = tlsCert.Leaf.VerifyHostname(hostname); err != nil { if err = tlsCert.Leaf.VerifyHostname(hostname); err != nil {
if !ignoreWarning { if !ignoreWarning {
return nil, fmt.Errorf("Certificate does not match hostname: %w", err) return nil, fmt.Errorf("certificate does not match hostname: %w", err)
} }
s.log.Warn().Err(err).Msg("Certificate does not match hostname") s.log.Warn().Err(err).Msg("Certificate does not match hostname")
} }

View File

@ -35,7 +35,7 @@ func keyToFile(cert *tls.Certificate, filename string) error {
case *ecdsa.PrivateKey: case *ecdsa.PrivateKey:
b, e := x509.MarshalECPrivateKey(k) b, e := x509.MarshalECPrivateKey(k)
if e != nil { if e != nil {
return fmt.Errorf("Failed to marshal EC private key: %v", e) return fmt.Errorf("failed to marshal EC private key: %v", e)
} }
keyBlock = pem.Block{ keyBlock = pem.Block{
@ -43,7 +43,7 @@ func keyToFile(cert *tls.Certificate, filename string) error {
Bytes: b, Bytes: b,
} }
default: default:
return fmt.Errorf("Unknown private key type: %T", k) return fmt.Errorf("unknown private key type: %T", k)
} }
err := withSecretFile(filename, func(file *os.File) error { err := withSecretFile(filename, func(file *os.File) error {
@ -51,7 +51,7 @@ func keyToFile(cert *tls.Certificate, filename string) error {
}) })
if err != nil { if err != nil {
return fmt.Errorf("Failed to save private key: %w", err) return fmt.Errorf("failed to save private key: %w", err)
} }
return nil return nil
@ -67,7 +67,7 @@ func certToFile(cert *tls.Certificate, filename string) error {
err := pem.Encode(file, &block) err := pem.Encode(file, &block)
if err != nil { if err != nil {
return fmt.Errorf("Failed to save certificate: %w", err) return fmt.Errorf("failed to save certificate: %w", err)
} }
} }

View File

@ -659,18 +659,20 @@ func rpcSetActiveExtension(extensionId string) error {
if config.ActiveExtension == extensionId { if config.ActiveExtension == extensionId {
return nil return nil
} }
if config.ActiveExtension == "atx-power" { switch config.ActiveExtension {
case "atx-power":
_ = unmountATXControl() _ = unmountATXControl()
} else if config.ActiveExtension == "dc-power" { case "dc-power":
_ = unmountDCControl() _ = unmountDCControl()
} }
config.ActiveExtension = extensionId config.ActiveExtension = extensionId
if err := SaveConfig(); err != nil { if err := SaveConfig(); err != nil {
return fmt.Errorf("failed to save config: %w", err) return fmt.Errorf("failed to save config: %w", err)
} }
if extensionId == "atx-power" { switch extensionId {
case "atx-power":
_ = mountATXControl() _ = mountATXControl()
} else if extensionId == "dc-power" { case "dc-power":
_ = mountDCControl() _ = mountDCControl()
} }
return nil return nil

View File

@ -219,9 +219,10 @@ var defaultMode = &serial.Mode{
func initSerialPort() { func initSerialPort() {
_ = reopenSerialPort() _ = reopenSerialPort()
if config.ActiveExtension == "atx-power" { switch config.ActiveExtension {
case "atx-power":
_ = mountATXControl() _ = mountATXControl()
} else if config.ActiveExtension == "dc-power" { case "dc-power":
_ = mountDCControl() _ = mountDCControl()
} }
} }

View File

@ -62,11 +62,11 @@ func onDiskMessage(msg webrtc.DataChannelMessage) {
func mountImage(imagePath string) error { func mountImage(imagePath string) error {
err := setMassStorageImage("") err := setMassStorageImage("")
if err != nil { if err != nil {
return fmt.Errorf("Remove Mass Storage Image Error: %w", err) return fmt.Errorf("remove Mass Storage Image Error: %w", err)
} }
err = setMassStorageImage(imagePath) err = setMassStorageImage(imagePath)
if err != nil { if err != nil {
return fmt.Errorf("Set Mass Storage Image Error: %w", err) return fmt.Errorf("set Mass Storage Image Error: %w", err)
} }
return nil return nil
} }
@ -476,10 +476,8 @@ func handleUploadChannel(d *webrtc.DataChannel) {
} }
totalBytesWritten += int64(bytesWritten) totalBytesWritten += int64(bytesWritten)
sendProgress := false sendProgress := time.Since(lastProgressTime) >= 200*time.Millisecond
if time.Since(lastProgressTime) >= 200*time.Millisecond {
sendProgress = true
}
if totalBytesWritten >= pendingUpload.Size { if totalBytesWritten >= pendingUpload.Size {
sendProgress = true sendProgress = true
close(uploadComplete) close(uploadComplete)

View File

@ -52,12 +52,13 @@ func initCertStore() {
} }
func getCertificate(info *tls.ClientHelloInfo) (*tls.Certificate, error) { func getCertificate(info *tls.ClientHelloInfo) (*tls.Certificate, error) {
if config.TLSMode == "self-signed" { switch config.TLSMode {
case "self-signed":
if isTimeSyncNeeded() || !timeSyncSuccess { if isTimeSyncNeeded() || !timeSyncSuccess {
return nil, fmt.Errorf("time is not synced") return nil, fmt.Errorf("time is not synced")
} }
return certSigner.GetCertificate(info) return certSigner.GetCertificate(info)
} else if config.TLSMode == "custom" { case "custom":
return certStore.GetCertificate(webSecureCustomCertificateName), nil return certStore.GetCertificate(webSecureCustomCertificateName), nil
} }
@ -110,7 +111,7 @@ func setTLSState(s TLSState) error {
err, _ := certStore.ValidateAndSaveCertificate(webSecureCustomCertificateName, s.Certificate, s.PrivateKey, true) err, _ := certStore.ValidateAndSaveCertificate(webSecureCustomCertificateName, s.Certificate, s.PrivateKey, true)
// warn doesn't matter as ... we don't know the hostname yet // warn doesn't matter as ... we don't know the hostname yet
if err != nil { if err != nil {
return fmt.Errorf("Failed to save certificate: %w", err) return fmt.Errorf("failed to save certificate: %w", err)
} }
config.TLSMode = "custom" config.TLSMode = "custom"
case "self-signed": case "self-signed":
@ -169,7 +170,7 @@ func runWebSecureServer() {
websecureLogger.Info().Str("listen", webSecureListen).Msg("Starting websecure server") websecureLogger.Info().Str("listen", webSecureListen).Msg("Starting websecure server")
go func() { go func() {
for _ = range stopTLS { for range stopTLS {
websecureLogger.Info().Msg("Shutting down websecure server") websecureLogger.Info().Msg("Shutting down websecure server")
err := server.Shutdown(context.Background()) err := server.Shutdown(context.Background())
if err != nil { if err != nil {
@ -201,7 +202,7 @@ func startWebSecureServer() {
} }
func RunWebSecureServer() { func RunWebSecureServer() {
for _ = range startTLS { for range startTLS {
websecureLogger.Info().Msg("Starting websecure server, as we have received a start signal") websecureLogger.Info().Msg("Starting websecure server, as we have received a start signal")
if certStore == nil { if certStore == nil {
initCertStore() initCertStore()