Compare commits
7 Commits
ffc400a140
...
6aed479650
| Author | SHA1 | Date | |
|---|---|---|---|
| 6aed479650 | |||
|
|
1535c09da5 | ||
|
|
ae0e96eba3 | ||
| 4f7459d509 | |||
|
|
b19dff2456 | ||
|
|
f310001d1e | ||
|
|
950dd50c2e |
64
Dockerfile
64
Dockerfile
@ -1,46 +1,38 @@
|
|||||||
################################################################################
|
################################################################################
|
||||||
# Lint stage — fast feedback on formatting and lint issues
|
#2345678911234567892123456789312345678941234567895123456789612345678971234567898
|
||||||
################################################################################
|
################################################################################
|
||||||
# golangci/golangci-lint:v1.64.8
|
FROM sneak/builder:2022-12-08 AS builder
|
||||||
FROM golangci/golangci-lint@sha256:2987913e27f4eca9c8a39129d2c7bc1e74fbcf77f181e01cea607be437aa5cb8 AS lint
|
ENV DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
WORKDIR /src
|
|
||||||
COPY go.mod go.sum ./
|
|
||||||
RUN go mod download
|
|
||||||
|
|
||||||
COPY . .
|
|
||||||
|
|
||||||
RUN make fmt-check
|
|
||||||
RUN make lint
|
|
||||||
|
|
||||||
################################################################################
|
|
||||||
# Build stage — tests and compilation
|
|
||||||
################################################################################
|
|
||||||
# golang:1.24-alpine
|
|
||||||
FROM golang@sha256:8bee1901f1e530bfb4a7850aa7a479d17ae3a18beb6e09064ed54cfd245b7191 AS builder
|
|
||||||
|
|
||||||
# Force BuildKit to run the lint stage by creating a stage dependency
|
|
||||||
COPY --from=lint /src/go.sum /dev/null
|
|
||||||
|
|
||||||
RUN apk add --no-cache git make zstd
|
|
||||||
|
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
COPY go.mod go.sum ./
|
COPY ./Makefile ./.golangci.yml ./go.mod ./go.sum /build/
|
||||||
RUN go mod download
|
COPY ./vendor.tzst /build/vendor.tzst
|
||||||
|
COPY ./modcache.tzst /build/modcache.tzst
|
||||||
COPY . .
|
COPY ./internal ./internal
|
||||||
|
COPY ./bin/gitrev.sh ./bin/gitrev.sh
|
||||||
RUN make test
|
COPY ./mfer ./mfer
|
||||||
RUN make build
|
COPY ./cmd ./cmd
|
||||||
|
ARG GITREV unknown
|
||||||
# Archive source for posterity
|
ARG DRONE_COMMIT_SHA unknown
|
||||||
RUN go mod vendor && tar -c . | zstd -T0 -19 -o /src.tzst
|
|
||||||
|
|
||||||
|
RUN mkdir -p "$(go env GOMODCACHE)" && cd "$(go env GOMODCACHE)" && \
|
||||||
|
zstdmt -d --stdout /build/modcache.tzst | tar xf - && \
|
||||||
|
rm /build/modcache.tzst && cd /build
|
||||||
|
RUN make check
|
||||||
|
RUN \
|
||||||
|
cd mfer && go generate . && cd .. && \
|
||||||
|
GOPACKAGESDEBUG=true golangci-lint run ./... && \
|
||||||
|
mkdir vendor && cd vendor && \
|
||||||
|
zstdmt -d --stdout /build/vendor.tzst | tar xf - && rm /build/vendor.tzst && \
|
||||||
|
cd .. && \
|
||||||
|
make mfer.cmd
|
||||||
|
RUN rm -rf /build/vendor && go mod vendor && tar -c . | zstdmt -19 > /src.tzst
|
||||||
################################################################################
|
################################################################################
|
||||||
# Final image
|
#2345678911234567892123456789312345678941234567895123456789612345678971234567898
|
||||||
|
################################################################################
|
||||||
|
## final image
|
||||||
################################################################################
|
################################################################################
|
||||||
FROM scratch
|
FROM scratch
|
||||||
# we put all the source into the final image for posterity, it's small
|
# we put all the source into the final image for posterity, it's small
|
||||||
COPY --from=builder /src.tzst /src.tzst
|
COPY --from=builder /src.tzst /src.tzst
|
||||||
COPY --from=builder /build/bin/mfer /mfer
|
COPY --from=builder /build/mfer.cmd /mfer
|
||||||
ENTRYPOINT ["/mfer"]
|
ENTRYPOINT ["/mfer"]
|
||||||
|
|||||||
50
Makefile
50
Makefile
@ -13,7 +13,7 @@ GOLDFLAGS += -X main.Version=$(VERSION)
|
|||||||
GOLDFLAGS += -X main.Gitrev=$(GITREV_BUILD)
|
GOLDFLAGS += -X main.Gitrev=$(GITREV_BUILD)
|
||||||
GOFLAGS := -ldflags "$(GOLDFLAGS)"
|
GOFLAGS := -ldflags "$(GOLDFLAGS)"
|
||||||
|
|
||||||
.PHONY: docker default run ci test fixme check fmt-check lint build hooks
|
.PHONY: docker default run ci test fixme check check-fmt lint
|
||||||
|
|
||||||
default: fmt test
|
default: fmt test
|
||||||
|
|
||||||
@ -23,7 +23,7 @@ run: ./bin/mfer
|
|||||||
|
|
||||||
ci: test
|
ci: test
|
||||||
|
|
||||||
test:
|
test: $(SOURCEFILES) mfer/mf.pb.go
|
||||||
go test -v --timeout 10s ./...
|
go test -v --timeout 10s ./...
|
||||||
|
|
||||||
$(PROTOC_GEN_GO):
|
$(PROTOC_GEN_GO):
|
||||||
@ -42,9 +42,6 @@ bin/mfer: $(SOURCEFILES) mfer/mf.pb.go
|
|||||||
protoc --version
|
protoc --version
|
||||||
cd cmd/mfer && go build -tags urfave_cli_no_docs -o ../../bin/mfer $(GOFLAGS) .
|
cd cmd/mfer && go build -tags urfave_cli_no_docs -o ../../bin/mfer $(GOFLAGS) .
|
||||||
|
|
||||||
build:
|
|
||||||
cd cmd/mfer && go build -tags urfave_cli_no_docs -o ../../bin/mfer $(GOFLAGS) .
|
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rfv mfer/*.pb.go bin/mfer cmd/mfer/mfer *.dockerimage
|
rm -rfv mfer/*.pb.go bin/mfer cmd/mfer/mfer *.dockerimage
|
||||||
|
|
||||||
@ -54,31 +51,38 @@ fmt: mfer/mf.pb.go
|
|||||||
-prettier -w *.json
|
-prettier -w *.json
|
||||||
-prettier -w *.md
|
-prettier -w *.md
|
||||||
|
|
||||||
fmt-check:
|
lint: mfer/mf.pb.go
|
||||||
@echo "==> Checking formatting..."
|
|
||||||
@test -z "$$(gofmt -l .)" || (echo "Files not formatted:" && gofmt -l . && exit 1)
|
|
||||||
|
|
||||||
lint:
|
|
||||||
golangci-lint run ./...
|
golangci-lint run ./...
|
||||||
|
|
||||||
# Run all checks (formatting, linting, tests) without modifying files
|
|
||||||
check: fmt-check lint test
|
|
||||||
|
|
||||||
hooks:
|
|
||||||
@echo "Installing git hooks..."
|
|
||||||
@mkdir -p .git/hooks
|
|
||||||
@echo '#!/bin/sh' > .git/hooks/pre-commit
|
|
||||||
@echo 'make check' >> .git/hooks/pre-commit
|
|
||||||
@chmod +x .git/hooks/pre-commit
|
|
||||||
@echo "Pre-commit hook installed."
|
|
||||||
|
|
||||||
docker: sneak-mfer.$(ARCH).tzst.dockerimage
|
docker: sneak-mfer.$(ARCH).tzst.dockerimage
|
||||||
|
|
||||||
sneak-mfer.$(ARCH).tzst.dockerimage: $(SOURCEFILES)
|
sneak-mfer.$(ARCH).tzst.dockerimage: $(SOURCEFILES) vendor.tzst modcache.tzst
|
||||||
docker build --progress plain --build-arg GITREV=$(GITREV_BUILD) -t sneak/mfer .
|
docker build --progress plain --build-arg GITREV=$(GITREV_BUILD) -t sneak/mfer .
|
||||||
docker save sneak/mfer | pv | zstd -T0 -19 > $@
|
docker save sneak/mfer | pv | zstdmt -19 > $@
|
||||||
du -sh $@
|
du -sh $@
|
||||||
|
|
||||||
godoc:
|
godoc:
|
||||||
open http://127.0.0.1:6060
|
open http://127.0.0.1:6060
|
||||||
godoc -http=:6060
|
godoc -http=:6060
|
||||||
|
|
||||||
|
vendor.tzst: go.mod go.sum
|
||||||
|
go mod tidy
|
||||||
|
go mod vendor
|
||||||
|
cd vendor && tar -c . | pv | zstdmt -19 > $(PWD)/$@.tmp
|
||||||
|
rm -rf vendor
|
||||||
|
mv $@.tmp $@
|
||||||
|
|
||||||
|
modcache.tzst: go.mod go.sum
|
||||||
|
go mod tidy
|
||||||
|
cd $(HOME)/go/pkg && chmod -R u+rw . && rm -rf mod sumdb
|
||||||
|
go mod download -x
|
||||||
|
cd $(shell go env GOMODCACHE) && tar -c . | pv | zstdmt -19 > $(PWD)/$@.tmp
|
||||||
|
mv $@.tmp $@
|
||||||
|
|
||||||
|
# Individual check targets
|
||||||
|
check-fmt:
|
||||||
|
@echo "==> Checking formatting..."
|
||||||
|
@test -z "$$(gofmt -l .)" || (echo "Files not formatted:" && gofmt -l . && exit 1)
|
||||||
|
|
||||||
|
# Run all checks (formatting, linting, tests) without modifying files
|
||||||
|
check: check-fmt lint test
|
||||||
|
|||||||
13
README.md
13
README.md
@ -55,7 +55,7 @@ Reading file contents and computing cryptographic hashes for manifest generation
|
|||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
- Go 1.23 or later
|
- Go 1.21 or later
|
||||||
- `protoc` (Protocol Buffers compiler) — only needed if modifying `.proto` files
|
- `protoc` (Protocol Buffers compiler) — only needed if modifying `.proto` files
|
||||||
- `golangci-lint` — for linting (`go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest`)
|
- `golangci-lint` — for linting (`go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest`)
|
||||||
- `gofumpt` — for formatting (`go install mvdan.cc/gofumpt@latest`)
|
- `gofumpt` — for formatting (`go install mvdan.cc/gofumpt@latest`)
|
||||||
@ -64,7 +64,7 @@ Reading file contents and computing cryptographic hashes for manifest generation
|
|||||||
|
|
||||||
```sh
|
```sh
|
||||||
# Build the binary
|
# Build the binary
|
||||||
make build
|
make bin/mfer
|
||||||
|
|
||||||
# Run tests
|
# Run tests
|
||||||
make test
|
make test
|
||||||
@ -72,17 +72,8 @@ make test
|
|||||||
# Format code
|
# Format code
|
||||||
make fmt
|
make fmt
|
||||||
|
|
||||||
# Check formatting (without modifying files)
|
|
||||||
make fmt-check
|
|
||||||
|
|
||||||
# Lint
|
# Lint
|
||||||
make lint
|
make lint
|
||||||
|
|
||||||
# Run all checks (formatting, linting, tests)
|
|
||||||
make check
|
|
||||||
|
|
||||||
# Install git pre-commit hook that runs make check
|
|
||||||
make hooks
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Install from source
|
## Install from source
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user