Compare commits

...

2 Commits

Author SHA1 Message Date
SuperQ dd1189e8ad
Chore: Enable golangci-lint
Add a GitHub actions workflow to run golangci-lint.

Signed-off-by: SuperQ <superq@gmail.com>
2025-01-05 18:36:25 +01:00
SuperQ c380c702c7
Chore: Fix up various linting issues
In prep to add golangci-lint, fix various linting issues.
* Make the `kvm` package a fully-qualified public package.

Signed-off-by: SuperQ <superq@gmail.com>
2025-01-05 18:35:47 +01:00
15 changed files with 75 additions and 27 deletions

34
.github/workflows/golangci-lint.yml vendored Normal file
View File

@ -0,0 +1,34 @@
---
name: golangci-lint
on:
push:
paths:
- "go.sum"
- "go.mod"
- "**.go"
- ".github/workflows/golangci-lint.yml"
- ".golangci.yml"
pull_request:
permissions: # added using https://github.com/step-security/secure-repo
contents: read
jobs:
golangci:
permissions:
contents: read # for actions/checkout to fetch code
pull-requests: read # for golangci/golangci-lint-action to fetch pull requests
name: lint
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install Go
uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0
with:
go-version: 1.23.x
- name: Lint
uses: golangci/golangci-lint-action@971e284b6050e8a5849b72094c50ab08da042db8 # v6.1.1
with:
args: --verbose
version: v1.62.0

12
.golangci.yml Normal file
View File

@ -0,0 +1,12 @@
---
linters:
enable:
# - goimports
# - misspell
# - revive
issues:
exclude-rules:
- path: _test.go
linters:
- errcheck

View File

@ -124,7 +124,7 @@ func runWebsocketClient() error {
if err != nil { if err != nil {
return err return err
} }
defer c.CloseNow() defer c.CloseNow() //nolint:errcheck
logger.Infof("WS connected to %v", wsURL.String()) logger.Infof("WS connected to %v", wsURL.String())
runCtx, cancelRun := context.WithCancel(context.Background()) runCtx, cancelRun := context.WithCancel(context.Background())
defer cancelRun() defer cancelRun()

View File

@ -1,7 +1,7 @@
package main package main
import ( import (
"kvm" "github.com/jetkvm/kvm"
) )
func main() { func main() {

2
go.mod
View File

@ -1,4 +1,4 @@
module kvm module github.com/jetkvm/kvm
go 1.21.0 go 1.21.0

4
hw.go
View File

@ -14,7 +14,7 @@ func extractSerialNumber() (string, error) {
return "", err return "", err
} }
r, err := regexp.Compile("Serial\\s*:\\s*(\\S+)") r, err := regexp.Compile(`Serial\s*:\s*(\S+)`)
if err != nil { if err != nil {
return "", fmt.Errorf("failed to compile regex: %w", err) return "", fmt.Errorf("failed to compile regex: %w", err)
} }
@ -27,7 +27,7 @@ func extractSerialNumber() (string, error) {
return matches[1], nil return matches[1], nil
} }
func readOtpEntropy() ([]byte, error) { func readOtpEntropy() ([]byte, error) { //nolint:unused
content, err := os.ReadFile("/sys/bus/nvmem/devices/rockchip-otp0/nvmem") content, err := os.ReadFile("/sys/bus/nvmem/devices/rockchip-otp0/nvmem")
if err != nil { if err != nil {
return nil, err return nil, err

View File

@ -48,7 +48,7 @@ func Main() {
time.Sleep(15 * time.Minute) time.Sleep(15 * time.Minute)
for { for {
logger.Debugf("UPDATING - Auto update enabled: %v", config.AutoUpdateEnabled) logger.Debugf("UPDATING - Auto update enabled: %v", config.AutoUpdateEnabled)
if config.AutoUpdateEnabled == false { if !config.AutoUpdateEnabled {
return return
} }
if currentSession != nil { if currentSession != nil {

View File

@ -5,7 +5,6 @@ import (
"encoding/json" "encoding/json"
"fmt" "fmt"
"io" "io"
"kvm/resource"
"log" "log"
"net" "net"
"os" "os"
@ -13,6 +12,8 @@ import (
"sync" "sync"
"time" "time"
"github.com/jetkvm/kvm/resource"
"github.com/pion/webrtc/v4/pkg/media" "github.com/pion/webrtc/v4/pkg/media"
) )
@ -90,8 +91,8 @@ func WriteCtrlMessage(message []byte) error {
return err return err
} }
var nativeCtrlSocketListener net.Listener var nativeCtrlSocketListener net.Listener //nolint:unused
var nativeVideoSocketListener net.Listener var nativeVideoSocketListener net.Listener //nolint:unused
var ctrlClientConnected = make(chan struct{}) var ctrlClientConnected = make(chan struct{})
@ -191,7 +192,7 @@ func handleVideoClient(conn net.Conn) {
for { for {
n, err := conn.Read(inboundPacket) n, err := conn.Read(inboundPacket)
if err != nil { if err != nil {
log.Println("error during read: %s", err) log.Printf("error during read: %s\n", err)
return return
} }
now := time.Now() now := time.Now()

View File

@ -28,7 +28,7 @@ type LocalIpInfo struct {
func checkNetworkState() { func checkNetworkState() {
iface, err := netlink.LinkByName("eth0") iface, err := netlink.LinkByName("eth0")
if err != nil { if err != nil {
fmt.Printf("failed to get eth0 interface: %v\n", err) fmt.Printf("failed to get eth0 interface: %s\n", err)
return return
} }
@ -44,7 +44,7 @@ func checkNetworkState() {
addrs, err := netlink.AddrList(iface, nl.FAMILY_ALL) addrs, err := netlink.AddrList(iface, nl.FAMILY_ALL)
if err != nil { if err != nil {
fmt.Printf("failed to get addresses for eth0: %v\n", err) fmt.Printf("failed to get addresses for eth0: %s\n", err)
} }
for _, addr := range addrs { for _, addr := range addrs {
@ -98,7 +98,7 @@ func init() {
done := make(chan struct{}) done := make(chan struct{})
if err := netlink.LinkSubscribe(updates, done); err != nil { if err := netlink.LinkSubscribe(updates, done); err != nil {
fmt.Println("failed to subscribe to link updates: %v", err) fmt.Printf("failed to subscribe to link updates: %v\n", err)
return return
} }
@ -125,6 +125,6 @@ func init() {
fmt.Println("Starting mDNS server") fmt.Println("Starting mDNS server")
err := startMDNS() err := startMDNS()
if err != nil { if err != nil {
fmt.Println("failed to run mDNS: %v", err) fmt.Printf("failed to run mDNS: %v\n", err)
} }
} }

2
ntp.go
View File

@ -11,7 +11,7 @@ import (
"github.com/beevik/ntp" "github.com/beevik/ntp"
) )
var timeSynced = false var timeSynced = false //nolint:unused
func TimeSyncLoop() { func TimeSyncLoop() {
for { for {

View File

@ -49,7 +49,7 @@ func (w *WebRTCDiskReader) Read(ctx context.Context, offset int64, size int64) (
if err != nil { if err != nil {
return nil, err return nil, err
} }
buf := make([]byte, 0) var buf []byte
for { for {
select { select {
case data := <-diskReadChan: case data := <-diskReadChan:

View File

@ -55,11 +55,13 @@ func handleTerminalChannel(d *webrtc.DataChannel) {
var size TerminalSize var size TerminalSize
err := json.Unmarshal([]byte(msg.Data), &size) err := json.Unmarshal([]byte(msg.Data), &size)
if err == nil { if err == nil {
pty.Setsize(ptmx, &pty.Winsize{ err = pty.Setsize(ptmx, &pty.Winsize{
Rows: uint16(size.Rows), Rows: uint16(size.Rows),
Cols: uint16(size.Cols), Cols: uint16(size.Cols),
}) })
return if err == nil {
return
}
} }
logger.Errorf("Failed to parse terminal size: %v", err) logger.Errorf("Failed to parse terminal size: %v", err)
} }
@ -74,7 +76,7 @@ func handleTerminalChannel(d *webrtc.DataChannel) {
ptmx.Close() ptmx.Close()
} }
if cmd != nil && cmd.Process != nil { if cmd != nil && cmd.Process != nil {
cmd.Process.Kill() _ = cmd.Process.Kill()
} }
}) })
} }

2
usb.go
View File

@ -215,7 +215,7 @@ func writeGadgetConfig() error {
return nil return nil
} }
func rebindUsb() error { func rebindUsb() error { //nolint:unused
err := os.WriteFile("/sys/bus/platform/drivers/dwc3/unbind", []byte(udc), 0644) err := os.WriteFile("/sys/bus/platform/drivers/dwc3/unbind", []byte(udc), 0644)
if err != nil { if err != nil {
return err return err

View File

@ -5,7 +5,6 @@ import (
"errors" "errors"
"fmt" "fmt"
"io" "io"
"kvm/resource"
"log" "log"
"net/http" "net/http"
"os" "os"
@ -16,12 +15,12 @@ import (
"syscall" "syscall"
"time" "time"
"github.com/jetkvm/kvm/resource"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/psanford/httpreadat"
"github.com/google/uuid" "github.com/google/uuid"
"github.com/pion/webrtc/v4" "github.com/pion/webrtc/v4"
"github.com/psanford/httpreadat"
) )
const massStorageName = "mass_storage.usb0" const massStorageName = "mass_storage.usb0"
@ -60,11 +59,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", 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", err) return fmt.Errorf("Set Mass Storage Image Error: %w", err)
} }
return nil return nil
} }

2
wol.go
View File

@ -43,7 +43,7 @@ func createMagicPacket(mac net.HardwareAddr) []byte {
// Write the target MAC address 16 times // Write the target MAC address 16 times
for i := 0; i < 16; i++ { for i := 0; i < 16; i++ {
binary.Write(&buf, binary.BigEndian, mac) _ = binary.Write(&buf, binary.BigEndian, mac)
} }
return buf.Bytes() return buf.Bytes()