github.com/econnell/terraform@v0.5.4-0.20150722160631-78eb236786a4/RELEASING.md (about)

     1  # Releasing Terraform
     2  
     3  This document contains details about the Terraform release process.
     4  
     5  ## Schedule
     6  
     7  Terraform currently has no fixed release schedule, the HashiCorp maintainers
     8  can usually give a feel for roughly when the next release is planned.
     9  
    10  ## Versioning
    11  
    12  As a pre-1.0 project, we use the MINOR and PATCH versions as follows:
    13  
    14   * a `MINOR` version increment indicates a release that may contain backwards
    15     incompatible changes
    16   * a `PATCH` version increment indicates a release that may contain bugfixes as
    17     well as additive (backwards compatible) features and enhancements
    18  
    19  ## Process
    20  
    21  For maintainer documentation purposes, here is the current release process:
    22  
    23  ```sh
    24  # Spin up a fresh build VM
    25  vagrant destroy -f
    26  vagrant up
    27  vagrant ssh
    28  cd /opt/gopath/src/github.com/hashicorp/terraform/
    29  
    30  # Fetch dependencies
    31  make updatedeps
    32  
    33  # Verify unit tests pass
    34  make test
    35  
    36  # Prep release commit
    37  export VERSION="vX.Y.Z"
    38  # Edit CHANGELOG.md, adding current date to unreleased version header
    39  # Edit version.go, setting VersionPrelease to empty string
    40  
    41  # Snapshot dependency information
    42  go get github.com/tools/godep
    43  godep save ./...
    44  cp Godeps/Godeps.json deps/$(echo $VERSION | sed 's/\./-/g').json
    45  
    46  # Make and tag release commit (skipping Godeps dir)
    47  git add CHANGELOG.md terraform/version.go deps/
    48  git commit -a -m "${VERSION}"
    49  git tag -m "${VERSION}" "${VERSION}"
    50  
    51  # Build the release
    52  make release
    53  
    54  # Make an archive with vendored dependencies
    55  stashName=$(git stash)
    56  git archive -o terraform-$VERSION-src.tar.gz $stashName
    57  
    58  # Zip and push release to bintray
    59  export BINTRAY_API_KEY="..."
    60  ./scripts/dist "X.Y.Z" # no `v` prefix here
    61  
    62  # -- "Point of no return" --
    63  # -- Process can be aborted safely at any point before this --
    64  
    65  # Push the release commit and tag
    66  git push origin master
    67  git push origin vX.Y.Z
    68  
    69  # Click "publish" on the release from the Bintray Web UI
    70  # Upload terraform-$VERSION-src.tar.gz as a file to the GitHub release.
    71  
    72  # -- Release is complete! --
    73  
    74  # Start release branch (to be used for reproducible builds and docs updates)
    75  git checkout -b release/$VERSION
    76  git push origin release/$VERSION
    77  
    78  # Clean up master
    79  git checkout master
    80  # Set VersionPrerelease to "dev"
    81  # Add new CHANGELOG section for next release
    82  git add -A
    83  git commit -m "release: clean up after ${VERSION}"
    84  ```