File: preview_docs.rb

package info (click to toggle)
rails 2%3A7.2.2.1%2Bdfsg-7
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 43,352 kB
  • sloc: ruby: 349,799; javascript: 30,703; yacc: 46; sql: 43; sh: 29; makefile: 27
file content (90 lines) | stat: -rw-r--r-- 2,181 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# frozen_string_literal: true

require "erb"
require "cgi"

# How to test:
#
#   export BUILDKITE_COMMIT="c8b601a225"
#   export BUILDKITE_BUILD_CREATOR="zzak"
#   export BUILDKITE_REPO="https://github.com/rails/rails.git"
#   export BUILDKITE_BUILD_NUMBER="60"
#   export BUILDKITE_BUILD_URL="https://buildkite.com/rails/docs-preview/builds/60"
#   export BUILDKITE_BRANCH="preview_docs"
#   export BUILDKITE_MESSAGE="commit message"
#   export BUILDKITE_PULL_REQUEST="42"
#   bundle exec rake preview_docs
#   open preview/index.html
class PreviewDocs
  attr_reader :commit, :author, :build, :repo, :branch

  def initialize
    @commit = link_to(EnvVars.sha[0, 7], "#{EnvVars.repo}/commit/#{EnvVars.sha}")
    @author = EnvVars.actor
    @build = link_to(EnvVars.build_number, EnvVars.build_url)
    @repo = link_to(EnvVars.repo_slug, "#{EnvVars.repo}")
    @branch = link_to(EnvVars.branch, "#{EnvVars.repo}/tree/#{EnvVars.branch}")
    @message = EnvVars.message || "n/a"
    @pull_request = EnvVars.pull_request ? link_to("##{EnvVars.pull_request}", "#{EnvVars.repo}/pull/#{EnvVars.pull_request}") : "n/a"
  end

  def render(outdir)
    template = File.open("tools/preview_docs/index.html.erb").read
    result = ERB.new(template).result(binding)
    File.open("#{outdir}/index.html", "w") do |f|
      f.write result
    end
  end

  def link_to(name, url)
    "<a href=\"#{escape(url)}\">#{escape(name)}</a>"
  end

  def escape(str)
    CGI.escapeHTML(str)
  end
end

module EnvVars
  def self.sha
    fetch "BUILDKITE_COMMIT"
  end

  def self.actor
    fetch "BUILDKITE_BUILD_CREATOR"
  end

  def self.repo
    fetch("BUILDKITE_REPO").gsub(".git", "")
  end

  def self.repo_slug
    repo.slice(/\w+\/\w+\Z/)
  end

  def self.build_number
    fetch "BUILDKITE_BUILD_NUMBER"
  end

  def self.build_url
    fetch "BUILDKITE_BUILD_URL"
  end

  def self.branch
    fetch "BUILDKITE_BRANCH"
  end

  def self.message
    ENV.fetch "BUILDKITE_MESSAGE"
  end

  def self.pull_request
    pr = ENV.fetch("BUILDKITE_PULL_REQUEST")
    pr == "false" ? false : pr
  end

  private
    def self.fetch(env)
      ENV.fetch(env) { raise "#{env} env var undefined!" }
    end
end