mirror of
https://github.com/kubernetes-csi/csi-driver-nvmf.git
synced 2025-04-27 11:01:15 +00:00
Squashed 'release-tools/' changes from f9d5b9c..98f2307
98f2307 Merge pull request #260 from TerryHowe/update-csi-driver-version e9d8712 Merge pull request #259 from stmcginnis/deprecated-kind-kube-root faf79ff Remove --kube-root deprecated kind argument 734c2b9 Merge pull request #265 from Rakshith-R/consider-main-branch f95c855 Merge pull request #262 from huww98/golang-toolchain 3c8d966 Treat main branch as equivalent to master branch e31de52 Merge pull request #261 from huww98/golang fd153a9 Bump golang to 1.23.1 a8b3d05 pull-test.sh: fix "git subtree pull" errors 6b05f0f use new GOTOOLCHAIN env to manage go version 18b6ac6 chore: update CSI driver version to 1.15 227577e Merge pull request #258 from gnufied/enable-race-detection e1ceee2 Always enable race detection while running tests 988496a Merge pull request #257 from jakobmoellerdev/csi-prow-sidecar-e2e-path 028f8c6 chore: bump to Go 1.22.5 69bd71e chore: add CSI_PROW_SIDECAR_E2E_PATH f40f0cc Merge pull request #256 from solumath/master cfa9210 Instruction update 379a1bb Merge pull request #255 from humblec/sidecar-md a5667bb fix typo in sidecar release process 4967685 Merge pull request #254 from bells17/add-github-actions d9bd160 Update skip list in codespell GitHub Action adb3af9 Merge pull request #252 from bells17/update-go-version f5aebfc Add GitHub Actions workflows b82ee38 Merge pull request #253 from bells17/fix-typo c317456 Fix typo 0a78505 Bump to Go 1.22.3 edd89ad Merge pull request #251 from jsafrane/add-logcheck 043fd09 Add test-logcheck target d7535ae Merge pull request #250 from jsafrane/go-1.22 b52e7ad Update go to 1.22.2 14fdb6f Merge pull request #247 from msau42/prow dc4d0ae Merge pull request #249 from jsafrane/use-go-version e681b17 Use .go-version to get Kubernetes go version 9b4352e Update release playbook c7bb972 Fix release notes script to use fixed tags 463a0e9 Add script to update specific go modules b54c1ba Merge pull request #246 from xing-yang/go_1.21 5436c81 Change go version to 1.21.5 267b40e Merge pull request #244 from carlory/sig-storage b42e5a2 nominate self (carlory) as kubernetes-csi reviewer a17f536 Merge pull request #210 from sunnylovestiramisu/sidecar 011033d Use set -x instead of die 5deaf66 Add wrapper script for sidecar release f8c8cc4 Merge pull request #237 from msau42/prow b36b5bf Merge pull request #240 from dannawang0221/upgrade-go-version adfddcc Merge pull request #243 from pohly/git-subtree-pull-fix c465088 pull-test.sh: avoid "git subtree pull" error 7b175a1 Update csi-test version to v5.2.0 987c90c Update go version to 1.21 to match k/k 2c625d4 Add script to generate patch release notes git-subtree-dir: release-tools git-subtree-split: 98f23071d946dd3de3188a7e1f84679067003162
This commit is contained in:
parent
4199ec0739
commit
1fbad65d7f
12
.github/dependabot.yaml
vendored
Normal file
12
.github/dependabot.yaml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
version: 2
|
||||
enable-beta-ecosystems: true
|
||||
updates:
|
||||
- package-ecosystem: "github-actions"
|
||||
directory: "/"
|
||||
schedule:
|
||||
interval: "daily"
|
||||
labels:
|
||||
- "area/dependency"
|
||||
- "release-note-none"
|
||||
- "ok-to-test"
|
||||
open-pull-requests-limit: 10
|
15
.github/workflows/codespell.yml
vendored
Normal file
15
.github/workflows/codespell.yml
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
# GitHub Action to automate the identification of common misspellings in text files.
|
||||
# https://github.com/codespell-project/actions-codespell
|
||||
# https://github.com/codespell-project/codespell
|
||||
name: codespell
|
||||
on: [push, pull_request]
|
||||
jobs:
|
||||
codespell:
|
||||
name: Check for spelling errors
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: codespell-project/actions-codespell@master
|
||||
with:
|
||||
check_filenames: true
|
||||
skip: "*.png,*.jpg,*.svg,*.sum,./.git,./.github/workflows/codespell.yml,./prow.sh"
|
29
.github/workflows/trivy.yaml
vendored
Normal file
29
.github/workflows/trivy.yaml
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
name: Run Trivy scanner for Go version vulnerabilities
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
pull_request:
|
||||
jobs:
|
||||
trivy:
|
||||
name: Build
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout code
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get Go version
|
||||
id: go-version
|
||||
run: |
|
||||
GO_VERSION=$(cat prow.sh | grep "configvar CSI_PROW_GO_VERSION_BUILD" | awk '{print $3}' | sed 's/"//g')
|
||||
echo "version=$GO_VERSION" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Run Trivy scanner for Go version vulnerabilities
|
||||
uses: aquasecurity/trivy-action@master
|
||||
with:
|
||||
image-ref: 'golang:${{ steps.go-version.outputs.version }}'
|
||||
format: 'table'
|
||||
exit-code: '1'
|
||||
ignore-unfixed: true
|
||||
vuln-type: 'library'
|
||||
severity: 'CRITICAL,HIGH,MEDIUM,LOW,UNKNOWN'
|
@ -18,6 +18,7 @@ aliases:
|
||||
# when they are temporarily unable to review PRs.
|
||||
kubernetes-csi-reviewers:
|
||||
- andyzhangx
|
||||
- carlory
|
||||
- chrishenzie
|
||||
- ggriffiths
|
||||
- gnufied
|
||||
|
@ -46,54 +46,51 @@ naming convention `<hostpath-deployment-version>-on-<kubernetes-version>`.
|
||||
## Release Process
|
||||
1. Identify all issues and ongoing PRs that should go into the release, and
|
||||
drive them to resolution.
|
||||
1. Download the latest version of the
|
||||
[K8s release notes generator](https://github.com/kubernetes/release/tree/HEAD/cmd/release-notes)
|
||||
1. Create a
|
||||
[Github personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
|
||||
with `repo:public_repo` access
|
||||
1. Generate release notes for the release. Replace arguments with the relevant
|
||||
information.
|
||||
* Clean up old cached information (also needed if you are generating release
|
||||
notes for multiple repos)
|
||||
```bash
|
||||
rm -rf /tmp/k8s-repo
|
||||
```
|
||||
* For new minor releases on master:
|
||||
```bash
|
||||
GITHUB_TOKEN=<token> release-notes \
|
||||
--discover=mergebase-to-latest \
|
||||
--org=kubernetes-csi \
|
||||
--repo=external-provisioner \
|
||||
--required-author="" \
|
||||
--markdown-links \
|
||||
--output out.md
|
||||
```
|
||||
* For new patch releases on a release branch:
|
||||
```bash
|
||||
GITHUB_TOKEN=<token> release-notes \
|
||||
--discover=patch-to-latest \
|
||||
--branch=release-1.1 \
|
||||
--org=kubernetes-csi \
|
||||
--repo=external-provisioner \
|
||||
--required-author="" \
|
||||
--markdown-links \
|
||||
--output out.md
|
||||
```
|
||||
1. Compare the generated output to the new commits for the release to check if
|
||||
any notable change missed a release note.
|
||||
1. Reword release notes as needed. Make sure to check notes for breaking
|
||||
changes and deprecations.
|
||||
1. If release is a new major/minor version, create a new `CHANGELOG-<major>.<minor>.md`
|
||||
file. Otherwise, add the release notes to the top of the existing CHANGELOG
|
||||
file for that minor version.
|
||||
1. Submit a PR for the CHANGELOG changes.
|
||||
1. Submit a PR for README changes, in particular, Compatibility, Feature status,
|
||||
and any other sections that may need updating.
|
||||
1. Update dependencies for sidecars
|
||||
1. For new minor versions, use
|
||||
[go-modules-update.sh](https://github.com/kubernetes-csi/csi-release-tools/blob/HEAD/go-modules-update.sh),
|
||||
1. For CVE fixes on patch versions, use
|
||||
[go-modules-targeted-update.sh](https://github.com/kubernetes-csi/csi-release-tools/blob/HEAD/go-modules-targeted-update.sh),
|
||||
Read the instructions at the top of the script.
|
||||
1. Check that all [canary CI
|
||||
jobs](https://testgrid.k8s.io/sig-storage-csi-ci) are passing,
|
||||
and that test coverage is adequate for the changes that are going into the release.
|
||||
1. Check that the post-\<sidecar\>-push-images builds are succeeding.
|
||||
[Example](https://testgrid.k8s.io/sig-storage-image-build#post-external-snapshotter-push-images)
|
||||
1. Generate release notes.
|
||||
1. Download the latest version of the [K8s release notes generator](https://github.com/kubernetes/release/tree/HEAD/cmd/release-notes)
|
||||
1. Create a
|
||||
[Github personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token)
|
||||
with `repo:public_repo` access
|
||||
1. For patch release, use the script generate_patch_release_notes.sh. Read the instructions at the top of the
|
||||
script. The script also creates PRs for each branch.
|
||||
1. For new minor releases, follow these steps and replace arguments with the relevant
|
||||
information.
|
||||
* Clean up old cached information (also needed if you are generating release
|
||||
notes for multiple repos)
|
||||
```bash
|
||||
rm -rf /tmp/k8s-repo
|
||||
```
|
||||
* For new minor releases on master:
|
||||
```bash
|
||||
GITHUB_TOKEN=<token> release-notes \
|
||||
--discover=mergebase-to-latest \
|
||||
--org=kubernetes-csi \
|
||||
--repo=external-provisioner \
|
||||
--required-author="" \
|
||||
--markdown-links \
|
||||
--output out.md
|
||||
```
|
||||
1. Compare the generated output to the new commits for the release to check if
|
||||
any notable change missed a release note.
|
||||
1. Reword release notes as needed, ideally in the original PRs so that the
|
||||
release notes can be regenerated. Make sure to check notes for breaking
|
||||
changes and deprecations.
|
||||
1. If release is a new major/minor version, create a new `CHANGELOG-<major>.<minor>.md`
|
||||
file.
|
||||
1. Submit a PR for the CHANGELOG changes.
|
||||
1. Submit a PR for README changes, in particular, Compatibility, Feature status,
|
||||
and any other sections that may need updating.
|
||||
1. Make sure that no new PRs have merged in the meantime, and no PRs are in
|
||||
flight and soon to be merged.
|
||||
1. Create a new release following a previous release as a template. Be sure to select the correct
|
||||
|
20
build.make
20
build.make
@ -45,9 +45,10 @@ REV=$(shell git describe --long --tags --match='v*' --dirty 2>/dev/null || git r
|
||||
# Determined dynamically.
|
||||
IMAGE_TAGS=
|
||||
|
||||
# A "canary" image gets built if the current commit is the head of the remote "master" branch.
|
||||
# A "canary" image gets built if the current commit is the head of the remote "master" or "main" branch.
|
||||
# That branch does not exist when building some other branch in TravisCI.
|
||||
IMAGE_TAGS+=$(shell if [ "$$(git rev-list -n1 HEAD)" = "$$(git rev-list -n1 origin/master 2>/dev/null)" ]; then echo "canary"; fi)
|
||||
IMAGE_TAGS+=$(shell if [ "$$(git rev-list -n1 HEAD)" = "$$(git rev-list -n1 origin/main 2>/dev/null)" ]; then echo "canary"; fi)
|
||||
|
||||
# A "X.Y.Z-canary" image gets built if the current commit is the head of a "origin/release-X.Y.Z" branch.
|
||||
# The actual suffix does not matter, only the "release-" prefix is checked.
|
||||
@ -62,9 +63,9 @@ IMAGE_NAME=$(REGISTRY_NAME)/$*
|
||||
|
||||
ifdef V
|
||||
# Adding "-alsologtostderr" assumes that all test binaries contain glog. This is not guaranteed.
|
||||
TESTARGS = -v -args -alsologtostderr -v 5
|
||||
TESTARGS = -race -v -args -alsologtostderr -v 5
|
||||
else
|
||||
TESTARGS =
|
||||
TESTARGS = -race
|
||||
endif
|
||||
|
||||
# Specific packages can be excluded from each of the tests below by setting the *_FILTER_CMD variables
|
||||
@ -143,7 +144,7 @@ DOCKER_BUILDX_CREATE_ARGS ?=
|
||||
# Windows binaries can be built before adding a Dockerfile for it.
|
||||
#
|
||||
# BUILD_PLATFORMS determines which individual images are included in the multiarch image.
|
||||
# PULL_BASE_REF must be set to 'master', 'release-x.y', or a tag name, and determines
|
||||
# PULL_BASE_REF must be set to 'master', 'main', 'release-x.y', or a tag name, and determines
|
||||
# the tag for the resulting multiarch image.
|
||||
$(CMDS:%=push-multiarch-%): push-multiarch-%: check-pull-base-ref build-%
|
||||
set -ex; \
|
||||
@ -191,7 +192,7 @@ $(CMDS:%=push-multiarch-%): push-multiarch-%: check-pull-base-ref build-%
|
||||
done; \
|
||||
docker manifest push -p $(IMAGE_NAME):$$tag; \
|
||||
}; \
|
||||
if [ $(PULL_BASE_REF) = "master" ]; then \
|
||||
if [ $(PULL_BASE_REF) = "master" ] || [ $(PULL_BASE_REF) = "main" ]; then \
|
||||
: "creating or overwriting canary image"; \
|
||||
pushMultiArch canary; \
|
||||
elif echo $(PULL_BASE_REF) | grep -q -e 'release-*' ; then \
|
||||
@ -209,7 +210,7 @@ $(CMDS:%=push-multiarch-%): push-multiarch-%: check-pull-base-ref build-%
|
||||
.PHONY: check-pull-base-ref
|
||||
check-pull-base-ref:
|
||||
if ! [ "$(PULL_BASE_REF)" ]; then \
|
||||
echo >&2 "ERROR: PULL_BASE_REF must be set to 'master', 'release-x.y', or a tag name."; \
|
||||
echo >&2 "ERROR: PULL_BASE_REF must be set to 'master', 'main', 'release-x.y', or a tag name."; \
|
||||
exit 1; \
|
||||
fi
|
||||
|
||||
@ -322,3 +323,10 @@ test-spelling:
|
||||
test-boilerplate:
|
||||
@ echo; echo "### $@:"
|
||||
@ ./release-tools/verify-boilerplate.sh "$(pwd)"
|
||||
|
||||
# Test klog usage. This test is optional and must be explicitly added to `test` target in the main Makefile:
|
||||
# test: test-logcheck
|
||||
.PHONY: test-logcheck
|
||||
test-logcheck:
|
||||
@ echo; echo "### $@:"
|
||||
@ ./release-tools/verify-logcheck.sh
|
||||
|
114
generate-patch-release-notes.sh
Executable file
114
generate-patch-release-notes.sh
Executable file
@ -0,0 +1,114 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2023 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.
|
||||
|
||||
|
||||
# Usage: generate_patch_release_notes.sh
|
||||
#
|
||||
# Generates and creates PRs for kubernetes-csi patch releases.
|
||||
#
|
||||
# Required environment variables
|
||||
# CSI_RELEASE_TOKEN: Github token needed for generating release notes
|
||||
# GITHUB_USER: Github username to create PRs with
|
||||
#
|
||||
# Required tools:
|
||||
# - gh
|
||||
# - release-notes (https://github.com/kubernetes/release/blob/master/cmd/release-notes/README.md)
|
||||
#
|
||||
# Instructions:
|
||||
# 1. Install the required tools
|
||||
# 2. Login with "gh auth login"
|
||||
# 3. Copy this script to the kubernetes-csi directory (one directory above the repos)
|
||||
# 4. Update the repos and versions in the $releases array
|
||||
# 5. Set environment variables
|
||||
# 6. Run script from the kubernetes-csi directory
|
||||
#
|
||||
# Caveats:
|
||||
# - This script doesn't handle regenerating and updating existing PRs yet.
|
||||
# It might work if you comment out the PR creation line
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
releases=(
|
||||
# "external-attacher 4.4.1"
|
||||
# "external-provisioner 3.6.1"
|
||||
# "external-snapshotter 6.2.3"
|
||||
)
|
||||
|
||||
function gen_patch_relnotes() {
|
||||
rm out.md || true
|
||||
rm -rf /tmp/k8s-repo || true
|
||||
GITHUB_TOKEN="$CSI_RELEASE_TOKEN" \
|
||||
release-notes --start-rev="$3" --end-rev="$2" --branch="$2" \
|
||||
--org=kubernetes-csi --repo="$1" \
|
||||
--required-author="" --markdown-links --output out.md
|
||||
}
|
||||
|
||||
for rel in "${releases[@]}"; do
|
||||
read -r repo version <<< "$rel"
|
||||
|
||||
# Parse minor version
|
||||
minorPatchPattern="(^[[:digit:]]+\.[[:digit:]]+)\.([[:digit:]]+)"
|
||||
[[ "$version" =~ $minorPatchPattern ]]
|
||||
minor="${BASH_REMATCH[1]}"
|
||||
patch="${BASH_REMATCH[2]}"
|
||||
|
||||
echo "$repo $version $minor $patch"
|
||||
prevPatch="$((patch-1))"
|
||||
prevVer="v$minor.$prevPatch"
|
||||
|
||||
pushd "$repo/CHANGELOG"
|
||||
|
||||
git fetch upstream
|
||||
|
||||
# Create branch
|
||||
branch="changelog-release-$minor"
|
||||
git checkout master
|
||||
git branch -D "$branch" || true
|
||||
git checkout --track "upstream/release-$minor" -b "$branch"
|
||||
|
||||
# Generate release notes
|
||||
gen_patch_relnotes "$repo" "release-$minor" "$prevVer"
|
||||
cat > tmp.md <<EOF
|
||||
# Release notes for v$version
|
||||
|
||||
[Documentation](https://kubernetes-csi.github.io)
|
||||
|
||||
EOF
|
||||
|
||||
cat out.md >> tmp.md
|
||||
echo >> tmp.md
|
||||
rm out.md
|
||||
|
||||
file="CHANGELOG-$minor.md"
|
||||
cat "$file" >> tmp.md
|
||||
mv tmp.md "$file"
|
||||
|
||||
git add -u
|
||||
git commit -m "Add changelog for $version"
|
||||
git push -f origin "$branch"
|
||||
|
||||
# Create PR
|
||||
prbody=$(cat <<EOF
|
||||
\`\`\`release-note
|
||||
NONE
|
||||
\`\`\`
|
||||
EOF
|
||||
)
|
||||
gh pr create --title="Changelog for v$version" --body "$prbody" --head "$GITHUB_USER:$branch" --base "release-$minor" --repo="kubernetes-csi/$repo"
|
||||
|
||||
popd
|
||||
done
|
96
go-modules-targeted-update.sh
Executable file
96
go-modules-targeted-update.sh
Executable file
@ -0,0 +1,96 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Copyright 2023 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.
|
||||
|
||||
|
||||
# Usage: go-modules-targeted-update.sh
|
||||
#
|
||||
# Batch update specific dependencies for sidecars.
|
||||
#
|
||||
# Required environment variables
|
||||
# CSI_RELEASE_TOKEN: Github token needed for generating release notes
|
||||
# GITHUB_USER: Github username to create PRs with
|
||||
#
|
||||
# Instructions:
|
||||
# 1. Login with "gh auth login"
|
||||
# 2. Copy this script to the Github org directory (one directory above the
|
||||
# repos)
|
||||
# 3. Change $modules, $releases and $org if needed.
|
||||
# 4. Set environment variables
|
||||
# 5. Run script from the Github org directory
|
||||
#
|
||||
# Caveats:
|
||||
# - This script doesn't handle interface incompatibility of updates.
|
||||
# You need to resolve interface incompatibility case by case. The
|
||||
# most frequent case is to update the interface(new parameters,
|
||||
# name change of the method, etc.)in the sidecar repo and make sure
|
||||
# the build and test pass.
|
||||
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
org="kubernetes-csi"
|
||||
|
||||
modules=(
|
||||
"github.com/kubernetes-csi/csi-lib-utils@v0.15.1"
|
||||
)
|
||||
|
||||
releases=(
|
||||
#"external-attacher release-4.4"
|
||||
#"external-provisioner release-3.6"
|
||||
#"external-resizer release-1.9"
|
||||
#"external-snapshotter release-6.3"
|
||||
#"node-driver-registrar release-2.9"
|
||||
)
|
||||
|
||||
for rel in "${releases[@]}"; do
|
||||
|
||||
read -r repo branch <<< "$rel"
|
||||
if [ "$repo" != "#" ]; then
|
||||
(
|
||||
cd "$repo"
|
||||
git fetch upstream
|
||||
|
||||
if [ "$(git rev-parse --verify "module-update-$branch" 2>/dev/null)" ]; then
|
||||
git checkout master && git branch -D "module-update-$branch"
|
||||
fi
|
||||
git checkout -B "module-update-$branch" "upstream/$branch"
|
||||
|
||||
for mod in "${modules[@]}"; do
|
||||
go get "$mod"
|
||||
done
|
||||
go mod tidy
|
||||
go mod vendor
|
||||
|
||||
git add --all
|
||||
git commit -m "Update go modules"
|
||||
git push origin "module-update-$branch" --force
|
||||
|
||||
# Create PR
|
||||
prbody=$(cat <<EOF
|
||||
Updated the following go modules:
|
||||
|
||||
${modules[@]}
|
||||
|
||||
\`\`\`release-note
|
||||
NONE
|
||||
\`\`\`
|
||||
EOF
|
||||
)
|
||||
gh pr create --title="[$branch] Update go modules" --body "$prbody" --head "$GITHUB_USER:module-update-$branch" --base "$branch" --repo="$org/$repo"
|
||||
)
|
||||
fi
|
||||
done
|
129
go-modules-update.sh
Executable file
129
go-modules-update.sh
Executable file
@ -0,0 +1,129 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Copyright 2023 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.
|
||||
|
||||
|
||||
# Usage: go-modules-update.sh
|
||||
#
|
||||
# Batch update dependencies for sidecars.
|
||||
#
|
||||
# Required environment variables
|
||||
# CSI_RELEASE_TOKEN: Github token needed for generating release notes
|
||||
# GITHUB_USER: Github username to create PRs with
|
||||
#
|
||||
# Instructions:
|
||||
# 1. Login with "gh auth login"
|
||||
# 2. Copy this script to the kubernetes-csi directory (one directory above the
|
||||
# repos)
|
||||
# 3. Update the repos and master branch so locally it has the latest upstream
|
||||
# change
|
||||
# 4. Set environment variables
|
||||
# 5. Run script from the kubernetes-csi directory
|
||||
#
|
||||
# Caveats:
|
||||
# - This script doesn't handle interface incompatibility of updates.
|
||||
# You need to resolve interface incompatibility case by case. The
|
||||
# most frequent case is to update the interface(new parameters,
|
||||
# name change of the method, etc.)in the sidecar repo and make sure
|
||||
# the build and test pass.
|
||||
|
||||
|
||||
set -e
|
||||
set -x
|
||||
|
||||
MAX_RETRY=10
|
||||
|
||||
# Get the options
|
||||
while getopts ":u:v:" option; do
|
||||
case $option in
|
||||
u) # Set username
|
||||
username=$OPTARG;;
|
||||
v) # Set version
|
||||
v=$OPTARG;;
|
||||
\?) # Invalid option
|
||||
echo "Error: Invalid option: $OPTARG"
|
||||
exit;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Only need to do this once
|
||||
gh auth login
|
||||
|
||||
while read -r repo branches; do
|
||||
if [ "$repo" != "#" ]; then
|
||||
(
|
||||
cd "$repo"
|
||||
git fetch origin
|
||||
for i in $branches; do
|
||||
if [ "$(git rev-parse --verify "module-update-$i" 2>/dev/null)" ]; then
|
||||
git checkout master && git branch -d "module-update-$i"
|
||||
fi
|
||||
git checkout -B "module-update-$i" "origin/$i"
|
||||
rm -rf .git/MERGE*
|
||||
if ! git subtree pull --squash --prefix=release-tools https://github.com/kubernetes-csi/csi-release-tools.git master; then
|
||||
# Sometimes "--squash" leads to merge conflicts. Because we know that "release-tools"
|
||||
# is an unmodified copy of csi-release-tools, we can automatically resolve that
|
||||
# by replacing it completely.
|
||||
if [ -e .git/MERGE_MSG ] && [ -e .git/FETCH_HEAD ] && grep -q "^# Conflict" .git/MERGE_MSG; then
|
||||
rm -rf release-tools
|
||||
mkdir release-tools
|
||||
git archive FETCH_HEAD | tar -C release-tools -xf -
|
||||
git add release-tools
|
||||
git commit --file=.git/MERGE_MSG
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
RETRY=0
|
||||
while ! ./release-tools/go-get-kubernetes.sh -p "$v" && RETRY < $MAX_RETRY
|
||||
do
|
||||
RETRY=$((RETRY+1))
|
||||
go mod tidy && go mod vendor && go mod tidy
|
||||
done
|
||||
go mod tidy && go mod vendor && go mod tidy
|
||||
git add --all
|
||||
git commit -m "Update dependency go modules for k8s v$v"
|
||||
git remote set-url origin "https://github.com/$username/$repo.git"
|
||||
make test
|
||||
git push origin "module-update-$i" --force
|
||||
# Create PR
|
||||
prbody=$(cat <<EOF
|
||||
Ran kubernetes-csi/csi-release-tools go-get-kubernetes.sh -p ${v}.
|
||||
|
||||
|
||||
\`\`\`release-note
|
||||
Update kubernetes dependencies to v${v}
|
||||
\`\`\`
|
||||
EOF
|
||||
)
|
||||
gh pr create --title="Update dependency go modules for k8s v$v" --body "$prbody" --head "$username:module-update-master" --base "master" --repo="kubernetes-csi/$repo"
|
||||
done
|
||||
)
|
||||
fi
|
||||
done <<EOF
|
||||
csi-driver-host-path master
|
||||
csi-driver-iscsi master
|
||||
csi-driver-nfs master
|
||||
csi-lib-utils master
|
||||
csi-proxy master
|
||||
csi-test master
|
||||
external-attacher master
|
||||
external-health-monitor master
|
||||
external-provisioner master
|
||||
external-resizer master
|
||||
external-snapshotter master
|
||||
livenessprobe master
|
||||
node-driver-registrar master
|
||||
EOF
|
43
prow.sh
43
prow.sh
@ -86,7 +86,7 @@ configvar CSI_PROW_BUILD_PLATFORMS "linux amd64 amd64; linux ppc64le ppc64le -pp
|
||||
# which is disabled with GOFLAGS=-mod=vendor).
|
||||
configvar GOFLAGS_VENDOR "$( [ -d vendor ] && echo '-mod=vendor' )" "Go flags for using the vendor directory"
|
||||
|
||||
configvar CSI_PROW_GO_VERSION_BUILD "1.20" "Go version for building the component" # depends on component's source code
|
||||
configvar CSI_PROW_GO_VERSION_BUILD "1.23.1" "Go version for building the component" # depends on component's source code
|
||||
configvar CSI_PROW_GO_VERSION_E2E "" "override Go version for building the Kubernetes E2E test suite" # normally doesn't need to be set, see install_e2e
|
||||
configvar CSI_PROW_GO_VERSION_SANITY "${CSI_PROW_GO_VERSION_BUILD}" "Go version for building the csi-sanity test suite" # depends on CSI_PROW_SANITY settings below
|
||||
configvar CSI_PROW_GO_VERSION_KIND "${CSI_PROW_GO_VERSION_BUILD}" "Go version for building 'kind'" # depends on CSI_PROW_KIND_VERSION below
|
||||
@ -199,7 +199,7 @@ kindest/node:v1.18.20@sha256:738cdc23ed4be6cc0b7ea277a2ebcc454c8373d7d8fb991a7fc
|
||||
# If the deployment script is called with CSI_PROW_TEST_DRIVER=<file name> as
|
||||
# environment variable, then it must write a suitable test driver configuration
|
||||
# into that file in addition to installing the driver.
|
||||
configvar CSI_PROW_DRIVER_VERSION "v1.12.0" "CSI driver version"
|
||||
configvar CSI_PROW_DRIVER_VERSION "v1.15.0" "CSI driver version"
|
||||
configvar CSI_PROW_DRIVER_REPO https://github.com/kubernetes-csi/csi-driver-host-path "CSI driver repo"
|
||||
configvar CSI_PROW_DEPLOYMENT "" "deployment"
|
||||
configvar CSI_PROW_DEPLOYMENT_SUFFIX "" "additional suffix in kubernetes-x.yy[suffix].yaml files"
|
||||
@ -231,8 +231,11 @@ configvar CSI_PROW_E2E_VERSION "$(version_to_git "${CSI_PROW_KUBERNETES_VERSION}
|
||||
configvar CSI_PROW_E2E_REPO "https://github.com/kubernetes/kubernetes" "E2E repo"
|
||||
configvar CSI_PROW_E2E_IMPORT_PATH "k8s.io/kubernetes" "E2E package"
|
||||
|
||||
# Local path for e2e tests. Set to "none" to disable.
|
||||
configvar CSI_PROW_SIDECAR_E2E_IMPORT_PATH "none" "CSI Sidecar E2E package"
|
||||
# Local path & package path for e2e tests. Set to "none" to disable.
|
||||
# When using versioned go modules, the import path is the module path whereas the path
|
||||
# should not contain the version and be the directory where the module is checked out.
|
||||
configvar CSI_PROW_SIDECAR_E2E_IMPORT_PATH "none" "CSI Sidecar E2E package (go import path)"
|
||||
configvar CSI_PROW_SIDECAR_E2E_PATH "${CSI_PROW_SIDECAR_E2E_IMPORT_PATH}" "CSI Sidecar E2E path (directory)"
|
||||
|
||||
# csi-sanity testing from the csi-test repo can be run against the installed
|
||||
# CSI driver. For this to work, deploying the driver must expose the Unix domain
|
||||
@ -240,7 +243,7 @@ configvar CSI_PROW_SIDECAR_E2E_IMPORT_PATH "none" "CSI Sidecar E2E package"
|
||||
# of the cluster. The alternative would have been to (cross-)compile csi-sanity
|
||||
# and install it inside the cluster, which is not necessarily easier.
|
||||
configvar CSI_PROW_SANITY_REPO https://github.com/kubernetes-csi/csi-test "csi-test repo"
|
||||
configvar CSI_PROW_SANITY_VERSION v5.0.0 "csi-test version"
|
||||
configvar CSI_PROW_SANITY_VERSION v5.2.0 "csi-test version"
|
||||
configvar CSI_PROW_SANITY_PACKAGE_PATH github.com/kubernetes-csi/csi-test "csi-test package"
|
||||
configvar CSI_PROW_SANITY_SERVICE "hostpath-service" "Kubernetes TCP service name that exposes csi.sock"
|
||||
configvar CSI_PROW_SANITY_POD "csi-hostpathplugin-0" "Kubernetes pod with CSI driver"
|
||||
@ -422,7 +425,7 @@ die () {
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Ensure that PATH has the desired version of the Go tools, then run command given as argument.
|
||||
# Ensure we use the desired version of the Go tools, then run command given as argument.
|
||||
# Empty parameter uses the already installed Go. In Prow, that version is kept up-to-date by
|
||||
# bumping the container image regularly.
|
||||
run_with_go () {
|
||||
@ -430,15 +433,15 @@ run_with_go () {
|
||||
version="$1"
|
||||
shift
|
||||
|
||||
if ! [ "$version" ] || go version 2>/dev/null | grep -q "go$version"; then
|
||||
run "$@"
|
||||
else
|
||||
if ! [ -d "${CSI_PROW_WORK}/go-$version" ]; then
|
||||
run curl --fail --location "https://dl.google.com/go/go$version.linux-amd64.tar.gz" | tar -C "${CSI_PROW_WORK}" -zxf - || die "installation of Go $version failed"
|
||||
mv "${CSI_PROW_WORK}/go" "${CSI_PROW_WORK}/go-$version"
|
||||
if [ "$version" ]; then
|
||||
version=go$version
|
||||
if [ "$(GOTOOLCHAIN=$version go version | cut -d' ' -f3)" != "$version" ]; then
|
||||
die "Please install Go 1.21+"
|
||||
fi
|
||||
PATH="${CSI_PROW_WORK}/go-$version/bin:$PATH" run "$@"
|
||||
else
|
||||
version=local
|
||||
fi
|
||||
GOTOOLCHAIN=$version run "$@"
|
||||
}
|
||||
|
||||
# Ensure that we have the desired version of kind.
|
||||
@ -564,7 +567,15 @@ go_version_for_kubernetes () (
|
||||
local version="$2"
|
||||
local go_version
|
||||
|
||||
# We use the minimal Go version specified for each K8S release (= minimum_go_version in hack/lib/golang.sh).
|
||||
# Try to get the version for .go-version
|
||||
go_version="$( cat "$path/.go-version" )"
|
||||
if [ "$go_version" ]; then
|
||||
echo "$go_version"
|
||||
return
|
||||
fi
|
||||
|
||||
# Fall back to hack/lib/golang.sh parsing.
|
||||
# This is necessary in v1.26.0 and older Kubernetes releases that do not have .go-version.
|
||||
# More recent versions might also work, but we don't want to count on that.
|
||||
go_version="$(grep minimum_go_version= "$path/hack/lib/golang.sh" | sed -e 's/.*=go//')"
|
||||
if ! [ "$go_version" ]; then
|
||||
@ -613,7 +624,7 @@ start_cluster () {
|
||||
go_version="$(go_version_for_kubernetes "${CSI_PROW_WORK}/src/kubernetes" "$version")" || die "cannot proceed without knowing Go version for Kubernetes"
|
||||
# Changing into the Kubernetes source code directory is a workaround for https://github.com/kubernetes-sigs/kind/issues/1910
|
||||
# shellcheck disable=SC2046
|
||||
(cd "${CSI_PROW_WORK}/src/kubernetes" && run_with_go "$go_version" kind build node-image --image csiprow/node:latest --kube-root "${CSI_PROW_WORK}/src/kubernetes") || die "'kind build node-image' failed"
|
||||
(cd "${CSI_PROW_WORK}/src/kubernetes" && run_with_go "$go_version" kind build node-image "${CSI_PROW_WORK}/src/kubernetes" --image csiprow/node:latest) || die "'kind build node-image' failed"
|
||||
csi_prow_kind_have_kubernetes=true
|
||||
fi
|
||||
image="csiprow/node:latest"
|
||||
@ -1027,7 +1038,7 @@ run_e2e () (
|
||||
trap move_junit EXIT
|
||||
|
||||
if [ "${name}" == "local" ]; then
|
||||
cd "${GOPATH}/src/${CSI_PROW_SIDECAR_E2E_IMPORT_PATH}" &&
|
||||
cd "${GOPATH}/src/${CSI_PROW_SIDECAR_E2E_PATH}" &&
|
||||
run_with_loggers env KUBECONFIG="$KUBECONFIG" KUBE_TEST_REPO_LIST="$(if [ -e "${CSI_PROW_WORK}/e2e-repo-list" ]; then echo "${CSI_PROW_WORK}/e2e-repo-list"; fi)" ginkgo --timeout="${CSI_PROW_GINKGO_TIMEOUT}" -v "$@" "${CSI_PROW_WORK}/e2e-local.test" -- -report-dir "${ARTIFACTS}" -report-prefix local
|
||||
else
|
||||
cd "${GOPATH}/src/${CSI_PROW_E2E_IMPORT_PATH}" &&
|
||||
|
@ -20,11 +20,17 @@
|
||||
|
||||
set -ex
|
||||
|
||||
# Prow checks out repos with --filter=blob:none. This breaks
|
||||
# "git subtree pull" unless we enable fetching missing file content.
|
||||
GIT_NO_LAZY_FETCH=0
|
||||
export GIT_NO_LAZY_FETCH
|
||||
|
||||
# It must be called inside the updated csi-release-tools repo.
|
||||
CSI_RELEASE_TOOLS_DIR="$(pwd)"
|
||||
|
||||
# Update the other repo.
|
||||
cd "$PULL_TEST_REPO_DIR"
|
||||
git reset --hard # Shouldn't be necessary, but somehow is to avoid "fatal: working tree has modifications. Cannot add." (https://stackoverflow.com/questions/3623351/git-subtree-pull-says-that-the-working-tree-has-modifications-but-git-status-sa)
|
||||
git subtree pull --squash --prefix=release-tools "$CSI_RELEASE_TOOLS_DIR" master
|
||||
git log -n2
|
||||
|
||||
|
37
verify-logcheck.sh
Executable file
37
verify-logcheck.sh
Executable file
@ -0,0 +1,37 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Copyright 2024 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.
|
||||
|
||||
# This script uses the logcheck tool to analyze the source code
|
||||
# for proper usage of klog contextual logging.
|
||||
|
||||
set -o errexit
|
||||
set -o nounset
|
||||
set -o pipefail
|
||||
|
||||
LOGCHECK_VERSION=${1:-0.8.2}
|
||||
|
||||
# This will canonicalize the path
|
||||
CSI_LIB_UTIL_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/.. && pwd -P)
|
||||
|
||||
# Create a temporary directory for installing logcheck and
|
||||
# set up a trap command to remove it when the script exits.
|
||||
CSI_LIB_UTIL_TEMP=$(mktemp -d 2>/dev/null || mktemp -d -t csi-lib-utils.XXXXXX)
|
||||
trap 'rm -rf "${CSI_LIB_UTIL_TEMP}"' EXIT
|
||||
|
||||
echo "Installing logcheck to temp dir: sigs.k8s.io/logtools/logcheck@v${LOGCHECK_VERSION}"
|
||||
GOBIN="${CSI_LIB_UTIL_TEMP}" go install "sigs.k8s.io/logtools/logcheck@v${LOGCHECK_VERSION}"
|
||||
echo "Verifying logcheck: ${CSI_LIB_UTIL_TEMP}/logcheck -check-contextual ${CSI_LIB_UTIL_ROOT}/..."
|
||||
"${CSI_LIB_UTIL_TEMP}/logcheck" -check-contextual -check-with-helpers "${CSI_LIB_UTIL_ROOT}/..."
|
Loading…
Reference in New Issue
Block a user