diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 18b1c9e..cc3a538 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,8 +7,27 @@ on: branches: [ master ] jobs: + version: + name: Version + runs-on: ubuntu-latest + outputs: + version: ${{ steps.compute.outputs.version }} + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + fetch-depth: 0 + + - name: Compute version + id: compute + run: | + base_version=$(grep -oP 'SMEXT_CONF_VERSION\s+"\K[^"]+' Extension/sdk/smsdk_config.h) + build_number=$(git rev-list --count HEAD) + echo "version=${base_version}.${build_number}" >> "$GITHUB_OUTPUT" + build: name: sm${{ matrix.sm.label }}-${{ matrix.target.os_name }}-${{ matrix.target.arch }} + needs: version runs-on: ${{ matrix.target.os }} container: ${{ matrix.target.container }} strategy: @@ -78,6 +97,7 @@ jobs: --mms-path ../mmsource \ --steamworks-path ../SteamworksSDK \ --target ${{ matrix.target.arch }} \ + --version "${{ needs.version.outputs.version }}" \ --enable-optimize ambuild @@ -91,6 +111,7 @@ jobs: --mms-path ../mmsource \ --steamworks-path ../SteamworksSDK \ --target ${{ matrix.target.arch }} \ + --version "${{ needs.version.outputs.version }}" \ --enable-optimize ambuild @@ -138,7 +159,7 @@ jobs: release: name: Release - needs: build + needs: [version, build] if: github.event_name == 'push' && github.ref == 'refs/heads/master' runs-on: ubuntu-latest permissions: @@ -157,9 +178,7 @@ jobs: - name: Assemble packages id: package run: | - base_version=$(grep -oP 'SMEXT_CONF_VERSION\s+"\K[^"]+' Extension/sdk/smsdk_config.h) - build_number=$(git rev-list --count HEAD) - version="${base_version}-git${build_number}" + version="${{ needs.version.outputs.version }}" echo "version=${version}" >> "$GITHUB_OUTPUT" # One package per SourceMod version per OS: Windows as .zip, Linux as diff --git a/Extension/AMBuilder b/Extension/AMBuilder index 38eb323..f4f59e4 100644 --- a/Extension/AMBuilder +++ b/Extension/AMBuilder @@ -69,6 +69,12 @@ binary = SteamWorks.HL2Config(project, builder.cxx, 'SteamWorks.ext') # The Steam API headers all come from the SteamWorks SDK; the extension is built # with META_NO_HL2SDK, so no HL2SDK is required. binary.compiler.defines += ['META_NO_HL2SDK', 'SOURCEMOD_BUILD', 'VERSION_SAFE_STEAM_API_INTERFACES'] + +# Let CI bake the generated release version into the binary. The value is passed +# as an unquoted token and stringized in smsdk_config.h, avoiding shell-quoting +# differences between MSVC and gcc/clang. +if builder.options.version: + binary.compiler.defines += ['SMEXT_CONF_VERSION_OVERRIDE={0}'.format(builder.options.version)] binary.compiler.cxxincludes += [os.path.join(SteamWorks.steamworks_root, 'public', 'steam')] binary.compiler.cxxincludes += [os.path.join(SteamWorks.sm_root, 'public', 'safetyhook', 'include')] diff --git a/Extension/sdk/smsdk_config.h b/Extension/sdk/smsdk_config.h index ea6b672..11efd32 100644 --- a/Extension/sdk/smsdk_config.h +++ b/Extension/sdk/smsdk_config.h @@ -40,7 +40,18 @@ /* Basic information exposed publicly */ #define SMEXT_CONF_NAME "SteamWorks Extension" #define SMEXT_CONF_DESCRIPTION "Exposes SteamWorks functions to Developers" -#define SMEXT_CONF_VERSION "1.2.3" +/* The literal below is the MAJOR.MINOR base and the version used by local builds. + CI turns it into a full MAJOR.MINOR.PATCH release version by defining + SMEXT_CONF_VERSION_OVERRIDE at build time as an unquoted token (e.g. 1.2.158, + where the patch is the commit count); it is stringized here so no cross-platform + shell quoting is required. Bump the MAJOR/MINOR here by hand. */ +#if defined(SMEXT_CONF_VERSION_OVERRIDE) +#define SMEXT_CONF_VERSION_STR_(x) #x +#define SMEXT_CONF_VERSION_STR(x) SMEXT_CONF_VERSION_STR_(x) +#define SMEXT_CONF_VERSION SMEXT_CONF_VERSION_STR(SMEXT_CONF_VERSION_OVERRIDE) +#else +#define SMEXT_CONF_VERSION "1.2" +#endif #define SMEXT_CONF_AUTHOR "Kyle Sanderson, AlliedModders" #define SMEXT_CONF_URL "https://github.com/alliedmodders/SM-SteamWorks" #define SMEXT_CONF_LOGTAG "STEAMWORKS" diff --git a/configure.py b/configure.py index 39ba9e3..03ab5e1 100644 --- a/configure.py +++ b/configure.py @@ -30,4 +30,6 @@ run.options.add_argument('--enable-debug', action='store_const', const='1', dest run.options.add_argument('--enable-optimize', action='store_const', const='1', dest='opt', help='Enable optimization') run.options.add_argument('--target', default=None, help='Override the default build target') +run.options.add_argument('--version', type=str, dest='version', default=None, + help='Override the version string baked into the binary (defaults to the literal in smsdk_config.h)') run.Configure()