Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Maintain a versions.json file tracking the latest per series #6

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 28 additions & 1 deletion lib/docs_generator.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
require 'set'
require 'logging'
require 'json'
require 'docs_compressor'
require 'git_manager'

Expand Down Expand Up @@ -86,7 +87,10 @@ def generate_stable_docs
end
end

adjust_symlinks_for_series if new_stable_docs
if new_stable_docs
adjust_symlinks_for_series
adjust_json_for_series
end
end

def generate_stable_docs_for?(tag)
Expand Down Expand Up @@ -163,6 +167,29 @@ def adjust_symlinks_for_series
end
end

def adjust_json_for_series
entries = series.map { |series, tag|
next if series == STABLE
{ series: series.delete('v'), version: tag.delete('v'), date: git_manager.tag_date(tag) }
}.compact.sort { |a, b| compare_tags(b[:version], a[:version]) }

json_content = JSON.dump(entries)
js_content = 'currentRailsVersions(' + json_content + ');'

[API, GUIDES].each do |_|
Dir.chdir(_) do
ensure_file 'versions.json', json_content
ensure_file 'versions.js', js_content
end
end
end

def ensure_file(filename, content)
unless File.exist?(filename) && File.read(filename) == content
File.open(filename, 'w') { |f| f.write(content) }
end
end

def series
sds = stable_directories

Expand Down
6 changes: 6 additions & 0 deletions lib/git_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,12 @@ def release_tags
end
end

def tag_date(tag)
Dir.chdir("#{basedir}/master") do
`git for-each-ref --format="%(taggerdate:iso8601)" refs/tags/#{tag}`.chomp
end
end

def short_sha1
sha1[0, 7]
end
Expand Down
25 changes: 25 additions & 0 deletions test/test_docs_generator.rb
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,31 @@ def test_series
end
end

def test_version_json
stable_directories = %w(v3.1.2 v3.1.0 v4.2.1 v4.2.7 v5.0.0)
expected = '[{"series":"5.0","version":"5.0.0","date":"2000-01-01 01:12:23 +0100"},'\
'{"series":"4.2","version":"4.2.7","date":"2000-01-01 01:12:23 +0100"},'\
'{"series":"3.1","version":"3.1.2","date":"2000-01-01 01:12:23 +0100"}]'

in_tmpdir do
mkdir 'basedir'
mkdir 'api'
mkdir 'guides'

Dir.chdir('basedir') do
stable_directories.each {|sd| mkdir sd}
end

git_manager = GitManager.new('basedir')

git_manager.stub(:tag_date, '2000-01-01 01:12:23 +0100') do
DocsGenerator.new('basedir', git_manager).adjust_json_for_series
end

assert_equal expected, File.read('api/versions.json')
end
end

def test_stable_directories
stable_directories = %w(v4.0.1 v4.1.7 v4.11.2 v3.1.2)

Expand Down
18 changes: 18 additions & 0 deletions test/test_git_manager.rb
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,24 @@ def test_release_tags
end
end

def test_tag_date
in_tmpdir do
mkdir_p 'basedir/master'

chdir 'basedir/master' do
create_repository
%w(0.9.4.1 2.3.9.pre 3.0.0_RC2 3.2.8.rc1 3.2.14 v4.0.0.beta1 4.0.1).each_with_index do |version, idx|
system "GIT_COMMITTER_DATE='2000-01-#{10 + idx} 01:23:45 -0200' git tag -a -m 'Release' v#{version}"
end
end

git_manager = GitManager.new('basedir')
assert_equal '2000-01-10 01:23:45 -0200', git_manager.tag_date('v0.9.4.1')
assert_equal '2000-01-14 01:23:45 -0200', git_manager.tag_date('v3.2.14')
assert_equal '2000-01-16 01:23:45 -0200', git_manager.tag_date('v4.0.1')
end
end

def test_sha1_and_short_sha1
in_tmpdir do
mkdir_p 'basedir/master'
Expand Down