4aff857d Merge pull request #109 from pohly/alpha-test-defaults 0427289d Merge pull request #110 from pohly/kind-0.9-bazel-build-workaround 9a370ab9 prow.sh: work around "kind build node-image" failure 522361ec prow.sh: only run alpha tests for latest Kubernetes release 22c0395c Merge pull request #108 from bnrjee/master b5b447b5 Add go ldflags using LDFLAGS at the time of compilation 16f4afbd Merge pull request #107 from pohly/kind-update 7bcee13d prow.sh: update to kind 0.9, support Kubernetes 1.19 df518fbd prow.sh: usage of Bazel optional c3afd427 Merge pull request #104 from xing-yang/snapshot dde93b22 Update to snapshot-controller v3.0.0a0f195cc
Merge pull request #106 from msau42/fix-canary7100c120
Only set staging registry when running canary jobb3c65f9c
Merge pull request #99 from msau42/add-release-processe53f3e85
Merge pull request #103 from msau42/fix-canaryd1294628
Document new method for adding CI jobs are new K8s versionse73c2ce5
Use staging registry for canary tests2c098465
Add cleanup instructions to release-notes generation60e1cd3d
Merge pull request #98 from pohly/kubernetes-1-19-fixes0979c091
prow.sh: fix E2E suite for Kubernetes >= 1.183b4a2f1d
prow.sh: fix installing Go for Kubernetes 1.19.01fbb636c
Merge pull request #97 from pohly/go-1.1582d108ac
switch to Go 1.15d8a25300
Merge pull request #95 from msau42/add-release-process843bddca
Add steps on promoting release images0345a835
Merge pull request #94 from linux-on-ibm-z/bump-timeout1fdf2d53
cloud build: bump timeout in Prow job41ec6d15
Merge pull request #93 from animeshk08/patch-15a54e67d
filter-junit: Fix gofmt error0676fcbd
Merge pull request #92 from animeshk08/patch-136ea4ffa
filter-junit: Fix golint errorf5a42037
Merge pull request #91 from cyb70289/arm6443e50d6f
prow.sh: enable building arm64 image0d5bd843
Merge pull request #90 from pohly/k8s-staging-sig-storage3df86b7d
cloud build: k8s-staging-sig-storagec5fd9610
Merge pull request #89 from pohly/cloud-build-binfmtdb0c2a7d
cloud build: initialize support for running commands in Dockerfilebe902f40
Merge pull request #88 from pohly/multiarch-windows-fix340e082f
build.make: optional inclusion of Windows in multiarch images5231f05d
build.make: properly declare push-multiarch4569f27a
build.make: fix push-multiarch ambiguity17dde9ef
Merge pull request #87 from pohly/cloud-buildbd416901
cloud build: initial set of shared files9084fecb
Merge pull request #81 from msau42/add-release-process6f2322e8
Update patch release notes generation command0fcc3b1b
Merge pull request #78 from ggriffiths/fix_csi_snapshotter_rbac_version_setd8c76fee
Support local snapshot RBAC for pull jobsc1bdf5bf
Merge pull request #80 from msau42/add-release-processea1f94aa
update release tools instructions152396e2
Merge pull request #77 from ggriffiths/snapshotter201_update7edc1461
Update snapshotter to version 2.0.14cf843f6
Merge pull request #76 from pohly/build-targets3863a0f6
build for multiple platforms only in CI, add s390x8322a7d0
Merge pull request #72 from pohly/hostpath-update7c5a89c8
prow.sh: use 1.3.0 hostpath driver for testingb8587b2b
Merge pull request #71 from wozniakjan/test-vetfdb32183
Change 'make test-vet' to call 'go vet'd717c8c4
Merge pull request #69 from pohly/test-driver-configa1432bc9
Merge pull request #70 from pohly/kubelet-feature-gates5f74333a
prow.sh: also configure feature gates for kubelet84f78b12
prow.sh: generic driver installation3c34b4f2
Merge pull request #67 from windayski/fix-linkfa90abd0
fix incorrect linkff3cc3f1
Merge pull request #54 from msau42/add-release-processac8a0212
Document the process for releasing a new sidecar23be6525
Merge pull request #65 from msau42/update-hostpath6582f2ff
Update hostpath driver version to get fix for connection-timeout4cc91745
Merge pull request #64 from ggriffiths/snapshotter_2_version_update8191eab6
Update snapshotter to version v2.0.03c463fb1
Merge pull request #61 from msau42/enable-snapshots8b0316c7
Fix overriding of junit results by using unique names for each e2e run5f444b80
Merge pull request #60 from saad-ali/updateHostpathVersionaf9549b5
Update prow hostpath driver version to 1.3.0-rc2f6c74b30
Merge pull request #57 from ggriffiths/version_gt_kubernetes_fixfc809759
Fix version_gt to work with kubernetes prefix9f1f3dd8
Merge pull request #56 from msau42/enable-snapshotsb98b2aed
Enable snapshot tests in 1.17 to be run in non-alpha jobs.9ace0204
Merge pull request #52 from msau42/update-readme540599ba
Merge pull request #53 from msau42/fix-makea4e62996
fix syntax for ppc64le build771ca6f2
Merge pull request #49 from ggriffiths/prowsh_improve_version_gtd7c69d2f
Merge pull request #51 from msau42/enable-multinode4ad69492
Improve snapshot pod running checks and improve version_gt53888ae7
Improve README by adding an explicit Kubernetes dependency section9a7a685e
Create a kind cluster with two worker nodes so that the topology feature can be tested. Test cases that test accessing volumes from multiple nodes need to be skipped4ff2f5f0
Merge pull request #50 from darkowlzz/kind-0.6.080bba1fe
Use kind v0.6.06d674a7f
Merge pull request #47 from Pensu/multi-arch8adde494
Merge pull request #45 from ggriffiths/snapshot_beta_crds003c14b2
Add snapshotter CRDs after cluster setupa41f3860
Merge pull request #46 from mucahitkurt/kind-cluster-cleanup1eaaaa1c
Delete kind cluster after tests run.83a4ef15
Adding build for ppc64le4fcafece
Merge pull request #43 from pohly/system-pod-loggingf41c1351
prow.sh: also log output of system containersee22a9ca
Merge pull request #42 from pohly/use-vendor-dir80678456
travis.yml: also use vendor directory23df4aef
prow.sh: use vendor directory if availablea53bd4c4
Merge pull request #41 from pohly/go-versionc8a1c4af
better handling of Go version5e773d2d
update CI to use Go 1.13.3f419d745
Merge pull request #40 from msau42/add-1.16e0fde8c4
Add new variables for 1.16 and remove 1.13adf00fea
Merge pull request #36 from msau42/full-clonef1697d2c
Do full git clones in travis. Shallow clones are causing test-subtree errors when the depth is exactly 50.2c819198
Merge pull request #34 from pohly/go-mod-tidy518d6af6
Merge pull request #35 from ddebroy/winbld22d6b3ce8
Build Windows only for amd64c1078a65
go-get-kubernetes.sh: automate Kubernetes dependency handling194289aa
update Go mod support0affdf95
Merge pull request #33 from gnufied/enable-hostpath-expansion6208f6ab
Enable hostpath expansion6ecaa76e
Merge pull request #30 from msau42/fix-windowsea2f1b52
build windows binaries with .exe suffix2d335506
Merge pull request #29 from mucahitkurt/create-2-node-kind-clustera8ea8bcc
create 2-node kind cluster since topology support is added to hostpath driverdf8530d9
Merge pull request #27 from pohly/dep-vendor-check35ceaedc
prow.sh: install dep if neededf85ab5af
Merge pull request #26 from ddebroy/windows19fba09b4
Add rule for building Windows binaries04008676
Merge pull request #25 from msau42/fix-master-jobsdc0a5d83
Update kind to v0.5.0aa85b82c
Merge pull request #23 from msau42/fix-master-jobsf46191d9
Kubernetes master changed the way that releases are tagged, which needed changes to kind. There are 3 changes made to prow.sh:1cac3af3
Merge pull request #22 from msau42/add-1.15-jobs0c0dc300
prow.sh: tag master images with a large version numberf4f73cef
Merge pull request #21 from msau42/add-1.15-jobs4e31f078
Change default hostpath driver name to hostpath.csi.k8s.io4b6fa4a0
Update hostpath version for sidecar testing to v1.2.0-rc2ecc79187
Update kind to v0.4.0. This requires overriding Kubernetes versions with specific patch versions that kind 0.4.0 supports. Also, feature gate setting is only supported on 1.15+ due to kind.sigs.k8s.io/v1alpha3 and kubeadm.k8s.io/v1beta2 dependencies.a6f21d40
Add variables for 1.15db8abb6e
Merge pull request #20 from pohly/test-driver-configb2f4e051
prow.sh: flexible test driver config03999882
Merge pull request #19 from pohly/go-mod-vendor066143d1
build.make: allow repos to use 'go mod' for vendoring0bee7493
Merge pull request #18 from pohly/go-versione157b6b5
update to Go 1.12.488dc9a47
Merge pull request #17 from pohly/prow0fafc663
prow.sh: skip sanity testing if component doesn't support itbcac1c1f
Merge pull request #16 from pohly/prow0b10f6a4
prow.sh: update csi-driver-host-path0c2677e8
Merge pull request #15 from pengzhisun/masterff9bce4a
Replace 'return' to 'exit' to fix shellcheck errorc60f3823
Merge pull request #14 from pohly/prow7aaac225
prow.sh: remove AllAlpha=all, part II66177736
Merge pull request #13 from pohly/prowcda2fc58
prow.sh: avoid AllAlpha=true546d5504
prow.sh: debug failing KinD cluster creation9b0d9cd7
build.make: skip shellcheck if Docker is not availableaa45a1cd
prow.sh: more efficient execution of individual testsf3d1d2df
prow.sh: fix hostpath driver version check31dfaf31
prow.sh: fix running of just "alpha" testsf5014439
prow.sh: AllAlpha=true for unknown Kubernetes versions95ae9de9
Merge pull request #9 from pohly/prowd87eccb4
prow.sh: switch back to upstream csi-driver-host-path6602d38b
prow.sh: different E2E suite depending on Kubernetes version741319bd
prow.sh: improve building Kubernetes from source29545bb0
prow.sh: take Go version from Kubernetes source429581c5
prow.sh: pull Go version from travis.yml0a0fd49b
prow.sh: comment clarification2069a0af
Merge pull request #11 from pohly/verify-shellcheck55212ff2
initial Prow test job6c7ba1be
build.make: integrate shellcheck into "make test"b2d25d4f
verify-shellcheck.sh: make it usable in csi-release-tools3b6af7b1
Merge pull request #12 from pohly/local-e2e-suite104a1ac9
build.make: avoid unit-testing E2E test suite34010e75
Merge pull request #10 from pohly/vendor-checke6db50df
check vendor directoryfb13c519
verify-shellcheck.sh: import from Kubernetes94fc1e31
build.make: avoid unit-testing E2E test suite849db0ad
Merge pull request #8 from pohly/subtree-check-relaxcc564f92
verify-subtree.sh: relax check and ignore old content33d58fdc
Merge pull request #5 from pohly/test-enhancementsbe8a4400
Merge pull request #4 from pohly/canary-fixb0336b55
build.make: more readable "make test" output09436b9f
build.make: fix pushing of "canary" image from master branch147892c9
build.make: support suppressing checks154e33d4
build.make: clarify usage of "make V=1" git-subtree-dir: release-tools git-subtree-split: 4aff857d88149e07951fcd1322f462f765401a86
csi-release-tools
These build and test rules can be shared between different Go projects without modifications. Customization for the different projects happen in the top-level Makefile.
The rules include support for building and pushing Docker images, with the following features:
- one or more command and image per project
- push canary and/or tagged release images
- automatically derive the image tag(s) from repo tags
- the source code revision is stored in a "revision" image label
- never overwrites an existing release image
Usage
The expected repository layout is:
cmd/*/*.go
- source code for each commandcmd/*/Dockerfile
- docker file for each command or Dockerfile in the root when only building a single commandMakefile
- includesrelease-tools/build.make
and sets configuration variables.travis.yml
- a symlink torelease-tools/.travis.yml
To create a release, tag a certain revision with a name that
starts with v
, for example v1.0.0
, then make push
while that commit is checked out.
It does not matter on which branch that revision exists, i.e. it is possible to create releases directly from master. A release branch can still be created for maintenance releases later if needed.
Release branches are expected to be named release-x.y
for releases
x.y.z
. Building from such a branch creates x.y-canary
images. Building from master creates the main canary
image.
Sharing and updating
git subtree
is the recommended way of maintaining a copy of the rules inside the
release-tools
directory of a project. This way, it is possible to make
changes also locally, test them and then push them back to the shared
repository at a later time.
Cheat sheet:
git subtree add --prefix=release-tools https://github.com/kubernetes-csi/csi-release-tools.git master
- add release tools to a repo which does not have them yet (only once)git subtree pull --prefix=release-tools https://github.com/kubernetes-csi/csi-release-tools.git master
- update local copy to latest upstream (whenever upstream changes)- edit,
git commit
,git subtree push --prefix=release-tools git@github.com:<user>/csi-release-tools.git <my-new-or-existing-branch>
- push to a new branch before submitting a PR
verify-shellcheck.sh
The verify-shellcheck.sh script in this repo
is a stripped down copy of the corresponding
script
in the Kubernetes repository. It can be used to check for certain
errors shell scripts, like missing quotation marks. The default
test-shellcheck
target in build.make only checks the
scripts in this directory. Components can add more directories to
TEST_SHELLCHECK_DIRS
to check also other scripts.
End-to-end testing
A repo that wants to opt into testing via Prow must set up a top-level
.prow.sh
. Typically that will source prow.sh
and then transfer
control to it:
#! /bin/bash -e
. release-tools/prow.sh
main
All Kubernetes-CSI repos are expected to switch to Prow. For details on what is enabled in Prow, see https://github.com/kubernetes/test-infra/tree/master/config/jobs/kubernetes-csi
Test results for periodic jobs are visible in https://testgrid.k8s.io/sig-storage-csi-ci
It is possible to reproduce the Prow testing locally on a suitable machine:
- Linux host
- Docker installed
- code to be tested checkout out in
$GOPATH/src/<import path>
cd $GOPATH/src/<import path> && ./.prow.sh
Beware that the script intentionally doesn't clean up after itself and
modifies the content of $GOPATH
, in particular the kubernetes
and
kind
repositories there. Better run it in an empty, disposable
$GOPATH
.
When it terminates, the following command can be used to get access to the Kubernetes cluster that was brought up for testing (assuming that this step succeeded):
export KUBECONFIG="$(kind get kubeconfig-path --name="csi-prow")"
It is possible to control the execution via environment variables. See
prow.sh
for details. Particularly useful is testing against different
Kubernetes releases:
CSI_PROW_KUBERNETES_VERSION=1.13.3 ./.prow.sh
CSI_PROW_KUBERNETES_VERSION=latest ./.prow.sh
Dependencies and vendoring
Most projects will (eventually) use go mod
to manage
dependencies. dep
is also still supported by csi-release-tools
,
but not documented here because it's not recommended anymore.
The usual instructions for using go modules apply. Here's a cheat sheet for some of the relevant commands:
- list available updates:
GO111MODULE=on go list -u -m all
- update or add a single dependency:
GO111MODULE=on go get <package>
- update all dependencies to their next minor or patch release:
GO111MODULE=on go get ./...
(add-u=patch
to limit to patch releases) - lock onto a specific version:
GO111MODULE=on go get <package>@<version>
- clean up
go.mod
:GO111MODULE=on go mod tidy
- update vendor directory:
GO111MODULE=on go mod vendor
GO111MODULE=on
can be left out when using Go >= 1.13 or when the
source is checked out outside of $GOPATH
.
go mod tidy
must be used to ensure that the listed dependencies are
really still needed. Changing import statements or a tentative go get
can result in stale dependencies.
The test-vendor
verifies that it was used when run locally or in a
pre-merge CI job. If a vendor
directory is present, it will also
verify that it's content is up-to-date.
The vendor
directory is optional. It is still present in projects
because it avoids downloading sources during CI builds. If this is no
longer deemed necessary, then a project can also remove the directory.
Conversion of a repository that uses dep
to go mod
can be done with:
GO111MODULE=on go mod init
release-tools/go-get-kubernetes.sh <current Kubernetes version from Gopkg.toml>
GO111MODULE=on go mod tidy
GO111MODULE=on go mod vendor
git rm -f Gopkg.toml Gopkg.lock
git add go.mod go.sum vendor
Updating Kubernetes dependencies
When using packages that are part of the Kubernetes source code, the
commands above are not enough because the lack of semantic
versioning
prevents go mod
from finding newer releases. Importing directly from
kubernetes/kubernetes
also needs replace
statements to override
the fake v0.0.0
versions
(https://github.com/kubernetes/kubernetes/issues/79384). The
go-get-kubernetes.sh
script can be used to update all packages in
lockstep to a different Kubernetes version. Example usage:
$ ./release-tools/go-get-kubernetes.sh 1.16.4