GO15VENDOREXPERIMENT=1 export GO15VENDOREXPERIMENT DOCKER ?= $(shell command -v docker 2>/dev/null) PANDOC ?= $(shell command -v pandoc 2>/dev/null) ifeq "$(strip $(PANDOC))" '' ifneq "$(strip $(DOCKER))" '' PANDOC = $(DOCKER) run \ -it \ --rm \ -v $(shell pwd)/:/input/:ro \ -v $(shell pwd)/$(OUTPUT_DIRNAME)/:/$(OUTPUT_DIRNAME)/ \ -u $(shell id -u) \ --workdir /input \ docker.io/vbatts/pandoc:1.16.0.2-1.fc24 PANDOC_SRC := /input/ PANDOC_DST := / endif endif # These docs are in an order that determines how they show up in the PDF/HTML docs. DOC_FILES := \ spec.md \ media-types.md \ descriptor.md \ image-layout.md \ manifest.md \ manifest-list.md \ layer.md \ config.md \ annotations.md \ considerations.md FIGURE_FILES := \ img/media-types.png OUTPUT_DIRNAME ?= output/ DOC_FILENAME ?= oci-image-spec EPOCH_TEST_COMMIT ?= v0.2.0 default: help help: @echo "Usage: make " @echo @echo " * 'docs' - produce document in the $(OUTPUT_DIRNAME) directory" @echo " * 'fmt' - format the json with indentation" @echo " * 'validate-examples' - validate the examples in the specification markdown files" @echo " * 'schema-fs' - regenerate the virtual schema http/FileSystem" @echo " * 'check-license' - check license headers in source files" @echo " * 'lint' - Execute the source code linter" @echo " * 'test' - Execute the unit tests" @echo " * 'img/*.png' - Generate PNG from dot file" fmt: for i in schema/*.json ; do jq --indent 2 -M . "$${i}" > xx && cat xx > "$${i}" && rm xx ; done docs: $(OUTPUT_DIRNAME)/$(DOC_FILENAME).pdf $(OUTPUT_DIRNAME)/$(DOC_FILENAME).html ifeq "$(strip $(PANDOC))" '' $(OUTPUT_DIRNAME)/$(DOC_FILENAME).pdf: $(DOC_FILES) $(FIGURE_FILES) $(error cannot build $@ without either pandoc or docker) else $(OUTPUT_DIRNAME)/$(DOC_FILENAME).pdf: $(DOC_FILES) $(FIGURE_FILES) @mkdir -p $(OUTPUT_DIRNAME)/ && \ $(PANDOC) -f markdown_github -t latex -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) ls -sh $(shell readlink -f $@) $(OUTPUT_DIRNAME)/$(DOC_FILENAME).html: $(DOC_FILES) $(FIGURE_FILES) @mkdir -p $(OUTPUT_DIRNAME)/ && \ cp -ap img/ $(shell pwd)/$(OUTPUT_DIRNAME)/&& \ $(PANDOC) -f markdown_github -t html5 -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) ls -sh $(shell readlink -f $@) endif validate-examples: go test -run TestValidate ./schema schema-fs: @echo "generating schema fs" @cd schema && printf "%s\n\n%s\n" "$$(cat ../.header)" "$$(go generate)" > fs.go check-license: @echo "checking license headers" @./.tool/check-license lint: @echo "checking lint" @./.tool/lint test: go test -race -cover $(shell go list ./... | grep -v /vendor/) img/%.png: img/%.dot dot -Tpng $^ > $@ .PHONY: .gitvalidation # When this is running in travis, it will only check the travis commit range .gitvalidation: @which git-validation > /dev/null 2>/dev/null || (echo "ERROR: git-validation not found. Consider 'make install.tools' target" && false) ifdef TRAVIS_COMMIT_RANGE git-validation -q -run DCO,short-subject,dangling-whitespace else git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..HEAD endif .PHONY: install.tools install.tools: .install.gitvalidation .install.glide .install.glide-vc .install.gitvalidation: go get -u github.com/vbatts/git-validation .install.glide: go get -u github.com/Masterminds/glide .install.glide-vc: go get -u github.com/sgotti/glide-vc clean: rm -rf *~ $(OUTPUT_DIRNAME) .PHONY: \ validate-examples \ check-license \ clean \ lint \ docs \ test