Skip to content

Commit

Permalink
enable github workflow
Browse files Browse the repository at this point in the history
Signed-off-by: Dweb Fan <[email protected]>
  • Loading branch information
dwebfan committed May 2, 2024
1 parent 2388c61 commit 87af242
Show file tree
Hide file tree
Showing 14 changed files with 169 additions and 13 deletions.
33 changes: 33 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: test-pr
on:
push:
#pull_request:
# types:
# - opened
# - synchronize
# - reopened
jobs:
lint:
runs-on: ubuntu-22.04
container:
image: lomorage/lomo-backup:1.0
env:
PATH: /bin:/usr/bin:/usr/local/bin:/usr/local/go/bin
GOFLAGS: "-buildvcs=false"
steps:
- uses: actions/checkout@v4
- run: make lint

install:
runs-on: ubuntu-22.04
container:
image: lomorage/lomo-backup:1.0
env:
PATH: /bin:/usr/bin:/usr/local/bin:/usr/local/go/bin
GOBIN: /usr/local/bin
GOFLAGS: "-buildvcs=false"
steps:
- uses: actions/checkout@v4
with:
submodules: 'true'
- run: make install
58 changes: 58 additions & 0 deletions .golangci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
linters:
disable-all: true
enable:
# default linter
- govet
#- errcheck
- staticcheck
- unused
- gosimple
- ineffassign
# enabled linter
- bodyclose # checks whether HTTP response body is closed successfully
- revive # Fast, configurable, extensible, flexible, and beautiful linter for Go. Drop-in replacement of golint.
# rowserrcheck - checks whether Err of rows is checked successfully
# stylecheck - Stylecheck is a replacement for golint
# gosec - Inspects source code for security problems
# interfacer - Linter that suggests narrower interface types
- unconvert # Remove unnecessary type conversions
# dupl - Tool for code clone detection
# goconst - Finds repeated strings that could be replaced by a constant
- gocyclo # Computes and checks the cyclomatic complexity of functions
# gocognit - Computes and checks the cognitive complexity of functions
# asciicheck - Simple linter to check that your code does not contain non-ASCII identifiers
- gofmt # Gofmt checks whether code was gofmt-ed. By default this tool runs with -s option to check for code simplification
- goimports # Goimports does everything that gofmt does. Additionally it checks unused imports
# maligned - Tool to detect Go structs that would take less memory if their fields were sorted
# - depguard # Go linter that checks if package imports are in a list of acceptable packages
- misspell # Finds commonly misspelled English words in comments
#- lll # Reports long lines
- unparam # Reports unused function parameters
# dogsled - Checks assignments with too many blank identifiers (e.g. x, , , _, := f())
# - nakedret # Finds naked returns in functions greater than a specified function length
- prealloc # Finds slice declarations that could potentially be preallocated
# scopelint - Scopelint checks for unpinned variables in go programs
# gocritic - The most opinionated Go source code linter
# gochecknoinits - Checks that no init functions are present in Go code
# gochecknoglobals - Checks that no globals are present in Go code
# godox - Tool for detection of FIXME, TODO and other comment keywords
# funlen - Tool for detection of long functions
- whitespace # Tool for detection of leading and trailing whitespace
# wsl - Whitespace Linter - Forces you to use empty lines!
# goprintffuncname - Checks that printf-like functions are named with f at the end
# gomnd - An analyzer to detect magic numbers.
# goerr113 - Golang linter to check the errors handling expressions
# gomodguard - Allow and block list linter for direct Go module dependencies. This is different from depguard where there are different block types for example version constraints and module recommendations.
# godot # Check if comments end in a period
# testpackage - linter that makes you use a separate _test package
# nestif - Reports deeply nested if statements
# exportloopref - An analyzer that finds exporting pointers for loop variables.
# nolintlint - Reports ill-formed or insufficient nolint directives
- typecheck
linters-settings:
revive:
confidence: 0.7
issues:
exclude-use-default: false
run:
deadline: 20m
26 changes: 26 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
.PHONY: vendor

SHELL=/bin/bash # Use bash syntax
GOPATH=/go

vendor:
go mod vendor

lint:
golangci-lint run --modules-download-mode vendor -v --max-same-issues 10

install:
go install -v ./cmd/...

dev-container:
docker build --tag "lomorage/lomo-backup:1.0" -f dockerfiles/dev-image .

dev:
docker build --tag "lomorage/lomo-backup" -f dockerfiles/dev-run .
docker rm -f lomo-backup
docker run \
--name lomo-backup --hostname lomo-backup \
--privileged --cap-add=ALL -v /dev:/dev -v /lib/modules:/lib/modules \
-v "${PWD}:/go/src/github.com/lomorage/lomo-backup" \
--net host --dns-search local \
-it "lomorage/lomo-backup" -d bash
5 changes: 5 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
# Lomo-backup - Most cost saving 2-stages cloud backup solution

[![GitHub Actions](https://github.com/lomorage/lomo-backup/workflows/main/badge.svg)](https://github.com/lomorage/lomo-backup/actions?query=workflow%3Amain)


# Motivation
Photos/videos are very import personal assets and we want to store in our home instead of clouds. We developped lomorage application to self host our own google photo alternative solutions, which has met our main goal.

Expand Down
3 changes: 1 addition & 2 deletions cmd/lomob/iso.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,8 @@ func mkISO(ctx *cli.Context) error {
for {
if currentSizeNotInISO < isoSize.Bytes() {
currSize := datasize.ByteSize(currentSizeNotInISO)
expSize := datasize.ByteSize(isoSize)
fmt.Printf("Total size of un-backedup files is %s, less than %s, skip\n",
currSize.HR(), expSize.HR())
currSize.HR(), isoSize.HR())

return nil
}
Expand Down
1 change: 0 additions & 1 deletion cmd/lomob/list-local.go
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,6 @@ func printDirsByTree(dirs map[int]*types.DirInfo) {
for _, tree := range scanRootTree {
fmt.Println(tree)
}

}

func printDirsByTable(dirs map[int]*types.DirInfo) {
Expand Down
4 changes: 2 additions & 2 deletions cmd/lomob/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,12 +43,12 @@ func main() {
Flags: []cli.Flag{
cli.StringFlag{
Name: "ignore-files, if",
Usage: "List of ignored files, seperated by comman",
Usage: "List of ignored files, separated by comma",
Value: ".DS_Store,._.DS_Store,Thumbs.db",
},
cli.StringFlag{
Name: "ignore-dirs, in",
Usage: "List of ignored directories, seperated by comman",
Usage: "List of ignored directories, separated by comma",
Value: ".idea,.git,.github",
},
cli.IntFlag{
Expand Down
2 changes: 1 addition & 1 deletion cmd/lomob/upload-iso.go
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,7 @@ func calculatePartHash(ctx *cli.Context) error {
}

var curr, partLength int64
var remaining = int64(info.Size())
var remaining = info.Size()
var no = 1
var prs *common.FilePartReadSeeker
var h hash.Hash
Expand Down
8 changes: 4 additions & 4 deletions common/datasize/datasize.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func (b ByteSize) EBytes() float64 {
func (b ByteSize) String() string {
switch {
case b == 0:
return fmt.Sprint("0B")
return "0B"
case b%EB == 0:
return fmt.Sprintf("%dEB", b/EB)
case b%PB == 0:
Expand Down Expand Up @@ -208,15 +208,15 @@ ParseLoop:

Overflow:
*b = ByteSize(maxUint64)
return &strconv.NumError{fnUnmarshalText, string(t0), strconv.ErrRange}
return &strconv.NumError{Func: fnUnmarshalText, Num: string(t0), Err: strconv.ErrRange}

SyntaxError:
*b = 0
return &strconv.NumError{fnUnmarshalText, string(t0), strconv.ErrSyntax}
return &strconv.NumError{Func: fnUnmarshalText, Num: string(t0), Err: strconv.ErrSyntax}

BitsError:
*b = 0
return &strconv.NumError{fnUnmarshalText, string(t0), ErrBits}
return &strconv.NumError{Func: fnUnmarshalText, Num: string(t0), Err: ErrBits}
}

func Parse(t []byte) (ByteSize, error) {
Expand Down
4 changes: 2 additions & 2 deletions common/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ func (prs *FilePartReadSeeker) Seek(offset int64, whence int) (n int64, err erro
} else {
if prs.current+offset >= prs.end {
n, err = prs.f.Seek(prs.end, io.SeekStart)
n -= int64(prs.start)
n -= prs.start
prs.current = prs.end
return
}
Expand Down Expand Up @@ -225,7 +225,7 @@ func CalculateMultiPartsHash(path string, partSize int) ([][]byte, error) {

partsHash := [][]byte{}
var curr, partLength int64
var remaining = int64(info.Size())
var remaining = info.Size()
for curr = 0; remaining != 0; curr += partLength {
if remaining < int64(partSize) {
partLength = remaining
Expand Down
2 changes: 1 addition & 1 deletion common/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -243,7 +243,7 @@ func TestFilePartReadSeekerReadSeek(t *testing.T) {

prs = NewFilePartReadSeeker(fpart, 1000, 2000)
verifyReadSeek(t, expectFile, prs, 500, 1500, 500, io.SeekStart)
verifyReadSeek(t, expectFile, prs, 500, -500, -500, io.SeekCurrent)
verifyReadSeek(t, expectFile, prs, 400, -500, -500, io.SeekCurrent)
}

func TestConcatAndCalculateBase64Hash(t *testing.T) {
Expand Down
19 changes: 19 additions & 0 deletions dockerfiles/dev-image
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
FROM ubuntu:22.04

ENV DEBIAN_FRONTEND noninteractive
ENV GOPATH=/go

RUN apt-get -yqq update && apt-get install -yq --no-install-recommends man-db vim build-essential \
sqlite3 curl apt-transport-https ca-certificates software-properties-common \
&& apt-get install -yq sqlite3 \
&& apt-get clean autoclean && apt-get autoremove -y && rm -rf /var/lib/{apt,dpkg,cache,log}/

# install docker
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
RUN echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
RUN apt-get -yqq update && apt-get install -yq docker-ce && apt-get clean autoclean && apt-get autoremove -y && rm -rf /var/lib/{apt,dpkg,cache,log}/


RUN curl -fsSL https://go.dev/dl/go1.21.0.linux-amd64.tar.gz | tar xz -C /usr/local

RUN curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b $(go env GOPATH)/bin v1.55.2
9 changes: 9 additions & 0 deletions dockerfiles/dev-run
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
FROM "lomorage/lomo-backup:1.0"
ENV GOPATH=/go
ENV GOROOT=/usr/local/go
ENV PATH=$PATH:$GOROOT/bin:$GOPATH/bin
WORKDIR /go/src/github.com/lomorage/lomo-backup

COPY ./dockerfiles/entrypoint.sh /entrypoint.sh
RUN chmod 755 /entrypoint.sh
ENTRYPOINT /entrypoint.sh "$@"
8 changes: 8 additions & 0 deletions dockerfiles/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#!/bin/bash

set -x

echo user: $USER
echo uid: $UID

$@

0 comments on commit 87af242

Please sign in to comment.