removing unused repo-infra files; updating README.md
Signed-off-by: Mike Brown <brownwm@us.ibm.com>
This commit is contained in:
parent
f9e02affcc
commit
8243c1feb7
@ -1,17 +0,0 @@
|
|||||||
language: go
|
|
||||||
|
|
||||||
go:
|
|
||||||
- master
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- go get -u github.com/alecthomas/gometalinter
|
|
||||||
|
|
||||||
install:
|
|
||||||
- gometalinter --install
|
|
||||||
|
|
||||||
build:
|
|
||||||
- true
|
|
||||||
|
|
||||||
script:
|
|
||||||
- verify/verify-boilerplate.sh --rootdir="${TRAVIS_BUILD_DIR}" -v
|
|
||||||
- verify/verify-go-src.sh --rootdir "${TRAVIS_BUILD_DIR}" -v
|
|
@ -1,61 +1,3 @@
|
|||||||
# Kubernetes repository infrastructure
|
# Kubernetes repository infrastructure
|
||||||
|
|
||||||
This repository contains repository infrastructure tools for use in
|
This is a subtree pulled from githu.com/kubernetes/repo-infra
|
||||||
`kubernetes` and `kubernetes-incubator` repositories. Examples:
|
|
||||||
|
|
||||||
- Boilerplate verification
|
|
||||||
- Go source code quality verification
|
|
||||||
- Golang build infrastructure
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Using this repository
|
|
||||||
|
|
||||||
This repository can be used via some golang "vendoring" mechanism
|
|
||||||
(such as glide), or it can be used via
|
|
||||||
[git subtree](http://git.kernel.org/cgit/git/git.git/plain/contrib/subtree/git-subtree.txt).
|
|
||||||
|
|
||||||
### Using "vendoring"
|
|
||||||
|
|
||||||
The exact mechanism to pull in this repository will vary depending on
|
|
||||||
the tool you use. However, unless you end up having this repository
|
|
||||||
at the root of your project's repository you wll probably need to
|
|
||||||
make sure you use the `--rootdir` command line parameter to let the
|
|
||||||
`verify-boilerplate.sh` know its location, eg:
|
|
||||||
|
|
||||||
verify-boilerplate.sh --rootdir=/home/myrepo
|
|
||||||
|
|
||||||
### Using `git subtree`
|
|
||||||
|
|
||||||
When using the git subtree mechanism, this repository should be placed in the
|
|
||||||
top level of your project.
|
|
||||||
|
|
||||||
To add `repo-infra` to your repository, use the following commands from the
|
|
||||||
root directory of **your** repository.
|
|
||||||
|
|
||||||
First, add a git remote for the `repo-infra` repository:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ git remote add repo-infra git://github.com/kubernetes/repo-infra
|
|
||||||
```
|
|
||||||
|
|
||||||
This is not strictly necessary, but reduces the typing required for subsequent
|
|
||||||
commands.
|
|
||||||
|
|
||||||
Next, use `git subtree add` to create a new subtree in the `repo-infra`
|
|
||||||
directory within your project:
|
|
||||||
|
|
||||||
```
|
|
||||||
$ git subtree add -P repo-infra repo-infra master --squash
|
|
||||||
```
|
|
||||||
|
|
||||||
After this command, you will have:
|
|
||||||
|
|
||||||
1. A `repo-infra` directory in your project containing the content of **this**
|
|
||||||
project
|
|
||||||
2. 2 new commits in the active branch:
|
|
||||||
1. A commit that squashes the git history of the `repo-infra` project
|
|
||||||
2. A merge commit whose ancestors are:
|
|
||||||
1. The `HEAD` of the branch prior to when you ran `git subtree add`
|
|
||||||
2. The commit containing the squashed `repo-infra` commits
|
|
||||||
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
workspace(name = "io_kubernetes_build")
|
|
@ -1,8 +0,0 @@
|
|||||||
package(default_visibility = ["//visibility:public"])
|
|
||||||
|
|
||||||
py_binary(
|
|
||||||
name = "gcs_uploader",
|
|
||||||
srcs = [
|
|
||||||
"gcs_uploader.py",
|
|
||||||
],
|
|
||||||
)
|
|
@ -1,119 +0,0 @@
|
|||||||
def _gcs_upload_impl(ctx):
|
|
||||||
output_lines = []
|
|
||||||
for t in ctx.attr.data:
|
|
||||||
label = str(t.label)
|
|
||||||
upload_path=ctx.attr.upload_paths.get(label, "")
|
|
||||||
for f in t.files:
|
|
||||||
output_lines.append("%s\t%s" % (f.short_path, upload_path))
|
|
||||||
|
|
||||||
ctx.file_action(
|
|
||||||
output = ctx.outputs.targets,
|
|
||||||
content = "\n".join(output_lines),
|
|
||||||
)
|
|
||||||
|
|
||||||
ctx.file_action(
|
|
||||||
content = "%s --manifest %s --root $PWD -- $@" % (
|
|
||||||
ctx.attr.uploader.files_to_run.executable.short_path,
|
|
||||||
ctx.outputs.targets.short_path,
|
|
||||||
),
|
|
||||||
output = ctx.outputs.executable,
|
|
||||||
executable = True,
|
|
||||||
)
|
|
||||||
|
|
||||||
return struct(
|
|
||||||
runfiles = ctx.runfiles(
|
|
||||||
files = ctx.files.data + ctx.files.uploader +
|
|
||||||
[ctx.info_file, ctx.version_file, ctx.outputs.targets]
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
# Adds an executable rule to upload the specified artifacts to GCS.
|
|
||||||
#
|
|
||||||
# The keys in upload_paths must match the elaborated targets exactly; i.e.,
|
|
||||||
# one must specify "//foo/bar:bar" and not just "//foo/bar".
|
|
||||||
#
|
|
||||||
# Both the upload_paths and the path supplied on the commandline can include
|
|
||||||
# Python format strings which will be replaced by values from the workspace status,
|
|
||||||
# e.g. gs://my-bucket-{BUILD_USER}/stash/{STABLE_BUILD_SCM_REVISION}
|
|
||||||
gcs_upload = rule(
|
|
||||||
attrs = {
|
|
||||||
"data": attr.label_list(
|
|
||||||
mandatory = True,
|
|
||||||
allow_files = True,
|
|
||||||
),
|
|
||||||
"uploader": attr.label(
|
|
||||||
default = Label("//defs:gcs_uploader"),
|
|
||||||
allow_files = True,
|
|
||||||
),
|
|
||||||
# TODO: combine with 'data' when label_keyed_string_dict is supported in Bazel
|
|
||||||
"upload_paths": attr.string_dict(
|
|
||||||
allow_empty = True,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
executable = True,
|
|
||||||
outputs = {
|
|
||||||
"targets": "%{name}-targets.txt",
|
|
||||||
},
|
|
||||||
implementation = _gcs_upload_impl,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Computes the md5sum of the provided src file, saving it in a file named 'name'.
|
|
||||||
def md5sum(name, src, visibility=None):
|
|
||||||
native.genrule(
|
|
||||||
name = name + "_genmd5sum",
|
|
||||||
srcs = [src],
|
|
||||||
outs = [name],
|
|
||||||
# Currently each go_binary target has two outputs (the binary and the library),
|
|
||||||
# so we hash both but only save the hash for the binary.
|
|
||||||
cmd = "for f in $(SRCS); do if command -v md5 >/dev/null; then md5 -q $$f>$@; else md5sum $$f | awk '{print $$1}' > $@; fi; done",
|
|
||||||
message = "Computing md5sum",
|
|
||||||
visibility = visibility,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Computes the sha1sum of the provided src file, saving it in a file named 'name'.
|
|
||||||
def sha1sum(name, src, visibility=None):
|
|
||||||
native.genrule(
|
|
||||||
name = name + "_gensha1sum",
|
|
||||||
srcs = [src],
|
|
||||||
outs = [name],
|
|
||||||
# Currently each go_binary target has two outputs (the binary and the library),
|
|
||||||
# so we hash both but only save the hash for the binary.
|
|
||||||
cmd = "command -v sha1sum >/dev/null && cmd=sha1sum || cmd='shasum -a1'; for f in $(SRCS); do $$cmd $$f | awk '{print $$1}' > $@; done",
|
|
||||||
message = "Computing sha1sum",
|
|
||||||
visibility = visibility,
|
|
||||||
)
|
|
||||||
|
|
||||||
# Creates 3+N rules based on the provided targets:
|
|
||||||
# * A filegroup with just the provided targets (named 'name')
|
|
||||||
# * A filegroup containing all of the md5 and sha1 hash files ('name-hashes')
|
|
||||||
# * A filegroup containing both of the above ('name-and-hashes')
|
|
||||||
# * All of the necessary md5sum and sha1sum rules
|
|
||||||
def release_filegroup(name, srcs, visibility=None):
|
|
||||||
hashes = []
|
|
||||||
for src in srcs:
|
|
||||||
parts = src.split(":")
|
|
||||||
if len(parts) > 1:
|
|
||||||
basename = parts[1]
|
|
||||||
else:
|
|
||||||
basename = src.split("/")[-1]
|
|
||||||
|
|
||||||
md5sum(name=basename + ".md5", src=src, visibility=visibility)
|
|
||||||
hashes.append(basename + ".md5")
|
|
||||||
sha1sum(name=basename + ".sha1", src=src, visibility=visibility)
|
|
||||||
hashes.append(basename + ".sha1")
|
|
||||||
|
|
||||||
native.filegroup(
|
|
||||||
name = name,
|
|
||||||
srcs = srcs,
|
|
||||||
visibility = visibility,
|
|
||||||
)
|
|
||||||
native.filegroup(
|
|
||||||
name = name + "-hashes",
|
|
||||||
srcs = hashes,
|
|
||||||
visibility = visibility,
|
|
||||||
)
|
|
||||||
native.filegroup(
|
|
||||||
name = name + "-and-hashes",
|
|
||||||
srcs = [name, name + "-hashes"],
|
|
||||||
visibility = visibility,
|
|
||||||
)
|
|
@ -1,34 +0,0 @@
|
|||||||
load("@bazel_tools//tools/build_defs/pkg:pkg.bzl", "pkg_tar", "pkg_deb")
|
|
||||||
|
|
||||||
KUBERNETES_AUTHORS = "Kubernetes Authors <kubernetes-dev+release@googlegroups.com>"
|
|
||||||
|
|
||||||
KUBERNETES_HOMEPAGE = "http://kubernetes.io"
|
|
||||||
|
|
||||||
def k8s_deb(name, depends = [], description = ""):
|
|
||||||
pkg_deb(
|
|
||||||
name = name,
|
|
||||||
architecture = "amd64",
|
|
||||||
data = name + "-data",
|
|
||||||
depends = depends,
|
|
||||||
description = description,
|
|
||||||
homepage = KUBERNETES_HOMEPAGE,
|
|
||||||
maintainer = KUBERNETES_AUTHORS,
|
|
||||||
package = name,
|
|
||||||
version = "1.6.0-alpha",
|
|
||||||
)
|
|
||||||
|
|
||||||
def deb_data(name, data = []):
|
|
||||||
deps = []
|
|
||||||
for i, info in enumerate(data):
|
|
||||||
dname = "%s-deb-data-%s" % (name, i)
|
|
||||||
deps += [dname]
|
|
||||||
pkg_tar(
|
|
||||||
name = dname,
|
|
||||||
files = info["files"],
|
|
||||||
mode = info["mode"],
|
|
||||||
package_dir = info["dir"],
|
|
||||||
)
|
|
||||||
pkg_tar(
|
|
||||||
name = name + "-data",
|
|
||||||
deps = deps,
|
|
||||||
)
|
|
@ -1,71 +0,0 @@
|
|||||||
#!/usr/bin/env python
|
|
||||||
|
|
||||||
# Copyright 2016 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import atexit
|
|
||||||
import os
|
|
||||||
import os.path
|
|
||||||
import shutil
|
|
||||||
import subprocess
|
|
||||||
import sys
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
def _workspace_status_dict(root):
|
|
||||||
d = {}
|
|
||||||
for f in ("stable-status.txt", "volatile-status.txt"):
|
|
||||||
with open(os.path.join(root, f)) as info_file:
|
|
||||||
for info_line in info_file:
|
|
||||||
info_line = info_line.strip("\n")
|
|
||||||
key, value = info_line.split(" ")
|
|
||||||
d[key] = value
|
|
||||||
return d
|
|
||||||
|
|
||||||
def main(argv):
|
|
||||||
scratch = tempfile.mkdtemp(prefix="bazel-gcs.")
|
|
||||||
atexit.register(lambda: shutil.rmtree(scratch))
|
|
||||||
|
|
||||||
workspace_status = _workspace_status_dict(argv.root)
|
|
||||||
gcs_path = argv.gcs_path.format(**workspace_status)
|
|
||||||
|
|
||||||
with open(argv.manifest) as manifest:
|
|
||||||
for artifact in manifest:
|
|
||||||
artifact = artifact.strip("\n")
|
|
||||||
src_file, dest_dir = artifact.split("\t")
|
|
||||||
dest_dir = dest_dir.format(**workspace_status)
|
|
||||||
scratch_dest_dir = os.path.join(scratch, dest_dir)
|
|
||||||
try:
|
|
||||||
os.makedirs(scratch_dest_dir)
|
|
||||||
except (OSError):
|
|
||||||
# skip directory already exists errors
|
|
||||||
pass
|
|
||||||
|
|
||||||
src = os.path.join(argv.root, src_file)
|
|
||||||
dest = os.path.join(scratch_dest_dir, os.path.basename(src_file))
|
|
||||||
os.symlink(src, dest)
|
|
||||||
|
|
||||||
ret = subprocess.call(["gsutil", "-m", "rsync", "-C", "-r", scratch, gcs_path])
|
|
||||||
print "Uploaded to %s" % gcs_path
|
|
||||||
sys.exit(ret)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
parser = argparse.ArgumentParser(description='Upload build targets to GCS.')
|
|
||||||
|
|
||||||
parser.add_argument("--manifest", required=True, help="path to manifest of targets")
|
|
||||||
parser.add_argument("--root", required=True, help="path to root of workspace")
|
|
||||||
parser.add_argument("gcs_path", help="path in gcs to push targets")
|
|
||||||
|
|
||||||
main(parser.parse_args())
|
|
@ -1,100 +0,0 @@
|
|||||||
load("@io_bazel_rules_go//go:def.bzl", "go_env_attrs")
|
|
||||||
|
|
||||||
go_filetype = ["*.go"]
|
|
||||||
|
|
||||||
def _compute_genrule_variables(resolved_srcs, resolved_outs):
|
|
||||||
variables = {"SRCS": cmd_helper.join_paths(" ", resolved_srcs),
|
|
||||||
"OUTS": cmd_helper.join_paths(" ", resolved_outs)}
|
|
||||||
if len(resolved_srcs) == 1:
|
|
||||||
variables["<"] = list(resolved_srcs)[0].path
|
|
||||||
if len(resolved_outs) == 1:
|
|
||||||
variables["@"] = list(resolved_outs)[0].path
|
|
||||||
return variables
|
|
||||||
|
|
||||||
def _go_sources_aspect_impl(target, ctx):
|
|
||||||
transitive_sources = set(target.go_sources)
|
|
||||||
for dep in ctx.rule.attr.deps:
|
|
||||||
transitive_sources = transitive_sources | dep.transitive_sources
|
|
||||||
return struct(transitive_sources = transitive_sources)
|
|
||||||
|
|
||||||
go_sources_aspect = aspect(
|
|
||||||
attr_aspects = ["deps"],
|
|
||||||
implementation = _go_sources_aspect_impl,
|
|
||||||
)
|
|
||||||
|
|
||||||
def _compute_genrule_command(ctx):
|
|
||||||
cmd = [
|
|
||||||
'set -e',
|
|
||||||
# setup GOROOT
|
|
||||||
'export GOROOT=$$(pwd)/' + ctx.file.go_tool.dirname + '/..',
|
|
||||||
# setup main GOPATH
|
|
||||||
'export GOPATH=/tmp/gopath',
|
|
||||||
'export GO_WORKSPACE=$${GOPATH}/src/' + ctx.attr.go_prefix.go_prefix,
|
|
||||||
'mkdir -p $${GO_WORKSPACE%/*}',
|
|
||||||
'ln -s $$(pwd) $${GO_WORKSPACE}',
|
|
||||||
# setup genfile GOPATH
|
|
||||||
'export GENGOPATH=/tmp/gengopath',
|
|
||||||
'export GENGO_WORKSPACE=$${GENGOPATH}/src/' + ctx.attr.go_prefix.go_prefix,
|
|
||||||
'mkdir -p $${GENGO_WORKSPACE%/*}',
|
|
||||||
'ln -s $$(pwd)/$(GENDIR) $${GENGO_WORKSPACE}',
|
|
||||||
# drop into WORKSPACE
|
|
||||||
'export GOPATH=$${GOPATH}:$${GENGOPATH}',
|
|
||||||
'cd $${GO_WORKSPACE}',
|
|
||||||
# execute user command
|
|
||||||
ctx.attr.cmd.strip(' \t\n\r'),
|
|
||||||
]
|
|
||||||
return '\n'.join(cmd)
|
|
||||||
|
|
||||||
def _go_genrule_impl(ctx):
|
|
||||||
all_srcs = set(ctx.files.go_src)
|
|
||||||
label_dict = {}
|
|
||||||
|
|
||||||
for dep in ctx.attr.go_deps:
|
|
||||||
all_srcs = all_srcs | dep.transitive_sources
|
|
||||||
|
|
||||||
for dep in ctx.attr.srcs:
|
|
||||||
all_srcs = all_srcs | dep.files
|
|
||||||
label_dict[dep.label] = dep.files
|
|
||||||
|
|
||||||
cmd = _compute_genrule_command(ctx)
|
|
||||||
|
|
||||||
resolved_inputs, argv, runfiles_manifests = ctx.resolve_command(
|
|
||||||
command=cmd,
|
|
||||||
attribute="cmd",
|
|
||||||
expand_locations=True,
|
|
||||||
make_variables=_compute_genrule_variables(all_srcs, set(ctx.outputs.outs)),
|
|
||||||
tools=ctx.attr.tools,
|
|
||||||
label_dict=label_dict
|
|
||||||
)
|
|
||||||
|
|
||||||
ctx.action(
|
|
||||||
inputs = list(all_srcs) + resolved_inputs,
|
|
||||||
outputs = ctx.outputs.outs,
|
|
||||||
env = ctx.configuration.default_shell_env,
|
|
||||||
command = argv,
|
|
||||||
progress_message = "%s %s" % (ctx.attr.message, ctx),
|
|
||||||
mnemonic = "GoGenrule",
|
|
||||||
)
|
|
||||||
|
|
||||||
# We have codegen procedures that depend on the "go/*" stdlib packages
|
|
||||||
# and thus depend on executing with a valid GOROOT and GOPATH containing
|
|
||||||
# some amount transitive go src of dependencies. This go_genrule enables
|
|
||||||
# the creation of these sandboxes.
|
|
||||||
go_genrule = rule(
|
|
||||||
attrs = go_env_attrs + {
|
|
||||||
"srcs": attr.label_list(allow_files = True),
|
|
||||||
"tools": attr.label_list(
|
|
||||||
cfg = "host",
|
|
||||||
allow_files = True,
|
|
||||||
),
|
|
||||||
"outs": attr.output_list(mandatory = True),
|
|
||||||
"cmd": attr.string(mandatory = True),
|
|
||||||
"go_deps": attr.label_list(
|
|
||||||
aspects = [go_sources_aspect],
|
|
||||||
),
|
|
||||||
"message": attr.string(),
|
|
||||||
"executable": attr.bool(default = False),
|
|
||||||
},
|
|
||||||
output_to_genfiles = True,
|
|
||||||
implementation = _go_genrule_impl,
|
|
||||||
)
|
|
@ -4,8 +4,8 @@ Collection of scripts that verifies that a project meets requirements set for ku
|
|||||||
|
|
||||||
The scripts are currently being migrated from the main kubernetes repository. If your project requires additional set of verifications, consider creating an issue/PR on repo-infra to avoid code duplication across multiple projects.
|
The scripts are currently being migrated from the main kubernetes repository. If your project requires additional set of verifications, consider creating an issue/PR on repo-infra to avoid code duplication across multiple projects.
|
||||||
|
|
||||||
If repo-infra is integrated at the root of your project as git submodule at path: `/repo-infra`,
|
If repo-infra is integrated at the root of your project as git submodule at path: `hack/repo-infra`,
|
||||||
then scripts can be invoked as `repo-infra/verify/verify-*.sh`
|
then scripts can be invoked as `hack/repo-infra/verify/verify-*.sh`
|
||||||
|
|
||||||
travis.yaml example:
|
travis.yaml example:
|
||||||
|
|
||||||
@ -20,33 +20,10 @@ language: go
|
|||||||
go:
|
go:
|
||||||
- 1.8
|
- 1.8
|
||||||
|
|
||||||
before_install:
|
|
||||||
- go get -u github.com/alecthomas/gometalinter
|
|
||||||
|
|
||||||
install:
|
|
||||||
- gometalinter --install
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- repo-infra/verify/verify-go-src.sh -v
|
- hack/repo-infra/verify/verify-boilerplate.sh
|
||||||
- repo-infra/verify/verify-boilerplate.sh
|
|
||||||
# OR with vendoring
|
|
||||||
# - vendor/github.com/kubernetes/repo-infra/verify-go-src.sh --rootdir=$(pwd) -v
|
|
||||||
```
|
```
|
||||||
|
|
||||||
## Verify boilerplate
|
## Verify boilerplate
|
||||||
|
|
||||||
Verifies that the boilerplate for various formats (go files, Makefile, etc.) is included in each file: `verify-boilerplate.sh`.
|
Verifies that the boilerplate for various formats (go files, Makefile, etc.) is included in each file: `verify-boilerplate.sh`.
|
||||||
|
|
||||||
## Verify go source code
|
|
||||||
|
|
||||||
Runs a set of scripts on the go source code excluding vendored files: `verify-go-src.sh`. Expects `gometalinter` tooling installed (see travis file above)
|
|
||||||
|
|
||||||
With git submodule from your repo root: `repo-infra/verify/verify-go-src.sh -v`
|
|
||||||
|
|
||||||
With vendoring: `vendor/repo-infra/verify/verify-go-src.sh -v --rootdir $(pwd)`
|
|
||||||
|
|
||||||
Checks include:
|
|
||||||
|
|
||||||
1. gofmt
|
|
||||||
2. gometalinter
|
|
||||||
3. govet
|
|
||||||
|
@ -1,34 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Copyright 2017 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
find_files() {
|
|
||||||
find . -not \( \
|
|
||||||
\( \
|
|
||||||
-wholename '*/vendor/*' \
|
|
||||||
\) -prune \
|
|
||||||
\) -name '*.go'
|
|
||||||
}
|
|
||||||
|
|
||||||
GOFMT="gofmt -s"
|
|
||||||
bad_files=$(find_files | xargs $GOFMT -l)
|
|
||||||
if [[ -n "${bad_files}" ]]; then
|
|
||||||
echo "!!! '$GOFMT' needs to be run on the following files: "
|
|
||||||
echo "${bad_files}"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
@ -1,31 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Copyright 2017 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
for d in $(find . -type d -not -iwholename '*.git*' -a -not -iname '.tool' -a -not -iwholename '*vendor*'); do
|
|
||||||
gometalinter --deadline=50s --vendor \
|
|
||||||
--cyclo-over=50 --dupl-threshold=100 \
|
|
||||||
--exclude=".*should not use dot imports \(golint\)$" \
|
|
||||||
--disable-all \
|
|
||||||
--enable=vet \
|
|
||||||
--enable=deadcode \
|
|
||||||
--enable=golint \
|
|
||||||
--enable=vetshadow \
|
|
||||||
--enable=gocyclo \
|
|
||||||
--tests "${d}"
|
|
||||||
done
|
|
@ -1,20 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
# Copyright 2017 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
go vet -v $(go list ./... | grep -v /vendor/)
|
|
@ -1,111 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Copyright 2017 The Kubernetes Authors.
|
|
||||||
#
|
|
||||||
# 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.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
# This script is intended to be used via subtree in a top-level directory:
|
|
||||||
# <repo>/
|
|
||||||
# repo-infra/
|
|
||||||
# verify/
|
|
||||||
# Or via vendoring and passing root directory as vendor/repo-infra/verify-*.sh --rootdir **full path to your repo dir**
|
|
||||||
# <repo>/
|
|
||||||
# vendor/
|
|
||||||
# repo-infra/
|
|
||||||
# ...
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
SILENT=true
|
|
||||||
REPO_ROOT=$(dirname "${BASH_SOURCE}")/../..
|
|
||||||
|
|
||||||
# Convert long opts to short ones to read through getopts
|
|
||||||
for arg in "$@"; do
|
|
||||||
shift
|
|
||||||
case "$arg" in
|
|
||||||
"--rootdir") set -- "$@" "-r";;
|
|
||||||
*)
|
|
||||||
set -- "$@" "$arg"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
OPTIND=1
|
|
||||||
while getopts "vr:" opt; do
|
|
||||||
case ${opt} in
|
|
||||||
v)
|
|
||||||
SILENT=false
|
|
||||||
;;
|
|
||||||
r)
|
|
||||||
REPO_ROOT=${OPTARG}
|
|
||||||
;;
|
|
||||||
\?)
|
|
||||||
echo "Invalid flag: -${OPTARG}" >&2
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
shift "$(($OPTIND-1))"
|
|
||||||
|
|
||||||
echo "Working directory: ${REPO_ROOT}"
|
|
||||||
|
|
||||||
GO_TOOLS_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/go-tools"
|
|
||||||
|
|
||||||
function run-cmd {
|
|
||||||
if ${SILENT}; then
|
|
||||||
"$@" &> /dev/null
|
|
||||||
else
|
|
||||||
"$@"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Some useful colors.
|
|
||||||
if [[ -z "${color_start-}" ]]; then
|
|
||||||
declare -r color_start="\033["
|
|
||||||
declare -r color_red="${color_start}0;31m"
|
|
||||||
declare -r color_yellow="${color_start}0;33m"
|
|
||||||
declare -r color_green="${color_start}0;32m"
|
|
||||||
declare -r color_norm="${color_start}0m"
|
|
||||||
fi
|
|
||||||
|
|
||||||
function run-checks {
|
|
||||||
local -r pattern=$1
|
|
||||||
local -r runner=$2
|
|
||||||
|
|
||||||
for t in $(ls ${pattern})
|
|
||||||
do
|
|
||||||
echo -e "Verifying ${t}"
|
|
||||||
local start=$(date +%s)
|
|
||||||
cd $REPO_ROOT && run-cmd "${runner}" "${t}" && tr=$? || tr=$?
|
|
||||||
local elapsed=$(($(date +%s) - ${start}))
|
|
||||||
if [[ ${tr} -eq 0 ]]; then
|
|
||||||
echo -e "${color_green}SUCCESS${color_norm} ${t}\t${elapsed}s"
|
|
||||||
else
|
|
||||||
echo -e "${color_red}FAILED${color_norm} ${t}\t${elapsed}s"
|
|
||||||
ret=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
if ${SILENT} ; then
|
|
||||||
echo "Running in the silent mode, run with -v if you want to see script logs."
|
|
||||||
fi
|
|
||||||
|
|
||||||
ret=0
|
|
||||||
run-checks "${GO_TOOLS_DIR}/*.sh" bash
|
|
||||||
exit ${ret}
|
|
Loading…
Reference in New Issue
Block a user