File: Rakefile

package info (click to toggle)
vim-command-t 5.0.2-5-g7147ba9-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster
  • size: 744 kB
  • sloc: ruby: 3,394; ansic: 1,177; makefile: 27; sh: 26; xml: 11
file content (184 lines) | stat: -rw-r--r-- 4,270 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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
require 'yaml'

def bail_on_failure
  exitstatus = $?.exitstatus
  if exitstatus != 0
    err "last command failed with exit status #{exitstatus}"
    exit 1
  end
end

def version
  `git describe`.chomp
end

def rubygems_version
  # RubyGems will barf if we try to pass an intermediate version number
  # like "1.1b2-10-g61a374a", so no choice but to abbreviate it
  `git describe --abbrev=0`.chomp
end

def yellow
  "\033[33m"
end

def red
  "\033[31m"
end

def clear
  "\033[0m"
end

def warn(str)
  puts "#{yellow}warning: #{str}#{clear}"
end

def err(str)
  puts "#{red}error: #{str}#{clear}"
end

task :default => :help

desc 'Print help on preparing a release'
task :help do
  puts <<-END

The general release sequence is:

  rake prerelease
  rake gem
  rake push
  rake upload:all

For a full list of available tasks:

  rake -T

  END
end

desc 'Run specs'
task :spec do
  system 'bundle exec rspec spec'
  bail_on_failure
end

desc 'Create archive'
task :archive => :check_tag do
  system "git archive -o command-t-#{version}.zip HEAD -- ."
  bail_on_failure
end

desc 'Clean compiled products'
task :clean do
  Dir.chdir 'ruby/command-t/ext/command-t' do
    system 'make clean' if File.exists?('Makefile')
    system 'rm -f Makefile'
  end
end

desc 'Compile extension'
task :make do
  Dir.chdir 'ruby/command-t/ext/command-t' do
    ruby 'extconf.rb'
    system 'make clean'
    bail_on_failure
    system 'make', 'V=1', 'DLDFLAGS=$(ldflags) $(dldflags) $(ARCH_FLAG) -Wl,--as-needed'
    bail_on_failure
  end
end

desc 'Check that the current HEAD is tagged'
task :check_tag do
  unless system 'git describe --exact-match HEAD 2> /dev/null'
    warn 'current HEAD is not tagged'
  end
end

desc 'Verify that required dependencies are installed'
task :check_deps do
  begin
    require 'rubygems'
    require 'mechanize'
  rescue LoadError
    warn 'mechanize not installed (`gem install mechanize` in order to upload)'
  end
end

desc 'Run checks prior to release'
task :prerelease => [:make, :spec, :archive, :check_tag, :check_deps]

desc 'Prepare release notes from HISTORY'
task :notes do
  File.open('.release-notes.txt', 'w') do |out|
    lines = File.readlines('doc/command-t.txt').each(&:chomp!)
    while line = lines.shift do
      next unless line =~ /^HISTORY +\*command-t-history\*$/
      break unless lines.shift == '' &&
                  (line = lines.shift) && line =~ /^\d\.\d/ &&
                  lines.shift == ''
      while (line = lines.shift) && line != ''
        out.puts line
      end
      break
    end
    out.puts ''
    out.puts '# Please edit the release notes to taste.'
    out.puts '# Blank lines and lines beginning with a hash will be removed.'
    out.puts '# To abort, exit your editor with a non-zero exit status (:cquit in Vim).'
  end

  unless system "$EDITOR .release-notes.txt"
    err "editor exited with non-zero exit status; aborting"
    exit 1
  end

  filtered = File.readlines('.release-notes.txt').reject do |line|
    line =~ /^(#.*|\s*)$/ # filter comment lines and blank lines
  end.join

  File.open('.release-notes.txt', 'w') do |out|
    out.print filtered
  end
end

namespace :upload do
  desc 'Upload current archive to Amazon S3'
  task :s3 => :archive do
    sh 'aws --curl-options=--insecure put ' +
      "s3.wincent.com/command-t/releases/command-t-#{version}.zip " +
      "command-t-#{version}.zip"
    sh 'aws --curl-options=--insecure put ' +
      "s3.wincent.com/command-t/releases/command-t-#{version}.zip?acl " +
      '--public'
  end

  desc 'Upload current archive to www.vim.org'
  task :vim => [:archive, :notes] do
    sh "vendor/vimscriptuploader/vimscriptuploader.rb \
            --id 3025 \
            --file command-t-#{version}.zip \
            --message-file .release-notes.txt \
            --version #{version} \
            --config ~/.vim_org.yml \
            .vim_org.yml"
  end

  desc 'Upload current archive everywhere'
  task :all => [:s3, :vim]
end

desc 'Create the ruby gem package'
task :gem => :check_tag do
  Dir.chdir 'ruby/command-t' do
    sh "gem build command-t.gemspec"
  end
end

desc 'Push gem to Gemcutter ("gem push")'
task :push => :gem do
  Dir.chdir 'ruby/command-t' do
    sh "gem push command-t-#{rubygems_version}.gem"
  end
end