diff --git a/.github/workflows/ecode-nightly.yml b/.github/workflows/ecode-nightly.yml index e6c05cf7b..2bb1d031b 100644 --- a/.github/workflows/ecode-nightly.yml +++ b/.github/workflows/ecode-nightly.yml @@ -77,6 +77,7 @@ jobs: bash projects/linux/scripts/install_sdl2.sh - name: Build ecode run: | + bash projects/scripts/patch_commit_number.sh bash projects/linux/ecode/build.app.sh --version ${{ env.INSTALL_REF }} --arch ${{ matrix.config.arch }} - name: Upload Files uses: softprops/action-gh-release@v2 @@ -136,6 +137,7 @@ jobs: bash projects/linux/scripts/install_sdl2.sh --aarch64 - name: Build ecode run: | + bash projects/scripts/patch_commit_number.sh bash projects/linux/ecode/build.app.sh --version ${{ env.INSTALL_REF }} --arch ${{ matrix.config.arch }} - name: Upload Files uses: softprops/action-gh-release@v2 @@ -189,6 +191,7 @@ jobs: sudo update-alternatives --config g++ - name: Build ecode run: | + bash projects/scripts/patch_commit_number.sh bash projects/mingw32/ecode/build.app.sh --version ${{ env.INSTALL_REF }} - name: Upload Files uses: softprops/action-gh-release@v2 @@ -229,6 +232,7 @@ jobs: brew install bash sdl2 create-dmg premake p7zip - name: Build run: | + bash projects/scripts/patch_commit_number.sh bash projects/macos/ecode/build.app.sh --version ${{ env.INSTALL_REF }} - name: Create DMG Image run: | @@ -276,6 +280,7 @@ jobs: hdiutil detach /Volumes/SDL2 - name: Build run: | + bash projects/scripts/patch_commit_number.sh bash projects/macos/ecode/cross.build.app.sh --version ${{ env.INSTALL_REF }} - name: Create DMG Image run: | diff --git a/include/eepp/version.hpp b/include/eepp/version.hpp index f8bcdad0b..eb6d13348 100644 --- a/include/eepp/version.hpp +++ b/include/eepp/version.hpp @@ -10,14 +10,14 @@ #define EEPP_CODENAME "Siddhi" /** The compiled version of the library */ -#define EEPP_VERSION( x ) \ - { \ - ( x )->major = EEPP_MAJOR_VERSION; \ - ( x )->minor = EEPP_MINOR_VERSION; \ - ( x )->patch = EEPP_PATCH_LEVEL; \ +#define EEPP_VERSION( x ) \ + { \ + x.major = EEPP_MAJOR_VERSION; \ + x.minor = EEPP_MINOR_VERSION; \ + x.patch = EEPP_PATCH_LEVEL; \ } -#define EEPP_VERSIONNUM( X, Y, Z ) ( (X)*1000 + (Y)*100 + ( Z ) ) +#define EEPP_VERSIONNUM( X, Y, Z ) ( ( X ) * 1000 + ( Y ) * 100 + ( Z ) ) #define EEPP_COMPILEDVERSION \ EEPP_VERSIONNUM( EEPP_MAJOR_VERSION, EEPP_MINOR_VERSION, EEPP_PATCH_LEVEL ) diff --git a/projects/scripts/patch_commit_number.sh b/projects/scripts/patch_commit_number.sh new file mode 100644 index 000000000..b19bd25c6 --- /dev/null +++ b/projects/scripts/patch_commit_number.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +cd "$(dirname "$0")" || exit + +COMMIT_NUMBER=$(git rev-list "$(git tag --sort=-creatordate | grep ecode | sed -n 1p)"..HEAD --count) || exit + +FILE_PATH="../../src/tools/ecode/version.hpp" + +if [[ "$OSTYPE" == "darwin"* || "$OSTYPE" == "freebsd"* ]]; then + sed -i '' "s/#define ECODE_COMMIT_NUMBER [0-9]\+/#define ECODE_COMMIT_NUMBER $COMMIT_NUMBER/" "$FILE_PATH" +else + sed -i "s/#define ECODE_COMMIT_NUMBER [0-9]\+/#define ECODE_COMMIT_NUMBER $COMMIT_NUMBER/" "$FILE_PATH" +fi diff --git a/src/eepp/core/version.cpp b/src/eepp/core/version.cpp index 43a52edd8..280665a32 100644 --- a/src/eepp/core/version.cpp +++ b/src/eepp/core/version.cpp @@ -5,7 +5,7 @@ namespace EE { Version Version::getVersion() { Version ver; - EEPP_VERSION( &ver ); + EEPP_VERSION( ver ); return ver; } diff --git a/src/tools/ecode/plugins/lsp/lspclientplugin.cpp b/src/tools/ecode/plugins/lsp/lspclientplugin.cpp index ccd8d4f62..1a481272d 100644 --- a/src/tools/ecode/plugins/lsp/lspclientplugin.cpp +++ b/src/tools/ecode/plugins/lsp/lspclientplugin.cpp @@ -1879,7 +1879,7 @@ void LSPClientPlugin::setHoverDelay( const Time& hoverDelay ) { } void LSPClientPlugin::onVersionUpgrade( Uint32 oldVersion, Uint32 ) { - if ( oldVersion <= ECODE_VERSIONNUM( 0, 5, 0 ) ) { + if ( oldVersion <= ECODE_VERSIONNUM( 0, 5, 0, 0 ) ) { mSemanticHighlighting = true; } } diff --git a/src/tools/ecode/version.cpp b/src/tools/ecode/version.cpp index fa3190ab2..65b8222f5 100644 --- a/src/tools/ecode/version.cpp +++ b/src/tools/ecode/version.cpp @@ -5,35 +5,34 @@ namespace ecode { Version Version::getVersion() { Version ver; - ECODE_VERSION( &ver ); + ECODE_VERSION( ver ); return ver; } -Uint32 Version::getVersionNum() { +Uint64 Version::getVersionNum() { Version ver = getVersion(); - return ECODE_VERSIONNUM( ver.major, ver.minor, ver.patch ); + return ECODE_VERSIONNUM( ver.major, ver.minor, ver.patch, ver.commit ); } std::string Version::getVersionNumString() { Version ver = getVersion(); + if ( ver.commit > 0 && ver.commit < 9999 ) + return String::format( "%d.%d.%d-%d", ver.major, ver.minor, ver.patch, ver.commit ); return String::format( "%d.%d.%d", ver.major, ver.minor, ver.patch ); } std::string Version::getVersionFullName() { Version ver = getVersion(); - return String::format( "ecode version %d.%d.%d", ver.major, ver.minor, ver.patch ); -} - -std::string Version::getTagName() { - Version ver = getVersion(); - return String::format( "ecode-%d.%d.%d", ver.major, ver.minor, ver.patch ); + if ( ver.commit > 0 && ver.commit < 9999 ) + return String::format( "ecode version %s nightly", getVersionNumString() ); + return String::format( "ecode version %s", getVersionNumString() ); } std::string Version::getCodename() { return std::string( ECODE_CODENAME ); } -Uint32 Version::getVersionNumFromTag( const std::string& tag ) { +Uint64 Version::getVersionNumFromTag( const std::string& tag ) { auto tagPart = String::split( tag, '-' ); if ( tagPart.size() == 2 ) { auto versionPart = String::split( tagPart[1], '.' ); @@ -42,7 +41,8 @@ Uint32 Version::getVersionNumFromTag( const std::string& tag ) { if ( String::fromString( ver.major, versionPart[0] ) && String::fromString( ver.minor, versionPart[1] ) && String::fromString( ver.patch, versionPart[2] ) ) { - return ECODE_VERSIONNUM( ver.major, ver.minor, ver.patch ); + return ECODE_VERSIONNUM( ver.major, ver.minor, ver.patch, + 0 /* tags don't count commits */ ); } } } diff --git a/src/tools/ecode/version.hpp b/src/tools/ecode/version.hpp index 48c61fdee..29654d1e4 100644 --- a/src/tools/ecode/version.hpp +++ b/src/tools/ecode/version.hpp @@ -9,36 +9,45 @@ using namespace EE; #define ECODE_MAJOR_VERSION 0 #define ECODE_MINOR_VERSION 6 #define ECODE_PATCH_LEVEL 2 +/* ECODE_COMMIT_NUMBER 9999 is used for official releases, nightly builds (pre-releases) will + * contain the number of commits after the last official release + */ +#define ECODE_COMMIT_NUMBER 9999 #define ECODE_CODENAME "Prāpti" /** The compiled version of the library */ -#define ECODE_VERSION( x ) \ - { \ - ( x )->major = ECODE_MAJOR_VERSION; \ - ( x )->minor = ECODE_MINOR_VERSION; \ - ( x )->patch = ECODE_PATCH_LEVEL; \ +#define ECODE_VERSION( x ) \ + { \ + x.major = ECODE_MAJOR_VERSION; \ + x.minor = ECODE_MINOR_VERSION; \ + x.patch = ECODE_PATCH_LEVEL; \ + x.commit = ECODE_COMMIT_NUMBER; \ } -#define ECODE_VERSIONNUM( X, Y, Z ) ( (X)*1000 + (Y)*100 + ( Z ) ) +#define ECODE_VERSIONNUM( X, Y, Z, C ) \ + ( ( X ) * 100000000 + ( Y ) * 1000000 + ( Z ) * 10000 + ( C ) ) -#define ECODE_COMPILEDVERSION \ - ECODE_VERSIONNUM( ECODE_MAJOR_VERSION, ECODE_MINOR_VERSION, ECODE_PATCH_LEVEL ) +#define ECODE_COMPILEDVERSION \ + ECODE_VERSIONNUM( ECODE_MAJOR_VERSION, ECODE_MINOR_VERSION, ECODE_PATCH_LEVEL, \ + ECODE_COMMIT_NUMBER ) -#define ECODE_VERSION_ATLEAST( X, Y, Z ) ( ECODE_COMPILEDVERSION >= ECODE_VERSIONNUM( X, Y, Z ) ) +#define ECODE_VERSION_ATLEAST( X, Y, Z, C ) \ + ( ECODE_COMPILEDVERSION >= ECODE_VERSIONNUM( X, Y, Z, C ) ) namespace ecode { class Version { public: - Uint32 major; /**< major version */ - Uint32 minor; /**< minor version */ - Uint32 patch; /**< update version */ + Uint64 major; /**< major version */ + Uint64 minor; /**< minor version */ + Uint64 patch; /**< update version */ + Uint64 commit; /**< commit number, used for nightly builds */ /** @return The linked version of the library */ static Version getVersion(); /** @return The linked version number of the library */ - static Uint32 getVersionNum(); + static Uint64 getVersionNum(); /** @return The linked version number of the library */ static std::string getVersionNumString(); @@ -46,9 +55,6 @@ class Version { /** @return The library version name: "ecode version major.minor.patch" */ static std::string getVersionFullName(); - /** @return The library release tag name: "ecode-major.minor.patch" */ - static std::string getTagName(); - /** @return The version codename */ static std::string getCodename(); @@ -57,7 +63,7 @@ class Version { return std::string( __DATE__ ) + " " + std::string( __TIME__ ); } - static Uint32 getVersionNumFromTag( const std::string& tag ); + static Uint64 getVersionNumFromTag( const std::string& tag ); }; } // namespace ecode