diff --git a/releasing/README.md b/releasing/README.md index 4effe6152..2fcd80626 100644 --- a/releasing/README.md +++ b/releasing/README.md @@ -110,10 +110,53 @@ infrequently). Executables appear on the [release page]. 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 -The script used to release modules is in progress. Check it in -`releasing/releasing` directory. +The previous release program does most of the following steps create a +release. At any given moment, the repository's master branch is passing all its tests and contains code one could release. diff --git a/releasing/VERSIONS b/releasing/VERSIONS deleted file mode 100644 index 641a5c11f..000000000 --- a/releasing/VERSIONS +++ /dev/null @@ -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 diff --git a/releasing/releasemodule.sh b/releasing/releasemodule.sh deleted file mode 100755 index 7b47230e3..000000000 --- a/releasing/releasemodule.sh +++ /dev/null @@ -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