mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-11-22 22:30:23 +00:00
ci: add 'make test' target to validate CI job scripts
This merges several files from the master branch into ci/centos so that the scripts, MarkDown and yaml files can be checked. Run 'make' or 'make test' to validate the contents of this branch. Signed-off-by: Niels de Vos <ndevos@redhat.com>
This commit is contained in:
parent
1f751fd07a
commit
65a2794e60
30
.commitlintrc.yml
Normal file
30
.commitlintrc.yml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
# rules are documented at https://commitlint.js.org/#/reference-rules
|
||||
# each rule has a n arry of three values:
|
||||
# - 0, 1, 2 (rule is disabled, warning or error)
|
||||
# - always/never
|
||||
# - value
|
||||
rules:
|
||||
# the subject may not exceed 72 characters
|
||||
header-max-length: [2, always, 72]
|
||||
# the subject may not end with a "."
|
||||
header-full-stop: [2, never, "."]
|
||||
# we do not use scopes for commit messages
|
||||
scope-empty: [1, always]
|
||||
# valid types/prefixes, see docs/development-guide.md
|
||||
type-enum:
|
||||
- 1
|
||||
- always
|
||||
- - build
|
||||
- cephfs
|
||||
- ci
|
||||
- cleanup
|
||||
- deploy
|
||||
- doc
|
||||
- e2e
|
||||
- helm
|
||||
- journal
|
||||
- rbd
|
||||
- rebase
|
||||
- revert
|
||||
- util
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
.test-container-id
|
71
Makefile
Normal file
71
Makefile
Normal file
@ -0,0 +1,71 @@
|
||||
# Copyright 2020 The Ceph-CSI 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.
|
||||
|
||||
CONTAINER_CMD?=$(shell docker version >/dev/null 2>&1 && echo docker)
|
||||
ifeq ($(CONTAINER_CMD),)
|
||||
CONTAINER_CMD=$(shell podman version >/dev/null 2>&1 && echo podman)
|
||||
endif
|
||||
CPUS?=$(shell nproc --ignore=1)
|
||||
CPUSET?=--cpuset-cpus=0-${CPUS}
|
||||
|
||||
CSI_IMAGE_NAME=$(if $(ENV_CSI_IMAGE_NAME),$(ENV_CSI_IMAGE_NAME),quay.io/cephcsi/cephcsi)
|
||||
|
||||
# passing TARGET=static-check on the 'make containerized-test' commandline will
|
||||
# run the selected target instead of 'make test' in the container. Obviously
|
||||
# other targets can be passed as well, making it easier for developers to run
|
||||
# single tests.
|
||||
TARGET ?= lint-all
|
||||
|
||||
# Pass GIT_SINCE for the range of commits to test. Used with the commitlint
|
||||
# target.
|
||||
GIT_SINCE := origin/ci/centos
|
||||
|
||||
SELINUX := $(shell getenforce 2>/dev/null)
|
||||
ifeq ($(SELINUX),Enforcing)
|
||||
SELINUX_VOL_FLAG = :z
|
||||
endif
|
||||
|
||||
.PHONY: test
|
||||
test:
|
||||
$(MAKE) containerized-test TARGET=lint-all
|
||||
$(MAKE) containerized-test TARGET=commitlint
|
||||
|
||||
.PHONY: lint-all lint-shell lint-markdown lint-yaml commitlint
|
||||
lint-all: lint-shell lint-markdown lint-yaml
|
||||
|
||||
lint-shell:
|
||||
./scripts/lint-extras.sh lint-shell
|
||||
|
||||
lint-markdown:
|
||||
./scripts/lint-extras.sh lint-markdown
|
||||
|
||||
lint-yaml:
|
||||
./scripts/lint-extras.sh lint-yaml
|
||||
|
||||
commitlint:
|
||||
commitlint --from $(GIT_SINCE)
|
||||
|
||||
.PHONY: containerized-test
|
||||
containerized-test: .test-container-id
|
||||
$(CONTAINER_CMD) run --rm -v $(PWD):/go/src/github.com/ceph/ceph-csi$(SELINUX_VOL_FLAG) $(CSI_IMAGE_NAME):test make $(TARGET) GIT_SINCE=$(GIT_SINCE)
|
||||
|
||||
# create a (cached) container image with dependencies for testing the CI jobs
|
||||
.test-container-id: scripts/Dockerfile.test
|
||||
[ ! -f .test-container-id ] || $(CONTAINER_CMD) rmi $(CSI_IMAGE_NAME):test
|
||||
$(CONTAINER_CMD) build $(CPUSET) -t $(CSI_IMAGE_NAME):test -f ./scripts/Dockerfile.test .
|
||||
$(CONTAINER_CMD) inspect -f '{{.Id}}' $(CSI_IMAGE_NAME):test > .test-container-id
|
||||
|
||||
clean:
|
||||
[ ! -f .test-container-id ] || $(CONTAINER_CMD) rmi $(CSI_IMAGE_NAME):test
|
||||
$(RM) .test-container-id
|
47
scripts/Dockerfile.test
Normal file
47
scripts/Dockerfile.test
Normal file
@ -0,0 +1,47 @@
|
||||
# Container image for running the Ceph-CSI tests
|
||||
#
|
||||
# This container is based on Fedora so that recent versions of tools can easily
|
||||
# be installed.
|
||||
#
|
||||
# Production containers are based one ceph/ceph:latest, which use CentOS as
|
||||
# Operating System, so generated binaries and versions of dependencies may be a
|
||||
# little different.
|
||||
#
|
||||
|
||||
FROM fedora:latest
|
||||
|
||||
ARG GOLANGCI_VERSION=v1.21.0
|
||||
ARG GOSEC_VERSION=2.0.0
|
||||
ARG GOPATH=/go
|
||||
|
||||
ENV \
|
||||
GOPATH=${GOPATH} \
|
||||
GO111MODULE=on \
|
||||
PATH="${GOPATH}/bin:/opt/commitlint/node_modules/.bin:${PATH}"
|
||||
|
||||
RUN dnf -y install \
|
||||
git \
|
||||
make \
|
||||
golang \
|
||||
gcc \
|
||||
librados-devel \
|
||||
librbd-devel \
|
||||
rubygems \
|
||||
ShellCheck \
|
||||
yamllint \
|
||||
npm \
|
||||
&& dnf -y update \
|
||||
&& dnf -y clean all \
|
||||
&& gem install mdl \
|
||||
&& curl -sf "https://install.goreleaser.com/github.com/golangci/golangci-lint.sh" \
|
||||
| bash -s -- -b ${GOPATH}/bin "${GOLANGCI_VERSION}" \
|
||||
&& curl -sfL "https://raw.githubusercontent.com/securego/gosec/master/install.sh" \
|
||||
| sh -s -- -b $GOPATH/bin "${GOSEC_VERSION}" \
|
||||
&& curl -L https://git.io/get_helm.sh | bash \
|
||||
&& mkdir /opt/commitlint && pushd /opt/commitlint \
|
||||
&& npm init -y \
|
||||
&& npm install @commitlint/cli \
|
||||
&& popd \
|
||||
&& true
|
||||
|
||||
WORKDIR /go/src/github.com/ceph/ceph-csi
|
96
scripts/lint-extras.sh
Executable file
96
scripts/lint-extras.sh
Executable file
@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
# vim: set ts=4 sw=4 et :
|
||||
|
||||
# This script will be used to lint non-go files
|
||||
# Usage: ./scripts/lint-extras.sh <command>
|
||||
# Available commands are [lint-shell lint-yaml lint-markdown lint-helmlint-all ]
|
||||
set -e
|
||||
|
||||
# Run checks from root of the repo
|
||||
scriptdir="$(dirname "$(realpath "$0")")"
|
||||
cd "$scriptdir/.."
|
||||
|
||||
# run_check <file_regex> <checker_exe> [optional args to checker...]
|
||||
# Pass empty regex when no regex is needed
|
||||
function run_check() {
|
||||
local regex="$1"
|
||||
shift
|
||||
local exe="$1"
|
||||
shift
|
||||
|
||||
if [ -x "$(command -v "${exe}")" ]; then
|
||||
if [ -z "${regex}" ]; then
|
||||
"$exe" "$@"
|
||||
else
|
||||
find . -path ./vendor -prune -o -regextype egrep -iregex "$regex" -print0 |
|
||||
xargs -0rt -n1 "$exe" "$@"
|
||||
fi
|
||||
elif [ "$all_required" -eq 0 ]; then
|
||||
echo "Warning: $exe not found... skipping some tests."
|
||||
else
|
||||
echo "FAILED: All checks required, but $exe not found!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
all_required=0
|
||||
|
||||
function lint_markdown() {
|
||||
# markdownlint: https://github.com/markdownlint/markdownlint
|
||||
# https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
|
||||
# Install via: gem install mdl
|
||||
run_check '.*\.md' mdl --style scripts/mdl-style.rb
|
||||
}
|
||||
|
||||
function lint_shell() {
|
||||
# Install via: dnf install shellcheck
|
||||
run_check '.*\.(ba)?sh' shellcheck --external-sources
|
||||
run_check '.*\.(ba)?sh' bash -n
|
||||
}
|
||||
|
||||
function lint_yaml() {
|
||||
# Install via: pip install yamllint
|
||||
# disable yamlint check for helm charts
|
||||
run_check '.*\.ya?ml' yamllint -s -d "{extends: default, rules: {line-length: {allow-non-breakable-inline-mappings: true}},ignore: charts/*/templates/*.yaml}"
|
||||
}
|
||||
|
||||
function lint_helm() {
|
||||
# Install via: https://github.com/helm/helm/blob/master/docs/install.md
|
||||
run_check '' helm lint --namespace=test charts/*
|
||||
}
|
||||
|
||||
function lint_all() {
|
||||
# runs all checks
|
||||
all_required=1
|
||||
lint_shell
|
||||
lint_yaml
|
||||
lint_markdown
|
||||
lint_helm
|
||||
}
|
||||
case "${1:-}" in
|
||||
lint-shell)
|
||||
lint_shell
|
||||
;;
|
||||
lint-yaml)
|
||||
lint_yaml
|
||||
;;
|
||||
lint-markdown)
|
||||
lint_markdown
|
||||
;;
|
||||
lint-helm)
|
||||
lint_helm
|
||||
;;
|
||||
lint-all)
|
||||
lint_all
|
||||
;;
|
||||
*)
|
||||
echo " $0 [command]
|
||||
Available Commands:
|
||||
lint-shell Lint shell files
|
||||
lint-yaml Lint yaml files
|
||||
lint-markdown Lint markdown files
|
||||
lint-helm Lint helm charts
|
||||
lint-all Run lint on all non-go files
|
||||
" >&2
|
||||
;;
|
||||
esac
|
9
scripts/mdl-style.rb
Normal file
9
scripts/mdl-style.rb
Normal file
@ -0,0 +1,9 @@
|
||||
all
|
||||
|
||||
#Refer below url for more information about the markdown rules.
|
||||
#https://github.com/markdownlint/markdownlint/blob/master/docs/RULES.md
|
||||
|
||||
rule 'MD013', :code_blocks => false, :tables => false
|
||||
|
||||
exclude_rule 'MD040' # Fenced code blocks should have a language specified
|
||||
exclude_rule 'MD041' # First line in file should be a top level header
|
Loading…
Reference in New Issue
Block a user