repochecker/file-inspector: New checker
This commit is contained in:
parent
7a800b10de
commit
057ce22fb9
|
@ -23,6 +23,7 @@ steps:
|
|||
- go get -v -d srs.epita.fr/fic-server/dashboard
|
||||
- go get -v -d srs.epita.fr/fic-server/repochecker
|
||||
- go get -v -d srs.epita.fr/fic-server/repochecker/epita
|
||||
- go get -v -d srs.epita.fr/fic-server/repochecker/file-inspector
|
||||
- go get -v -d srs.epita.fr/fic-server/repochecker/grammalecte
|
||||
- go get -v -d srs.epita.fr/fic-server/repochecker/videos
|
||||
- go get -v -d srs.epita.fr/fic-server/qa
|
||||
|
@ -43,6 +44,7 @@ steps:
|
|||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/dashboard
|
||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker
|
||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker/epita
|
||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker/file-inspector
|
||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker/grammalecte
|
||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker/videos
|
||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/qa
|
||||
|
@ -102,6 +104,7 @@ steps:
|
|||
- apk --no-cache add build-base
|
||||
- go build -buildvcs=false --tags checkupdate -v -o deploy/repochecker-${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH} srs.epita.fr/fic-server/repochecker
|
||||
- go build -buildvcs=false -buildmode=plugin -v -o deploy/repochecker-epita-rules-${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}.so srs.epita.fr/fic-server/repochecker/epita
|
||||
- go build -buildvcs=false -buildmode=plugin -v -o deploy/repochecker-file-inspector-rules-${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}.so srs.epita.fr/fic-server/repochecker/file-inspector
|
||||
- go build -buildvcs=false -buildmode=plugin -v -o deploy/repochecker-grammalecte-rules-${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}.so srs.epita.fr/fic-server/repochecker/grammalecte
|
||||
- go build -buildvcs=false -buildmode=plugin -v -o deploy/repochecker-videos-rules-${DRONE_STAGE_OS}-${DRONE_STAGE_ARCH}.so srs.epita.fr/fic-server/repochecker/videos
|
||||
- grep "const version" repochecker/update.go | sed -r 's/^.*=\s*(\S.*)$/\1/' > deploy/repochecker.version
|
||||
|
|
|
@ -14,6 +14,7 @@ RUN apk add --no-cache build-base && \
|
|||
go get -d -v ./admin && \
|
||||
go build -v -buildvcs=false -o admin/admin ./admin && \
|
||||
go build -v -buildmode=plugin -o repochecker/epita-rules.so ./repochecker/epita && \
|
||||
go build -v -buildmode=plugin -o repochecker/file-inspector.so ./repochecker/file-inspector && \
|
||||
go build -v -buildmode=plugin -o repochecker/grammalecte-rules.so ./repochecker/grammalecte && \
|
||||
go build -v -buildmode=plugin -o repochecker/videos-rules.so ./repochecker/videos
|
||||
|
||||
|
@ -35,5 +36,6 @@ ENTRYPOINT ["/srv/admin", "-bind=:8081", "-baseurl=/admin/"]
|
|||
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/admin/admin /srv/admin
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/epita-rules.so /srv/epita-rules.so
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/file-inspector.so /usr/lib/file-inspector.so
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/grammalecte-rules.so /usr/lib/grammalecte-rules.so
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/videos-rules.so /usr/lib/videos-rules.so
|
||||
|
|
|
@ -15,6 +15,7 @@ COPY repochecker ./repochecker/
|
|||
RUN go get -d -v ./repochecker && \
|
||||
go build -v -o repochecker/repochecker ./repochecker && \
|
||||
go build -v -buildmode=plugin -o repochecker/epita-rules.so ./repochecker/epita && \
|
||||
go build -v -buildmode=plugin -o repochecker/file-inspector.so ./repochecker/file-inspector && \
|
||||
go build -v -buildmode=plugin -o repochecker/grammalecte-rules.so ./repochecker/grammalecte && \
|
||||
go build -v -buildmode=plugin -o repochecker/videos-rules.so ./repochecker/videos
|
||||
|
||||
|
@ -27,12 +28,13 @@ RUN mkdir /srv/grammalecte && cd /srv/grammalecte && unzip /srv/grammalecte.zip
|
|||
|
||||
FROM alpine:3.16
|
||||
|
||||
ENTRYPOINT ["/usr/bin/repochecker", "--rules-plugins=/usr/lib/epita-rules.so", "--rules-plugins=/usr/lib/grammalecte-rules.so", "--rules-plugins=/usr/lib/videos-rules.so"]
|
||||
ENTRYPOINT ["/usr/bin/repochecker", "--rules-plugins=/usr/lib/epita-rules.so", "--rules-plugins=/usr/lib/file-inspector.so", "--rules-plugins=/usr/lib/grammalecte-rules.so", "--rules-plugins=/usr/lib/videos-rules.so"]
|
||||
|
||||
RUN apk add --no-cache git python3 ffmpeg
|
||||
|
||||
COPY --from=gobuild /srv/grammalecte /srv/grammalecte
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/repochecker /usr/bin/repochecker
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/epita-rules.so /usr/lib/epita-rules.so
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/file-inspector.so /usr/lib/file-inspector.so
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/grammalecte-rules.so /usr/lib/grammalecte-rules.so
|
||||
COPY --from=gobuild /go/src/srs.epita.fr/fic-server/repochecker/videos-rules.so /usr/lib/videos-rules.so
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"archive/tar"
|
||||
"compress/bzip2"
|
||||
"compress/gzip"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"srs.epita.fr/fic-server/admin/sync"
|
||||
"srs.epita.fr/fic-server/libfic"
|
||||
)
|
||||
|
||||
func InspectFile(file *fic.EFile, exceptions *sync.CheckExceptions) (errs []error) {
|
||||
i, ok := sync.GlobalImporter.(sync.LocalImporter)
|
||||
if !ok {
|
||||
log.Printf("Unable to load `file-inspector.so` as the current Importer is not a LocalImporter (%T).", sync.GlobalImporter)
|
||||
return
|
||||
}
|
||||
|
||||
path := i.GetLocalPath(file.GetOrigin())
|
||||
|
||||
// Check there is more than 1 file in tarball
|
||||
if filepath.Ext(file.Name) == ".tar" || strings.HasSuffix(file.Name, ".tar.gz") || strings.HasSuffix(file.Name, ".tar.bz2") {
|
||||
fd, err := os.Open(path)
|
||||
if err != nil {
|
||||
log.Printf("Unable to open %q: %s", path, err.Error())
|
||||
return
|
||||
}
|
||||
defer fd.Close()
|
||||
|
||||
var rd io.Reader
|
||||
if strings.HasSuffix(file.Name, ".tar.gz") {
|
||||
archive, err := gzip.NewReader(fd)
|
||||
if err != nil {
|
||||
log.Printf("Unable to uncompress gzip file %q: %s", file.Name, err.Error())
|
||||
return
|
||||
}
|
||||
defer archive.Close()
|
||||
rd = archive
|
||||
} else if strings.HasSuffix(file.Name, ".tar.bz2") {
|
||||
rd = bzip2.NewReader(fd)
|
||||
} else {
|
||||
rd = fd
|
||||
}
|
||||
|
||||
nbFile := 0
|
||||
|
||||
tarrd := tar.NewReader(rd)
|
||||
for {
|
||||
header, err := tarrd.Next()
|
||||
if err == io.EOF {
|
||||
break
|
||||
} else if err != nil {
|
||||
log.Printf("An error occurs when analyzing the tarball %q: %s", file.Name, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
info := header.FileInfo()
|
||||
if !info.IsDir() {
|
||||
nbFile += 1
|
||||
}
|
||||
}
|
||||
|
||||
if nbFile < 2 {
|
||||
if !exceptions.HasException(":one-file-tarball") {
|
||||
errs = append(errs, fmt.Errorf("don't make a tarball for one file"))
|
||||
}
|
||||
} else if nbFile < 5 && false {
|
||||
if !exceptions.HasException(":few-files-tarball") {
|
||||
errs = append(errs, fmt.Errorf("don't make a tarball for so little files (:few-files-tarball)"))
|
||||
}
|
||||
} else {
|
||||
log.Printf("%d files found in %q", nbFile, file.Name)
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
|
@ -0,0 +1,13 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"srs.epita.fr/fic-server/admin/sync"
|
||||
)
|
||||
|
||||
var hooks *sync.CheckHooks
|
||||
|
||||
func RegisterChecksHooks(h *sync.CheckHooks) {
|
||||
hooks = h
|
||||
|
||||
h.RegisterFileHook(InspectFile)
|
||||
}
|
Loading…
Reference in New Issue