mirror of
https://github.com/anchore/syft.git
synced 2025-11-20 09:53:16 +01:00
* add check for app update; fix ETUI error handling * validate user args * add goreleaser support * replace cgo dependencies (go-rpm) with go equivalents * add acceptance tests against build snapshot * add brew tap + acceptance test pipeline * add mac acceptance tests * fix compare makefile * fix mac acceptance tests * add release pipeline with wait checks * add token to release step * rm dir presenters int test * enforce dpkg to be non interactive Co-authored-by: Alfredo Deza <adeza@anchore.com> * pin brew formulae * pin skopeo to formulae url * only run acceptance tests Co-authored-by: Alfredo Deza <adeza@anchore.com>
62 lines
1.2 KiB
Go
62 lines
1.2 KiB
Go
package rpmdb
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"io/ioutil"
|
|
"os"
|
|
|
|
"github.com/anchore/imgbom/imgbom/pkg"
|
|
"github.com/anchore/imgbom/internal"
|
|
"github.com/anchore/imgbom/internal/log"
|
|
rpmdb "github.com/wagoodman/go-rpmdb/pkg"
|
|
)
|
|
|
|
func parseRpmDB(_ string, reader io.Reader) ([]pkg.Package, error) {
|
|
f, err := ioutil.TempFile("", internal.ApplicationName+"-rpmdb")
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to create temp rpmdb file: %w", err)
|
|
}
|
|
|
|
defer func() {
|
|
err = os.Remove(f.Name())
|
|
if err != nil {
|
|
log.Errorf("failed to remove temp rpmdb file: %+v", err)
|
|
}
|
|
}()
|
|
|
|
_, err = io.Copy(f, reader)
|
|
if err != nil {
|
|
return nil, fmt.Errorf("failed to copy rpmdb contents to temp file: %w", err)
|
|
}
|
|
|
|
db, err := rpmdb.Open(f.Name())
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
pkgList, err := db.ListPackages()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
allPkgs := make([]pkg.Package, 0)
|
|
|
|
for _, entry := range pkgList {
|
|
p := pkg.Package{
|
|
Name: entry.Name,
|
|
Version: entry.Version,
|
|
Type: pkg.RpmPkg,
|
|
Metadata: pkg.RpmMetadata{
|
|
Epoch: entry.Epoch,
|
|
Arch: entry.Arch,
|
|
Release: entry.Release,
|
|
},
|
|
}
|
|
|
|
allPkgs = append(allPkgs, p)
|
|
}
|
|
|
|
return allPkgs, nil
|
|
}
|