forked from mirrors/principia
Add helper script for updating version info everywhere
This commit is contained in:
parent
a91fa70ab4
commit
aa21c04880
2 changed files with 247 additions and 0 deletions
3
packaging/version_info.txt
Normal file
3
packaging/version_info.txt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
# This file is used by set_version.lua to keep track of version info. DO NOT EDIT IT MANUALLY, USE THE SCRIPT!
|
||||
34
|
||||
1.5.2 Beta
|
||||
244
utils/set_version.lua
Normal file
244
utils/set_version.lua
Normal file
|
|
@ -0,0 +1,244 @@
|
|||
#!/usr/bin/luajit
|
||||
|
||||
-- set_version.lua: Helper script for updating Principia version info.
|
||||
|
||||
|
||||
-- Helper functions
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- Split string on separator
|
||||
local function split(inputstr, sep)
|
||||
local t = {}
|
||||
for str in string.gmatch(inputstr, '([^'..sep..']+)') do
|
||||
table.insert(t, str)
|
||||
end
|
||||
return t
|
||||
end
|
||||
|
||||
-- Split up a version name into a table with digits.
|
||||
local function split_vername(vername)
|
||||
-- Also trim any trash we may have on the version name.
|
||||
return split(vername:gsub(' Beta', ''):gsub('%s+', ''), '.')
|
||||
end
|
||||
|
||||
-- Turn a version table with digits into a combined string.
|
||||
local function combine_verdigits(verdigits)
|
||||
return verdigits[1]..'.'..verdigits[2]..'.'..verdigits[3]
|
||||
end
|
||||
|
||||
-- Read lines into a table from a filepath.
|
||||
local function read_lines_from_file(path)
|
||||
local file = io.open(path, 'r')
|
||||
local filecontent = {}
|
||||
for line in file:lines() do
|
||||
filecontent[#filecontent+1] = line
|
||||
end
|
||||
file:close()
|
||||
|
||||
return filecontent
|
||||
end
|
||||
|
||||
-- Write lines as a table to a filepath.
|
||||
local function write_lines_to_file(path, lines)
|
||||
local file = io.open(path, 'w')
|
||||
file:write(table.concat(lines, "\n").."\n")
|
||||
file:close()
|
||||
end
|
||||
|
||||
-- Just write a string to a file.
|
||||
local function write_to_file(path, text)
|
||||
local file = io.open(path, 'w')
|
||||
file:write(text)
|
||||
file:close()
|
||||
end
|
||||
|
||||
-- Replace lines that contain 'needle' in them.
|
||||
--
|
||||
-- **Arguments:**
|
||||
-- - `lines`: Table of lines, which will be modified in-place by the function
|
||||
-- - `replaces`: Table of replacements, the key is the needle that will be
|
||||
-- checked for in the line, and the value is the replacement string FOR
|
||||
-- THE ENTIRE LINE!
|
||||
local function lines_replace(lines, replaces)
|
||||
for i,line in ipairs(lines) do
|
||||
for needle,replacement in pairs(replaces) do
|
||||
if line:find(needle) then
|
||||
lines[i] = replacement
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
-- Functions for writing to files to update version information...
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
local version_info_txt = 'packaging/version_info.txt'
|
||||
local gradle_build = 'build-android/principia/build.gradle'
|
||||
local nsi_file = 'packaging/principia_install.nsi'
|
||||
local rc_file = 'packaging/principia.rc'
|
||||
|
||||
-- Read the current version info from version_info.txt
|
||||
local function read_version_info()
|
||||
local file = io.open(version_info_txt)
|
||||
local current_version = {}
|
||||
local i = 1
|
||||
for line in file:lines() do
|
||||
if i == 2 then current_version.code = line end
|
||||
if i == 3 then current_version.name = line end
|
||||
|
||||
i = i + 1
|
||||
end
|
||||
return current_version
|
||||
end
|
||||
|
||||
-- Write `verinfo` into version_info.txt
|
||||
local function write_version_info(verinfo)
|
||||
print("Writing version_info.txt...")
|
||||
|
||||
write_lines_to_file(version_info_txt, {
|
||||
'# This file is used by set_version.lua to keep track of version info.'
|
||||
..' DO NOT EDIT IT MANUALLY, USE THE SCRIPT!',
|
||||
verinfo.code, verinfo.name
|
||||
})
|
||||
end
|
||||
|
||||
-- Update the version code and version name in the Android Gradle build file.
|
||||
local function update_android_version(verinfo)
|
||||
print("Updating Android version metadata...")
|
||||
|
||||
local lines = read_lines_from_file(gradle_build)
|
||||
|
||||
lines_replace(lines, {
|
||||
['versionCode'] = ' versionCode '..verinfo.code,
|
||||
['versionName'] = ' versionName "'..verinfo.name..'"'
|
||||
})
|
||||
|
||||
write_lines_to_file(gradle_build, lines)
|
||||
end
|
||||
|
||||
-- Write the version with the appropriate version info (`version.hh`).
|
||||
local function write_version_header(verinfo)
|
||||
print("Writing version header...")
|
||||
|
||||
local content = string.format([[
|
||||
#pragma once
|
||||
|
||||
#ifdef DEBUG
|
||||
#define VER_EXTRA " [Debug]"
|
||||
#else
|
||||
#define VER_EXTRA
|
||||
#endif
|
||||
|
||||
#define PRINCIPIA_VERSION_CODE %s
|
||||
#define PRINCIPIA_VERSION_STRING "%s" VER_EXTRA
|
||||
]], verinfo.code, verinfo.name)
|
||||
|
||||
write_to_file('src/src/version.hh', content)
|
||||
end
|
||||
|
||||
-- Update version info in the Windows NSIS installer file (`principia_install.nsi`).
|
||||
local function update_nsis_version(verinfo)
|
||||
print("Updating NSIS installer version...")
|
||||
|
||||
local verdigits = split_vername(verinfo.name)
|
||||
local lines = read_lines_from_file(nsi_file)
|
||||
|
||||
lines_replace(lines, {
|
||||
['!define VER_MAJOR'] = '!define VER_MAJOR '..verdigits[1],
|
||||
['!define VER_MINOR'] = '!define VER_MINOR '..verdigits[2],
|
||||
['!define VER_BUILD'] = '!define VER_BUILD '..verdigits[3],
|
||||
['!define VERSION'] = '!define VERSION "' ..verinfo.name..'"',
|
||||
})
|
||||
|
||||
write_lines_to_file(nsi_file, lines)
|
||||
end
|
||||
|
||||
-- Update version info in the Windows executable resource file (`principia.rc`)
|
||||
local function update_windows_resource(verinfo)
|
||||
print("Updating Windows resource file...")
|
||||
|
||||
local verdigits = split_vername(verinfo.name)
|
||||
local lines = read_lines_from_file(rc_file)
|
||||
|
||||
lines_replace(lines, {
|
||||
['#define VER_MAJOR'] = '#define VER_MAJOR '..verdigits[1],
|
||||
['#define VER_MINOR'] = '#define VER_MINOR '..verdigits[2],
|
||||
['#define VER_PATCH'] = '#define VER_PATCH '..verdigits[3],
|
||||
|
||||
['#define VER_STRING'] =
|
||||
'#define VER_STRING "'..combine_verdigits(verdigits)..'"',
|
||||
|
||||
['#define PRODUCT_VER_STRING'] =
|
||||
'#define PRODUCT_VER_STRING "'..verinfo.name..'"'
|
||||
})
|
||||
|
||||
write_lines_to_file(rc_file, lines)
|
||||
end
|
||||
|
||||
|
||||
-- Entrypoint functions...
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
-- Main local function
|
||||
local function main()
|
||||
print("set_version.lua - Helper script for updating Principia version info")
|
||||
print("-------------------------------------------------------------------")
|
||||
|
||||
local cur_version_info = read_version_info()
|
||||
|
||||
print("- Current version code: "..cur_version_info.code)
|
||||
print("- Current version name: "..cur_version_info.name)
|
||||
|
||||
local newver = {}
|
||||
print("\nInput the new version code: ")
|
||||
newver.code = io.read('*l')
|
||||
print("Input the new version name: ")
|
||||
newver.name = io.read('*l')
|
||||
|
||||
if newver.code == '' or newver.name == '' then
|
||||
print("Empty inputs, aborting.")
|
||||
return
|
||||
end
|
||||
|
||||
print("")
|
||||
|
||||
update_android_version(newver)
|
||||
write_version_header(newver)
|
||||
update_nsis_version(newver)
|
||||
update_windows_resource(newver)
|
||||
write_version_info(newver)
|
||||
|
||||
print("")
|
||||
|
||||
print("Done. Check the changes with git diff and commit when you're ready.")
|
||||
print("For more information about making a new Principia release see")
|
||||
print("https://principia-web.se/wiki/Making_a_Release")
|
||||
end
|
||||
|
||||
local function test()
|
||||
print("Running set_version.lua tests...")
|
||||
|
||||
-- Test by setting a custom version and then resetting,
|
||||
-- there should be no results in the Git diff by this if it works.
|
||||
local versions = {
|
||||
{code = 621, name = '6.2.1'},
|
||||
read_version_info()
|
||||
}
|
||||
|
||||
for _,ver in ipairs(versions) do
|
||||
print("Setting to: ", ver.code, ver.name)
|
||||
|
||||
update_android_version(ver)
|
||||
write_version_header(ver)
|
||||
update_nsis_version(ver)
|
||||
update_windows_resource(ver)
|
||||
write_version_info(ver)
|
||||
end
|
||||
end
|
||||
|
||||
if #arg == 0 then
|
||||
main()
|
||||
elseif #arg == 1 and arg[1] == "run_test_func" then
|
||||
test()
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue