From e176ed4db9165887b69801d095ea3730ccf080e8 Mon Sep 17 00:00:00 2001 From: martin <74269598+martabal@users.noreply.github.com> Date: Mon, 15 Jan 2024 15:14:54 +0100 Subject: [PATCH] refactor: project structure (#16) --- .github/workflows/build.yml | 7 +++---- .github/workflows/codeql-analysis.yml | 27 ++++++++++++++++----------- .github/workflows/docker.yml | 4 ++-- .github/workflows/test.yml | 7 ++++--- Dockerfile | 14 ++++++++++---- Makefile | 14 +++++++------- go.mod => src/go.mod | 5 ++--- go.sum => src/go.sum | 10 ++++------ src/immich/data.go | 4 ++-- src/init.go | 17 ++++++++++------- src/prometheus/prometheus.go | 2 +- src/tests/prometheus_test.go | 4 ++-- 12 files changed, 63 insertions(+), 52 deletions(-) rename go.mod => src/go.mod (72%) rename go.sum => src/go.sum (83%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 68696f3..054ea34 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,11 +2,10 @@ name: Build on: workflow_dispatch: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] jobs: - build: name: Run build runs-on: ubuntu-latest @@ -14,4 +13,4 @@ jobs: - name: Checkout code uses: actions/checkout@v4 - name: Build - run: go build -o ./immich.out ./src \ No newline at end of file + run: make build diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2929dee..7483ddd 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -3,9 +3,9 @@ name: CodeQL on: workflow_dispatch: push: - branches: [ "main" ] + branches: ["main"] pull_request: - branches: [ "main" ] + branches: ["main"] jobs: analyze: @@ -19,16 +19,21 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'go' ] + language: ["go"] steps: - - name: Checkout repo - uses: actions/checkout@v4 + - name: Checkout repo + uses: actions/checkout@v4 - - name: Initialize CodeQL - uses: github/codeql-action/init@v3 - with: - languages: ${{ matrix.language }} + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} - - name: CodeQL Analysis - uses: github/codeql-action/analyze@v3 \ No newline at end of file + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{matrix.language}}" diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index d7d121e..4666511 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -1,4 +1,4 @@ -name: docker +name: Docker Build on: workflow_dispatch: @@ -30,7 +30,6 @@ jobs: uses: docker/metadata-action@v5 with: images: | - ${{ github.repository_owner }}/${{ github.event.repository.name }} ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }} tags: | type=raw,value=latest,enable=${{ github.event_name == 'release' }} @@ -67,3 +66,4 @@ jobs: push: ${{ !github.event.pull_request.head.repo.fork }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} + build-args: BUILD_VERSION=${{ github.event.release.name }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index a778c71..cdb0625 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -1,4 +1,4 @@ -name: Test +name: Tests on: workflow_dispatch: push: @@ -15,12 +15,13 @@ jobs: uses: actions/checkout@v4 - name: Run unit tests - run: go test -v ./src/tests + run: make test - name: Run formatter - run: test -z $(gofmt -l ./src) + run: cd src && test -z $(gofmt -l .) - name: golangci-lint uses: golangci/golangci-lint-action@v3 with: version: v1.55.2 + working-directory: src diff --git a/Dockerfile b/Dockerfile index 8738b7e..9caaef3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,17 @@ FROM golang:1.21-alpine3.19 AS builder +ARG BUILD_VERSION + WORKDIR /app -COPY . . - -RUN go build -o /go/bin/immich-exporter ./src +COPY src src +RUN cd src && \ + if [ -n "${BUILD_VERSION}" ]; then \ + go build -o /go/bin/immich-exporter -ldflags="-X 'main.Version=${BUILD_VERSION}'" . ; \ + else \ + go build -o /go/bin/immich-exporter . ; \ + fi FROM alpine:3.19 @@ -13,4 +19,4 @@ COPY --from=builder /go/bin/immich-exporter /go/bin/immich-exporter WORKDIR /go/bin -CMD ["/go/bin/immich-exporter"] \ No newline at end of file +CMD ["/go/bin/immich-exporter"] diff --git a/Makefile b/Makefile index ecb6526..dee6f07 100644 --- a/Makefile +++ b/Makefile @@ -1,20 +1,20 @@ build: - go build -o ./qbittorrent-exporter.out ./src + cd src && go build -o ../immich-exporter.out . dev : - go run ./src + cd src && go run . dev-env : - go run ./src -e + cd src && go run . -e format : - go fmt ./src + cd src && test -z $(gofmt -l .) lint: - docker run --rm -v ./:/app -w /app golangci/golangci-lint:latest golangci-lint run -v + docker run --rm -v ./src:/app -w /app golangci/golangci-lint:latest golangci-lint run -v test: - go test -v ./src/tests + cd src && go test -v ./tests update: - go get -u ./src && go mod tidy + cd src && go get -u . && go mod tidy \ No newline at end of file diff --git a/go.mod b/src/go.mod similarity index 72% rename from go.mod rename to src/go.mod index 187b18a..04ae9ba 100644 --- a/go.mod +++ b/src/go.mod @@ -11,10 +11,9 @@ require ( require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect github.com/prometheus/client_model v0.5.0 // indirect - github.com/prometheus/common v0.45.0 // indirect + github.com/prometheus/common v0.46.0 // indirect github.com/prometheus/procfs v0.12.0 // indirect - golang.org/x/sys v0.15.0 // indirect + golang.org/x/sys v0.16.0 // indirect google.golang.org/protobuf v1.32.0 // indirect ) diff --git a/go.sum b/src/go.sum similarity index 83% rename from go.sum rename to src/go.sum index 3a8fc5b..b6b2a86 100644 --- a/go.sum +++ b/src/go.sum @@ -9,16 +9,14 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= -github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.18.0 h1:HzFfmkOzH5Q8L8G+kSJKUx5dtG87sewO+FoDDqP5Tbk= github.com/prometheus/client_golang v1.18.0/go.mod h1:T+GXkCk5wSJyOqMIzVgvvjFDlkOQntgjkJWKrN5txjA= github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= -github.com/prometheus/common v0.45.0 h1:2BGz0eBc2hdMDLnO/8n0jeB3oPrt2D08CekT0lneoxM= -github.com/prometheus/common v0.45.0/go.mod h1:YJmSTw9BoKxJplESWWxlbyttQR4uaEcGyv9MZjVOJsY= +github.com/prometheus/common v0.46.0 h1:doXzt5ybi1HBKpsZOL0sSkaNHJJqkyfEWZGGqqScV0Y= +github.com/prometheus/common v0.46.0/go.mod h1:Tp0qkxpb9Jsg54QMe+EAmqXkSV7Evdy1BTn+g2pa/hQ= github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= @@ -27,8 +25,8 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/src/immich/data.go b/src/immich/data.go index 910ac11..396019c 100644 --- a/src/immich/data.go +++ b/src/immich/data.go @@ -3,13 +3,13 @@ package immich import ( "encoding/json" "fmt" - "immich-exp/src/models" + "immich-exp/models" "io" "net/http" "sync" - prom "immich-exp/src/prometheus" + prom "immich-exp/prometheus" log "github.com/sirupsen/logrus" diff --git a/src/init.go b/src/init.go index 3bd7be0..6f43cd4 100644 --- a/src/init.go +++ b/src/init.go @@ -3,8 +3,8 @@ package main import ( "flag" "fmt" - immich "immich-exp/src/immich" - "immich-exp/src/models" + immich "immich-exp/immich" + "immich-exp/models" "net/http" "strconv" @@ -19,14 +19,17 @@ import ( ) const DEFAULTPORT = 8090 -const AUTHOR = "martabal" -const VERSION = "1.3.1" -const PROJECT_NAME = "immich-exporter" + +var ( + Version = "dev" + Author = "martabal" + ProjectName = "immich-exporter" +) func main() { loadenv() - fmt.Printf("%s (version %s)\n", PROJECT_NAME, VERSION) - fmt.Println("Author: ", AUTHOR) + fmt.Printf("%s (version %s)\n", ProjectName, Version) + fmt.Println("Author: ", Author) fmt.Println("Using log level: ", log.GetLevel()) log.Info("Immich URL: ", models.Getbaseurl()) log.Info("Started") diff --git a/src/prometheus/prometheus.go b/src/prometheus/prometheus.go index 2b62a56..99e20f2 100644 --- a/src/prometheus/prometheus.go +++ b/src/prometheus/prometheus.go @@ -1,7 +1,7 @@ package prom import ( - "immich-exp/src/models" + "immich-exp/models" "strconv" "strings" diff --git a/src/tests/prometheus_test.go b/src/tests/prometheus_test.go index a7b260c..59afd3a 100644 --- a/src/tests/prometheus_test.go +++ b/src/tests/prometheus_test.go @@ -1,8 +1,8 @@ package prom import ( - "immich-exp/src/models" - prom "immich-exp/src/prometheus" + "immich-exp/models" + prom "immich-exp/prometheus" "reflect" "testing" )