Skip to content

Commit

Permalink
Merge pull request #448 from evo-lua/418-streamlined-submodule-versions
Browse files Browse the repository at this point in the history
Display embedded library versions in the CLI help text
  • Loading branch information
Duckwhale committed Jan 21, 2024
2 parents 5f533e3 + 90057f6 commit 4b3d847
Show file tree
Hide file tree
Showing 17 changed files with 133 additions and 130 deletions.
3 changes: 3 additions & 0 deletions .github/workflows/ci-linux.yml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,9 @@ jobs:
echo "CC=/usr/lib/ccache/gcc" >> $GITHUB_ENV
echo "CXX=/usr/lib/ccache/g++" >> $GITHUB_ENV
- name: Generate versions.lua # Required for those libraries that don't export versioning information
run: deps/discover-submodule-versions.sh && cat deps/versions.lua

- name: Build luajit
run: deps/luajit-unixbuild.sh && ls ninjabuild-unix

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ci-mac.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@ jobs:
- name: Build luajit
run: deps/luajit-unixbuild.sh && ls ninjabuild-unix

- name: Generate versions.lua # Required for those libraries that don't export versioning information
run: deps/discover-submodule-versions.sh && cat deps/versions.lua

- name: Build webgpu
run: deps/webgpu-unixbuild.sh && ls ninjabuild-unix

Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/ci-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,9 @@ jobs:
- name: Set up virtual audio device # Required for LabSound tests
uses: LABSN/sound-ci-helpers@v1

- name: Generate versions.lua # Required for those libraries that don't export versioning information
run: deps/discover-submodule-versions.sh && cat deps/versions.lua

- name: Build luajit
run: deps/luajit-windowsbuild.sh && ls ninjabuild-windows

Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -42,3 +42,4 @@ build.ninja
CHANGELOG.MD
.DS_Store
.n2_db
deps/versions.lua
9 changes: 5 additions & 4 deletions BuildTools/BuildTarget.lua
Original file line number Diff line number Diff line change
Expand Up @@ -144,17 +144,18 @@ end
function BuildTarget:GetDefines()
local defines = string.format('-DEVO_VERSION=\\"%s\\"', self.GIT_VERSION_TAG)

-- Some dependencies don't export the version at all, so we have to discover it manually (hacky!)
local uwsVersionTag = require(self.BUILD_DIR .. ".uws-version")
local discoveredLibraryVersions = require("deps.versions")

local uwsVersionTag = discoveredLibraryVersions["deps/uNetworking/uWebSockets"].tag
local uwsVersionString = string.match(uwsVersionTag, "(%d+.%d+.%d+)")
defines = defines .. string.format(' -DUWS_VERSION=\\"%s\\"', uwsVersionString)
defines = defines .. " -DUWS_HTTPRESPONSE_NO_WRITEMARK"

local wgpuVersionTag = require(self.BUILD_DIR .. ".wgpu-version")
local wgpuVersionTag = discoveredLibraryVersions["deps/gfx-rs/wgpu-native"].tag
local wgpuVersionString = string.match(wgpuVersionTag, "(%d+.%d+.%d+)")
defines = defines .. string.format(' -DWGPU_VERSION=\\"%s\\"', wgpuVersionString)

local labsoundVersionTag = require(self.BUILD_DIR .. ".labsound-version")
local labsoundVersionTag = discoveredLibraryVersions["deps/LabSound/LabSound"].tag
local labsoundVersionString = string.match(labsoundVersionTag, "(%d+.%d+.%d+)")
defines = defines .. string.format(' -DLABSOUND_VERSION=\\"%s\\"', labsoundVersionString)

Expand Down
2 changes: 2 additions & 0 deletions BuildTools/Targets/EvoBuildTarget.lua
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ local EvoBuildTarget = {
-- Can't easily discover sources or resolve paths with only Lua APIs. Listing them explicitly is probably safer anyway
-- Note that ninja doesn't care about path separators and the mingw toolchain supports forward slashes; no \ required
luaSources = {
-- Auto-generated versioning information for embedded libraries
"deps/versions.lua",
-- Integrated third-party code (no build system required)
"deps/kikito/inspect.lua/inspect.lua",
"deps/roberto-ieru/LPeg/re.lua",
Expand Down
24 changes: 24 additions & 0 deletions Runtime/evo.lua
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ local uws = require("uws")
local vfs = require("vfs")
local webgpu = require("webgpu")
local webview = require("webview")
local versions = require("versions")
local zlib = require("zlib")

local format = string.format
Expand All @@ -33,6 +34,7 @@ local GITHUB_DOCS_URL = "https://evo-lua.github.io/"

local evo = {
signals = {},
embeddedLibraryVersions = versions,
-- Interpreter CLI
DEFAULT_ENTRY_POINT = EXPECTED_APP_BUNDLER_ENTRY_POINT,
DEFAULT_TEST_SCRIPT = EXPECTED_TEST_RUNNER_ENTRY_POINT,
Expand Down Expand Up @@ -271,14 +273,36 @@ function evo.getVersionText()
"wgpu",
"zlib",
}
local submodulePaths = {
glfw = "deps/glfw/glfw",
labsound = "deps/LabSound/LabSound",
libuv = "deps/luvit/luv", -- Always tracks the libuv version
lpeg = "deps/roberto-ieru/LPeg",
miniz = "deps/richgel999/miniz",
rapidjson = "deps/xpol/lua-rapidjson",
openssl = "deps/openssl/openssl",
pcre2 = "deps/PCRE2Project/pcre2",
rml = "deps/mikke89/RmlUi",
stbi = "deps/nothings/stb",
stduuid = "deps/mariusbancila/stduuid",
uws = "deps/uNetworking/uWebSockets",
wgpu = "deps/gfx-rs/wgpu-native",
webview = "deps/webview/webview",
zlib = "deps/madler/zlib",
}

versionText = versionText .. "Embedded libraries:\n\n"
for index, libraryName in ipairs(embeddedLibraryVersions) do
local versionString = embeddedLibraryVersions[libraryName]
local submodulePath = submodulePaths[libraryName]
local commitHash = evo.embeddedLibraryVersions[submodulePath].commit
versionText = versionText
.. "\t"
.. transform.brightBlue(format("%-10s", libraryName))
.. "\t"
.. transform.brightBlue(versionString)
.. "\t\t"
.. format("%s", transform.brightBlue(commitHash))
.. "\n"
end

Expand Down
74 changes: 56 additions & 18 deletions Tests/BDD/evo-library.spec.lua
Original file line number Diff line number Diff line change
Expand Up @@ -11,31 +11,32 @@ describe("evo", function()
local capturedOutput = console.release()
capturedOutput = transform.strip(capturedOutput)

local VERSION_PATTERN = "%d+.%d+.%d+"
local VERSION = "%d+.%d+.%d+"
local HASH = "[a-f0-9]+"
local WHITESPACE = "%s+"

local runtimeVersion = capturedOutput:match("This is Evo.lua v" .. VERSION_PATTERN)
local engineVersion = capturedOutput:match("powered by LuaJIT " .. VERSION_PATTERN)
local runtimeVersion = capturedOutput:match("This is Evo.lua v" .. VERSION)
local engineVersion = capturedOutput:match("powered by LuaJIT " .. VERSION)
local documentationLink = capturedOutput:match("https://evo%-lua%.github%.io/")

local hasRuntimeVersion = (runtimeVersion ~= nil)
local hasEngineVersion = (engineVersion ~= nil)
local hasEmbeddedLibraryVersions = {
glfw = (capturedOutput:match("glfw" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
labsound = (capturedOutput:match("labsound" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
libuv = (capturedOutput:match("libuv" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
lpeg = (capturedOutput:match("lpeg" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
miniz = (capturedOutput:match("miniz" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
rapidjson = (capturedOutput:match("rapidjson" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
openssl = (capturedOutput:match("openssl" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
pcre2 = (capturedOutput:match("pcre2" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
rml = (capturedOutput:match("rml" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
stbi = (capturedOutput:match("stbi" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
stduuid = (capturedOutput:match("stduuid" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
uws = (capturedOutput:match("uws" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
wgpu = (capturedOutput:match("wgpu" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
webview = (capturedOutput:match("webview" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
zlib = (capturedOutput:match("zlib" .. WHITESPACE .. VERSION_PATTERN) ~= nil),
glfw = (capturedOutput:match("glfw" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
labsound = (capturedOutput:match("labsound" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
libuv = (capturedOutput:match("libuv" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
lpeg = (capturedOutput:match("lpeg" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
miniz = (capturedOutput:match("miniz" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
rapidjson = (capturedOutput:match("rapidjson" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
openssl = (capturedOutput:match("openssl" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
pcre2 = (capturedOutput:match("pcre2" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
rml = (capturedOutput:match("rml" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
stbi = (capturedOutput:match("stbi" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
stduuid = (capturedOutput:match("stduuid" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
uws = (capturedOutput:match("uws" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
wgpu = (capturedOutput:match("wgpu" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
webview = (capturedOutput:match("webview" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
zlib = (capturedOutput:match("zlib" .. WHITESPACE .. VERSION .. WHITESPACE .. HASH) ~= nil),
}
local hasDocumentationLink = (documentationLink ~= nil)

Expand Down Expand Up @@ -114,4 +115,41 @@ describe("evo", function()
assertEquals(type(sigpipeHandler), "userdata")
end)
end)

describe("embeddedLibraryVersions", function()
it("should export the auto-generated versioning information for all embedded submodules", function()
local FULL_GIT_COMMIT_HASH_LENGTH = 40
local function assertSubmoduleVersion(entry)
local gitCommitHash = entry.commit
local gitReleaseTag = entry.tag
assertEquals(type(gitCommitHash), "string")
assertEquals(#gitCommitHash, FULL_GIT_COMMIT_HASH_LENGTH)
assertEquals(type(gitReleaseTag), "string")
end
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/LabSound/LabSound"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/LuaJIT/LuaJIT"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/PCRE2Project/pcre2"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/brimworks/lua-zlib"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/freetype/freetype"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/gfx-rs/wgpu-native"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/glfw/glfw"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/kikito/inspect.lua"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/luvit/luv"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/madler/zlib"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/mariusbancila/stduuid"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/mikke89/RmlUi"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/nothings/stb"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/openssl/openssl"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/richgel999/miniz"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/roberto-ieru/LPeg"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/rrthomas/lrexlib"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/starwing/luautf8"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/uNetworking/uWebSockets"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/webview/webview"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/xpol/lua-rapidjson"])
assertSubmoduleVersion(evo.embeddedLibraryVersions["deps/zhaog/lua-openssl"])

assertEquals(table.count(evo.embeddedLibraryVersions), 22)
end)
end)
end)
26 changes: 26 additions & 0 deletions deps/discover-submodule-versions.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
set -e

DEPS_DIR="deps"
VERSION_DB=$(pwd)/deps/versions.lua
rm -rf $VERSION_DB

echo "return {" >> $VERSION_DB

for SUBMODULE in "$DEPS_DIR"/*/*; do
if [ -f "$SUBMODULE/.git" ] || [ -d "$SUBMODULE/.git" ]; then

cd "$SUBMODULE"
GIT_RELEASE_TAG=$(git describe --tags --abbrev=0 --always)
GIT_COMMIT_HASH=$(git rev-parse HEAD)
cd - > /dev/null

echo "Using commit $GIT_COMMIT_HASH with tag $GIT_RELEASE_TAG for submodule $SUBMODULE"

# Output in a stupid simple format so that it can easily be require'd
echo " [\"$SUBMODULE\"] = { commit = \"$GIT_COMMIT_HASH\", tag = \"$GIT_RELEASE_TAG\" }," >> $VERSION_DB
else
echo "No .git directory (or file) found in $SUBMODULE"
fi
done

echo "}" >> $VERSION_DB
19 changes: 1 addition & 18 deletions deps/labsound-unixbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -17,21 +17,4 @@ else
cp $BUILD_DIR/bin/libLabSound.a $OUT_DIR
fi
cp $BUILD_DIR/bin/libLabSoundRtAudio.a $OUT_DIR
cp $BUILD_DIR/third_party/libnyquist/lib/liblibnyquist.a $OUT_DIR/libnyquist.a

# Since LabSound doesn't offer an API to get its version, a bit of a hack is needed
discover_version_tag() {
cd $SRC_DIR

DISCOVERED_VERSION_TAG=$(git describe --tags --abbrev=0)
LUA_STRING="return '$DISCOVERED_VERSION_TAG'"
TEMP_VERSION_FILE=$OUT_DIR/labsound-version.lua

echo "Discovered version tag: $DISCOVERED_VERSION_TAG"
echo "Storing tag in $TEMP_VERSION_FILE"
echo $LUA_STRING > $TEMP_VERSION_FILE

cd -
}

discover_version_tag
cp $BUILD_DIR/third_party/libnyquist/lib/liblibnyquist.a $OUT_DIR/libnyquist.a
19 changes: 1 addition & 18 deletions deps/labsound-windowsbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,4 @@ cmake --build $BUILD_DIR --clean-first --config Release

cp $BUILD_DIR/bin/libLabSound.a $OUT_DIR
cp $BUILD_DIR/bin/libLabSoundRtAudio.a $OUT_DIR
cp $BUILD_DIR/third_party/libnyquist/lib/liblibnyquist.a $OUT_DIR/libnyquist.a

# Since LabSound doesn't offer an API to get its version, a bit of a hack is needed
discover_version_tag() {
cd $SRC_DIR

DISCOVERED_VERSION_TAG=$(git describe --tags --abbrev=0)
LUA_STRING="return '$DISCOVERED_VERSION_TAG'"
TEMP_VERSION_FILE=$OUT_DIR/labsound-version.lua

echo "Discovered version tag: $DISCOVERED_VERSION_TAG"
echo "Storing tag in $TEMP_VERSION_FILE"
echo $LUA_STRING > $TEMP_VERSION_FILE

cd -
}

discover_version_tag
cp $BUILD_DIR/third_party/libnyquist/lib/liblibnyquist.a $OUT_DIR/libnyquist.a
2 changes: 2 additions & 0 deletions deps/unixbuild-all.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
set -e

deps/discover-submodule-versions.sh

deps/luajit-unixbuild.sh
deps/webgpu-unixbuild.sh
deps/openssl-unixbuild.sh
Expand Down
19 changes: 1 addition & 18 deletions deps/uws-unixbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,4 @@ cd $UWS_DIR/uSockets
make WITH_LIBUV=1 CFLAGS+="-I $LIBUV_INCLUDE_DIR"

cp uSockets.a $ABS_BUILD_DIR
cd -

# Since uws doesn't offer an API to get its version, a bit of a hack is needed
discover_uws_version() {
cd $UWS_DIR

DISCOVERED_UWS_VERSION=$(git describe --tags --abbrev=0)
LUA_STRING="return '$DISCOVERED_UWS_VERSION'"
TEMP_VERSION_FILE=$ABS_BUILD_DIR/uws-version.lua

echo "Discovered uws version: $DISCOVERED_UWS_VERSION"
echo "Storing tag in $TEMP_VERSION_FILE"
echo $LUA_STRING > $TEMP_VERSION_FILE

cd -
}

discover_uws_version
cd -
19 changes: 1 addition & 18 deletions deps/uws-windowsbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,4 @@ cd $UWS_DIR/uSockets
make WITH_LIBUV=1 CFLAGS+="-I $LIBUV_INCLUDE_DIR"

cp uSockets.a $ABS_BUILD_DIR
cd -

# Since uws doesn't offer an API to get its version, a bit of a hack is needed
function discover_uws_version() {
cd $UWS_DIR

DISCOVERED_UWS_VERSION=$(git describe --tags --abbrev=0)
LUA_STRING="return '$DISCOVERED_UWS_VERSION'"
TEMP_VERSION_FILE=$ABS_BUILD_DIR/uws-version.lua

echo "Discovered uws version: $DISCOVERED_UWS_VERSION"
echo "Storing tag in $TEMP_VERSION_FILE"
echo $LUA_STRING > $TEMP_VERSION_FILE

cd -
}

discover_uws_version
cd -
19 changes: 1 addition & 18 deletions deps/webgpu-unixbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,4 @@ OUT_DIR=$(pwd)/ninjabuild-unix
make -C $SRC_DIR lib-native-release

cp $BUILD_DIR/libwgpu_native.a $OUT_DIR
cp $SRC_DIR/ffi/webgpu-headers/webgpu.h $OUT_DIR

# Since wgpu doesn't offer an API to get its version, a bit of a hack is needed
discover_wgpu_version() {
cd $SRC_DIR

DISCOVERED_WGPU_VERSION=$(git describe --tags --abbrev=0)
LUA_STRING="return '$DISCOVERED_WGPU_VERSION'"
TEMP_VERSION_FILE=$OUT_DIR/wgpu-version.lua

echo "Discovered wgpu version: $DISCOVERED_WGPU_VERSION"
echo "Storing tag in $TEMP_VERSION_FILE"
echo $LUA_STRING > $TEMP_VERSION_FILE

cd -
}

discover_wgpu_version
cp $SRC_DIR/ffi/webgpu-headers/webgpu.h $OUT_DIR
19 changes: 1 addition & 18 deletions deps/webgpu-windowsbuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -9,21 +9,4 @@ OUT_DIR=$(pwd)/ninjabuild-windows
make -C $SRC_DIR lib-native-release

cp $BUILD_DIR/libwgpu_native.a $OUT_DIR
cp $SRC_DIR/ffi/webgpu-headers/webgpu.h $OUT_DIR

# Since wgpu doesn't offer an API to get its version, a bit of a hack is needed
discover_wgpu_version() {
cd $SRC_DIR

DISCOVERED_WGPU_VERSION=$(git describe --tags --abbrev=0)
LUA_STRING="return '$DISCOVERED_WGPU_VERSION'"
TEMP_VERSION_FILE=$OUT_DIR/wgpu-version.lua

echo "Discovered wgpu version: $DISCOVERED_WGPU_VERSION"
echo "Storing tag in $TEMP_VERSION_FILE"
echo $LUA_STRING > $TEMP_VERSION_FILE

cd -
}

discover_wgpu_version
cp $SRC_DIR/ffi/webgpu-headers/webgpu.h $OUT_DIR

0 comments on commit 4b3d847

Please sign in to comment.