diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..7674b69b --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +output +header.html diff --git a/.tool/genheader.go b/.tool/genheader.go new file mode 100644 index 00000000..c8fa3457 --- /dev/null +++ b/.tool/genheader.go @@ -0,0 +1,54 @@ +// Copyright 2018 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package main + +import ( + "bytes" + "fmt" + "os" + "os/exec" + "strings" + "text/template" + + distspec "github.com/opencontainers/distribution-spec" +) + +var headerTemplate = template.Must(template.New("gen").Parse(`distribution-spec {{.Version}} +`)) + +type Obj struct { + Version string + Branch string +} + +func main() { + obj := Obj{ + Version: distspec.Version, + Branch: distspec.Version, + } + if strings.HasSuffix(distspec.Version, "-dev") { + cmd := exec.Command("git", "log", "-1", `--pretty=%H`, "HEAD") + var out bytes.Buffer + cmd.Stdout = &out + cmd.Stderr = os.Stderr + if err := cmd.Run(); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + + obj.Branch = strings.Trim(out.String(), " \n\r") + } + headerTemplate.Execute(os.Stdout, obj) +} diff --git a/.travis.yml b/.travis.yml index 92ae5496..6d0e10e8 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,3 +1,12 @@ +language: go +go: + - 1.11.x + +sudo: required + +services: + - docker + before_install: - make install.tools @@ -6,3 +15,4 @@ install: true script: - echo "${TRAVIS_COMMIT_RANGE} -> ${TRAVIS_COMMIT_RANGE/.../..} (travis-ci/travis-ci#4596)" - TRAVIS_COMMIT_RANGE="${TRAVIS_COMMIT_RANGE/.../..}" make .gitvalidation + - make docs diff --git a/Makefile b/Makefile index b2542a9a..535db5a8 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,30 @@ EPOCH_TEST_COMMIT := 91d6d8466e68f1efff7977b63ad6f48e72245e05 +DOCKER ?= $(shell command -v docker 2>/dev/null) +PANDOC ?= $(shell command -v pandoc 2>/dev/null) + +OUTPUT_DIRNAME ?= output/ +DOC_FILENAME ?= oci-distribution-spec + +PANDOC_CONTAINER ?= docker.io/vbatts/pandoc:1.19.1-3.fc27.x86_64 +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 \ + $(PANDOC_CONTAINER) + PANDOC_SRC := /input/ + PANDOC_DST := / + endif +endif + +DOC_FILES := spec.md +FIGURE_FILES := + test: .gitvalidation # When this is running in travis, it will only check the travis commit range @@ -11,6 +36,27 @@ else git-validation -v -run DCO,short-subject,dangling-whitespace -range $(EPOCH_TEST_COMMIT)..HEAD endif +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 --latex-engine=xelatex -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) + ls -sh $(realpath $@) + +$(OUTPUT_DIRNAME)/$(DOC_FILENAME).html: header.html $(DOC_FILES) $(FIGURE_FILES) + mkdir -p $(OUTPUT_DIRNAME)/ && \ + cp -ap img/ $(shell pwd)/$(OUTPUT_DIRNAME)/&& \ + $(PANDOC) -f markdown_github -t html5 -H $(PANDOC_SRC)header.html --standalone -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) + ls -sh $(realpath $@) +endif + +header.html: .tool/genheader.go version.go + go run .tool/genheader.go > $@ + install.tools: .install.gitvalidation .install.gitvalidation: diff --git a/img/.gitkeep b/img/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/version.go b/version.go new file mode 100644 index 00000000..aedfa5a0 --- /dev/null +++ b/version.go @@ -0,0 +1,32 @@ +// Copyright 2018 The Linux Foundation +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package distspec + +import "fmt" + +const ( + // VersionMajor is for an API incompatible changes + VersionMajor = 0 + // VersionMinor is for functionality in a backwards-compatible manner + VersionMinor = 1 + // VersionPatch is for backwards-compatible bug fixes + VersionPatch = 0 + + // VersionDev indicates development branch. Releases will be empty string. + VersionDev = "-dev" +) + +// Version is the specification version that the package types support. +var Version = fmt.Sprintf("%d.%d.%d%s", VersionMajor, VersionMinor, VersionPatch, VersionDev)