Merge pull request #2623 from Shell32-Natsu/releasing-doc

Releasing doc
This commit is contained in:
Jeff Regan
2020-06-25 11:04:51 -07:00
committed by GitHub
3 changed files with 45 additions and 144 deletions

View File

@@ -110,10 +110,53 @@ infrequently).
Executables appear on the [release page]. Executables appear on the [release page].
The tag appears in the URL, e.g. [pluginator/v1.0.0]. The tag appears in the URL, e.g. [pluginator/v1.0.0].
## Releasing Program
The Go program used to release modules is in `releasing/releasing` directory.
### List current module versions
```bash
(cd releasing/releasing; go run . list)
```
This command will print the latest versions of supported modules.
Example output:
```
kyaml/v0.3.0
api/v0.4.1
kstatus/v0.0.2
cmd/config/v0.3.0
cmd/resource/v0.0.2
cmd/kubectl/v0.1.0
pluginator/v2.1.0
kustomize/v3.6.1
```
### Releasing a module
To release a module, you need to make sure that:
- The codes in the module are ready to release, i.e. pass all tests and
release check. This program will not do any code verification.
Command:
```bash
(cd releasing/releasing; go run . release {moduleName} {versionField})
```
The command only accepts 3 version types: major, minor or patch.
The specified version will be increased by 1 and inferior version(s) will be reset to 0.
By default the `release` command will not create release in the remote
unless you add a `--no-dry-run` flag. You can check the output of the dry-run command to ensure the behavior is expected.
## Release procedure ## Release procedure
The script used to release modules is in progress. Check it in The previous release program does most of the following steps create a
`releasing/releasing` directory. release.
At any given moment, the repository's master branch is At any given moment, the repository's master branch is
passing all its tests and contains code one could release. passing all its tests and contains code one could release.

View File

@@ -1,33 +0,0 @@
#!/usr/bin/env bash
# VERSIONS contains the release versions of each kustomize go module
# update this file and run releasemodule.sh to cut a new release
# kyaml version
export kyaml_major=0
export kyaml_minor=3
export kyaml_patch=0
# kstatus version
export kstatus_major=0
export kstatus_minor=0
export kstatus_patch=1
# kustomize api version
export api_major=0
export api_minor=4
export api_patch=0
# cmd/config version
export cmd_config_major=0
export cmd_config_minor=3
export cmd_config_patch=0
# kustomize version
export kustomize_major=3
export kustomize_minor=5
export kustomize_patch=4
export pluginator_major=2
export pluginator_minor=1
export pluginator_patch=0

View File

@@ -1,109 +0,0 @@
#!/bin/bash
# Copyright 2019 The Kubernetes Authors.
# SPDX-License-Identifier: Apache-2.0
# run this script with releasing/releasemodule.sh MODULE
# -- e.g. releasing/releasemodule.sh cmd/config
# to skip fetch from upstream, run with FETCH=false
# -- e.g. FETCH=false releasing/releasemodule.sh kyaml
set -e
# perform release for a module
function releaseModule {
# calculate the branch and tag names
module=$1
slash="/"
module_name=${module/$slash/_}
name="${module_name}_major"
major="${!name}"
name="${module_name}_minor"
minor="${!name}"
name="${module_name}_patch"
patch="${!name}"
branch="release-${module}-v${major}.${minor}"
tag="${module}/v${major}.${minor}.${patch}"
# create a temporary workspace for our work
wktree=$(mktemp -d /tmp/kustomize-releases-XXXXXX)
git branch $branch upstream/$branch
git worktree add $wktree $branch # create a separate worktree for the branch
pushd .
cd $wktree/$module # cd into the worktree/module
# merge master changes into the release branch
git merge upstream/master
echo "dir: $wktree"
echo "module: $module v$major.$minor.$patch"
echo "branch: $branch"
echo "tag: $tag"
# clean up replaces in go.mod as needed
FILE=fixgomod.sh
if test -f "$FILE"; then
./fixgomod.sh
go mod tidy
go test ./...
go mod tidy
git add .
git commit -m "update go.mod for release" || echo "no changes made to go.mod"
fi
go test ./...
if [ "$NO_DRY_RUN" == "true" ]; then
git push upstream $branch
git tag -a $tag -m "Release $tag on branch $branch"
git push upstream $tag
else
printf "\nSkipping push module $module -- run with NO_DRY_RUN=true to push the release.\n\n"
fi
# cleanup release artifacts
popd
rm -rf $wktree
git worktree prune
git branch -D $branch
echo "$module complete"
}
modules="kyaml api kstatus cmd/config cmd/resource cmd/kubectl pluginator kustomize"
# configure the branch and tag names
module="${1?must provide the module to release as an argument: supported modules [$modules]}"
# verify the module
found=false
for m in $modules; do
if [ "$m" == "$module" ]; then
found=true
fi
done
if [ "$found" != "true" ]; then
echo "unknown module \"$module\", must be one of: [$modules]"
exit 1
fi
# get the release versions
source releasing/VERSIONS
FETCH=${FETCH:-"true"}
NO_DRY_RUN=${NO_DRY_RUN:-"false"}
# get the most recent changes
if [ "$FETCH" == "true" ]; then
git fetch upstream
fi
# release the module
releaseModule $module
if [ "$module" == "kustomize" ]; then
# TODO: Do this for all modules
pushd .
getter=$(mktemp -d /tmp/kustomize-releases-XXXXXX)
cd $getter
go get sigs.k8s.io/kustomize/$module/v3
popd
fi