Makefile: bump GOLANGCI_LINT_VERSION to v1.61

v1.60 seems to have some issues [1] with something in our dependency
chain.  Update to v1.61 and fix all new issues.

New issues are all instances of potential integer overflow from int ->
uint conversions.  Added guards where appropriate and disabled the check
when when it's not needed.

[1] https://github.com/osbuild/osbuild-composer/actions/runs/16624417387/job/47037518471
This commit is contained in:
Achilleas Koutsou 2025-07-30 16:27:59 +02:00
parent 6497b7520d
commit b3d1e4cf13
7 changed files with 23 additions and 12 deletions

View file

@ -29,7 +29,7 @@ SHELL := /bin/bash
# v1.56 to get golang 1.22 (1.22.0)
# v1.55 to get golang 1.21 (1.21.3)
# v1.53 to get golang 1.20 (1.20.5)
GOLANGCI_LINT_VERSION=v1.60
GOLANGCI_LINT_VERSION=v1.61
GOLANGCI_LINT_CACHE_DIR=$(HOME)/.cache/golangci-lint/$(GOLANGCI_LINT_VERSION)
GOLANGCI_COMPOSER_IMAGE=composer_golangci
#

View file

@ -168,11 +168,12 @@ func TestKojiImport(t *testing.T) {
RPMs: []koji.RPM{},
},
}
output := []koji.BuildOutput{
{
BuildRootID: 1,
Filename: filename,
FileSize: uint64(filesize),
FileSize: uint64(filesize), // nolint: gosec
Arch: "noarch",
ChecksumType: koji.ChecksumTypeMD5,
Checksum: hash,
@ -190,7 +191,7 @@ func TestKojiImport(t *testing.T) {
initResult, err := k.CGInitBuild(build.Name, build.Version, build.Release)
require.NoError(t, err)
build.BuildID = uint64(initResult.BuildID)
build.BuildID = uint64(initResult.BuildID) // nolint: gosec
importResult, err := k.CGImport(build, buildRoots, output, uploadDirectory, initResult.Token)
require.NoError(t, err)

View file

@ -141,6 +141,10 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
}
for i, buildResult := range osbuildResults {
// i is a range index which never get modified, so it's safe to
// ignore the sec warning
buildRootID := uint64(i) // nolint: gosec
buildRPMs := make([]koji.RPM, 0)
// collect packages from stages in build pipelines
for _, plName := range buildResult.PipelineNames.Build {
@ -171,7 +175,7 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
kojiTargetOptions := kojiTargetResult.Options.(*target.KojiTargetResultOptions)
buildRoots = append(buildRoots, koji.BuildRoot{
ID: uint64(i),
ID: buildRootID,
Host: koji.Host{
Os: buildResult.HostOS,
Arch: buildResult.Arch,
@ -224,7 +228,7 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
// Image output
outputs = append(outputs, koji.BuildOutput{
BuildRootID: uint64(i),
BuildRootID: buildRootID,
Filename: imageFilename,
FileSize: kojiTargetOptions.Image.Size,
Arch: buildResult.Arch,
@ -268,7 +272,7 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
manifestOutputsExtraInfo[kojiTargetOptions.OSBuildManifest.Filename] = &manifestExtraInfo
outputs = append(outputs, koji.BuildOutput{
BuildRootID: uint64(i),
BuildRootID: buildRootID,
Filename: kojiTargetOptions.OSBuildManifest.Filename,
FileSize: kojiTargetOptions.OSBuildManifest.Size,
Arch: buildResult.Arch,
@ -286,7 +290,7 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
// TODO: Remove the condition it in the future.
if kojiTargetOptions.Log != nil {
outputs = append(outputs, koji.BuildOutput{
BuildRootID: uint64(i),
BuildRootID: buildRootID,
Filename: kojiTargetOptions.Log.Filename,
FileSize: kojiTargetOptions.Log.Size,
Arch: "noarch", // log file is not architecture dependent
@ -300,7 +304,7 @@ func (impl *KojiFinalizeJobImpl) Run(job worker.Job) error {
if len(kojiTargetOptions.SbomDocs) > 0 {
for _, sbomDoc := range kojiTargetOptions.SbomDocs {
outputs = append(outputs, koji.BuildOutput{
BuildRootID: uint64(i),
BuildRootID: buildRootID,
Filename: sbomDoc.Filename,
FileSize: sbomDoc.Size,
Arch: buildResult.Arch,

View file

@ -44,7 +44,10 @@ func (impl *KojiInitJobImpl) kojiInit(server, name, version, release string) (st
return "", 0, err
}
return buildInfo.Token, uint64(buildInfo.BuildID), nil
if buildInfo.BuildID < 0 {
return "", 0, fmt.Errorf("invalid koji init job build ID: %d", buildInfo.BuildID)
}
return buildInfo.Token, uint64(buildInfo.BuildID), nil // nolint: gosec
}
func (impl *KojiInitJobImpl) Run(job worker.Job) error {

View file

@ -140,7 +140,10 @@ func (h *apiHandlers) PostCompose(ctx echo.Context) error {
var id uuid.UUID
if request.Koji != nil {
id, err = h.server.enqueueKojiCompose(uint64(request.Koji.TaskId), request.Koji.Server, request.Koji.Name, request.Koji.Version, request.Koji.Release, irs, channel)
if request.Koji.TaskId < 0 {
return fmt.Errorf("invalid Koji task ID: %d", request.Koji.TaskId)
}
id, err = h.server.enqueueKojiCompose(uint64(request.Koji.TaskId), request.Koji.Server, request.Koji.Name, request.Koji.Version, request.Koji.Release, irs, channel) // nolint: gosec
if err != nil {
return err
}

View file

@ -440,7 +440,7 @@ func (s *Server) enqueueKojiCompose(taskID uint64, server, name, version, releas
KojiFilenames: kojiFilenames,
KojiDirectory: kojiDirectory,
TaskID: taskID,
StartTime: uint64(time.Now().Unix()),
StartTime: uint64(time.Now().Unix()), // nolint: gosec
}, initID, buildIDs, channel)
if err != nil {
return id, HTTPErrorWithInternal(ErrorEnqueueingJob, err)

View file

@ -611,7 +611,7 @@ func TestKojiJobTypeValidation(t *testing.T) {
KojiFilenames: filenames,
KojiDirectory: "koji-server-test-dir",
TaskID: 0,
StartTime: uint64(time.Now().Unix()),
StartTime: uint64(time.Now().Unix()), // nolint: gosec
}
finalizeID, err := workers.EnqueueKojiFinalize(&finalizeJob, initID, buildJobIDs, "")
require.NoError(t, err)