diff --git a/website/packer.json b/website/packer.json index 72b288ed0..fd2618f17 100644 --- a/website/packer.json +++ b/website/packer.json @@ -10,15 +10,12 @@ "type": "docker", "image": "hashicorp/middleman-hashicorp:0.3.28", "discard": "true", - "run_command": ["-d", "-i", "-t", "{{ .Image }}", "/bin/sh"] + "volumes": { + "{{ pwd }}": "/website" + } } ], "provisioners": [ - { - "type": "file", - "source": ".", - "destination": "/website" - }, { "type": "shell", "environment_vars": [ @@ -30,7 +27,7 @@ "inline": [ "bundle check || bundle install", "bundle exec middleman build", - "/bin/sh ./scripts/deploy.sh" + "/bin/bash ./scripts/deploy.sh" ] } ] diff --git a/website/redirects.txt b/website/redirects.txt new file mode 100644 index 000000000..d7e6a0c21 --- /dev/null +++ b/website/redirects.txt @@ -0,0 +1,41 @@ +# +# REDIRECTS FILE +# +# This is a sample redirect file. Redirects allow individual projects to add +# their own redirect rules in a declarative manner using Fastly edge +# dictionaries. +# +# FORMAT +# +# Redirects are in the format. There must be at least one space between the +# original path and the new path, and there must be exactly two entries per +# line. +# +# /original-path /new-path +# +# GLOB MATCHING +# +# Because of the way lookup tables work, there is no support for glob matching. +# Fastly does not provide a way to iterate through the lookup table, so it is +# not possible to run through the table and find anything that matches. As such +# URLs must match directly. +# +# More complex redirects are possible, but must be added directly to the +# configuration. Please contact the release engineering team for assistance. +# +# DELETING +# +# Deleting items is not supported at this time. To delete an item, contact the +# release engineering team and they will delete the dictionary item. +# +# MISC +# +# - Blank lines are ignored +# - Comments are hash-style +# - URLs are limited to 256 characters +# - Items are case-sensitive (please use all lowercase) +# + +/support.html / +/sponsors.html / +/about.html /intro/index.html diff --git a/website/scripts/deploy.sh b/website/scripts/deploy.sh index 317c8d2fd..d87232f5f 100755 --- a/website/scripts/deploy.sh +++ b/website/scripts/deploy.sh @@ -1,9 +1,10 @@ -#!/bin/sh +#!/usr/bin/env bash set -e PROJECT="vagrant" PROJECT_URL="www.vagrantup.com" FASTLY_SERVICE_ID="7GrxRJP3PVBuqQbyxYQ0MV" +FASTLY_DICTIONARY_ID="5Z2ArNwTMBmJXVh0R5h7wO" # Ensure the proper AWS environment variables are set if [ -z "$AWS_ACCESS_KEY_ID" ]; then @@ -93,6 +94,75 @@ if [ -z "$NO_UPLOAD" ]; then modify "s3://hc-sites/$PROJECT/latest/" fi +# Add redirects if they exist +if [ -z "$NO_REDIRECTS" ] || [ ! test -f "./redirects.txt" ]; then + echo "Adding redirects..." + fields=() + while read -r line; do + [[ "$line" =~ ^#.* ]] && continue + [[ -z "$line" ]] && continue + + # Read fields + IFS=" " read -ra parts <<<"$line" + fields+=("${parts[@]}") + done < "./redirects.txt" + + # Check we have pairs + if [ $((${#fields[@]} % 2)) -ne 0 ]; then + echo "Bad redirects (not an even number)!" + exit 1 + fi + + # Check we don't have more than 1000 entries (yes, it says 2000 below, but that + # is because we've split into multiple lines). + if [ "${#fields}" -gt 2000 ]; then + echo "More than 1000 entries!" + exit 1 + fi + + # Validations + for field in "${fields[@]}"; do + if [ "${#field}" -gt 256 ]; then + echo "'$field' is > 256 characters!" + exit 1 + fi + + if [ "${field:0:1}" != "/" ]; then + echo "'$field' does not start with /!" + exit 1 + fi + done + + # Build the payload for single-request updates. + jq_args=() + jq_query="." + for (( i=0; i<${#fields[@]}; i+=2 )); do + original="${fields[i]}" + redirect="${fields[i+1]}" + echo "Redirecting ${original} -> ${redirect}" + jq_args+=(--arg "key$((i/2))" "${original}") + jq_args+=(--arg "value$((i/2))" "${redirect}") + jq_query+="| .items |= (. + [{op: \"upsert\", item_key: \$key$((i/2)), item_value: \$value$((i/2))}])" + done + + # Do not post empty items (the API gets sad) + if [ "${#jq_args[@]}" -ne 0 ]; then + json="$(jq "${jq_args[@]}" "${jq_query}" <<<'{"items": []}')" + + # Post the JSON body + curl \ + --fail \ + --silent \ + --output /dev/null \ + --request "PATCH" \ + --header "Fastly-Key: $FASTLY_API_KEY" \ + --header "Content-type: application/json" \ + --header "Accept: application/json" \ + --data "$json"\ + "https://api.fastly.com/service/$FASTLY_SERVICE_ID/dictionary/$FASTLY_DICTIONARY_ID/items" + fi +fi + # Perform a purge of the surrogate key. if [ -z "$NO_PURGE" ]; then echo "Purging Fastly cache..." @@ -118,8 +188,13 @@ if [ -z "$NO_WARM" ]; then echo "wget --recursive --delete-after https://$PROJECT_URL/" echo "" wget \ - --recursive \ --delete-after \ - --quiet \ + --level inf \ + --no-directories \ + --no-host-directories \ + --no-verbose \ + --page-requisites \ + --recursive \ + --spider \ "https://$PROJECT_URL/" fi diff --git a/website/source/community.html.erb b/website/source/community.html.erb index 883a4d1e6..059386c6f 100644 --- a/website/source/community.html.erb +++ b/website/source/community.html.erb @@ -34,72 +34,3 @@ description: |- Paid HashiCorp training courses are also available in a city near you. Private training courses are also available.
- -- The following people are some of the faces behind Vagrant. They each - contribute to Vagrant in some core way. Over time, faces may appear and - disappear from this list as contributors come and go. In addition to - the faces below, Vagrant is a project by - HashiCorp, so many HashiCorp - employees actively contribute to Vagrant. -
-- Mitchell Hashimoto is a creator of Vagrant. He has been with the - Vagrant project from the very beginning. Mitchell is also the - creator of - Consul, - Packer, - Serf, and - Otto. -
-- Jack Pearkes created and maintains many projects at HashiCorp. He - is the original author of Vagrant Cloud. - He is also a core committer to Packer - and maintains many successful - open source projects - while also being an employee of - HashiCorp. -
-- Seth Vargo is a core committer to Vagrant, with his main focus - being the core plugin system, pushes, and provisioners. Seth is - also a contributor to Consul, Packer, and Vault, all while being - an employee at HashiCorp. -
-