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/dashboard
|
||||||
- go get -v -d srs.epita.fr/fic-server/repochecker
|
- 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/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/grammalecte
|
||||||
- go get -v -d srs.epita.fr/fic-server/repochecker/videos
|
- go get -v -d srs.epita.fr/fic-server/repochecker/videos
|
||||||
- go get -v -d srs.epita.fr/fic-server/qa
|
- 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/dashboard
|
||||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker
|
- 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/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/grammalecte
|
||||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker/videos
|
- go vet -v -buildvcs=false srs.epita.fr/fic-server/repochecker/videos
|
||||||
- go vet -v -buildvcs=false srs.epita.fr/fic-server/qa
|
- go vet -v -buildvcs=false srs.epita.fr/fic-server/qa
|
||||||
|
@ -102,6 +104,7 @@ steps:
|
||||||
- apk --no-cache add build-base
|
- 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 --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-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-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
|
- 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
|
- 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 get -d -v ./admin && \
|
||||||
go build -v -buildvcs=false -o admin/admin ./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/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/grammalecte-rules.so ./repochecker/grammalecte && \
|
||||||
go build -v -buildmode=plugin -o repochecker/videos-rules.so ./repochecker/videos
|
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/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/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/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
|
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 && \
|
RUN go get -d -v ./repochecker && \
|
||||||
go build -v -o repochecker/repochecker ./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/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/grammalecte-rules.so ./repochecker/grammalecte && \
|
||||||
go build -v -buildmode=plugin -o repochecker/videos-rules.so ./repochecker/videos
|
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
|
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
|
RUN apk add --no-cache git python3 ffmpeg
|
||||||
|
|
||||||
COPY --from=gobuild /srv/grammalecte /srv/grammalecte
|
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/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/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/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
|
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