From 828d3ca7f4dc67cca46b558def1a377fa83bfabe Mon Sep 17 00:00:00 2001 From: Sergiusz Urbaniak Date: Thu, 16 Jun 2016 11:47:18 +0200 Subject: [PATCH] Makefile: implemented update-deps target, add hacking guide Signed-off-by: Sergiusz Urbaniak --- HACKING.md | 124 +++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 22 ++++++++-- 2 files changed, 143 insertions(+), 3 deletions(-) create mode 100644 HACKING.md diff --git a/HACKING.md b/HACKING.md new file mode 100644 index 000000000..45f59b35b --- /dev/null +++ b/HACKING.md @@ -0,0 +1,124 @@ +# Hacking Guide + +## Overview + +This guide contains instructions for building artifacts contained in this repository. + +### Go + +This spec includes several Go packages, and a command line tool considered to be a reference implementation of the OCI image specification. + +Prerequsites: +* Go >=1.5 +* make + +The following make targets are relevant for any work involving the Go packages. + +### Linting + +The included Go source code is being examined for any linting violations not included in the standard Go compiler. Linting is done using [gometalinter](https://github.com/alecthomas/gometalinter). + +Invocation: +``` +$ make lint +``` + +### Tests + +This target executes all Go based tests. + +Invocation: +``` +$ make test +$ make validate-examples +``` + +### OCI image tool + +This target builds the `oci-image-tool` binary. + +Invocation: +``` +$ make oci-image-tool +``` + +### Virtual schema http/FileSystem + +The `oci-image-tool` uses a virtual [http/FileSystem](https://golang.org/pkg/net/http/#FileSystem) to load the JSON schema files for validating OCI images and/or manifests. The virtual file system is generated using the `esc` tool and compiled into the `oci-image-tool` binary so the JSON schema files don't have to be distributed along with the binary. + +Whenever changes are being done in any of the `schema/*.json` files, one must refresh the generated virtual file system. Otherwise schema changes will not be visible inside the `oci-image-tool`. + +Prerequisites: +* [esc](https://github.com/mjibson/esc) + +Invocation: +``` +$ make schema-fs +``` + +### JSON schema formatting + +This target auto-formats all JSON files in the `schema` directory using the `jq` tool. + +Prerequisites: +* [jq](https://stedolan.github.io/jq/) + +Invocation: +``` +$ make fmt +``` + +### OCI image specification PDF/HTML documentation files + +This target generates a PDF/HTML version of the OCI image specification. + +Prerequisites: +* [Docker](https://www.docker.com/) + +Invocation: +``` +$ make docs +``` + +### License header check + +This target checks if the source code includes necessary headers. + +Invocation: +``` +$ make check-license +``` + +### Update vendored dependencies + +This target updates all vendored depencies to their newest available versions. The `glide` tools is being used for the actual management and `glide-vc` tool is being used for stripping down the vendor directory size. + +Prerequisites: +* [glide](https://github.com/Masterminds/glide) +* [glide-vc](https://github.com/sgotti/glide-vc) + +Invocation: +``` +$ make update-deps +``` + +### Clean build artifacts + +This target cleans all generated/compiled artifacts. + +Invocation: +``` +$ make clean +``` + +### Create PNG images from dot files + +This target generates PNG image files from DOT source files in the `img` directory. + +Prerequisites: +* [graphviz](http://www.graphviz.org/) + +Invocation: +``` +$ make img/media-types.png +``` diff --git a/Makefile b/Makefile index 147408d38..58e337004 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,5 @@ +GO15VENDOREXPERIMENT=1 +export GO15VENDOREXPERIMENT DOCKER ?= $(shell which docker) # These docs are in an order that determines how they show up in the PDF/HTML docs. @@ -24,10 +26,17 @@ help: @echo @echo " * 'docs' - produce document in the $(OUTPUT) directory" @echo " * 'fmt' - format the json with indentation" - @echo " * 'validate' - build the validation tool" + @echo " * 'validate-examples' - validate the examples in the specification markdown files" + @echo " * 'oci-image-tool' - build the oci-image-tool binary" + @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 " * 'update-deps' - Update vendored dependencies" + @echo " * 'img/*.png' - Generate PNG from dot file" fmt: - for i in *.json ; do jq --indent 2 -M . "$${i}" > xx && cat xx > "$${i}" && rm xx ; done + for i in schema/*.json ; do jq --indent 2 -M . "$${i}" > xx && cat xx > "$${i}" && rm xx ; done docs: $(OUTPUT)/$(DOC_FILENAME).pdf $(OUTPUT)/$(DOC_FILENAME).html @@ -81,7 +90,11 @@ lint: test: go test -race ./... -img/%.png: %.dot +update-deps: + glide update --strip-vcs --strip-vendor --update-vendored --delete + glide-vc --only-code --no-tests + +img/%.png: img/%.dot dot -Tpng $^ > $@ .PHONY: .gitvalidation @@ -96,6 +109,7 @@ else endif .PHONY: install.tools + install.tools: .install.gitvalidation .install.gitvalidation: @@ -103,6 +117,8 @@ install.tools: .install.gitvalidation clean: rm -rf *~ $(OUTPUT) + rm -f oci-image-tool + .PHONY: \ validate-examples \ oci-image-tool \