1
0
mirror of https://github.com/opencontainers/image-spec.git synced 2025-04-18 03:24:01 +03:00

*: add license header checking and tweak Makefile

- move file-finding logic into lint check script
- move lint check script into .tool/ subdirectory (similar to
  opencontainers/runtime-spec)
- add a simple `check-license` script to .tool/ to ensure all Go source
  files have an Apache license header, and wire up to `check-license`
  make target
- invoke this from travis
- add `schema-fs` target to generate schema/fs.go (including header)
- add header everywhere it's missing so far
- add `output/` directory to .gitignore

Signed-off-by: Jonathan Boulle <jonathanboulle@gmail.com>
This commit is contained in:
Jonathan Boulle 2016-05-19 18:58:59 +02:00
parent 6b5d048458
commit 10e6ff7101
15 changed files with 285 additions and 290 deletions

3
.gitignore vendored
View File

@ -1,3 +1,4 @@
oci-validate-examples
code-of-conduct.md
oci-image-tool
oci-validate-examples
output

14
.header Normal file
View File

@ -0,0 +1,14 @@
// Copyright 2016 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.

13
.tool/check-license Executable file
View File

@ -0,0 +1,13 @@
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
ret=0
for file in $(find . -type f -iname '*.go' ! -path './vendor/*'); do
(head -n3 "${file}" | grep -Eq "(Copyright|generated|GENERATED)") || (echo -e "${file}:missing license header" && ret=1)
done
exit $ret

23
.tool/lint Executable file
View File

@ -0,0 +1,23 @@
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [ ! $(command -v gometalinter) ]; then
go get github.com/alecthomas/gometalinter
gometalinter --update --install
fi
for d in $(find . -type d -not -iwholename '*.git*' -a -not -iname '.tool'); do
gometalinter \
--exclude='error return value not checked.*(Close|Log|Print).*\(errcheck\)$' \
--exclude='.*_test\.go:.*error return value not checked.*\(errcheck\)$' \
--exclude='duplicate of.*_test.go.*\(dupl\)$' \
--exclude='schema/fs.go' \
--disable=aligncheck \
--disable=gotype \
--cyclo-over=20 \
--tests \
--deadline=10s "${d}"
done

View File

@ -18,5 +18,6 @@ install: true
script:
- git-validation -run DCO,short-subject -v -range ${TRAVIS_COMMIT_RANGE}
- make lint
- make check-license
- make test
- make oci-image-tool

View File

@ -64,8 +64,17 @@ oci-validate-examples: cmd/oci-validate-examples/main.go
oci-image-tool:
go build ./cmd/oci-image-tool
schema-fs:
@echo "generating schema fs"
@cd schema && echo -e "$$(cat ../.header)\n\n$$(go generate)" > fs.go
check-license:
@echo "checking license headers"
@./.tool/check-license
lint:
for d in $(shell find . -type d -not -iwholename '*.git*'); do echo "$${d}" && ./lint "$${d}"; done
@echo "checking lint"
@./.tool/lint
test:
go test -race ./...
@ -78,6 +87,7 @@ media-types.png: media-types.dot
.PHONY: \
validate-examples \
oci-image-tool \
check-license \
lint \
docs \
test

View File

@ -1,3 +1,17 @@
// Copyright 2016 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 (

View File

@ -1,3 +1,17 @@
// Copyright 2016 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 (

22
lint
View File

@ -1,22 +0,0 @@
#!/usr/bin/env bash
set -o errexit
set -o nounset
set -o pipefail
if [ ! $(command -v gometalinter) ]
then
go get github.com/alecthomas/gometalinter
gometalinter --update --install
fi
gometalinter \
--exclude='error return value not checked.*(Close|Log|Print).*\(errcheck\)$' \
--exclude='.*_test\.go:.*error return value not checked.*\(errcheck\)$' \
--exclude='duplicate of.*_test.go.*\(dupl\)$' \
--exclude='schema/fs.go' \
--disable=aligncheck \
--disable=gotype \
--cyclo-over=20 \
--tests \
--deadline=10s "${1}"

View File

@ -1,2 +1,16 @@
// Copyright 2016 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 schema defines the OCI image media types, schema definitions and validation functions.
package schema

View File

@ -1,3 +1,17 @@
// Copyright 2016 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 schema
import (
@ -189,7 +203,7 @@ var _escData = map[string]*_escFile{
"/defs-image.json": {
local: "defs-image.json",
size: 3100,
modtime: 1462965360,
modtime: 1462375266,
compressed: `
H4sIAAAJbogA/+xWy27bMBC86ysIJUAOfqjXGkGAoEGBnlIgPdVQgY20kphKpLqkgzqB/r3U+x3Xidte
erK55A5nhmPSzxZjto/KI55qLoW9YfYNBlzwfKRYCqS5t4uBmJbsNkXxQQoNXCCxTwmEyO5S9HjAPSja
@ -208,7 +222,7 @@ dwN3Or48T12UYhfH478BrlWPMiuzfgUAAP//VjUNyBwMAAA=
"/defs.json": {
local: "defs.json",
size: 3044,
modtime: 1462965360,
modtime: 1460709579,
compressed: `
H4sIAAAJbogA/6xWT3PaPhC98yk8/H5H2tiybENvnaZ/csiEmUxPnR5cs4BakFRZ7jTN8N0rGWMse3Ew
5QBYu9r3dt+usJ5HnjdeQJ4pJjUTfPzGG9/CknFmV7lX5LDw9FqJYrUWhTaP4D1I4O8E1ynjoLxHCRlb
@ -226,262 +240,41 @@ Rn8DAAD//2VgiEzkCwAA
"/doc.go": {
local: "doc.go",
size: 113,
modtime: 1462979016,
size: 711,
modtime: 1463675171,
compressed: `
H4sIAAAJbogA/9LXVwhITM5OTE9VKE7OSM1NVEhJTcvMSy1WKMlIVfB39lTIzAVJ5qamZCYqlFQWpBbr
oKjMLMnMzytWSMxLUShLzMlMSQTxFdJK85LBEnpcBSjGcwECAAD//4+fgLBxAAAA
`,
},
"/fs.go": {
local: "fs.go",
size: 20244,
modtime: 1462980156,
compressed: `
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
+fwK0Y5Gz4Vs4a7sF/8CAAD//2ICNX/HAgAA
`,
},
"/gen.go": {
local: "gen.go",
size: 187,
modtime: 1462980095,
size: 839,
modtime: 1463676428,
compressed: `
H4sIAAAJbogA/zSOQa6DMAwF95zCYvV/JZI9Etv2AD1BCA8nhcQIh0q9fYlQl/ZoNG9zfnEMUh+QXNNY
Sw9k7K6ASgCFUjZzjyueHy1IhDRimmJmcut6WTSfWKt5aAVQT3/V095ajiUco/GSbHrFUSXbk/+bWmLp
+deqUrft8V2PTmhWw3J+Fh6uadRFzrJjaM2NpSXTfAMAAP//3UYmUrsAAAA=
H4sIAAAJbogA/2SSwW7bPBCE736KhU7JD1vKn0MPKXJQk7gVGsiApTTILZS0ollTJEtSlvX2XTIKkKCG
LxR3Zr8dbpbBnTazFfzg4frq/y9QHxAehRrPsNWj6pgXWq2yjP70uUXlsAP6jhY8VeaGtVEQb9bwC60j
AVynV3ARCpLlKrn8GixmPcLAZlDaw+iQPISDXkgEPLdoPAgFrR6MFEy1CJPwh9hncUmDx8vioRvPqJyR
wNCp/1gIzC/Q4Xfw3txk2TRNKYvAqbY8k2+lLnss7h7K6mFD0IvoSUl0Diz+GYWlgZsZmCGoljWEKtkE
2gLjFunO6wA9WeGF4mtwuvcTsxhsOuG8Fc3oP2X2jkiTfyyg1JiCJK+gqBL4lldFtQ4mz0X9Y/dUw3O+
3+dlXTxUsNvD3a68L+piV9JpC3n5Aj+L8n4NSIlRHzwbGyYgTBHSxC5GVyF+Quj1G5Iz2IpetDSa4iPj
CFyf0CqaCAzaQbjwqo4Au2AjxSB83Az371zpakUZH4OJo6gHtgqS76jQMo/BA3BoGuw6Gjq8TLql969m
53GIQEzKRRk3wwX56AIKuhYugsTRa3KadGxS2pZs+C0ap1VG95dpbFeHvXIHPcoOeGwt5QwNha5O+kiN
42a9Duz4Trnp3Sspub7hC2pstzFWnMJhY478dsHaCK60xdsk/Y/rBNLV3wAAAP//Xhj9JUcDAAA=
`,
},
"/image-manifest-schema.json": {
local: "image-manifest-schema.json",
size: 1064,
modtime: 1462965360,
modtime: 1462375266,
compressed: `
H4sIAAAJbogA/6RTvVLjMBDu/RQ7TspzdMVVaa+64oaCDA1DIeyVvZlYMlrBTCaTd0c/UZAJBSSlV/v9
Sj5UAHWH3FqaHBldr6G+m1D/NdpJ0mjh3yh7hP9Sk0J2cD9hS4paGbd/BfiS2wFHGaCDc9NaiC0b3aTp
@ -496,7 +289,7 @@ KAQAAA==
"/manifest-list-schema.json": {
local: "manifest-list-schema.json",
size: 1010,
modtime: 1462965360,
modtime: 1462375266,
compressed: `
H4sIAAAJbogA/6ySMU/7MBDF93yKU9rxn/o/MHWFBQnEQMWCGExyaa5q7OAzSFXV747tS0qiMIDoUqkv
fu9+7+xjBpBXyKWjzpM1+Rryhw7NtTVek0EHt63eItxrQzWyhzsKP48dllRTqZPlX8xYctlgq6O/8b5b
@ -508,26 +301,89 @@ AA==
`,
},
"/media-types.go": {
local: "media-types.go",
size: 2348,
modtime: 1462980480,
"/schema.go": {
local: "schema.go",
size: 1719,
modtime: 1463675171,
compressed: `
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
hhx9jv4LAAD//6aSebu3BgAA
`,
},
"/spec_test.go": {
local: "spec_test.go",
size: 4209,
modtime: 1463675171,
compressed: `
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
ppaZyd9DMuLC/K8AAAD//0k/ScFxEAAA
`,
},
"/validator.go": {
local: "validator.go",
size: 1894,
modtime: 1463675171,
compressed: `
H4sIAAAJbogA/4xU0W7bNhR9tr7iTkABCdOkrA97yJAHL00wb4EDRGmDoigGWr6SuUikRlJ2jKH/vkNK
ju12Dw0C2xLvPfecw0MWBV3rfm9ks3H09uLnX+hxw3Qn1fBCt3pQa+GkVlFR4B+vK1aW14T3bMihct6L
KjSElYw+sLFooLf5BSW+IJ6W4vRXD7HXA3ViT0o7GiwDQ1qqZcvELxX3jqSiSnd9K4WqmHbSbcKcCSX3
GB8nDL1yAuUCDT2e6tNCEm4i7f82zvWXRbHb7XIRCOfaNEU7ltribnF9syxvfgLpqem9atlaMvzPIA0E
r/YkepCqxApUW7EjbUg0hrHmtCe9M9JJ1WRkde12wrCHWUvrjFwN7syzA0UoPy2Aa0JRPC9pUcb027xc
lJkHeVo8/n7//pGe5g8P8+Xj4qak+we6vl++Wzwu7pd4uqX58iP9uVi+y4jhGObwS2+8AtCU3k1eB+tK
5jMKtR4p2Z4rWcsK0lQziIap0Vs2CoqoZ9NJ63fVguDaw7Syky4kw36rK48iePzsQSys7kQUgYI2jpJo
Ftedi/El9fhZSD042cYRnhpQH1Y5tr/on5uCjdHGxucLLyz7YdgWjf7bYnrAj6M08qw+iFYir5C0M6IH
Wep4LQW5fQ8q8Bli5JqVg1I2vgNygj3c4a2l7Qjg8ysaRMs6YPxR3i8nIXkUoI5zRtDT4ei98byRSeXT
CRZtG9wZ5eCncLRBmFhhz9dDYHUcfD7iFQ2DhsrRv9EMz5Y+fQ5o0ZcoqgdVUfJNR0rhK0kPwtFq2A1G
EXYgL3u8dHUSv9nGyEzuUVMPd1TCB1ZsA/9GblnhRAi/3Qd7QnaCN4fz563voexofT5x3B6NS1+HJNZU
JHX+EHDT0SVPdjXUmX+iyysaMxJq5m3rW9JoJuuw/MMVKdn6joO+0ej8CUQS/M4oHlQ4tjionj7uDiVr
ti4GCiTPbOuHnCYqX/LugWs2jEvoTntqt7ijyr113CWxv69wnRTxj/7c2E/bzxnV8G/W/S9SGXZghEnG
7UggL0VqwdkOrXtVetZ69KjNqGu/U3M9iZ625Y29pKP+w5YePchoO9kA8JHNOBjRORmAeWMV+/yBaSee
OZlymNFFRi2rZOoP0bNJCoUzf8P8ldGabeXbDO4Xpq/qwqAAfEXhZKy9BpuFqIYin1QbjzDpxHdi9lXw
PZRP8yUFCF+K4nCoBvV61hHQw9k9hPNs9TsCenKajhQvz2FGd79E/wUAAP//3Fs/YGYHAAA=
`,
},

View File

@ -1,6 +1,21 @@
// Copyright 2016 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 schema
// Generates an embbedded http.FileSystem for all schema files
// using esc (https://github.com/mjibson/esc).
//go:generate esc -private -o fs.go -pkg=schema -ignore=".*go" .
// This should generally be invoked with `make schema-fs`
//go:generate esc -private -pkg=schema -ignore=".*go" .

View File

@ -1,3 +1,17 @@
// Copyright 2016 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 schema
import "net/http"

View File

@ -1,3 +1,17 @@
// Copyright 2016 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 schema_test
import (

View File

@ -1,3 +1,17 @@
// Copyright 2016 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 schema
import (