You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdebindings/qtruby/rubylib/examples/ruboids/release.rb

153 lines
4.4 KiB

#! /usr/bin/env ruby
#
# Copyright (c) 2001 by Jim Menard <jimm@io.com>
#
# Released under the same license as Ruby. See
# http://www.ruby-lang.org/en/LICENSE.txt.
#
# This script gathers everything needed to release RuBoids into one directory
# and, if requested, publishes the contents to the RuBoids Web site.
#
# usage:
#
# release.rb [--publish, -p]
#
# Specifying --publish or -p causes the resulting files to be published
# to the Web site.
#
require 'net/ftp'
require 'ftools' # For makedirs and install
require 'generateManifest' # For--you guessed it--generating the Manifest
# Start looking for RUBOIDS classes in this directory.
# This forces us to use the local copy of RUBOIDS, even if there is
# a previously installed version out there somewhere.
$LOAD_PATH[0, 0] = '.'
require 'ruboids/info' # For Version string
FILE_PERMISSION = 0644
DIR_PERMISSION = 0755
PUBLISH_FLAG = '-p'
RUBOIDS_DIR = 'ruboids'
DOCS_DIR = '.'
#DOCS_HTML_DIR = "#{DOCS_DIR}/README"
RUBOIDS_DIR_WITH_VERSION = "#{RUBOIDS_DIR}-#{Version}"
RELEASE_DIR = "/tmp/#{RUBOIDS_DIR_WITH_VERSION}_release"
#RELEASE_HTML_DIR = "#{RELEASE_DIR}/README"
DOWNLOAD_FILE = "#{DOCS_DIR}/index.html"
#DOCBOOK_FILE = "#{DOCS_DIR}/README.sgml"
WEB_SITE = 'io.com'
WEB_DIR = 'public-web/downloads/ruboids'
# Copies all files from `fromDir' into the release directory. Sets the
# permissions of all files to 0644.
def copyFiles(fromDir, toDir, match=nil)
Dir.foreach(fromDir) { | f |
next if f =~ /^\.\.?/ || (!match.nil? && !(f =~ match))
File.install("#{fromDir}/#{f}", toDir, FILE_PERMISSION)
}
end
# Recursively removes the contents of a directory.
def rmDirectory(dirName)
return unless File.exists?(dirName)
Dir.foreach(dirName) { | f |
next if f =~ /^\.\.?/
path = "#{dirName}/#{f}"
rmDirectory(path) if File.directory?(path)
File.delete(path) if !File.directory?(path)
}
end
# Recursively sends files and directories.
def sendToWebSite(ftp, releaseDir, webDir)
ftp.chdir(webDir)
Dir.foreach(releaseDir) { | f |
next if f =~ /^\.\.?/
path = "#{releaseDir}/#{f}"
if File.directory?(path)
begin
ftp.mkdir(f)
rescue Net::FTPPermError
# ignore; it's OK if the directory already exists
end
sendToWebSite(ftp, path, f)
ftp.chdir('..')
else
ftp.putbinaryfile(path, f)
end
}
end
def ensureVersionInFile(fileName, regex)
lines = File.open(fileName).grep(regex)
found = lines.detect { | line | line =~ /#{Version}/o }
if !found
$stderr.puts "Warning: it looks like the #{fileName} version number" +
" is incorrect"
end
end
# ================================================================
# main
# ================================================================
# Make sure the docs mention the correct version number.
#ensureVersionInFile(DOWNLOAD_FILE, /Download the latest/)
#ensureVersionInFile(DOCBOOK_FILE, /releaseinfo/)
# Empty release dir if it already exists.
rmDirectory(RELEASE_DIR)
# (Re)create release dir. This makes RELEASE_HTML_DIR, whose parent
# is RELEASE_DIR. Therefore, RELEASE_DIR is created as well.
#File.makedirs(RELEASE_HTML_DIR)
File.makedirs(RELEASE_DIR)
# Recreate the full documentation (creating README and docs/README) and copy
# the HTML files to the release directory. Finally, clean up the docs
# directory.
#system("cd #{DOCS_DIR} && make")
#copyFiles(DOCS_DIR, RELEASE_DIR, /\.html$/)
#copyFiles(DOCS_HTML_DIR, RELEASE_HTML_DIR, /\.html$/)
copyFiles(DOCS_DIR, RELEASE_DIR, 'index.html')
# Generate the Manifest file.
generateManifest()
# Create .tar.gz file. We temporarily rename the RUBOIDS folder to
# "ruboids-X.Y.Z", tar and gzip that directory, then restore its original
# name.
Dir.chdir('..')
File.rename(RUBOIDS_DIR, RUBOIDS_DIR_WITH_VERSION)
system("tar -czf #{RELEASE_DIR}/#{RUBOIDS_DIR_WITH_VERSION}.tar.gz " +
RUBOIDS_DIR_WITH_VERSION)
File.chmod(FILE_PERMISSION, "#{RELEASE_DIR}/#{RUBOIDS_DIR_WITH_VERSION}.tar.gz")
File.rename(RUBOIDS_DIR_WITH_VERSION, RUBOIDS_DIR)
# ftp files if requested
if !ARGV.empty? && ARGV[0] == PUBLISH_FLAG
require 'net/ftp'
# Ask for ftp username and password
guess = ENV['LOGNAME'] || ENV['USER']
print "username [#{guess}]: "
username = $stdin.gets().chomp()
username = guess if username.empty?
print "password: "
password = $stdin.gets().chomp()
# ftp files to web site
ftp = Net::FTP.open(WEB_SITE, username, password)
sendToWebSite(ftp, RELEASE_DIR, WEB_DIR)
ftp.close()
end