1
0
mirror of https://github.com/Jguer/yay synced 2024-07-09 04:46:19 +00:00

Merge pull request #1061 from Jguer/enforce-lint

Enforce lint in CI
This commit is contained in:
J Guerreiro 2019-10-13 23:37:35 +01:00 committed by GitHub
commit 96dd1d3ce2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 192 additions and 68 deletions

View File

@ -9,6 +9,7 @@ RUN pacman -Syu --overwrite=* --needed --noconfirm \
gcc gnupg libldap go git tar make awk linux-api-headers pacman-contrib && paccache -rfk0
# Dependency for linting
RUN curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b /bin v1.20.0
RUN go get golang.org/x/lint/golint && mv /root/go/bin/golint /bin/
ENV ARCH=$BUILD_ARCH

View File

@ -82,6 +82,11 @@ test-vendor: vendor
exit 1; \
fi;
.PHONY: lint
lint:
golangci-lint run
golint -set_exit_status . ./pkg/...
.PHONY: fmt
fmt:
#go fmt -mod=vendor $(GOFILES) ./... Doesn't work yet but will be supported soon

View File

@ -25,7 +25,7 @@ func questionCallback(question alpm.QuestionAny) {
size := 0
qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
_ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
size++
return nil
})
@ -36,7 +36,7 @@ func questionCallback(question alpm.QuestionAny) {
size = 1
var db string
qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
_ = qp.Providers(alpmHandle).ForEach(func(pkg alpm.Package) error {
thisDB := pkg.DB().Name()
if db != thisDB {

View File

@ -23,7 +23,10 @@ func removeVCSPackage(pkgs []string) {
}
if updated {
saveVCSInfo()
err := saveVCSInfo()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}
}
@ -42,13 +45,16 @@ func cleanDependencies(removeOptional bool) error {
}
// CleanRemove sends a full removal command to pacman with the pkgName slice
func cleanRemove(pkgNames []string) (err error) {
func cleanRemove(pkgNames []string) error {
if len(pkgNames) == 0 {
return nil
}
arguments := makeArguments()
arguments.addArg("R")
err := arguments.addArg("R")
if err != nil {
return err
}
arguments.addTarget(pkgNames...)
return show(passToPacman(arguments))
@ -212,7 +218,9 @@ func cleanAfter(bases []Base) {
fmt.Fprintf(os.Stderr, "error resetting %s: %s", base.String(), stderr)
}
show(passToGit(dir, "clean", "-fx"))
if err := show(passToGit(dir, "clean", "-fx")); err != nil {
fmt.Fprintln(os.Stderr, err)
}
} else {
fmt.Printf(bold(cyan("::")+" Deleting (%d/%d): %s\n"), i+1, len(bases), cyan(dir))
if err := os.RemoveAll(dir); err != nil {

View File

@ -33,7 +33,7 @@ func (dp *depPool) checkInnerConflict(name string, conflict string, conflicts ty
}
func (dp *depPool) checkForwardConflict(name string, conflict string, conflicts types.MapStringSet) {
dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
_ = dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
if pkg.Name() == name || dp.hasPackage(pkg.Name()) {
return nil
}
@ -88,7 +88,7 @@ func (dp *depPool) checkInnerConflicts(conflicts types.MapStringSet) {
}
for _, pkg := range dp.Repo {
pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
_ = pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
dp.checkInnerConflict(pkg.Name(), conflict.String(), conflicts)
return nil
})
@ -103,7 +103,7 @@ func (dp *depPool) checkForwardConflicts(conflicts types.MapStringSet) {
}
for _, pkg := range dp.Repo {
pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
_ = pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
dp.checkForwardConflict(pkg.Name(), conflict.String(), conflicts)
return nil
})
@ -111,12 +111,12 @@ func (dp *depPool) checkForwardConflicts(conflicts types.MapStringSet) {
}
func (dp *depPool) checkReverseConflicts(conflicts types.MapStringSet) {
dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
_ = dp.LocalDB.PkgCache().ForEach(func(pkg alpm.Package) error {
if dp.hasPackage(pkg.Name()) {
return nil
}
pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
_ = pkg.Conflicts().ForEach(func(conflict alpm.Depend) error {
dp.checkReverseConflict(pkg.Name(), conflict.String(), conflicts)
return nil
})
@ -243,7 +243,7 @@ func (dp *depPool) _checkMissing(dep string, stack []string, missing *missing) {
repoPkg := dp.findSatisfierRepo(dep)
if repoPkg != nil {
missing.Good.Set(dep)
repoPkg.Depends().ForEach(func(repoDep alpm.Depend) error {
_ = repoPkg.Depends().ForEach(func(repoDep alpm.Depend) error {
if _, err := dp.LocalDB.PkgCache().FindSatisfier(repoDep.String()); err == nil {
missing.Good.Set(repoDep.String())
return nil

View File

@ -6,16 +6,20 @@ import (
rpc "github.com/mikkeloscar/aur"
)
// Base is an AUR base package
type Base []*rpc.Pkg
// Pkgbase returns the first base package.
func (b Base) Pkgbase() string {
return b[0].PackageBase
}
// Version returns the first base package version.
func (b Base) Version() string {
return b[0].Version
}
// URLPath returns the first base package URL.
func (b Base) URLPath() string {
return b[0].URLPath
}
@ -94,7 +98,7 @@ func (do *depOrder) orderPkgRepo(pkg *alpm.Package, dp *depPool, runtime bool) {
}
delete(dp.Repo, pkg.Name())
pkg.Depends().ForEach(func(dep alpm.Depend) (err error) {
_ = pkg.Depends().ForEach(func(dep alpm.Depend) (err error) {
repoPkg := dp.findSatisfierRepo(dep.String())
if repoPkg != nil {
do.orderPkgRepo(repoPkg, dp, runtime)

View File

@ -138,7 +138,7 @@ func (dp *depPool) ResolveTargets(pkgs []string) error {
group := dp.SyncDB.FindGroupPkgs(target.Name)
if !group.Empty() {
dp.Groups = append(dp.Groups, target.String())
group.ForEach(func(pkg alpm.Package) error {
_ = group.ForEach(func(pkg alpm.Package) error {
dp.Explicit.Set(pkg.Name())
return nil
})
@ -329,7 +329,7 @@ func (dp *depPool) resolveAURPackages(pkgs types.StringSet, explicit bool) error
func (dp *depPool) ResolveRepoDependency(pkg *alpm.Package) {
dp.Repo[pkg.Name()] = pkg
pkg.Depends().ForEach(func(dep alpm.Depend) (err error) {
_ = pkg.Depends().ForEach(func(dep alpm.Depend) (err error) {
//have satisfier in dep tree: skip
if dp.hasSatisfier(dep.String()) {
return

View File

@ -284,7 +284,7 @@ func getPkgbuildsfromABS(pkgs []string, path string) (bool, error) {
pkg = db.Pkg(name)
}
} else {
dbList.ForEach(func(db alpm.DB) error {
_ = dbList.ForEach(func(db alpm.DB) error {
if pkg = db.Pkg(name); pkg != nil {
return fmt.Errorf("")
}

View File

@ -171,12 +171,17 @@ func install(parser *arguments) (err error) {
if do.HasMake() {
switch config.RemoveMake {
case "yes":
defer removeMake(do, &err)
defer func() {
err = removeMake(do)
}()
case "no":
break
default:
if continueTask("Remove make dependencies after install?", false) {
defer removeMake(do, &err)
defer func() {
err = removeMake(do)
}()
}
}
}
@ -210,6 +215,7 @@ func install(parser *arguments) (err error) {
}
if len(toDiff) > 0 {
// TODO: PKGBUILD diffs should not return in case of err. Just print and continue
err = showPkgbuildDiffs(toDiff, cloned)
if err != nil {
return err
@ -224,7 +230,11 @@ func install(parser *arguments) (err error) {
if !continueTask(bold(green("Proceed with install?")), true) {
return fmt.Errorf("Aborting due to user")
}
updatePkgbuildSeenRef(toDiff, cloned)
err = updatePkgbuildSeenRef(toDiff, cloned)
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
}
config.NoConfirm = oldValue
}
@ -286,9 +296,15 @@ func install(parser *arguments) (err error) {
}
depArguments := makeArguments()
depArguments.addArg("D", "asdeps")
err = depArguments.addArg("D", "asdeps")
if err != nil {
return err
}
expArguments := makeArguments()
expArguments.addArg("D", "asexplicit")
err = expArguments.addArg("D", "asexplicit")
if err != nil {
return err
}
for _, pkg := range do.Repo {
if !dp.Explicit.Get(pkg.Name()) && !localNamesCache.Get(pkg.Name()) && !remoteNamesCache.Get(pkg.Name()) {
@ -318,7 +334,7 @@ func install(parser *arguments) (err error) {
}
}
go completion.Update(alpmHandle, config.AURURL, cacheHome, config.CompletionInterval, false)
go exitOnError(completion.Update(alpmHandle, config.AURURL, cacheHome, config.CompletionInterval, false))
err = downloadPkgbuildsSources(do.Aur, incompatible)
if err != nil {
@ -333,9 +349,12 @@ func install(parser *arguments) (err error) {
return nil
}
func removeMake(do *depOrder, err *error) {
func removeMake(do *depOrder) error {
removeArguments := makeArguments()
removeArguments.addArg("R", "u")
err := removeArguments.addArg("R", "u")
if err != nil {
return err
}
for _, pkg := range do.getMake() {
removeArguments.addTarget(pkg)
@ -343,8 +362,10 @@ func removeMake(do *depOrder, err *error) {
oldValue := config.NoConfirm
config.NoConfirm = true
*err = show(passToPacman(removeArguments))
err = show(passToPacman(removeArguments))
config.NoConfirm = oldValue
return err
}
func inRepos(syncDB alpm.DBList, pkg string) bool {
@ -678,24 +699,30 @@ func editDiffNumberMenu(bases []Base, installed types.StringSet, diff bool) ([]B
}
func updatePkgbuildSeenRef(bases []Base, cloned types.StringSet) error {
var errMulti types.MultiError
for _, base := range bases {
pkg := base.Pkgbase()
dir := filepath.Join(config.BuildDir, pkg)
if shouldUseGit(dir) {
gitUpdateSeenRef(config.BuildDir, pkg)
err := gitUpdateSeenRef(config.BuildDir, pkg)
if err != nil {
errMulti.Add(err)
}
}
}
return nil
return errMulti.Return()
}
func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
var errMulti types.MultiError
for _, base := range bases {
pkg := base.Pkgbase()
dir := filepath.Join(config.BuildDir, pkg)
if shouldUseGit(dir) {
start, err := getLastSeenHash(config.BuildDir, pkg)
if err != nil {
return err
errMulti.Add(err)
continue
}
if cloned.Get(pkg) {
@ -703,7 +730,8 @@ func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
} else {
hasDiff, err := gitHasDiff(config.BuildDir, pkg)
if err != nil {
return err
errMulti.Add(err)
continue
}
if !hasDiff {
@ -720,7 +748,8 @@ func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
}
err = show(passToGit(dir, args...))
if err != nil {
return err
errMulti.Add(err)
continue
}
} else {
args := []string{"diff"}
@ -731,11 +760,15 @@ func showPkgbuildDiffs(bases []Base, cloned types.StringSet) error {
}
args = append(args, "--no-index", "/var/empty", dir)
// git always returns 1. why? I have no idea
show(passToGit(dir, args...))
err := show(passToGit(dir, args...))
if err != nil {
errMulti.Add(err)
continue
}
}
}
return nil
return errMulti.Return()
}
func editPkgbuilds(bases []Base, srcinfos map[string]*gosrc.Srcinfo) error {
@ -965,14 +998,22 @@ func buildInstallPkgbuilds(dp *depPool, do *depOrder, srcinfos map[string]*gosrc
}
if installed {
show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
err = show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
if err != nil {
return fmt.Errorf("Error making: %s", err)
}
fmt.Println(cyan(pkg+"-"+version) + bold(" is up to date -- skipping"))
continue
}
}
if built {
show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
err = show(passToMakepkg(dir, "-c", "--nobuild", "--noextract", "--ignorearch"))
if err != nil {
return fmt.Errorf("Error making: %s", err)
}
fmt.Println(bold(yellow(arrow)),
cyan(pkg+"-"+version)+bold(" already made -- skipping build"))
} else {
@ -1021,9 +1062,15 @@ func buildInstallPkgbuilds(dp *depPool, do *depOrder, srcinfos map[string]*gosrc
}
depArguments := makeArguments()
depArguments.addArg("D", "asdeps")
err = depArguments.addArg("D", "asdeps")
if err != nil {
return err
}
expArguments := makeArguments()
expArguments.addArg("D", "asexplicit")
err = expArguments.addArg("D", "asexplicit")
if err != nil {
return err
}
//remotenames: names of all non repo packages on the system
_, _, localNames, remoteNames, err := filterPackages()

View File

@ -29,7 +29,10 @@ func init() {
data = getPgpKey(matches[1])
}
w.Header().Set("Content-Type", "application/pgp-keys")
w.Write([]byte(data))
_, err := w.Write([]byte(data))
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
})
}
@ -54,7 +57,10 @@ func startPgpKeyServer() *http.Server {
srv := &http.Server{Addr: fmt.Sprintf("127.0.0.1:%d", gpgServerPort)}
go func() {
srv.ListenAndServe()
err := srv.ListenAndServe()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}()
return srv
}
@ -70,7 +76,12 @@ func TestImportKeys(t *testing.T) {
config.GpgFlags = fmt.Sprintf("--homedir %s --keyserver 127.0.0.1", keyringDir)
server := startPgpKeyServer()
defer server.Shutdown(context.TODO())
defer func() {
err := server.Shutdown(context.TODO())
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}()
casetests := []struct {
keys []string
@ -143,7 +154,12 @@ func TestCheckPgpKeys(t *testing.T) {
config.GpgFlags = fmt.Sprintf("--homedir %s --keyserver 127.0.0.1", keyringDir)
server := startPgpKeyServer()
defer server.Shutdown(context.TODO())
defer func() {
err := server.Shutdown(context.TODO())
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}()
casetests := []struct {
pkgs Base

View File

@ -214,7 +214,10 @@ func main() {
exitOnError(initConfig())
exitOnError(cmdArgs.parseCommandLine())
if shouldSaveConfig {
config.saveConfig()
err := config.saveConfig()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
}
config.expandEnv()
exitOnError(initBuildDir())

View File

@ -757,7 +757,11 @@ func (parser *arguments) parseCommandLine() (err error) {
usedNext := false
if len(args) < 1 {
parser.parseShortOption("-Syu", "")
_, err = parser.parseShortOption("-Syu", "")
if err != nil {
return
}
} else {
for k, arg := range args {
var nextArg string

View File

@ -36,7 +36,10 @@ func Update(alpmHandle *alpm.Handle, aurURL string, cacheDir string, interval in
info, err := os.Stat(path)
if os.IsNotExist(err) || (interval != -1 && time.Since(info.ModTime()).Hours() >= float64(interval*24)) || force {
os.MkdirAll(filepath.Dir(path), 0755)
errd := os.MkdirAll(filepath.Dir(path), 0755)
if errd != nil {
return errd
}
out, errf := os.Create(path)
if errf != nil {
return errf

View File

@ -265,7 +265,7 @@ func queryRepo(pkgInputN []string) (s repoQuery, err error) {
return
}
dbList.ForEach(func(db alpm.DB) error {
_ = dbList.ForEach(func(db alpm.DB) error {
if len(pkgInputN) == 0 {
pkgs := db.PkgCache()
s = append(s, pkgs.Slice()...)
@ -353,13 +353,13 @@ func hangingPackages(removeOptional bool) (hanging []string, err error) {
safePackages[pkg.Name()] = 0
}
pkg.Provides().ForEach(func(dep alpm.Depend) error {
_ = pkg.Provides().ForEach(func(dep alpm.Depend) error {
provides.Add(dep.Name, pkg.Name())
return nil
})
return nil
}
packages.ForEach(setupResources)
_ = packages.ForEach(setupResources)
iterateAgain := true
processDependencies := func(pkg alpm.Package) error {
@ -394,20 +394,20 @@ func hangingPackages(removeOptional bool) (hanging []string, err error) {
return nil
}
pkg.Depends().ForEach(markDependencies)
_ = pkg.Depends().ForEach(markDependencies)
if !removeOptional {
pkg.OptionalDepends().ForEach(markDependencies)
_ = pkg.OptionalDepends().ForEach(markDependencies)
}
return nil
}
for iterateAgain {
iterateAgain = false
packages.ForEach(processDependencies)
_ = packages.ForEach(processDependencies)
}
// Build list of packages to be removed
packages.ForEach(func(pkg alpm.Package) error {
_ = packages.ForEach(func(pkg alpm.Package) error {
if safePackages[pkg.Name()] == 0 {
hanging = append(hanging, pkg.Name())
}

37
testdata/travis.sh vendored
View File

@ -1,35 +1,50 @@
#!/bin/bash
set -evx
#set -evx
# Objective of this script is to be the most vendor agnostic possible
# It builds and tests yay independently of hardware
export VERSION=$(git describe --long --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g')
VERSION="$(git describe --long --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g')"
export VERSION
export ARCH="x86_64"
echo '::set-env name=VERSION::$VERSION'
echo '::set-env name=ARCH::$ARCH'
docker build --build-arg BUILD_ARCH=${ARCH} --target builder_env -t yay-builder_env .
docker build --build-arg BUILD_ARCH=${ARCH} --target builder -t yay-builder .
docker build --build-arg BUILD_ARCH=${ARCH} --target builder_env -t yay-builder_env . || exit $?
docker build --build-arg BUILD_ARCH=${ARCH} --target builder -t yay-builder . || exit $?
# Our unit test and packaging container
docker run --name yay-go-tests yay-builder_env:latest make test
rc=$?
docker rm yay-go-tests
# docker run yay-builder make lint
if [[ $rc != 0 ]]; then
exit $rc
fi
# Lint project
docker run --name yay-go-lint yay-builder_env:latest make lint
rc=$?
docker rm yay-go-lint
if [[ $rc != 0 ]]; then
exit $rc
fi
# Build image for integration testing
docker build -t yay .
# docker build -t yay . || exit $?
# Do integration testing
# TODO
# Create a release asset
docker run --name artifact_factory yay-builder make release ARCH=${ARCH} VERSION=${VERSION}
docker run --name artifact_factory yay-builder make release ARCH=${ARCH} VERSION="${VERSION}"
rc=$?
if [[ $rc != 0 ]]; then
docker rm artifact_factory
exit $rc
fi
# Copy bin and release to artifacts folder
mkdir artifacts
docker cp artifact_factory:/app/yay_${VERSION}_${ARCH}.tar.gz ./artifacts/
docker cp artifact_factory:/app/yay_"${VERSION}"_${ARCH}.tar.gz ./artifacts/
# Cleanup docker
docker rm artifact_factory

View File

@ -302,10 +302,15 @@ func upRepo(local []alpm.Package) (upSlice, error) {
return slice, err
}
defer alpmHandle.TransRelease()
defer func() {
err = alpmHandle.TransRelease()
}()
alpmHandle.SyncSysupgrade(cmdArgs.existsDouble("u", "sysupgrade"))
alpmHandle.TransGetAdd().ForEach(func(pkg alpm.Package) error {
err = alpmHandle.SyncSysupgrade(cmdArgs.existsDouble("u", "sysupgrade"))
if err != nil {
return slice, err
}
_ = alpmHandle.TransGetAdd().ForEach(func(pkg alpm.Package) error {
localVer := "-"
if localPkg := localDB.Pkg(pkg.Name()); localPkg != nil {

21
vcs.go
View File

@ -39,8 +39,15 @@ func createDevelDB() error {
bases := getBases(info)
toSkip := pkgbuildsToSkip(bases, types.SliceToStringSet(remoteNames))
downloadPkgbuilds(bases, toSkip, config.BuildDir)
srcinfos, _ := parseSrcinfoFiles(bases, false)
_, err = downloadPkgbuilds(bases, toSkip, config.BuildDir)
if err != nil {
return err
}
srcinfos, err := parseSrcinfoFiles(bases, false)
if err != nil {
return err
}
for _, pkgbuild := range srcinfos {
for _, pkg := range pkgbuild.Packages {
@ -134,7 +141,10 @@ func updateVCSData(pkgName string, sources []gosrc.ArchString, mux *sync.Mutex,
savedInfo[pkgName] = info
fmt.Println(bold(yellow(arrow)) + " Found git repo: " + cyan(url))
saveVCSInfo()
err := saveVCSInfo()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
mux.Unlock()
}
@ -163,7 +173,10 @@ func getCommit(url string, branch string, protocols []string) string {
//machine but using http:// instead of git does not hang.
//Introduce a time out so this can not hang
timer := time.AfterFunc(5*time.Second, func() {
cmd.Process.Kill()
err = cmd.Process.Kill()
if err != nil {
fmt.Fprintln(os.Stderr, err)
}
})
err = cmd.Wait()