2014-04-15 02:01:25 -04:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
|
|
|
|
set -o pipefail
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
cat >&2 <<'EOF'
|
|
|
|
To publish the Docker documentation you need to set your access_key and secret_key in the docs/awsconfig file
|
|
|
|
(with the keys in a [profile $AWS_S3_BUCKET] section - so you can have more than one set of keys in your file)
|
|
|
|
and set the AWS_S3_BUCKET env var to the name of your bucket.
|
|
|
|
|
2014-10-12 23:53:16 -04:00
|
|
|
If you're publishing the current release's documentation, also set `BUILD_ROOT=yes`
|
|
|
|
|
2014-07-01 20:30:25 -04:00
|
|
|
make AWS_S3_BUCKET=docs-stage.docker.com docs-release
|
2014-04-15 02:01:25 -04:00
|
|
|
|
|
|
|
will then push the documentation site to your s3 bucket.
|
2014-10-22 21:45:21 -04:00
|
|
|
|
|
|
|
Note: you can add `OPTIONS=--dryrun` to see what will be done without sending to the server
|
2014-04-15 02:01:25 -04:00
|
|
|
EOF
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
[ "$AWS_S3_BUCKET" ] || usage
|
|
|
|
|
2014-06-22 23:10:00 -04:00
|
|
|
VERSION=$(cat VERSION)
|
|
|
|
|
2014-10-22 21:45:21 -04:00
|
|
|
if [ "$AWS_S3_BUCKET" == "docs.docker.com" ]; then
|
2014-06-22 23:10:00 -04:00
|
|
|
if [ "${VERSION%-dev}" != "$VERSION" ]; then
|
|
|
|
echo "Please do not push '-dev' documentation to docs.docker.com ($VERSION)"
|
|
|
|
exit 1
|
|
|
|
fi
|
2014-10-12 23:53:16 -04:00
|
|
|
cat > ./sources/robots.txt <<'EOF'
|
|
|
|
User-agent: *
|
|
|
|
Allow: /
|
|
|
|
EOF
|
|
|
|
|
|
|
|
else
|
|
|
|
cat > ./sources/robots.txt <<'EOF'
|
|
|
|
User-agent: *
|
|
|
|
Disallow: /
|
|
|
|
EOF
|
2014-06-22 23:10:00 -04:00
|
|
|
fi
|
|
|
|
|
2014-07-21 01:51:14 -04:00
|
|
|
# Remove the last version - 1.0.2-dev -> 1.0
|
|
|
|
MAJOR_MINOR="v${VERSION%.*}"
|
|
|
|
export MAJOR_MINOR
|
|
|
|
|
2014-05-11 20:31:27 -04:00
|
|
|
export BUCKET=$AWS_S3_BUCKET
|
2014-04-15 02:01:25 -04:00
|
|
|
|
|
|
|
export AWS_CONFIG_FILE=$(pwd)/awsconfig
|
|
|
|
[ -e "$AWS_CONFIG_FILE" ] || usage
|
|
|
|
export AWS_DEFAULT_PROFILE=$BUCKET
|
|
|
|
|
|
|
|
echo "cfg file: $AWS_CONFIG_FILE ; profile: $AWS_DEFAULT_PROFILE"
|
|
|
|
|
|
|
|
setup_s3() {
|
|
|
|
echo "Create $BUCKET"
|
|
|
|
# Try creating the bucket. Ignore errors (it might already exist).
|
2014-06-17 22:38:45 -04:00
|
|
|
aws s3 mb --profile $BUCKET s3://$BUCKET 2>/dev/null || true
|
2014-04-15 02:01:25 -04:00
|
|
|
# Check access to the bucket.
|
|
|
|
echo "test $BUCKET exists"
|
2014-06-17 22:38:45 -04:00
|
|
|
aws s3 --profile $BUCKET ls s3://$BUCKET
|
2014-04-15 02:01:25 -04:00
|
|
|
# Make the bucket accessible through website endpoints.
|
|
|
|
echo "make $BUCKET accessible as a website"
|
|
|
|
#aws s3 website s3://$BUCKET --index-document index.html --error-document jsearch/index.html
|
2014-05-11 20:31:27 -04:00
|
|
|
s3conf=$(cat s3_website.json | envsubst)
|
|
|
|
echo
|
|
|
|
echo $s3conf
|
|
|
|
echo
|
2014-06-17 22:38:45 -04:00
|
|
|
aws s3api --profile $BUCKET put-bucket-website --bucket $BUCKET --website-configuration "$s3conf"
|
2014-04-15 02:01:25 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
build_current_documentation() {
|
|
|
|
mkdocs build
|
|
|
|
}
|
|
|
|
|
|
|
|
upload_current_documentation() {
|
|
|
|
src=site/
|
2014-06-22 23:10:00 -04:00
|
|
|
dst=s3://$BUCKET$1
|
2014-04-15 02:01:25 -04:00
|
|
|
|
|
|
|
echo
|
|
|
|
echo "Uploading $src"
|
|
|
|
echo " to $dst"
|
|
|
|
echo
|
|
|
|
#s3cmd --recursive --follow-symlinks --preserve --acl-public sync "$src" "$dst"
|
2014-06-17 22:38:45 -04:00
|
|
|
#aws s3 cp --profile $BUCKET --cache-control "max-age=3600" --acl public-read "site/search_content.json" "$dst"
|
|
|
|
|
|
|
|
# a really complicated way to send only the files we want
|
|
|
|
# if there are too many in any one set, aws s3 sync seems to fall over with 2 files to go
|
2014-07-21 01:51:14 -04:00
|
|
|
# versions.html_fragment
|
2014-10-12 23:53:16 -04:00
|
|
|
endings=( json txt html xml css js gif png JPG ttf svg woff html_fragment )
|
2014-06-17 22:38:45 -04:00
|
|
|
for i in ${endings[@]}; do
|
|
|
|
include=""
|
|
|
|
for j in ${endings[@]}; do
|
|
|
|
if [ "$i" != "$j" ];then
|
|
|
|
include="$include --exclude *.$j"
|
|
|
|
fi
|
|
|
|
done
|
2014-10-12 23:53:16 -04:00
|
|
|
include="--include *.$i $include"
|
2014-06-17 22:38:45 -04:00
|
|
|
echo "uploading *.$i"
|
2014-10-22 21:45:21 -04:00
|
|
|
run="aws s3 sync $OPTIONS --profile $BUCKET --cache-control \"max-age=3600\" --acl public-read \
|
2014-06-17 22:38:45 -04:00
|
|
|
$include \
|
|
|
|
--exclude *.text* \
|
2014-10-12 23:53:16 -04:00
|
|
|
--exclude *.*~ \
|
2014-06-17 22:38:45 -04:00
|
|
|
--exclude *Dockerfile \
|
|
|
|
--exclude *.DS_Store \
|
|
|
|
--exclude *.psd \
|
|
|
|
--exclude *.ai \
|
|
|
|
--exclude *.eot \
|
|
|
|
--exclude *.otf \
|
|
|
|
--exclude *.rej \
|
|
|
|
--exclude *.rst \
|
|
|
|
--exclude *.orig \
|
|
|
|
--exclude *.py \
|
|
|
|
$src $dst"
|
|
|
|
echo "======================="
|
|
|
|
#echo "$run"
|
|
|
|
#echo "======================="
|
|
|
|
$run
|
|
|
|
done
|
2014-04-15 02:01:25 -04:00
|
|
|
}
|
|
|
|
|
2014-10-22 21:45:21 -04:00
|
|
|
if [ "$OPTIONS" != "--dryrun" ]; then
|
|
|
|
setup_s3
|
|
|
|
fi
|
2014-07-22 05:05:18 -04:00
|
|
|
|
|
|
|
# Default to only building the version specific docs so we don't clober the latest by accident with old versions
|
|
|
|
if [ "$BUILD_ROOT" == "yes" ]; then
|
|
|
|
echo "Building root documentation"
|
|
|
|
build_current_documentation
|
|
|
|
upload_current_documentation
|
|
|
|
fi
|
2014-04-15 02:01:25 -04:00
|
|
|
|
2014-06-22 23:10:00 -04:00
|
|
|
#build again with /v1.0/ prefix
|
|
|
|
sed -i "s/^site_url:.*/site_url: \/$MAJOR_MINOR\//" mkdocs.yml
|
2014-07-22 05:05:18 -04:00
|
|
|
echo "Building the /$MAJOR_MINOR/ documentation"
|
2014-06-22 23:10:00 -04:00
|
|
|
build_current_documentation
|
|
|
|
upload_current_documentation "/$MAJOR_MINOR/"
|