diff --git a/.tool/curver.go b/.tool/curver.go new file mode 100644 index 000000000..e4252cd79 --- /dev/null +++ b/.tool/curver.go @@ -0,0 +1,26 @@ +// Copyright 2025 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 ( + "fmt" + + "github.com/opencontainers/image-spec/specs-go" +) + +// This package is intended to be executed using "go run .tool/curver.go". +func main() { + fmt.Println(specs.Version) +} diff --git a/.tool/genheader.go b/.tool/genheader.go deleted file mode 100644 index 6d1e1767d..000000000 --- a/.tool/genheader.go +++ /dev/null @@ -1,54 +0,0 @@ -// Copyright 2017 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" - - specs "github.com/opencontainers/image-spec/specs-go" -) - -var headerTemplate = template.Must(template.New("gen").Parse(`image-spec {{.Version}} -`)) - -type Obj struct { - Version string - Branch string -} - -func main() { - obj := Obj{ - Version: specs.Version, - Branch: specs.Version, - } - if strings.HasSuffix(specs.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/Makefile b/Makefile index ef825617a..72cce275d 100644 --- a/Makefile +++ b/Makefile @@ -8,18 +8,17 @@ GOPATH:=$(shell go env GOPATH) OUTPUT_DIRNAME ?= output DOC_FILENAME ?= oci-image-spec -PANDOC_CONTAINER ?= ghcr.io/opencontainers/pandoc:2.9.2.1-8.fc33.x86_64@sha256:5d81ff930a043295a557be8b003ece2a33d14e91b28c50d368413b83372f8d28 +# pinned to a 3.1 release due to a regression, see https://github.com/jgm/pandoc/issues/10952 before upgrading +PANDOC_CONTAINER ?= docker.io/pandoc/latex:3.1@sha256:1cf54d9214a9b52de2f58cf5895cc596a5960711a54d7938dc72f2b23473caf3 ifeq "$(strip $(PANDOC))" '' ifneq "$(strip $(DOCKER))" '' PANDOC = $(DOCKER) run \ --rm \ - -v $(shell pwd)/:/input/:ro \ - -v $(shell pwd)/$(OUTPUT_DIRNAME)/:/$(OUTPUT_DIRNAME)/ \ - -u $(shell id -u) \ - --workdir /input \ + -v "$(CURDIR)/:/workdir/:ro" \ + -v "$(CURDIR)/$(OUTPUT_DIRNAME)/:/workdir/$(OUTPUT_DIRNAME)/" \ + -u "$(shell id -u):$(shell id -g)" \ + --workdir /workdir \ $(PANDOC_CONTAINER) - PANDOC_SRC := /input/ - PANDOC_DST := / endif endif @@ -55,24 +54,22 @@ fmt: ## format the json with indentation docs: $(OUTPUT_DIRNAME)/$(DOC_FILENAME).pdf $(OUTPUT_DIRNAME)/$(DOC_FILENAME).html ## generate a PDF/HTML version of the OCI image specification ifeq "$(strip $(PANDOC))" '' -$(OUTPUT_DIRNAME)/$(DOC_FILENAME).pdf: $(DOC_FILES) $(FIGURE_FILES) +$(OUTPUT_DIRNAME)/$(DOC_FILENAME).%: $(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 gfm -t latex --pdf-engine=xelatex -V geometry:margin=0.5in,bottom=0.8in -V block-headings -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) - ls -sh $(realpath $@) + version="v$$(go run .tool/curver.go)" && \ + $(PANDOC) -f gfm -t latex -o $@ --metadata "title=image-spec $${version}" --standalone --file-scope --pdf-engine=xelatex -V geometry:margin=0.5in,bottom=0.8in -V block-headings $(DOC_FILES) + ls -sh $@ -$(OUTPUT_DIRNAME)/$(DOC_FILENAME).html: header.html $(DOC_FILES) $(FIGURE_FILES) +$(OUTPUT_DIRNAME)/$(DOC_FILENAME).html: $(DOC_FILES) $(FIGURE_FILES) @mkdir -p $(OUTPUT_DIRNAME)/ && \ - cp -ap img/ $(shell pwd)/$(OUTPUT_DIRNAME)/&& \ - $(PANDOC) -f gfm -t html5 -H $(PANDOC_SRC)header.html --standalone -o $(PANDOC_DST)$@ $(patsubst %,$(PANDOC_SRC)%,$(DOC_FILES)) - ls -sh $(realpath $@) + version="v$$(go run .tool/curver.go)" && \ + $(PANDOC) -f gfm -t html5 -o $@ --metadata "title=image-spec $${version}" --standalone --file-scope --embed-resources -V "maxwidth:95%" $(DOC_FILES) + ls -sh $@ endif -header.html: .tool/genheader.go specs-go/version.go - go run .tool/genheader.go > $@ - .PHONY: validate-examples validate-examples: schema/schema.go ## validate examples in the specification markdown files cd schema && go test -run TestValidate .