premake/scripts/release.lua

247 lines
5.7 KiB
Lua
Raw Normal View History

2009-07-16 15:20:15 +00:00
--
-- Prepare a new Premake release. This is still incomplete and some manual
-- work is needed to get everything packaged up.
--
2010-08-11 18:33:14 +00:00
-- BEFORE RUNNING THIS SCRIPT:
-- * Make sure all tests pass on Windows AND Posix systems
-- * Run `premake4 embed`
-- * Update CHANGELOG.txt
-- * Commit all changes to premake-stable
-- * Prepare release news item
-- * Tag premake-stable with the version number
--
-- RUN THE SCRIPT:
-- On each platform, run `premake4 release x.x binary`
-- (and copy binary to /usr/local/bin if desired)
-- On one platform, run `premake4 release x.x source`
--
-- AFTER RUNNING THIS SCRIPT:
-- * Upload release files to SourceForge
-- * On SourceForge, set file platforms and release changelog
-- * Update the download page on Industrious One
-- * Post the news item to the forums
-- * Update the Premake project page on Industrious One
-- * Post to Twitter
-- * Send to email list
-- * Add release to Freshmeat (http://freshmeat.net/projects/premake)
-- * Increment version number in -stable and -dev, add "-dev" extension
-- * Push changes to repositories on BitBucket
--
-- Info on using Mercurial to manage releases:
-- http://hgbook.red-bean.com/read/managing-releases-and-branchy-development.html
-- http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
--
2009-07-16 15:20:15 +00:00
2009-12-09 21:03:29 +00:00
2009-07-16 15:20:15 +00:00
function dorelease()
2009-12-05 18:00:46 +00:00
local z
2010-08-11 18:33:14 +00:00
local hgroot = "https://bitbucket.org/premake/premake-stable"
2009-12-09 21:03:29 +00:00
--
-- Helper function: runs a command (formatted, with optional arguments) and
-- suppresses any output. Works on both Windows and POSIX. Might be a good
-- candidate for a core function.
--
local function exec(cmd, ...)
cmd = string.format(cmd, unpack(arg))
local z = os.execute(cmd .. " > output.log 2> error.log")
os.remove("output.log")
os.remove("error.log")
return z
end
2009-12-05 18:00:46 +00:00
2009-07-16 15:20:15 +00:00
--
-- Make sure a version was specified
--
2009-12-09 21:03:29 +00:00
if #_ARGS ~= 2 then
error("** Usage: release [version] [source | binary]", 0)
2009-07-16 15:20:15 +00:00
end
2009-12-09 21:03:29 +00:00
local version = _ARGS[1]
local kind = _ARGS[2]
2009-12-05 18:00:46 +00:00
2009-07-16 15:20:15 +00:00
--
2009-12-05 18:00:46 +00:00
-- Look for required utilities
2009-07-16 15:20:15 +00:00
--
2010-08-11 18:33:14 +00:00
local required = { "hg", "zip", "tar", "make", "gcc" }
2009-12-09 21:03:29 +00:00
for _, value in ipairs(required) do
z = exec("%s --version", value)
2009-12-05 18:00:46 +00:00
if z ~= 0 then
2009-12-09 21:03:29 +00:00
error("** '" .. value .. "' not found", 0)
2009-12-05 18:00:46 +00:00
end
end
2009-07-16 15:20:15 +00:00
--
2009-12-05 18:00:46 +00:00
-- Pre-release checklist
2009-07-16 15:20:15 +00:00
--
2009-12-05 18:00:46 +00:00
print("")
2010-08-11 18:33:14 +00:00
print("FOLLOW THE INSTRUCTIONS IN THE SCRIPT COMMENTS!")
2009-12-05 18:00:46 +00:00
print("")
print("Press [Enter] to begin.")
io.read()
2009-07-16 15:20:15 +00:00
2010-08-11 18:33:14 +00:00
---------------------------------------------------------------------------
2009-12-05 18:00:46 +00:00
--
2010-08-11 18:33:14 +00:00
-- Everything below this needs to be reworked for Mercurial
2009-07-16 15:20:15 +00:00
--
2010-08-11 18:33:14 +00:00
---------------------------------------------------------------------------
2009-07-16 15:20:15 +00:00
2010-08-11 18:33:14 +00:00
--
-- Create a directory to hold the release
--
2009-12-09 21:03:29 +00:00
2010-08-11 18:33:14 +00:00
local workdir = "premake-" .. version
os.mkdir("release/" .. workdir)
os.chdir("release/" .. workdir)
2009-07-16 15:20:15 +00:00
2010-08-11 18:33:14 +00:00
--
-- Check out the release tagged sources to releases/
2009-07-16 15:20:15 +00:00
--
2010-08-11 18:33:14 +00:00
print("Downloading release tag...")
2009-12-09 21:03:29 +00:00
2010-08-11 18:33:14 +00:00
-- hg clone -r {tag} https://bitbucket.org/premake/premake-stable .
2009-12-05 18:00:46 +00:00
2009-07-16 15:20:15 +00:00
--
2009-12-05 18:00:46 +00:00
-- Update the version number in premake.c
2009-07-16 15:20:15 +00:00
--
2009-12-05 18:00:46 +00:00
print("Updating version number...")
2009-12-09 21:03:29 +00:00
2010-08-11 18:33:14 +00:00
io.input("src/host/premake.c")
local text = io.read("*a")
text = text:gsub("HEAD", version)
io.output("src/host/premake.c")
io.write(text)
io.close()
2009-12-05 18:00:46 +00:00
2009-07-16 15:20:15 +00:00
--
2009-12-05 18:00:46 +00:00
-- Make absolutely sure the embedded scripts have been updated
2009-07-16 15:20:15 +00:00
--
2009-12-05 18:00:46 +00:00
print("Updating embedded scripts...")
2009-07-16 15:20:15 +00:00
2009-12-09 21:03:29 +00:00
z = exec("premake4 embed")
2009-12-05 18:00:46 +00:00
if z ~= 0 then
2009-12-09 21:03:29 +00:00
error("** Failed to update the embedded scripts", 0)
2009-12-05 18:00:46 +00:00
end
2010-08-11 18:33:14 +00:00
2009-07-16 15:20:15 +00:00
--
2009-12-09 21:03:29 +00:00
-- Generate source packaging
2009-07-16 15:20:15 +00:00
--
2009-12-09 21:03:29 +00:00
if kind == "source" then
2009-12-05 18:00:46 +00:00
--
2009-12-09 21:03:29 +00:00
-- Remove extra directories
2009-12-05 18:00:46 +00:00
--
print("Cleaning up the source tree...")
2009-12-09 21:03:29 +00:00
os.rmdir("samples")
os.rmdir("packages")
2010-08-11 18:33:14 +00:00
os.rmdir(".hg")
os.rmdir(".hgignore")
os.rmdir(".hgtags")
2009-12-05 18:00:46 +00:00
--
-- Generate project files to the build directory
--
print("Generating project files...")
2010-08-11 18:33:14 +00:00
2009-12-09 21:03:29 +00:00
exec("premake4 /to=build/vs2005 vs2005")
exec("premake4 /to=build/vs2008 vs2008")
2010-08-11 18:33:14 +00:00
exec("premake4 /to=build/vs2010 vs2010")
2009-12-09 21:03:29 +00:00
exec("premake4 /to=build/gmake.windows /os=windows gmake")
exec("premake4 /to=build/gmake.unix /os=linux gmake")
exec("premake4 /to=build/gmake.macosx /os=macosx /platform=universal32 gmake")
exec("premake4 /to=build/codeblocks.windows /os=windows codeblocks")
exec("premake4 /to=build/codeblocks.unix /os=linux codeblocks")
exec("premake4 /to=build/codeblocks.macosx /os=macosx /platform=universal32 codeblocks")
exec("premake4 /to=build/codelite.windows /os=windows codelite")
exec("premake4 /to=build/codelite.unix /os=linux codelite")
exec("premake4 /to=build/codelite.macosx /os=macosx /platform=universal32 codelite")
exec("premake4 /to=build/xcode3 /platform=universal32 xcode3")
2009-12-05 18:00:46 +00:00
--
-- Create source package
--
print("Creating source code package...")
2009-07-16 15:42:50 +00:00
2009-12-09 21:03:29 +00:00
os.chdir("..")
exec("zip -r9 %s-src.zip %s/*", workdir, workdir)
2009-07-16 15:20:15 +00:00
--
-- Create a binary package for this platform. This step requires a working
-- GNU/Make/GCC environment. I use MinGW on Windows.
--
else
2009-12-09 21:03:29 +00:00
print("Building platform binary release...")
2010-08-11 18:33:14 +00:00
-- IMPORTANT: Mac binary needs to be build in Xcode to ensure 10.5
-- compatibility right now. I haven't been able to figure out the
-- right flags to make it work from a makefile yet.
--
-- In Xcode, open the inspector for the target. Set the architecture
-- to 32-bit universal, and the base SDK to 10.5.
2009-12-09 21:03:29 +00:00
exec("premake4 /platform=universal32 gmake")
exec("make config=%s", iif(os.is("macosx"), "releaseuniv32", "release"))
local fname
os.chdir("bin/release")
if os.is("windows") then
fname = string.format("%s-windows.zip", workdir)
exec("zip -9 %s premake4.exe", fname)
else
2009-12-10 00:43:57 +00:00
fname = string.format("%s-%s.tar.gz", workdir, os.get())
2009-12-09 21:03:29 +00:00
exec("tar czvf %s premake4", fname)
end
os.copyfile(fname, "../../../" .. fname)
os.chdir("../../..")
2009-07-16 15:20:15 +00:00
end
2009-12-05 18:00:46 +00:00
2009-07-16 15:20:15 +00:00
--
-- Upload files to SourceForge
--
2009-12-09 21:03:29 +00:00
2009-07-16 15:20:15 +00:00
2009-12-05 18:00:46 +00:00
--
-- Clean up
--
2009-07-16 15:20:15 +00:00
--
-- Remind me of required next steps
--
2009-12-05 18:00:46 +00:00
print("")
2010-08-11 18:33:14 +00:00
print("Finished.")
2009-12-05 18:00:46 +00:00
2009-07-16 15:20:15 +00:00
end