1
0
mirror of https://gitlab.com/kelteseth/ScreenPlay.git synced 2024-09-01 16:19:47 +02:00

Remove ScreePlay version from defines.py

We now use always the latest set git tag as version.
This means we also no longer need to add it as an argument
This commit is contained in:
Elias Steurer 2023-08-17 14:26:39 +02:00
parent 18b8c4025b
commit 58567987aa
8 changed files with 136 additions and 52 deletions

View File

@ -3,24 +3,33 @@ steam_linux:
extends: extends:
- .base_linux_build - .base_linux_build
script: script:
- python3 Tools/build.py --type=release --steam --deploy-version --use-aqt --installer --tag $CI_COMMIT_TAG - python3 Tools/build.py --type=release --steam --deploy-version --use-aqt --installer
rules: rules:
- if: "$CI_COMMIT_TAG" - if: "$CI_COMMIT_TAG"
artifacts:
paths:
- build-x64-linux-release/bin
steam_windows: steam_windows:
stage: release_build stage: release_build
extends: extends:
- .base_windows_build - .base_windows_build
script: script:
- python Tools/build.py --type=release --steam --use-aqt --deploy-version --tag $CI_COMMIT_TAG - python Tools/build.py --type=release --steam --use-aqt --deploy-version
rules: rules:
- if: "$CI_COMMIT_TAG" - if: "$CI_COMMIT_TAG"
artifacts:
paths:
- build-x64-windows-release/ScreenPlay-Installer.exe
- build-x64-windows-release/ScreenPlay-$CI_COMMIT_TAG-x64-windows-release.zip
steam_osx: steam_osx:
stage: release_build stage: release_build
extends: extends:
- .base_osx_build - .base_osx_build
script: script:
- python3 Tools/build.py --type=release --steam --use-aqt --deploy-version -sign_osx --tag $CI_COMMIT_TAG - python3 Tools/build.py --type=release --steam --use-aqt --deploy-version -sign_osx
rules: rules:
- if: "$CI_COMMIT_TAG" - if: "$CI_COMMIT_TAG"
artifacts:
paths:
- build-64-osx-universal-release/ScreenPlay.app

4
.vscode/tasks.json vendored
View File

@ -104,14 +104,14 @@
"build.py", "build.py",
"--type=release", "--type=release",
"--deploy-version", "--deploy-version",
"-steam" "--steam"
] ]
}, },
"args": [ "args": [
"build.py", "build.py",
"--type=release", "--type=release",
"--deploy-version", "--deploy-version",
"-steam" "--steam"
] ]
}, },
{ {

View File

@ -21,6 +21,7 @@ function(get_project_version VERSION_VAR)
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
) )
message(STATUS "Parsing git tag: ${GIT_VERSION}")
string(REPLACE "V" "" STRIPPED_VERSION "${GIT_VERSION}") # Remove the 'V' prefix string(REPLACE "V" "" STRIPPED_VERSION "${GIT_VERSION}") # Remove the 'V' prefix
string(REPLACE "-" ";" VERSION_LIST ${STRIPPED_VERSION}) string(REPLACE "-" ";" VERSION_LIST ${STRIPPED_VERSION})
list(GET VERSION_LIST 0 VERSION_STRING) list(GET VERSION_LIST 0 VERSION_STRING)

View File

@ -3,7 +3,6 @@ cmake_minimum_required(VERSION 3.23.0)
set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH}) set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake" ${CMAKE_MODULE_PATH})
include(GetProjectVersion) include(GetProjectVersion)
get_project_version(PROJECT_VERSION) get_project_version(PROJECT_VERSION)
message(STATUS "Version: ${PROJECT_VERSION}")
project( project(
ScreenPlay ScreenPlay
@ -140,18 +139,19 @@ if(${SCREENPLAY_INSTALLER} AND NOT APPLE)
include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/CreateIFWInstaller.cmake) include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/CreateIFWInstaller.cmake)
endif() endif()
message(STATUS "[CPP DEFINE] DEPLOY_VERSION = ${DEPLOY_VERSION}") message(STATUS "[PROJECT] PROJECT_VERSION = ${PROJECT_VERSION}")
message(STATUS "[CPP DEFINE] SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}") message(STATUS "[PROJECT] CMAKE_VERSION = ${CMAKE_VERSION}")
message(STATUS "[CPP DEFINE] BUILD_DATE = ${BUILD_DATE}")
message(STATUS "[DEFINE] BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
message(STATUS "[DEFINE] GIT_COMMIT_HASH = ${GIT_COMMIT_HASH}")
message(STATUS "[OPTION] SCREENPLAY_DEPLOY = ${SCREENPLAY_DEPLOY}")
message(STATUS "[OPTION] SCREENPLAY_INSTALLER = ${SCREENPLAY_INSTALLER}")
message(STATUS "[OPTION] SCREENPLAY_STEAM = ${SCREENPLAY_STEAM}")
message(STATUS "[OPTION] SCREENPLAY_TESTS = ${SCREENPLAY_TESTS}")
message(STATUS "[PROJECT] SCREENPLAY_QML_MODULES_PATH = ${SCREENPLAY_QML_MODULES_PATH}") message(STATUS "[PROJECT] SCREENPLAY_QML_MODULES_PATH = ${SCREENPLAY_QML_MODULES_PATH}")
message(STATUS "[PROJECT] CMAKE_TOOLCHAIN_FILE = ${CMAKE_TOOLCHAIN_FILE}") message(STATUS "[PROJECT] CMAKE_TOOLCHAIN_FILE = ${CMAKE_TOOLCHAIN_FILE}")
message(STATUS "[PROJECT] VCPKG_PATH = ${VCPKG_PATH}") message(STATUS "[PROJECT] VCPKG_PATH = ${VCPKG_PATH}")
message(STATUS "[PROJECT] VCPKG_TARGET_TRIPLET = ${VCPKG_TARGET_TRIPLET}") message(STATUS "[PROJECT] VCPKG_TARGET_TRIPLET = ${VCPKG_TARGET_TRIPLET}")
message(STATUS "[PROJECT] CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}") message(STATUS "[PROJECT] CMAKE_PREFIX_PATH = ${CMAKE_PREFIX_PATH}")
message(STATUS "[PROJECT] CMAKE_VERSION = ${CMAKE_VERSION}") message(STATUS "[OPTION] SCREENPLAY_DEPLOY = ${SCREENPLAY_DEPLOY}")
message(STATUS "[OPTION] SCREENPLAY_INSTALLER = ${SCREENPLAY_INSTALLER}")
message(STATUS "[OPTION] SCREENPLAY_STEAM = ${SCREENPLAY_STEAM}")
message(STATUS "[OPTION] SCREENPLAY_TESTS = ${SCREENPLAY_TESTS}")
message(STATUS "[DEFINE] BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
message(STATUS "[DEFINE] GIT_COMMIT_HASH = ${GIT_COMMIT_HASH}")
message(STATUS "[CPP DEFINE] DEPLOY_VERSION = ${DEPLOY_VERSION}")
message(STATUS "[CPP DEFINE] SOURCE_DIR = ${CMAKE_CURRENT_SOURCE_DIR}")
message(STATUS "[CPP DEFINE] BUILD_DATE = ${BUILD_DATE}")

View File

@ -11,7 +11,7 @@ import defines
from typing import Tuple from typing import Tuple
from pathlib import Path from pathlib import Path
import macos_sign import macos_sign
from util import sha256, cd_repo_root_path, repo_root_path, zipdir, run, get_vs_env_dict from util import sha256, cd_repo_root_path, repo_root_path, zipdir, run, get_vs_env_dict, get_latest_git_tag, parse_semver, semver_to_string
from sys import stdout from sys import stdout
stdout.reconfigure(encoding='utf-8') stdout.reconfigure(encoding='utf-8')
@ -213,7 +213,7 @@ def build(build_config: BuildConfig, build_result: BuildResult) -> BuildResult:
-DSCREENPLAY_DEPLOY={build_config.build_deploy} \ -DSCREENPLAY_DEPLOY={build_config.build_deploy} \
-DSCREENPLAY_INSTALLER={build_config.create_installer} \ -DSCREENPLAY_INSTALLER={build_config.create_installer} \
-DSCREENPLAY_IFW_ROOT:STRING={build_config.ifw_root_path} \ -DSCREENPLAY_IFW_ROOT:STRING={build_config.ifw_root_path} \
-G "CodeBlocks - Ninja" \ -G "Ninja" \
-B.' -B.'
print(f"\n⚙️ CMake configure:\n", cmake_configure_command.replace( print(f"\n⚙️ CMake configure:\n", cmake_configure_command.replace(
@ -375,7 +375,6 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
description='Build and Package ScreenPlay') description='Build and Package ScreenPlay')
parser.add_argument('--tag', type=str, help="GitLab CI tag", default="")
parser.add_argument('--qt-version', action="store", dest="qt_version_overwrite", parser.add_argument('--qt-version', action="store", dest="qt_version_overwrite",
help="Overwrites the default Qt version") help="Overwrites the default Qt version")
parser.add_argument('--qt-installer-version', action="store", dest="qt_installer_version_overwrite", parser.add_argument('--qt-installer-version', action="store", dest="qt_installer_version_overwrite",
@ -399,14 +398,24 @@ if __name__ == "__main__":
args = parser.parse_args() args = parser.parse_args()
qt_version = defines.QT_VERSION qt_version = defines.QT_VERSION
if args.tag:
screenplay_version = args.tag
else:
screenplay_version = defines.SCREENPLAY_VERSION
qt_ifw_version = defines.QT_IFW_VERSION # Not yet used. qt_ifw_version = defines.QT_IFW_VERSION # Not yet used.
qt_version_overwrite: str qt_version_overwrite: str
use_aqt = False use_aqt = False
tag = get_latest_git_tag()
if tag:
print(f"Latest Git tag: {tag}")
semver = parse_semver(tag)
if semver:
print(f"Parsed SemVer: {semver}")
screenplay_version = semver_to_string(semver)
else:
print("Failed to parse SemVer.")
exit(-1)
else:
print("No git tags found.")
exit(-1)
if args.qt_version_overwrite: if args.qt_version_overwrite:
qt_version = args.qt_version_overwrite qt_version = args.qt_version_overwrite
print("Using Qt version {qt_version}") print("Using Qt version {qt_version}")

View File

@ -1,9 +1,7 @@
#!/usr/bin/python3 #!/usr/bin/python3
# SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only # SPDX-License-Identifier: LicenseRef-EliasSteurerTachiom OR AGPL-3.0-only
import steam_publish import steam_publish
import shutil
import sys import sys
import macos_sign
import argparse import argparse
import os import os
import build import build
@ -11,18 +9,26 @@ from pathlib import Path
import platform import platform
import paramiko import paramiko
import defines import defines
from util import sftp_exists, run, repo_root_path from util import sftp_exists, get_latest_git_tag, parse_semver, semver_to_string
from sys import stdout from sys import stdout
stdout.reconfigure(encoding='utf-8') stdout.reconfigure(encoding='utf-8')
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description='Build and Package ScreenPlay') parser = argparse.ArgumentParser(
parser.add_argument('-skip_publish', '-skp', action="store_true", dest="skip_publish", default=False, help="skip publish") description='Build and Package ScreenPlay')
parser.add_argument('-skip_build', '-skb', action="store_true", dest="skip_build", default=False, help="skip build. If we already have a build and only want to upload it") parser.add_argument('--skip_steam_publish', '-skstp', action="store_true",
parser.add_argument('-steam_password', '-sp', action="store", dest="steam_password", help="Steam password") dest="skip_publish", default=False, help="skip publish")
parser.add_argument('-hosting_username','-hu', action="store", dest="hosting_username", help="ssh username") parser.add_argument('--skip_getspde_publish', '-skgsp', action="store_true",
parser.add_argument('-hosting_password', '-hp', action="store", dest="hosting_password", help="ssh password") dest="skip_getspde_publish", default=False, help="skip getsp.de publish")
parser.add_argument('--skip_build', '-skb', action="store_true", dest="skip_build",
default=False, help="skip build. If we already have a build and only want to upload it")
parser.add_argument('--steam_password', '-sp', action="store",
dest="steam_password", help="Steam password")
parser.add_argument('--hosting_username', '-hu', action="store",
dest="hosting_username", help="ssh username")
parser.add_argument('--hosting_password', '-hp', action="store",
dest="hosting_password", help="ssh password")
args = parser.parse_args() args = parser.parse_args()
# Script needs to run in the tools folder # Script needs to run in the tools folder
@ -31,10 +37,23 @@ if __name__ == "__main__":
root_path = tools_path.parent root_path = tools_path.parent
print(f"Set root directory to: {root_path}") print(f"Set root directory to: {root_path}")
tag = get_latest_git_tag()
if tag:
print(f"Latest Git tag: {tag}")
semver = parse_semver(tag)
if semver:
print(f"Parsed SemVer: {semver}")
screenplay_version = semver_to_string(semver)
else:
print("Failed to parse SemVer.")
exit(-1)
else:
print("No git tags found.")
exit(-1)
build_result = build.BuildResult() build_result = build.BuildResult()
build_config = build.BuildConfig() build_config = build.BuildConfig()
build_config.screenplay_version = defines.SCREENPLAY_VERSION
build_config.qt_version = defines.QT_VERSION build_config.qt_version = defines.QT_VERSION
build_config.qt_ifw_version = defines.QT_IFW_VERSION build_config.qt_ifw_version = defines.QT_IFW_VERSION
build_config.build_steam = "ON" build_config.build_steam = "ON"
@ -42,6 +61,7 @@ if __name__ == "__main__":
build_config.build_deploy = "ON" build_config.build_deploy = "ON"
build_config.create_installer = "ON" build_config.create_installer = "ON"
build_config.build_type = "release" build_config.build_type = "release"
build_config.screenplay_version = screenplay_version
if platform.system() == "Darwin" and not args.skip_build: if platform.system() == "Darwin" and not args.skip_build:
# We do not yet support a standalone osx installer # We do not yet support a standalone osx installer
@ -54,20 +74,20 @@ if __name__ == "__main__":
# This will build both arm64 and x64 and sign the unversal binary # This will build both arm64 and x64 and sign the unversal binary
build_result = build.execute(build_config) build_result = build.execute(build_config)
if platform.system() == "Windows" and not args.skip_build: if platform.system() == "Windows" and not args.skip_build:
build_config.build_architecture = "x64" build_config.build_architecture = "x64"
if not args.skip_publish: if not args.skip_getspde_publish:
# Steamless version first # Steamless version first
build_config.build_steam = "OFF" build_config.build_steam = "OFF"
build_result = build.execute(build_config) build_result = build.execute(build_config)
ssh = paramiko.SSHClient() ssh = paramiko.SSHClient()
ssh.load_system_host_keys() ssh.load_system_host_keys()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('kelteseth.com', username=args.hosting_username, password=args.hosting_password) ssh.connect('kelteseth.com', username=args.hosting_username,
password=args.hosting_password)
sftp = ssh.open_sftp() sftp = ssh.open_sftp()
release_folder = "/kelteseth_com/public/releases/" + build_config.screenplay_version + "/" release_folder = "/getsp.de/" + build_config.screenplay_version + "/"
if sftp_exists(sftp, release_folder): if sftp_exists(sftp, release_folder):
remoteFiles = sftp.listdir(path=release_folder) remoteFiles = sftp.listdir(path=release_folder)
for file in remoteFiles: for file in remoteFiles:
@ -77,10 +97,14 @@ if __name__ == "__main__":
sftp.mkdir(release_folder) sftp.mkdir(release_folder)
print("Uploading files...") print("Uploading files...")
sftp.put(build_result.build_zip, release_folder + str(build_result.build_zip.name)) sftp.put(build_result.build_zip, release_folder +
sftp.put(build_result.installer, release_folder + str(build_result.installer.name)) str(build_result.build_zip.name))
sftp.put(build_result.installer_zip,release_folder + str(build_result.installer_zip.name)) sftp.put(build_result.installer, release_folder +
sftp.put(build_result.build_hash, release_folder + str(build_result.build_hash.name)) str(build_result.installer.name))
sftp.put(build_result.installer_zip, release_folder +
str(build_result.installer_zip.name))
sftp.put(build_result.build_hash, release_folder +
str(build_result.build_hash.name))
sftp.close() sftp.close()
ssh.close() ssh.close()
@ -90,8 +114,8 @@ if __name__ == "__main__":
build_config.create_installer = "OFF" build_config.create_installer = "OFF"
build_result = build.execute(build_config) build_result = build.execute(build_config)
if args.skip_publish: if args.skip_steam_publish:
print("Skip publishing.") print("Skip steam publishing.")
sys.exit(0) sys.exit(0)
if args.steam_password is None: if args.steam_password is None:

View File

@ -18,7 +18,6 @@ elif sys.platform == "linux":
OS = "linux" OS = "linux"
QT_PLATFORM = "gcc_64" QT_PLATFORM = "gcc_64"
SCREENPLAY_VERSION = "0.15.1"
QT_PATH = path = Path(os.path.join( QT_PATH = path = Path(os.path.join(
os.path.realpath(__file__), "../../../aqt")).resolve() os.path.realpath(__file__), "../../../aqt")).resolve()
QT_VERSION = "6.5.2" QT_VERSION = "6.5.2"

View File

@ -6,11 +6,13 @@ from pathlib import Path
from os import chdir from os import chdir
from concurrent.futures import ThreadPoolExecutor from concurrent.futures import ThreadPoolExecutor
import os import os
import re
import subprocess import subprocess
from sys import stdout from sys import stdout
stdout.reconfigure(encoding='utf-8') stdout.reconfigure(encoding='utf-8')
def sftp_exists(sftp, path) -> bool: def sftp_exists(sftp, path) -> bool:
try: try:
sftp.stat(path) sftp.stat(path)
@ -24,6 +26,7 @@ def run(cmd, cwd=Path.cwd()):
if result.returncode != 0: if result.returncode != 0:
raise RuntimeError(f"Failed to execute {cmd}") raise RuntimeError(f"Failed to execute {cmd}")
def run_and_capture_output(cmd, cwd=Path.cwd()) -> str: def run_and_capture_output(cmd, cwd=Path.cwd()) -> str:
result = subprocess.run(cmd, shell=True, cwd=cwd, stdout=subprocess.PIPE) result = subprocess.run(cmd, shell=True, cwd=cwd, stdout=subprocess.PIPE)
if result.returncode != 0: if result.returncode != 0:
@ -32,11 +35,13 @@ def run_and_capture_output(cmd, cwd=Path.cwd()) -> str:
return str(result.stdout.decode('utf-8')) return str(result.stdout.decode('utf-8'))
return "" return ""
def repo_root_path() -> str: def repo_root_path() -> str:
# Root dir of the repository # Root dir of the repository
path = os.path.join(os.path.realpath(__file__), "../../") path = os.path.join(os.path.realpath(__file__), "../../")
return os.path.realpath(path) return os.path.realpath(path)
def cd_repo_root_path() -> str: def cd_repo_root_path() -> str:
# Make sure the script is always started from the same # Make sure the script is always started from the same
# ScreenPlay root folder # ScreenPlay root folder
@ -47,6 +52,7 @@ def cd_repo_root_path() -> str:
chdir(root_path) chdir(root_path)
return root_path return root_path
def sha256(fname) -> str: def sha256(fname) -> str:
hash_sha256 = hashlib.sha256() hash_sha256 = hashlib.sha256()
with open(fname, "rb") as f: with open(fname, "rb") as f:
@ -55,7 +61,6 @@ def sha256(fname) -> str:
return hash_sha256.hexdigest() return hash_sha256.hexdigest()
def zipdir(path, ziph): def zipdir(path, ziph):
# ziph is zipfile handle # ziph is zipfile handle
for root, dirs, files in os.walk(path): for root, dirs, files in os.walk(path):
@ -102,3 +107,40 @@ def get_vs_env_dict():
raise ValueError(stderr.decode("mbcs")) raise ValueError(stderr.decode("mbcs"))
output = stdout.decode("mbcs").split("\r\n") output = stdout.decode("mbcs").split("\r\n")
return dict((e[0].upper(), e[1]) for e in [p.rstrip().split("=", 1) for p in output] if len(e) == 2) return dict((e[0].upper(), e[1]) for e in [p.rstrip().split("=", 1) for p in output] if len(e) == 2)
def get_latest_git_tag():
try:
tag = subprocess.check_output(
["git", "describe", "--tags"]).decode("utf-8").strip()
return tag
except subprocess.CalledProcessError:
print("Error fetching the Git tag.")
return None
def parse_semver(tag):
# Regular expression to match semver
# Like V0.15.0-RC1-305-g18b8c402
# Do NOT add a - between RC and the version number (1 in this example)
pattern = r'(?i)^v?(\d+)\.(\d+)\.(\d+)(?:-([a-z0-9.-]+))?(?:-(\d+)-g([a-f0-9]+))?$'
match = re.match(pattern, tag)
if match:
major, minor, patch, pre_release, commits_since, commit_hash = match.groups()
return {
'major': major,
'minor': minor,
'patch': patch,
'pre_release': pre_release,
'commits_since': commits_since,
'commit_hash': commit_hash
}
else:
return None
def semver_to_string(semver_dict):
version_str = f"V{semver_dict['major']}.{semver_dict['minor']}.{semver_dict['patch']}"
if semver_dict['pre_release']:
version_str += f"-{semver_dict['pre_release']}"
return version_str