chore: identify version numbers using a git tag (#16652)

* chore: identify version numbers using a git tag

- remove VERSION file
- expose the `GIT_COMMIT`so that we can properly construct the web links
when the user clicks the version number in Settings/About
- some smaller cleanups and warning fixes

Fixes #12349

* fix_: ci artifact version and use version scripts

---------

Co-authored-by: Igor Sirotin <sirotin@status.im>
This commit is contained in:
Lukáš Tinkl 2024-12-04 23:42:48 +01:00 committed by GitHub
parent 481350385e
commit fe759f3599
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
20 changed files with 72 additions and 33 deletions

View File

@ -236,9 +236,8 @@ endif
NIM_PARAMS += --outdir:./bin
# App version
VERSIONFILE=VERSION
DESKTOP_VERSION=`cat $(VERSIONFILE)`
STATUSGO_VERSION=`(cd vendor/status-go; git describe --tags --abbrev=0)`
DESKTOP_VERSION = $(shell ./scripts/version.sh)
STATUSGO_VERSION = $(shell cd vendor/status-go; make version)
NIM_PARAMS += -d:DESKTOP_VERSION="$(DESKTOP_VERSION)"
NIM_PARAMS += -d:STATUSGO_VERSION="$(STATUSGO_VERSION)"
@ -251,6 +250,16 @@ ifeq ($(OUTPUT_CSV), true)
$(shell touch .update.timestamp)
endif
##
## Versioning
##
version:
@echo $(DESKTOP_VERSION)
status-go-version:
@echo $(STATUSGO_VERSION)
##
## StatusQ
@ -781,7 +790,7 @@ endif
ISCC \
-O"$(INSTALLER_OUTPUT)" \
-D"BaseName=$(shell basename $(STATUS_CLIENT_EXE) .exe)" \
-D"Version=$(shell cat VERSION)" \
-D"Version=$(DESKTOP_VERSION)" \
$(OUTPUT)/status.iss
ifdef WINDOWS_CODESIGN_PFX_PATH
scripts/sign-windows-bin.sh $(INSTALLER_OUTPUT)

View File

@ -1 +0,0 @@
2.30.90

View File

@ -69,8 +69,9 @@ pipeline {
/* Avoid weird bugs caused by stale cache. */
QML_DISABLE_DISK_CACHE = "true"
/* Control output the filename */
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'AppImage', arch: getArch())}"
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'tar.gz', arch: getArch())}"
VERSION = sh(script: "./scripts/version.sh", returnStdout: true)
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'AppImage', arch: getArch(), version: env.VERSION)}"
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'tar.gz', arch: getArch(), version: env.VERSION)}"
/* prevent sharing cache dir across different jobs */
GO_GENERATE_FAST_DIR = "${env.WORKSPACE_TMP}/go-generate-fast"
SENTRY_PRODUCTION = "${utils.isReleaseBuild() ? 'true' : 'false'}"

View File

@ -61,8 +61,9 @@ pipeline {
/* Avoid weird bugs caused by stale cache. */
QML_DISABLE_DISK_CACHE = "true"
/* Control output the filename */
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'nix.AppImage', arch: getArch())}"
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'nix.tar.gz', arch: getArch())}"
VERSION = sh(script: "./scripts/version.sh", returnStdout: true)
STATUS_CLIENT_APPIMAGE = "pkg/${utils.pkgFilename(ext: 'nix.AppImage', arch: getArch(), version: env.VERSION)}"
STATUS_CLIENT_TARBALL = "pkg/${utils.pkgFilename(ext: 'nix.tar.gz', arch: getArch(), version: env.VERSION)}"
/* prevent sharing cache dir across different jobs */
GO_GENERATE_FAST_DIR = "${env.WORKSPACE_TMP}/go-generate-fast"
SENTRY_PRODUCTION = "${utils.isReleaseBuild() ? 'true' : 'false'}"

View File

@ -72,7 +72,8 @@ pipeline {
/* Avoid weird bugs caused by stale cache. */
QML_DISABLE_DISK_CACHE = "true"
/* Control output the filename */
STATUS_CLIENT_DMG = "pkg/${utils.pkgFilename(ext: 'dmg', arch: getArch())}"
VERSION = sh(script: "./scripts/version.sh", returnStdout: true)
STATUS_CLIENT_DMG = "pkg/${utils.pkgFilename(ext: 'dmg', arch: getArch(), version: env.VERSION)}"
/* Apple Team ID for Notarization */
MACOS_NOTARIZE_TEAM_ID = "8B5X2M6H2Y"
/* prevent sharing cache dir across different jobs */

View File

@ -74,9 +74,10 @@ pipeline {
/* Avoid weird bugs caused by stale cache. */
QML_DISABLE_DISK_CACHE = "true"
/* Control output the filename */
STATUS_CLIENT_EXE = "pkg/${utils.pkgFilename(ext: 'exe', arch: getArch())}"
VERSION = sh(script: "./scripts/version.sh", returnStdout: true)
STATUS_CLIENT_EXE = "pkg/${utils.pkgFilename(ext: 'exe', arch: getArch(), version: env.VERSION)}"
/* 7zip archive filename */
STATUS_CLIENT_7Z = "pkg/${utils.pkgFilename(ext: '7z', arch: getArch())}"
STATUS_CLIENT_7Z = "pkg/${utils.pkgFilename(ext: '7z', arch: getArch(), version: env.VERSION)}"
/* Hack-fix for params not being set in env on first job run. */
WINDOWS_CODESIGN_TIMESTAMP_URL = "${params.WINDOWS_CODESIGN_TIMESTAMP_URL}"
/* prevent sharing cache dir across different jobs */

2
scripts/version.sh Executable file
View File

@ -0,0 +1,2 @@
#!/usr/bin/env bash
git describe --tags --dirty="-dirty"

View File

@ -27,13 +27,16 @@ proc init*(self: Controller) =
self.delegate.versionFetched(args.available, args.version, args.url)
proc getAppVersion*(self: Controller): string =
return self.aboutService.getAppVersion()
self.aboutService.getAppVersion()
proc getGitCommit*(self: Controller): string =
self.aboutService.getGitCommit()
proc checkForUpdates*(self: Controller) =
self.aboutService.checkForUpdates()
proc getNodeVersion*(self: Controller): string =
return self.aboutService.getNodeVersion()
self.aboutService.getNodeVersion()
proc getStatusGoVersion*(self: Controller): string =
self.aboutService.getStatusGoVersion()

View File

@ -14,6 +14,9 @@ method isLoaded*(self: AccessInterface): bool {.base.} =
method getAppVersion*(self: AccessInterface): string {.base.} =
raise newException(ValueError, "No implementation available")
method getGitCommit*(self: AccessInterface): string {.base.} =
raise newException(ValueError, "No implementation available")
method getNodeVersion*(self: AccessInterface): string {.base.} =
raise newException(ValueError, "No implementation available")

View File

@ -49,6 +49,9 @@ method viewDidLoad*(self: Module) =
method getAppVersion*(self: Module): string =
return self.controller.getAppVersion()
method getGitCommit*(self: Module): string =
return self.controller.getGitCommit()
method getNodeVersion*(self: Module): string =
return self.controller.getNodeVersion()

View File

@ -21,6 +21,9 @@ QtObject:
proc getCurrentVersion*(self: View): string {.slot.} =
return self.delegate.getAppVersion()
proc getGitCommit*(self: View): string {.slot.} =
return self.delegate.getGitCommit()
proc nodeVersion*(self: View): string {.slot.} =
return self.delegate.getNodeVersion()

View File

@ -47,6 +47,9 @@ QtObject:
proc getAppVersion*(self: Service): string =
return APP_VERSION
proc getGitCommit*(self: Service): string =
return GIT_COMMIT
proc getNodeVersion*(self: Service): string =
try:
return backend.clientVersion().result.getStr

View File

@ -12,7 +12,7 @@ const STATUSGO_VERSION* {.strdefine.} = "0.0.0"
# This is changed during compilation by executing git command
const GIT_COMMIT* {.strdefine.} = ""
const APP_VERSION* = if defined(production): DESKTOP_VERSION else: fmt("{GIT_COMMIT}")
const APP_VERSION* = DESKTOP_VERSION
const sep* = when defined(windows): "\\" else: "/"

View File

@ -1,4 +1,4 @@
import os, sequtils, strutils, stew/shims/strformat, chronicles
import os, sequtils, strutils, chronicles
import app/global/feature_flags

View File

@ -44,7 +44,7 @@ proc determineStatusAppIconPath(): string =
if defined(production):
return "/../status.png"
return "/../status-dev.png"
return "/../status-dev.png"
proc prepareLogging() =
# Outputs logs in the node tab

View File

@ -30,12 +30,17 @@ SplitView {
function getCurrentVersion() {
logs.logEvent("store::getCurrentVersion")
return isProduction ? "0.13.2" : "45784cf0c"
return isProduction ? "0.13.2" : "0.13.2-dev"
}
function getGitCommit() {
logs.logEvent("store::getGitCommit")
return "92b88e8a3e1d48f2c39d1db6e4d577ebbe21f7a9"
}
function getStatusGoVersion() {
logs.logEvent("store::getStatusGoVersion")
return "0.162.9"
return "v0.162.9"
}
function qtRuntimeVersion() {
@ -44,10 +49,10 @@ SplitView {
function getReleaseNotes() {
logs.logEvent("store::getReleaseNotes")
const link = isProduction ? "https://github.com/status-im/status-desktop/releases/tag/%1" :
"https://github.com/status-im/status-desktop/commit/%1"
const link = isProduction ? "https://github.com/status-im/status-desktop/releases/tag/%1".arg(getCurrentVersion()) :
"https://github.com/status-im/status-desktop/commit/%1".arg(getGitCommit())
openLink(link.arg(getCurrentVersion()))
openLink(link)
}
function openLink(url) {

View File

@ -405,6 +405,10 @@ StatusSectionLayout {
return root.store.getCurrentVersion()
}
function getGitCommit() {
return root.store.getGitCommit()
}
function getStatusGoVersion() {
return root.store.getStatusGoVersion()
}
@ -414,10 +418,10 @@ StatusSectionLayout {
}
function getReleaseNotes() {
const link = isProduction ? "https://github.com/status-im/status-desktop/releases/tag/%1" :
"https://github.com/status-im/status-desktop/commit/%1"
const link = isProduction ? "https://github.com/status-im/status-desktop/releases/tag/%1".arg(getCurrentVersion()) :
"https://github.com/status-im/status-desktop/commit/%1".arg(getGitCommit())
openLink(link.arg(getCurrentVersion()))
openLink(link)
}
function openLink(url) {

View File

@ -133,7 +133,11 @@ QtObject {
}
function getCurrentVersion() {
return aboutModuleInst.getCurrentVersion()
return aboutModuleInst.getCurrentVersion().replace(/^v/, '')
}
function getGitCommit() {
return aboutModuleInst.getGitCommit()
}
function getStatusGoVersion() {

View File

@ -68,7 +68,7 @@ SettingsContentBase {
font.pixelSize: 22
font.bold: true
normalColor: Theme.palette.directColor1
text: (root.store.isProduction ? "" : "git:") + root.store.getCurrentVersion()
text: root.store.getCurrentVersion()
onClicked: root.store.getReleaseNotes()
}
@ -84,7 +84,7 @@ SettingsContentBase {
font.pixelSize: 17
font.bold: true
normalColor: Theme.palette.directColor1
text: root.store.getStatusGoVersion()
text: root.store.getStatusGoVersion().replace(/^v/, '')
onClicked: root.store.openLink("https://github.com/status-im/status-go/tree/%1".arg(root.store.getStatusGoVersion()))
}

View File

@ -40,6 +40,8 @@ OTHER_FILES += $$files("$$PWD/../vendor/SortFilterProxyModel/*.h", true)
OTHER_FILES += $$files("$$PWD/../vendor/nimqml/src/*.nim", true)
OTHER_FILES += $$files("$$PWD/../Makefile")
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = $$PWD/imports \
$$PWD/StatusQ \
@ -49,9 +51,4 @@ QML_IMPORT_PATH = $$PWD/imports \
# Additional import path used to resolve QML modules just for Qt Quick Designer
QML_DESIGNER_IMPORT_PATH = $$PWD/imports
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
RESOURCES += resources.qrc StatusQ/src/assets.qrc StatusQ/src/statusq.qrc