Compare commits

..

7 Commits

Author SHA1 Message Date
6aed479650 Merge branch 'next' into add-make-check 2026-03-01 23:58:56 +01:00
user
1535c09da5 move 'make check' into Dockerfile, simplify CI to just 'docker build .'
Per reviewer feedback: the Dockerfile now runs 'make check' early in
its build process (after dependencies are extracted). The CI workflow
is simplified to just run 'docker build .', which implicitly runs
'make check' as part of the Docker build.
2026-02-28 10:24:49 -08:00
user
ae0e96eba3 refactor: split check into check-fmt, lint, test targets
make check now depends on check-fmt, lint, and test as prerequisites,
each runnable independently.
2026-02-20 03:17:38 -08:00
4f7459d509 security: pin all go install refs to commit SHAs 2026-02-20 03:16:53 -08:00
user
b19dff2456 security: pin CI actions to commit SHAs 2026-02-20 03:16:53 -08:00
user
f310001d1e add CI workflow for make check 2026-02-20 03:16:53 -08:00
user
950dd50c2e add make check target 2026-02-20 03:16:53 -08:00
3 changed files with 57 additions and 70 deletions

View File

@ -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"]

View File

@ -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

View File

@ -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