From e141f46892dd4a8a2a1ddd07452553bf78fd8927 Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Mon, 29 May 2023 11:47:40 +0000 Subject: [PATCH] feat: parameter to refetch kbuild --- .github/workflows/debian-cache.yml | 2 +- distro.go | 6 ++- distro/debian/kernel.go | 61 ++++++++++++++++++++---------- distro/debian/kernel_test.go | 4 +- 4 files changed, 49 insertions(+), 24 deletions(-) diff --git a/.github/workflows/debian-cache.yml b/.github/workflows/debian-cache.yml index 01cc9d3..cca33e0 100644 --- a/.github/workflows/debian-cache.yml +++ b/.github/workflows/debian-cache.yml @@ -25,7 +25,7 @@ jobs: run: go build - name: Cache - run: ./out-of-tree --log-level=trace distro debian cache --refetch=0 --limit=128 --update-release + run: ./out-of-tree --log-level=trace distro debian cache --refetch=0 --limit=128 --update-release --update-kbuild - name: Install s3cmd run: sudo apt install s3cmd diff --git a/distro.go b/distro.go index 5a69342..d55d157 100644 --- a/distro.go +++ b/distro.go @@ -39,6 +39,7 @@ type DebianCacheCmd struct { Path string `help:"path to cache"` Refetch int `help:"days before refetch versions without deb package" default:"7"` UpdateRelease bool `help:"update release data"` + UpdateKbuild bool `help:"update kbuild package"` Dump bool `help:"dump cache"` } @@ -56,7 +57,10 @@ func (cmd *DebianCacheCmd) Run(dcmd *DebianCmd) (err error) { mode := debian.NoMode if cmd.UpdateRelease { - mode = debian.UpdateRelease + mode |= debian.UpdateRelease + } + if cmd.UpdateKbuild { + mode |= debian.UpdateKbuild } kernels, err := debian.GetKernelsWithLimit(dcmd.Limit, mode) diff --git a/distro/debian/kernel.go b/distro/debian/kernel.go index a604510..5d02023 100644 --- a/distro/debian/kernel.go +++ b/distro/debian/kernel.go @@ -278,6 +278,30 @@ func findKbuild(versions []string, kpkgver string) ( return } +func updateKbuild(toolsVersions []string, dk *DebianKernel) { + if !kver(dk.Version.Package).LessThan(kver("4.5-rc0")) { + dk.Internal.Invalid = true + return + } + + var deps []snapshot.Package + for _, pkg := range dk.Dependencies { + if strings.Contains(pkg.Name, "kbuild") { + continue + } + deps = append(deps, pkg) + } + dk.Dependencies = deps + + kbuildpkg, err := findKbuild(toolsVersions, dk.Version.Package) + if err != nil { + dk.Internal.Invalid = true + return + } + + dk.Dependencies = append(dk.Dependencies, kbuildpkg) +} + func getKernelsByVersion(slog zerolog.Logger, c *Cache, toolsVersions []string, version string, mode GetKernelsMode) (kernels []DebianKernel, fromcache bool) { @@ -287,6 +311,7 @@ func getKernelsByVersion(slog zerolog.Logger, c *Cache, toolsVersions []string, if err == nil { dk = dks[0] if !dk.Internal.Invalid { + // TODO refactor slog.Trace().Msgf("found in cache") if dk.Release == None && mode&UpdateRelease != 0 { slog.Debug().Msg("update release") @@ -300,6 +325,16 @@ func getKernelsByVersion(slog zerolog.Logger, c *Cache, toolsVersions []string, } } } + if mode&UpdateKbuild != 0 { + slog.Debug().Msg("update kbuild") + updateKbuild(toolsVersions, &dk) + slog.Debug().Msg("update cache") + err = c.Put([]DebianKernel{dk}) + if err != nil { + slog.Error().Err(err).Msg("") + return + } + } kernels = append(kernels, dk) fromcache = true return @@ -326,26 +361,11 @@ func getKernelsByVersion(slog zerolog.Logger, c *Cache, toolsVersions []string, } if !dk.HasDependency("kbuild") { - if !kver(dk.Version.Package).LessThan(kver("4.5-rc0")) { - dk.Internal.Invalid = true - } else { - // Debian kernels prior to the 4.5 package - // version did not have a kbuild built from - // the linux source itself, but used the - // linux-tools source package. - kbuildpkg, err := findKbuild( - toolsVersions, - dk.Version.Package, - ) - if err != nil { - dk.Internal.Invalid = true - } else { - dk.Dependencies = append( - dk.Dependencies, - kbuildpkg, - ) - } - } + // Debian kernels prior to the 4.5 package + // version did not have a kbuild built from + // the linux source itself, but used the + // linux-tools source package. + updateKbuild(toolsVersions, &dk) } dk.Internal.LastFetch = time.Now() @@ -374,6 +394,7 @@ type GetKernelsMode int const ( NoMode GetKernelsMode = iota UpdateRelease + UpdateKbuild ) // GetKernelsWithLimit is workaround for testing and building the diff --git a/distro/debian/kernel_test.go b/distro/debian/kernel_test.go index 5288a26..2f7e253 100644 --- a/distro/debian/kernel_test.go +++ b/distro/debian/kernel_test.go @@ -23,7 +23,7 @@ func TestGetDebianKernel(t *testing.T) { func TestParseKernelVersion(t *testing.T) { assert := assert.New(t) - kernels, err := GetKernels() + kernels, err := GetKernelsWithLimit(16, NoMode) assert.Nil(err) assert.NotEmpty(kernels) @@ -43,7 +43,7 @@ func TestParseKernelVersion(t *testing.T) { func TestKbuildVersion(t *testing.T) { assert := assert.New(t) - kernels, err := GetKernels() + kernels, err := GetKernelsWithLimit(16, NoMode) assert.Nil(err) assert.NotEmpty(kernels)