mirror of
https://github.com/Bithack/principia.git
synced 2026-06-24 02:04:08 +00:00
244 lines
6.6 KiB
Lua
244 lines
6.6 KiB
Lua
#!/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
|