Use releases for releases
|
@ -1,7 +1,7 @@
|
|||
GEM
|
||||
remote: https://rubygems.org/
|
||||
specs:
|
||||
activesupport (3.2.21)
|
||||
activesupport (3.2.22)
|
||||
i18n (~> 0.6, >= 0.6.4)
|
||||
multi_json (~> 1.0)
|
||||
builder (3.2.2)
|
||||
|
@ -9,7 +9,7 @@ GEM
|
|||
coffee-script (2.2.0)
|
||||
coffee-script-source
|
||||
execjs
|
||||
coffee-script-source (1.9.1)
|
||||
coffee-script-source (1.9.1.1)
|
||||
commonjs (0.2.7)
|
||||
compass (1.0.3)
|
||||
chunky_png (~> 1.2)
|
||||
|
@ -23,20 +23,20 @@ GEM
|
|||
sass (>= 3.3.0, < 3.5)
|
||||
compass-import-once (1.0.5)
|
||||
sass (>= 3.2, < 3.5)
|
||||
daemons (1.1.9)
|
||||
eventmachine (1.0.7)
|
||||
daemons (1.2.3)
|
||||
eventmachine (1.0.8)
|
||||
execjs (1.4.1)
|
||||
multi_json (~> 1.0)
|
||||
ffi (1.9.6)
|
||||
haml (4.0.6)
|
||||
ffi (1.9.10)
|
||||
haml (4.0.7)
|
||||
tilt
|
||||
highline (1.6.21)
|
||||
hike (1.2.3)
|
||||
i18n (0.6.11)
|
||||
kramdown (1.5.0)
|
||||
kramdown (1.9.0)
|
||||
less (2.2.2)
|
||||
commonjs (~> 0.2.6)
|
||||
libv8 (3.16.14.7)
|
||||
libv8 (3.16.14.13)
|
||||
listen (1.3.1)
|
||||
rb-fsevent (>= 0.9.3)
|
||||
rb-inotify (>= 0.9)
|
||||
|
@ -75,25 +75,25 @@ GEM
|
|||
sprockets-helpers (~> 1.0.0)
|
||||
sprockets-sass (~> 1.0.0)
|
||||
mini_portile (0.6.2)
|
||||
multi_json (1.10.1)
|
||||
multi_json (1.11.2)
|
||||
nokogiri (1.6.6.2)
|
||||
mini_portile (~> 0.6.0)
|
||||
rack (1.6.0)
|
||||
rack (1.6.4)
|
||||
rack-contrib (1.1.0)
|
||||
rack (>= 0.9.1)
|
||||
rack-protection (1.5.3)
|
||||
rack
|
||||
rack-test (0.6.3)
|
||||
rack (>= 1.0)
|
||||
rb-fsevent (0.9.4)
|
||||
rb-fsevent (0.9.6)
|
||||
rb-inotify (0.9.5)
|
||||
ffi (>= 0.5.0)
|
||||
rb-kqueue (0.2.3)
|
||||
rb-kqueue (0.2.4)
|
||||
ffi (>= 0.5.0)
|
||||
redcarpet (3.0.0)
|
||||
ref (1.0.5)
|
||||
sass (3.4.13)
|
||||
sprockets (2.12.3)
|
||||
ref (2.0.0)
|
||||
sass (3.4.19)
|
||||
sprockets (2.12.4)
|
||||
hike (~> 1.2)
|
||||
multi_json (~> 1.0)
|
||||
rack (~> 1.0)
|
||||
|
@ -103,7 +103,7 @@ GEM
|
|||
sprockets-sass (1.0.3)
|
||||
sprockets (~> 2.0)
|
||||
tilt (~> 1.1)
|
||||
therubyracer (0.12.1)
|
||||
therubyracer (0.12.2)
|
||||
libv8 (~> 3.16.14.0)
|
||||
ref
|
||||
thin (1.5.1)
|
||||
|
@ -112,7 +112,7 @@ GEM
|
|||
rack (>= 1.0.0)
|
||||
thor (0.19.1)
|
||||
tilt (1.3.7)
|
||||
tzinfo (0.3.43)
|
||||
tzinfo (0.3.45)
|
||||
uglifier (2.1.2)
|
||||
execjs (>= 0.3.0)
|
||||
multi_json (~> 1.0, >= 1.0.2)
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
require File.expand_path("../helpers/download_helpers", __FILE__)
|
||||
require_relative "helpers/middleman_hashicorp_shim"
|
||||
helpers MiddlemanHashiCorpHelpers
|
||||
|
||||
page "/blog_feed.xml", layout: false
|
||||
ignore "/download-archive-single.html"
|
||||
|
||||
# Archived download pages
|
||||
$vagrant_versions.each do |version|
|
||||
proxy "/download-archive/v#{version}.html", "/download-archive-single.html",
|
||||
locals: { version: version }, ignore: true
|
||||
end
|
||||
# The version of Vagrant - update this to update the downloads page
|
||||
set :latest_version, '1.7.4'
|
||||
|
||||
set :css_dir, 'stylesheets'
|
||||
set :js_dir, 'javascripts'
|
||||
|
|
|
@ -6,6 +6,7 @@ require "rack/contrib/try_static"
|
|||
require "rack/protection"
|
||||
|
||||
require File.expand_path("../lib/legacy_redirect", __FILE__)
|
||||
require File.expand_path("../lib/redirect_to_releases", __FILE__)
|
||||
|
||||
# Protect against various bad things
|
||||
use Rack::Protection::JsonCsrf
|
||||
|
@ -23,6 +24,9 @@ use Rack::Deflater
|
|||
# Redirect the legacy URLs that point to www.vagrantup.com
|
||||
use HashiCorp::Rack::LegacyRedirect
|
||||
|
||||
# Redirect the archive page to releases
|
||||
use HashiCorp::Rack::RedirectToReleases
|
||||
|
||||
# Set the "forever expire" cache headers for these static assets. Since
|
||||
# we hash the contents of the assets to determine filenames, this is safe
|
||||
# to do.
|
||||
|
|
|
@ -1,85 +0,0 @@
|
|||
require "json"
|
||||
require "net/http"
|
||||
require "net/https"
|
||||
|
||||
$vagrant_files = {}
|
||||
$vagrant_os = []
|
||||
|
||||
$vagrant_os_mappings = {
|
||||
".deb" => "debian",
|
||||
".dmg" => "darwin",
|
||||
".msi" => "windows",
|
||||
".rpm" => "rpm",
|
||||
}
|
||||
|
||||
$vagrant_os_order = ["darwin", "windows", "debian", "rpm"]
|
||||
$vagrant_downloads = {}
|
||||
$vagrant_versions = []
|
||||
|
||||
if ENV["VAGRANT_VERSION"]
|
||||
puts "Finding downloads for Vagrant"
|
||||
raise "BINTRAY_API_KEY must be set." if !ENV["BINTRAY_API_KEY"]
|
||||
http = Net::HTTP.new("bintray.com", 443)
|
||||
http.use_ssl = true
|
||||
req = Net::HTTP::Get.new("/api/v1/packages/mitchellh/vagrant/vagrant/files")
|
||||
req.basic_auth "mitchellh", ENV["BINTRAY_API_KEY"]
|
||||
response = http.request(req)
|
||||
data = JSON.parse(response.body)
|
||||
|
||||
data.each do |file|
|
||||
filename = file["name"]
|
||||
|
||||
# Ignore any files that don't appear to have a version in it
|
||||
next if filename !~ /[-_]?(\d+\.\d+\.\d+[^-_.]*)/
|
||||
version = Gem::Version.new($1.to_s)
|
||||
$vagrant_downloads[version] ||= {}
|
||||
|
||||
$vagrant_os_mappings.each do |suffix, os|
|
||||
if filename.end_with?(suffix)
|
||||
$vagrant_downloads[version][os] ||= []
|
||||
$vagrant_downloads[version][os] << filename
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
$vagrant_versions = $vagrant_downloads.keys.sort.reverse
|
||||
$vagrant_versions.each do |v|
|
||||
puts "- Version #{v} found"
|
||||
end
|
||||
else
|
||||
puts "Not generating downloads."
|
||||
end
|
||||
|
||||
module DownloadHelpers
|
||||
def download_arch(file)
|
||||
if file.include?("i686")
|
||||
return "32-bit"
|
||||
elsif file.include?("x86_64")
|
||||
return "64-bit"
|
||||
else
|
||||
return "Universal (32 and 64-bit)"
|
||||
end
|
||||
end
|
||||
|
||||
def download_os_human(os)
|
||||
if os == "darwin"
|
||||
return "Mac OS X"
|
||||
elsif os == "debian"
|
||||
return "Linux (Deb)"
|
||||
elsif os == "rpm"
|
||||
return "Linux (RPM)"
|
||||
elsif os == "windows"
|
||||
return "Windows"
|
||||
else
|
||||
return os
|
||||
end
|
||||
end
|
||||
|
||||
def download_url(file)
|
||||
"https://dl.bintray.com/mitchellh/vagrant/#{file}"
|
||||
end
|
||||
|
||||
def latest_version
|
||||
$vagrant_versions.first
|
||||
end
|
||||
end
|
|
@ -0,0 +1,103 @@
|
|||
# This file is a shim that mirrors the behavior or middleman-hashicorp without
|
||||
# fully importing it. Vagrant is somewhat of a beast and cannot be easily
|
||||
# updated due to older versions of bootstrap and javascript and whatnot.
|
||||
|
||||
require "open-uri"
|
||||
|
||||
class MiddlemanHashiCorpReleases
|
||||
RELEASES_URL = "https://releases.hashicorp.com".freeze
|
||||
|
||||
class Build < Struct.new(:name, :version, :os, :arch, :url); end
|
||||
|
||||
def self.fetch(product, version)
|
||||
url = "#{RELEASES_URL}/#{product}/#{version}/index.json"
|
||||
r = JSON.parse(open(url).string,
|
||||
create_additions: false,
|
||||
symbolize_names: true,
|
||||
)
|
||||
|
||||
# Convert the builds into the following format:
|
||||
#
|
||||
# {
|
||||
# "os" => {
|
||||
# "arch" => "https://download.url"
|
||||
# }
|
||||
# }
|
||||
#
|
||||
{}.tap do |h|
|
||||
r[:builds].each do |b|
|
||||
build = Build.new(*b.values_at(*Build.members))
|
||||
|
||||
h[build.os] ||= {}
|
||||
h[build.os][build.arch] = build.url
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
module MiddlemanHashiCorpHelpers
|
||||
#
|
||||
# Output an image that corresponds to the given operating system using the
|
||||
# vendored image icons.
|
||||
#
|
||||
# @return [String] (html)
|
||||
#
|
||||
def system_icon(name)
|
||||
image_tag("icons/icon_#{name.to_s.downcase}.png")
|
||||
end
|
||||
|
||||
#
|
||||
# The formatted operating system name.
|
||||
#
|
||||
# @return [String]
|
||||
#
|
||||
def pretty_os(os)
|
||||
case os
|
||||
when /darwin/
|
||||
"Mac OS X"
|
||||
when /freebsd/
|
||||
"FreeBSD"
|
||||
when /openbsd/
|
||||
"OpenBSD"
|
||||
when /linux/
|
||||
"Linux"
|
||||
when /windows/
|
||||
"Windows"
|
||||
else
|
||||
os.capitalize
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# The formatted architecture name.
|
||||
#
|
||||
# @return [String]
|
||||
#
|
||||
def pretty_arch(arch)
|
||||
case arch
|
||||
when /all/
|
||||
"Universal (32 and 64-bit)"
|
||||
when /686/, /386/
|
||||
"32-bit"
|
||||
when /86_64/, /amd64/
|
||||
"64-bit"
|
||||
else
|
||||
parts = arch.split("_")
|
||||
|
||||
if parts.empty?
|
||||
raise "Could not determine pretty arch `#{arch}'!"
|
||||
end
|
||||
|
||||
parts.last.capitalize
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# Query the Bintray API to get the real product download versions.
|
||||
#
|
||||
# @return [Hash]
|
||||
#
|
||||
def product_versions
|
||||
MiddlemanHashiCorpReleases.fetch("vagrant", latest_version)
|
||||
end
|
||||
end
|
|
@ -0,0 +1,37 @@
|
|||
module HashiCorp
|
||||
module Rack
|
||||
# This redirects to releases.hashicorp.com when a user tries to download
|
||||
# an old version of Vagrant.
|
||||
class RedirectToReleases
|
||||
def initialize(app)
|
||||
@app = app
|
||||
end
|
||||
|
||||
def call(env)
|
||||
if env["PATH_INFO"] =~ /^\/downloads-archive/
|
||||
headers = {
|
||||
"Content-Type" => "text/html",
|
||||
"Location" => "https://releases.hashicorp.com/vagrant",
|
||||
}
|
||||
|
||||
message = "Redirecting to releases archive..."
|
||||
|
||||
return [301, headers, [message]]
|
||||
end
|
||||
|
||||
if env["PATH_INFO"] =~ /^\/download-archive\/v(.+)\.html/
|
||||
headers = {
|
||||
"Content-Type" => "text/html",
|
||||
"Location" => "https://releases.hashicorp.com/vagrant/#{$1}",
|
||||
}
|
||||
|
||||
message = "Redirecting to releases archive..."
|
||||
|
||||
return [301, headers, [message]]
|
||||
end
|
||||
|
||||
@app.call(env)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,4 +1,4 @@
|
|||
<ul class="unstyled">
|
||||
<li<%= sidebar_current("downloads") %>><a href="/downloads.html">Latest</a></li>
|
||||
<li<%= sidebar_current("downloads-archive") %>><a href="/downloads-archive.html">Old Versions</a></li>
|
||||
<li><a href="/downloads-archive.html">Old Versions</a></li>
|
||||
</ul>
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
---
|
||||
layout: "inner"
|
||||
sidebar_current: "downloads"
|
||||
sidebar_template: "downloads"
|
||||
sidebar_title: "Download"
|
||||
page_title: "Download Old Vagrant Version"
|
||||
---
|
||||
|
||||
<h2>Old Vagrant Version: <%= version %></h2>
|
||||
|
||||
<div class="alert alert-block alert-info">
|
||||
This is the downloads page for an <em>old</em> version of Vagrant.
|
||||
The latest version of Vagrant can always be found on the
|
||||
<a href="/downloads.html">main downloads page</a>.
|
||||
</div>
|
||||
|
||||
<div class="downloads">
|
||||
<div class="description">
|
||||
<p>
|
||||
You can find the SHA256 checksums for this version of Vagrant
|
||||
<a href="https://dl.bintray.com/mitchellh/vagrant/<%= version %>_SHA256SUMS?direct">here</a>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<% $vagrant_os_order.each do |os| %>
|
||||
<% downloads = $vagrant_downloads[version] %>
|
||||
<% if downloads[os] && !downloads[os].empty? %>
|
||||
<div class="row">
|
||||
<div class="span8 download">
|
||||
<div class="icon pull-left"><%= image_tag "/images/icons/icon_#{os}.png" %></div>
|
||||
<div class="details">
|
||||
<h2 class="os-name"><%= download_os_human(os) %></h2>
|
||||
<ul>
|
||||
<% downloads[os].each do |file| %>
|
||||
<li><a href="<%= download_url(file) %>"><%= download_arch(file) %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<div class="poweredby">
|
||||
<a href='https://www.bintray.com'>
|
||||
<img src='https://www.bintray.com/docs/images/poweredByBintray_ColorTransparent.png'>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
---
|
||||
layout: "inner"
|
||||
sidebar_current: "downloads-archive"
|
||||
sidebar_template: "downloads"
|
||||
sidebar_title: "Download"
|
||||
page_title: "Download Old Versions of Vagrant"
|
||||
---
|
||||
|
||||
<h2>Old Versions</h2>
|
||||
|
||||
<p>
|
||||
This webpage lists the older versions of Vagrant that are available for
|
||||
download. Some even older versions are available from the
|
||||
<a href="https://www.vagrantup.com/downloads-archive.html">legacy downloads page</a>.
|
||||
</p>
|
||||
|
||||
<p>
|
||||
The latest version of Vagrant can be found on the
|
||||
<a href="/downloads.html">main downloads page</a>.
|
||||
</p>
|
||||
|
||||
<% if $vagrant_versions.length > 1 %>
|
||||
<ul>
|
||||
<% $vagrant_versions[1..-1].each do |version| %>
|
||||
<li><p><a href="/download-archive/v<%= version.to_s %>.html"><%= version.to_s %></a></p></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% else %>
|
||||
<p>
|
||||
No old Vagrant versions could be found.
|
||||
</p>
|
||||
<% end %>
|
|
@ -9,41 +9,47 @@ page_title: "Download Vagrant"
|
|||
<h2>Download Vagrant</h2>
|
||||
|
||||
<div class="downloads">
|
||||
<div class="description">
|
||||
<p>
|
||||
Below are all available downloads for the latest version of Vagrant
|
||||
(<%= latest_version %>). Please download the proper package for your
|
||||
operating system and architecture. You can find SHA256 checksums
|
||||
for packages <a href="https://dl.bintray.com/mitchellh/vagrant/<%= latest_version %>_SHA256SUMS?direct">here</a>,
|
||||
and you can find the version changelog <a href="https://github.com/mitchellh/vagrant/blob/master/CHANGELOG.md">here</a>.
|
||||
</p>
|
||||
</div>
|
||||
<div class="description">
|
||||
<p>
|
||||
Below are the available downloads for the latest version of Vagrant
|
||||
(<%= latest_version %>). Please download the proper package for your
|
||||
operating system and architecture.
|
||||
</p>
|
||||
<p>
|
||||
You can find the
|
||||
<a href="https://releases.hashicorp.com/vagrant/<%= latest_version %>/vagrant_<%= latest_version %>_SHA256SUMS">
|
||||
SHA256 checksums for Vagrant <%= latest_version %>
|
||||
</a>
|
||||
online and you can
|
||||
<a href="https://releases.hashicorp.com/vagrant/<%= latest_version %>/vagrant_<%= latest_version %>_SHA256SUMS.sig">
|
||||
verify the checksums signature file
|
||||
</a>
|
||||
which has been signed using <a href="https://hashicorp.com/security.html" target="_TOP">HashiCorp's GPG key</a>.
|
||||
You can also <a href="https://releases.hashicorp.com/vagrant" target="_TOP">download older versions of Vagrant</a> from the releases service.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<% if latest_version %>
|
||||
<% $vagrant_os_order.each do |os| %>
|
||||
<% downloads = $vagrant_downloads[latest_version] %>
|
||||
<% if downloads[os] && !downloads[os].empty? %>
|
||||
<div class="row">
|
||||
<div class="span8 download">
|
||||
<div class="icon pull-left"><%= image_tag "/images/icons/icon_#{os}.png" %></div>
|
||||
<div class="details">
|
||||
<h2 class="os-name"><%= download_os_human(os) %></h2>
|
||||
<ul>
|
||||
<% downloads[os].each do |file| %>
|
||||
<li><a href="<%= download_url(file) %>"><%= download_arch(file) %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% product_versions.each do |os, arches| %>
|
||||
<% next if os == "web" %>
|
||||
<div class="row">
|
||||
<div class="col-md-12 download">
|
||||
<div class="icon pull-left"><%= system_icon(os) %></div>
|
||||
<div class="details">
|
||||
<h2 class="os-name"><%= pretty_os(os) %></h2>
|
||||
<ul>
|
||||
<% arches.each do |arch, url| %>
|
||||
<li><a href="<%= url %>"><%= pretty_arch(arch) %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<div class="clearfix"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div class="poweredby">
|
||||
<a href='https://www.bintray.com'>
|
||||
<img src='https://www.bintray.com/docs/images/poweredByBintray_ColorTransparent.png'>
|
||||
</a>
|
||||
</div>
|
||||
<div class="poweredby">
|
||||
<a href="https://www.fastly.com?utm_source=hashicorp" target="_TOP">
|
||||
<%= image_tag "fastly_logo.png" %>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
|
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 848 B After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 5.7 KiB |
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 10 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 3.2 KiB |