Browse Source

release.sh: publish a full release of docker to a S3 bucket, including static binary and a full APT repository with install instructions

Solomon Hykes 12 năm trước cách đây
mục cha
commit
ccc3969536
1 tập tin đã thay đổi với 81 bổ sung0 xóa
  1. 81 0
      release.sh

+ 81 - 0
release.sh

@@ -0,0 +1,81 @@
+#!/bin/sh
+
+# This script looks for bundles built by make.sh, and releases them on a public S3 bucket.
+#
+# Bundles should be available for the VERSION string passed as argument.
+#
+# The correct way to call this script is inside a container built by the official Dockerfile
+# at the root of the docker source code. The Dockerfile, make.sh and release.sh should all
+# be from the same source code revision.
+
+set -x
+set -e
+
+# Print a usage message and exit.
+usage() {
+	echo "Usage: $0 VERSION BUCKET"
+	echo "For example: $0 0.5.1-dev sandbox.get.docker.io"
+	exit 1
+}
+
+VERSION=$1
+BUCKET=$2
+[ -z "$VERSION" ] && usage
+[ -z "$BUCKET" ] && usage
+
+setup_s3() {
+	# Try creating the bucket. Ignore errors (it might already exist).
+	s3cmd --acl-public mb $BUCKET 2>/dev/null || true
+}
+
+# write_to_s3 uploads the contents of standard input to the specified S3 url.
+write_to_s3() {
+	DEST=$1
+	F=`mktemp`
+	cat > $F
+	s3cmd --acl-public put $F $DEST
+	rm -f $F
+}
+
+s3_url() {
+	echo "http://$BUCKET.s3.amazonaws.com"
+}
+
+# Upload the 'ubuntu' bundle to S3:
+# 1. A full APT repository is published at $BUCKET/ubuntu/
+# 2. Instructions for using the APT repository are uploaded at $BUCKET/ubuntu/info
+release_ubuntu() {
+	s3cmd --acl-public --verbose --delete-removed --follow-symlinks sync bundles/$VERSION/ubuntu/apt/ s3://$BUCKET/ubuntu/
+	cat <<EOF | write_to_s3 s3://$BUCKET/ubuntu/info
+# Add the following to /etc/apt/sources.list
+deb `s3_url $BUCKET`/ubuntu docker main
+EOF
+	echo "APT repository uploaded to http:. Instructions available at `s3_url $BUCKET`/ubuntu/info"
+}
+
+# Upload a static binary to S3
+release_binary() {
+	[ -e bundles/$VERSION ]
+	S3DIR=s3://$BUCKET/builds/Linux/x86_64
+	s3cmd --acl-public put bundles/$VERSION/binary/docker-$VERSION $S3DIR/docker-$VERSION
+	cat <<EOF | write_to_s3 s3://$BUCKET/builds/info
+# To install, run the following command as root:
+curl -O http://$BUCKET.s3.amazonaws.com/builds/Linux/x86_64/docker-$VERSION && chmod +x docker-$VERSION && sudo mv docker-$VERSION /usr/local/bin/docker
+# Then start docker in daemon mode:
+sudo /usr/local/bin/docker -d
+EOF
+	if [ -z "$NOLATEST" ]; then
+		echo "Copying docker-$VERSION to docker-latest"
+		s3cmd --acl-public cp $S3DIR/docker-$VERSION $S3DIR/docker-latest
+		echo "Advertising $VERSION on $BUCKET as most recent version"
+		echo $VERSION | write_to_s3 s3://$BUCKET/latest
+	fi
+}
+
+main() {
+	setup_s3
+	release_binary
+	release_ubuntu
+}
+
+main