From 859c34b350f4d227856dac142100661ef0e1bea1 Mon Sep 17 00:00:00 2001 From: cube Date: Sun, 10 May 2026 17:44:33 +0200 Subject: [PATCH 1/6] pass semver to get_version.sh script --- .github/workflows/build-all.yaml | 34 +++++++++++++++- ShellScripts/common/get_version.sh | 55 +++++++++++++++----------- installers/appimage/create_appimage.sh | 8 +++- installers/win32/OOlite.nsi | 9 +++-- installers/win32/create_nsis.sh | 20 +++++++++- 5 files changed, 96 insertions(+), 30 deletions(-) diff --git a/.github/workflows/build-all.yaml b/.github/workflows/build-all.yaml index 315e648ff..646662cea 100644 --- a/.github/workflows/build-all.yaml +++ b/.github/workflows/build-all.yaml @@ -7,6 +7,13 @@ on: jobs: common: runs-on: ubuntu-latest + outputs: + SEMVER: ${{ steps.version_generator.outputs.SEMVER }} + PROJECTNAME: ${{ steps.version_generator.outputs.PROJECTNAME }} + GitVersion_Major: ${{ steps.version_generator.outputs.GitVersion_Major }} + GitVersion_Minor: ${{ steps.version_generator.outputs.GitVersion_Minor }} + GitVersion_Patch: ${{ steps.version_generator.outputs.GitVersion_Patch }} + GitVersion_VersionSourceDistance: ${{ steps.version_generator.outputs.GitVersion_VersionSourceDistance }} steps: - name: Checkout project uses: actions/checkout@v6 @@ -34,8 +41,15 @@ jobs: semantic-version-format=Loose next-version=1.93.1 - - name: Check environment + - name: Print and register result + id: version_generator run: | + echo "SEMVER=$GitVersion_SemVer" >> "$GITHUB_OUTPUT" + echo "GitVersion_Major=$GitVersion_Major" >> "$GITHUB_OUTPUT" + echo "GitVersion_Minor=$GitVersion_Minor" >> "$GITHUB_OUTPUT" + echo "GitVersion_Patch=$GitVersion_Patch" >> "$GITHUB_OUTPUT" + echo "GitVersion_VersionSourceDistance=$GitVersion_VersionSourceDistance" >> "$GITHUB_OUTPUT" + echo "PROJECTNAME=$PROJECTNAME" >> "$GITHUB_OUTPUT" printenv | sort build-linux: @@ -80,6 +94,9 @@ jobs: run: | oolite/ShellScripts/Linux/install_mozilla_js.sh system - name: Build Oolite + env: + SEMVER: ${{ needs.common.outputs.SEMVER }} + PROJECTNAME: ${{ needs.common.outputs.PROJECTNAME }} run: | oolite/ShellScripts/common/build_oolite.sh ${{matrix.flavour}} - name: Archive installer @@ -103,6 +120,9 @@ jobs: path: oolite fetch-depth: 0 - name: Build flatpak + env: + SEMVER: ${{ needs.common.outputs.SEMVER }} + PROJECTNAME: ${{ needs.common.outputs.PROJECTNAME }} run: | oolite/installers/flatpak/create_flatpak.sh - name: Archive installer @@ -151,6 +171,13 @@ jobs: shell: msys2 {0} env: msystem: UCRT64 + VER_MAJ: ${{ needs.common.outputs.GitVersion_Major }} + VER_MIN: ${{ needs.common.outputs.GitVersion_Minor }} + VER_REV: ${{ needs.common.outputs.GitVersion_Patch }} + VER_GITREV: ${{ needs.common.outputs.GitVersion_VersionSourceDistance }} + SEMVER: ${{ needs.common.outputs.SEMVER }} + VER_NSIS: ${{ needs.common.outputs.GitVersion_Major }}.${{ needs.common.outputs.GitVersion_Minor }}.${{ needs.common.outputs.GitVersion_Patch }}.${{ needs.common.outputs.GitVersion_VersionSourceDistance }} + PROJECTNAME: ${{ needs.common.outputs.PROJECTNAME }} run: | oolite/ShellScripts/common/build_oolite.sh ${{matrix.flavour}} - name: Archive installer @@ -162,7 +189,7 @@ jobs: retention-days: 5 release: - needs: [build-linux, build-flatpak, build-windows] + needs: [build-linux, build-flatpak, build-windows, common] runs-on: ubuntu-22.04 steps: ## This is for debugging only and helps developing the workflow. @@ -181,6 +208,9 @@ jobs: fetch-depth: 0 - name: Calculate version number and set OOLITE_VERSION id: version + env: + SEMVER: ${{ needs.common.outputs.SEMVER }} + PROJECTNAME: ${{ needs.common.outputs.PROJECTNAME }} run: | set -x cd oolite diff --git a/ShellScripts/common/get_version.sh b/ShellScripts/common/get_version.sh index 462bd02a8..e5bd49df2 100755 --- a/ShellScripts/common/get_version.sh +++ b/ShellScripts/common/get_version.sh @@ -1,4 +1,8 @@ #!/bin/bash +# +# Calculates the Oolite version number if not passed via env variables. +# Output goes into the OOLITE_VERSION.txt file and to stdout. +# SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd) pushd "$SCRIPT_DIR" > /dev/null @@ -6,30 +10,37 @@ pushd "$SCRIPT_DIR" > /dev/null mkdir -p ../../build cd ../../build -VERSION=$(cat ../src/Cocoa/oolite-version.xcconfig | cut -d '=' -f 2) -VER_MAJ=$(echo "$VERSION" | cut -d. -f1) -VER_MIN=$(echo "$VERSION" | cut -d. -f2) -VER_REV=$(echo "$VERSION" | cut -d. -f3) -if [ "" == "$VER_REV" ]; then - VER_REV="0" +if [ -z "${SEMVER}" ] || [ -z "${PROJECTNAME}" ] +then + # Variables not passed in. Calculate the classic way. + + VERSION=$(cat ../src/Cocoa/oolite-version.xcconfig | cut -d '=' -f 2) + VER_MAJ=$(echo "$VERSION" | cut -d. -f1) + VER_MIN=$(echo "$VERSION" | cut -d. -f2) + VER_REV=$(echo "$VERSION" | cut -d. -f3) + if [ "" == "$VER_REV" ]; then + VER_REV="0" + fi + TIMESTAMP=$(git log -1 --format=%ct) + # Date conversions use UTC for consistency + # Convert to __DATE__ format (e.g., Feb 20 2026) + CPP_DATE=$(date -u -d "@$TIMESTAMP" +"%b %e %Y") + # Convert to YYYY-MM-DD + APP_DATE=$(date -u -d "@$TIMESTAMP" +"%Y-%m-%d") + # Convert to YYMMDD format (e.g., 260313) + VER_DATE=$(date -u -d "@$TIMESTAMP" +"%y%m%d") + + VER_GITREV=$(git rev-list --count HEAD) + VER_GITHASH=$(git rev-parse --short=7 HEAD) + VER_FULL="$VER_MAJ.$VER_MIN.$VER_REV.$VER_GITREV-$VER_DATE-$VER_GITHASH" + BUILDTIME=$(date "+%Y.%m.%d %H:%M") +else + # Variables passed in. Make use of them. + + VER_FULL="${SEMVER}" fi -TIMESTAMP=$(git log -1 --format=%ct) -# Date conversions use UTC for consistency -# Convert to __DATE__ format (e.g., Feb 20 2026) -CPP_DATE=$(date -u -d "@$TIMESTAMP" +"%b %e %Y") -# Convert to YYYY-MM-DD -APP_DATE=$(date -u -d "@$TIMESTAMP" +"%Y-%m-%d") -# Convert to YYMMDD format (e.g., 260313) -VER_DATE=$(date -u -d "@$TIMESTAMP" +"%y%m%d") - -VER_GITREV=$(git rev-list --count HEAD) -VER_GITHASH=$(git rev-parse --short=7 HEAD) -VER_FULL="$VER_MAJ.$VER_MIN.$VER_REV.$VER_GITREV-$VER_DATE-$VER_GITHASH" -BUILDTIME=$(date "+%Y.%m.%d %H:%M") - echo "OOLITE_VERSION=$VER_FULL" > OOLITE_VERSION.txt - echo "$VER_FULL" -popd > /dev/null \ No newline at end of file +popd > /dev/null diff --git a/installers/appimage/create_appimage.sh b/installers/appimage/create_appimage.sh index 866c1c920..dbdaf1880 100755 --- a/installers/appimage/create_appimage.sh +++ b/installers/appimage/create_appimage.sh @@ -1,4 +1,10 @@ -#!/bin/bash +#!/bin/bash -x +# +# Creates the appimage. +# First parameter can be set to build type, typically one of "test", "dev" or omitted for release builds. +# + +echo I am $0 $@ run_script() { # First parameter is a suffix for the build type eg. test, dev diff --git a/installers/win32/OOlite.nsi b/installers/win32/OOlite.nsi index 1da430bf0..f3e85ec2d 100644 --- a/installers/win32/OOlite.nsi +++ b/installers/win32/OOlite.nsi @@ -31,6 +31,9 @@ !ifndef OUTDIR !define OUTDIR . !endif +!ifndef SEMVER +!define SEMVER ${VERSION} +!endif !ifndef SNAPSHOT !ifndef DEPLOYMENT @@ -58,10 +61,10 @@ SetCompress auto SetCompressor LZMA SetCompressorDictSize 32 SetDatablockOptimize on -OutFile "${OUTDIR}\OoliteInstall-${VER}-win${EXTVER}.exe" +OutFile "${OUTDIR}\OoliteInstall-${SEMVER}-win${EXTVER}.exe" BrandingText "(C) 2003-2026 Giles Williams, Jens Ayton and contributors" Name "Oolite" -Caption "Oolite ${VER}${EXTVER} Setup" +Caption "Oolite ${SEMVER} ${EXTVER} Setup" SubCaption 0 " " SubCaption 1 " " SubCaption 2 " " @@ -83,7 +86,7 @@ VIAddVersionKey "ProductName" "Oolite" VIAddVersionKey "FileDescription" "A space combat/trading game, inspired by Elite." VIAddVersionKey "LegalCopyright" "� 2003-2026 Giles Williams, Jens Ayton and contributors" VIAddVersionKey "FileVersion" "${VER}" -VIAddVersionKey "ProductVersion" "${VER}" +VIAddVersionKey "ProductVersion" "${SEMVER}" !ifdef SNAPSHOT VIAddVersionKey "GIT Revision" "${VER_GITHASH}" !endif diff --git a/installers/win32/create_nsis.sh b/installers/win32/create_nsis.sh index 3e85ff186..1f6c64b90 100644 --- a/installers/win32/create_nsis.sh +++ b/installers/win32/create_nsis.sh @@ -1,4 +1,14 @@ -#!/bin/bash +#!/bin/bash -x +# +# Creates the windows installer using NSIS. +# First parameter can be set to build type, typically one of "test", "dev" or omitted for release builds. +# Accepts two verion variables: +# VER_FULL - the full version number Oolite is getting built with +# VER_NSIS - the numberical version number (x.x.x.x) that the NSIS installer is built with +# + +echo I am $0 $@ + run_script() { # First parameter is a suffix for the build type eg. test, dev @@ -32,6 +42,11 @@ run_script() { return 1 fi + if [ -z "${VER_NSIS}" ] + then + export VER_NSIS=$VER_FULL; + fi + # Passing arguments cause problems with some versions of NSIS. # Because of this, we generate them into a separate file and include them. echo "; Version Definitions for Oolite" > OoliteVersions.nsh @@ -41,7 +56,8 @@ run_script() { echo "!define VER_REV ${VER_REV}" >> OoliteVersions.nsh echo "!define VER_GITREV ${VER_GITREV}" >> OoliteVersions.nsh echo "!define VER_GITHASH ${VER_GITHASH}" >> OoliteVersions.nsh - echo "!define VERSION ${VER_FULL}" >> OoliteVersions.nsh + echo "!define VERSION ${VER_NSIS}" >> OoliteVersions.nsh + echo "!define SEMVER ${SEMVER}" >> OoliteVersions.nsh echo "!define BUILDTIME \"${BUILDTIME}\"" >> OoliteVersions.nsh echo "!define BUILDHOST_IS64BIT 1" >> OoliteVersions.nsh From 5e5ea47d13c10d8018f157c5f3e2335ac701b20b Mon Sep 17 00:00:00 2001 From: cube Date: Mon, 11 May 2026 22:05:46 +0200 Subject: [PATCH 2/6] make branch artifacts accessible as prereleases --- .github/workflows/build-all.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-all.yaml b/.github/workflows/build-all.yaml index 646662cea..32d3b0db2 100644 --- a/.github/workflows/build-all.yaml +++ b/.github/workflows/build-all.yaml @@ -229,7 +229,6 @@ jobs: # For changes on master branch, create a new release. # It should move the 'latest' tag automatically. - name: Create Release - if: github.ref == 'refs/heads/master' || endsWith(github.ref, 'maintenance') id: create_release uses: "marvinpinto/action-automatic-releases@latest" with: From 78e9677fc4c48687f79b0956c8c62e0c077d07c6 Mon Sep 17 00:00:00 2001 From: cube Date: Tue, 12 May 2026 20:20:24 +0200 Subject: [PATCH 3/6] make flatpak build more verbose to understand version numbering --- ShellScripts/Linux/install_freedesktop_fn.sh | 15 +++++++++++++-- installers/flatpak/create_flatpak.sh | 5 ++++- installers/flatpak/flatpak_build.sh | 8 +++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/ShellScripts/Linux/install_freedesktop_fn.sh b/ShellScripts/Linux/install_freedesktop_fn.sh index 6429a223c..642308f9b 100644 --- a/ShellScripts/Linux/install_freedesktop_fn.sh +++ b/ShellScripts/Linux/install_freedesktop_fn.sh @@ -1,4 +1,10 @@ -#!/bin/bash +#!/bin/bash -x +# +# Installs the manifest and injects version number +# + +echo "I am install_freedesktop_fn.sh $@" +printenv | sort install_freedesktop() { # Install metainfo (eg. for FlatHub and AppImageHub) @@ -45,10 +51,15 @@ install_freedesktop() { sed -i "s/@VER@/${VERSION}/g" "$APP_METAINFO" sed -i "s/@DATE@/${APP_DATE}/g" "$APP_METAINFO" + echo =========================================== + echo Our manifest looks like this: + cat "$APP_METAINFO" + echo =========================================== + # Desktop and Icon install -D ../../installers/FreeDesktop/space.oolite.Oolite.desktop "$APPSHR/applications/space.oolite.Oolite.desktop" || { echo "$err_msg desktop file" >&2; return 1; } install -D "$PROGDIR/Resources/Textures/oolite-logo1.png" "$APPSHR/icons/hicolor/256x256/apps/space.oolite.Oolite.png" || { echo "$err_msg icon file" >&2; return 1; } popd -} \ No newline at end of file +} diff --git a/installers/flatpak/create_flatpak.sh b/installers/flatpak/create_flatpak.sh index 79ec2085f..115696e2a 100755 --- a/installers/flatpak/create_flatpak.sh +++ b/installers/flatpak/create_flatpak.sh @@ -1,4 +1,6 @@ -#!/bin/bash +#!/bin/bash -x + +echo "I am $0 $@" run_script() { # First parameter is a suffix for the build type eg. test, dev @@ -81,6 +83,7 @@ EOF local ARCH=$(uname -m) FILENAME="space.oolite.Oolite${SUFFIX}-${ARCH}.flatpak" echo "Creating Flatpak $FILENAME..." + find app/space.oolite.Oolite/ if ! flatpak build-bundle \ repo \ "$FILENAME" \ diff --git a/installers/flatpak/flatpak_build.sh b/installers/flatpak/flatpak_build.sh index 03e4cc17e..d22b38f73 100755 --- a/installers/flatpak/flatpak_build.sh +++ b/installers/flatpak/flatpak_build.sh @@ -1,4 +1,10 @@ -#!/bin/bash +#!/bin/bash -x +# +# Prepares the app directory for the flatpak builder +# + +echo "I am flatpak_build.sh $@" +printenv | sort source /app/share/GNUstep/Makefiles/GNUstep.sh source ShellScripts/common/get_version.sh From 4f6128bfe888166e363494f834e6150f8627803e Mon Sep 17 00:00:00 2001 From: cube Date: Wed, 13 May 2026 07:11:09 +0200 Subject: [PATCH 4/6] Pass SEMVER to flatpak build if set --- installers/flatpak/create_flatpak.sh | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/installers/flatpak/create_flatpak.sh b/installers/flatpak/create_flatpak.sh index 115696e2a..b1f651fd5 100755 --- a/installers/flatpak/create_flatpak.sh +++ b/installers/flatpak/create_flatpak.sh @@ -33,8 +33,17 @@ run_script() { fi local MANIFEST="space.oolite.Oolite.yaml" + + if [ -n "${SEMVER}" ] && [ -n "${PROJECTNAME}" ]; then + # patch manifest + sed -i "97a \ env:\n SEMVER: $SEMVER\n PROJECTNAME: $PROJECTNAME" $MANIFEST || return 1 + fi + + # check manifest if command -v flatpak-builder-lint >/dev/null 2>&1; then if ! flatpak-builder-lint manifest "$MANIFEST"; then + echo "❌ Flatpak manifest lint failed!" >&2 + cat $MANIFEST echo "❌ Flatpak manifest lint failed!" >&2 return 1 fi @@ -62,6 +71,10 @@ run_script() { - type: dir path: ../ EOF + + # show effective manifest + flatpak-builder --show-manifest $MANIFEST + if ! flatpak-builder \ --user \ --force-clean \ @@ -83,7 +96,6 @@ EOF local ARCH=$(uname -m) FILENAME="space.oolite.Oolite${SUFFIX}-${ARCH}.flatpak" echo "Creating Flatpak $FILENAME..." - find app/space.oolite.Oolite/ if ! flatpak build-bundle \ repo \ "$FILENAME" \ From 9272a913253d81e482a603bb3fa75732f42bb391 Mon Sep 17 00:00:00 2001 From: cube Date: Wed, 13 May 2026 09:25:11 +0200 Subject: [PATCH 5/6] fix missing version attribute in flatpak --- ShellScripts/Linux/install_freedesktop_fn.sh | 4 ++++ ShellScripts/common/get_version.sh | 19 +++++++++++-------- installers/flatpak/create_flatpak.sh | 2 +- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/ShellScripts/Linux/install_freedesktop_fn.sh b/ShellScripts/Linux/install_freedesktop_fn.sh index 642308f9b..7638b3bfc 100644 --- a/ShellScripts/Linux/install_freedesktop_fn.sh +++ b/ShellScripts/Linux/install_freedesktop_fn.sh @@ -2,6 +2,10 @@ # # Installs the manifest and injects version number # +# Requires environment variables: +# VERSION +# APP_DATE +# echo "I am install_freedesktop_fn.sh $@" printenv | sort diff --git a/ShellScripts/common/get_version.sh b/ShellScripts/common/get_version.sh index e5bd49df2..91fbb1d45 100755 --- a/ShellScripts/common/get_version.sh +++ b/ShellScripts/common/get_version.sh @@ -10,6 +10,17 @@ pushd "$SCRIPT_DIR" > /dev/null mkdir -p ../../build cd ../../build +# Timestamp of last commit/push +TIMESTAMP=$(git log -1 --format=%ct) + +# Date conversions use UTC for consistency +# Convert to __DATE__ format (e.g., Feb 20 2026) +CPP_DATE=$(date -u -d "@$TIMESTAMP" +"%b %e %Y") +# Convert to YYYY-MM-DD +APP_DATE=$(date -u -d "@$TIMESTAMP" +"%Y-%m-%d") +# Convert to YYMMDD format (e.g., 260313) +VER_DATE=$(date -u -d "@$TIMESTAMP" +"%y%m%d") + if [ -z "${SEMVER}" ] || [ -z "${PROJECTNAME}" ] then # Variables not passed in. Calculate the classic way. @@ -21,14 +32,6 @@ then if [ "" == "$VER_REV" ]; then VER_REV="0" fi - TIMESTAMP=$(git log -1 --format=%ct) - # Date conversions use UTC for consistency - # Convert to __DATE__ format (e.g., Feb 20 2026) - CPP_DATE=$(date -u -d "@$TIMESTAMP" +"%b %e %Y") - # Convert to YYYY-MM-DD - APP_DATE=$(date -u -d "@$TIMESTAMP" +"%Y-%m-%d") - # Convert to YYMMDD format (e.g., 260313) - VER_DATE=$(date -u -d "@$TIMESTAMP" +"%y%m%d") VER_GITREV=$(git rev-list --count HEAD) VER_GITHASH=$(git rev-parse --short=7 HEAD) diff --git a/installers/flatpak/create_flatpak.sh b/installers/flatpak/create_flatpak.sh index b1f651fd5..5f4232d7f 100755 --- a/installers/flatpak/create_flatpak.sh +++ b/installers/flatpak/create_flatpak.sh @@ -36,7 +36,7 @@ run_script() { if [ -n "${SEMVER}" ] && [ -n "${PROJECTNAME}" ]; then # patch manifest - sed -i "97a \ env:\n SEMVER: $SEMVER\n PROJECTNAME: $PROJECTNAME" $MANIFEST || return 1 + sed -i "97a \ env:\n SEMVER: $SEMVER\n PROJECTNAME: $PROJECTNAME\n VERSION: $SEMVER" $MANIFEST || return 1 fi # check manifest From e1e150a5ab2ff4534981ce900c1abec2a552a6ca Mon Sep 17 00:00:00 2001 From: cube Date: Wed, 13 May 2026 17:38:45 +0200 Subject: [PATCH 6/6] added double brackets --- ShellScripts/common/get_version.sh | 4 ++-- installers/win32/create_nsis.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ShellScripts/common/get_version.sh b/ShellScripts/common/get_version.sh index 91fbb1d45..da7d67261 100755 --- a/ShellScripts/common/get_version.sh +++ b/ShellScripts/common/get_version.sh @@ -21,7 +21,7 @@ APP_DATE=$(date -u -d "@$TIMESTAMP" +"%Y-%m-%d") # Convert to YYMMDD format (e.g., 260313) VER_DATE=$(date -u -d "@$TIMESTAMP" +"%y%m%d") -if [ -z "${SEMVER}" ] || [ -z "${PROJECTNAME}" ] +if [[ -z "${SEMVER}" ]] || [[ -z "${PROJECTNAME}" ]] then # Variables not passed in. Calculate the classic way. @@ -29,7 +29,7 @@ then VER_MAJ=$(echo "$VERSION" | cut -d. -f1) VER_MIN=$(echo "$VERSION" | cut -d. -f2) VER_REV=$(echo "$VERSION" | cut -d. -f3) - if [ "" == "$VER_REV" ]; then + if [[ "" == "$VER_REV" ]]; then VER_REV="0" fi diff --git a/installers/win32/create_nsis.sh b/installers/win32/create_nsis.sh index 1f6c64b90..c00ce9bf0 100644 --- a/installers/win32/create_nsis.sh +++ b/installers/win32/create_nsis.sh @@ -42,7 +42,7 @@ run_script() { return 1 fi - if [ -z "${VER_NSIS}" ] + if [[ -z "${VER_NSIS}" ]] then export VER_NSIS=$VER_FULL; fi