commit
3b41be3784
35
RELEASING.md
Normal file
35
RELEASING.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# Release process
|
||||||
|
|
||||||
|
## Resulting artifacts
|
||||||
|
Creating a new release produces the following artifacts:
|
||||||
|
|
||||||
|
- Binaries (stored in the `release-<TAG>` directory) :
|
||||||
|
- `cni-plugins-<PLATFORM>-<VERSION>.tgz` binaries
|
||||||
|
- `cni-plugins-<VERSION>.tgz` binary (copy of amd64 platform binary)
|
||||||
|
- `sha1`, `sha256` and `sha512` files for the above files.
|
||||||
|
|
||||||
|
## Preparing for a release
|
||||||
|
1. Releases are performed by maintainers and should usually be discussed and planned at a maintainer meeting.
|
||||||
|
- Choose the version number. It should be prefixed with `v`, e.g. `v1.2.3`
|
||||||
|
- Take a quick scan through the PRs and issues to make sure there isn't anything crucial that _must_ be in the next release.
|
||||||
|
- Create a draft of the release note
|
||||||
|
- Discuss the level of testing that's needed and create a test plan if sensible
|
||||||
|
- Check what version of `go` is used in the build container, updating it if there's a new stable release.
|
||||||
|
- Update the vendor directory and Godeps to pin to the corresponding containernetworking/cni release. Create a PR, makes sure it passes CI and get it merged.
|
||||||
|
|
||||||
|
## Creating the release artifacts
|
||||||
|
1. Make sure you are on the master branch and don't have any local uncommitted changes.
|
||||||
|
1. Create a signed tag for the release `git tag -s $VERSION` (Ensure that GPG keys are created and added to GitHub)
|
||||||
|
1. Run the release script from the root of the repository
|
||||||
|
- `scripts/release.sh`
|
||||||
|
- The script requires Docker and ensures that a consistent environment is used.
|
||||||
|
- The artifacts will now be present in the `release-<TAG>` directory.
|
||||||
|
1. Test these binaries according to the test plan.
|
||||||
|
|
||||||
|
## Publishing the release
|
||||||
|
1. Push the tag to git `git push origin <TAG>`
|
||||||
|
1. Create a release on Github, using the tag which was just pushed.
|
||||||
|
1. Attach all the artifacts from the release directory.
|
||||||
|
1. Add the release note to the release.
|
||||||
|
1. Announce the release on at least the CNI mailing, IRC and Slack.
|
||||||
|
|
36
scripts/release.sh
Executable file
36
scripts/release.sh
Executable file
@ -0,0 +1,36 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
set -xe
|
||||||
|
|
||||||
|
SRC_DIR="${SRC_DIR:-$PWD}"
|
||||||
|
BUILDFLAGS="-a --ldflags '-extldflags \"-static\"'"
|
||||||
|
|
||||||
|
TAG=$(git describe --tags --dirty)
|
||||||
|
RELEASE_DIR=release-${TAG}
|
||||||
|
|
||||||
|
OUTPUT_DIR=bin
|
||||||
|
|
||||||
|
# Always clean first
|
||||||
|
rm -Rf ${SRC_DIR}/${RELEASE_DIR}
|
||||||
|
mkdir -p ${SRC_DIR}/${RELEASE_DIR}
|
||||||
|
|
||||||
|
docker run -i -v ${SRC_DIR}:/opt/src --rm golang:1.8-alpine \
|
||||||
|
/bin/sh -xe -c "\
|
||||||
|
apk --no-cache add bash tar;
|
||||||
|
cd /opt/src; umask 0022;
|
||||||
|
for arch in amd64 arm arm64 ppc64le s390x; do \
|
||||||
|
CGO_ENABLED=0 GOARCH=\$arch ./build.sh ${BUILDFLAGS}; \
|
||||||
|
for format in tgz; do \
|
||||||
|
FILENAME=cni-plugins-\$arch-${TAG}.\$format; \
|
||||||
|
FILEPATH=${RELEASE_DIR}/\$FILENAME; \
|
||||||
|
tar -C ${OUTPUT_DIR} --owner=0 --group=0 -caf \$FILEPATH .; \
|
||||||
|
if [ \"\$arch\" == \"amd64\" ]; then \
|
||||||
|
cp \$FILEPATH ${RELEASE_DIR}/cni-${TAG}.\$format; \
|
||||||
|
fi; \
|
||||||
|
done; \
|
||||||
|
done;
|
||||||
|
cd ${RELEASE_DIR};
|
||||||
|
for f in *.tgz; do sha1sum \$f > \$f.sha1; done;
|
||||||
|
for f in *.tgz; do sha256sum \$f > \$f.sha256; done;
|
||||||
|
for f in *.tgz; do sha512sum \$f > \$f.sha512; done;
|
||||||
|
cd ..
|
||||||
|
chown -R ${UID} ${OUTPUT_DIR} ${RELEASE_DIR}"
|
Loading…
x
Reference in New Issue
Block a user