12 Commits
Author SHA1 Message Date
galeon 56dd58b8d1 Merge pull request 'Фиксы пайплайна' (#32) from dev into rc
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
release / create-release (push) Successful in 4s
tests / macos (push) Successful in 1m19s
tests / linux (push) Successful in 2m28s
tests / windows (push) Canceled after 3m29s
release / build-macos (push) Successful in 1m53s
release / build-linux (push) Successful in 3m8s
release / build-windows (push) Successful in 6m26s
release / publish (push) Successful in 1s
Reviewed-on: #32
2026-10-24 19:25:20 +00:00
galeon 50e0cd2aab sync BiLauncher.iss with rc
tests / package-smoke-linux (push) Skipped
tests / windows (pull_request) Skipped
tests / package-smoke-windows (push) Skipped
tests / macos (pull_request) Skipped
tests / package-smoke-macos (push) Skipped
tests / package-smoke-linux (pull_request) Skipped
tests / package-smoke-windows (pull_request) Skipped
tests / package-smoke-macos (pull_request) Skipped
tests / macos (push) Successful in 1m20s
tests / linux (push) Successful in 3m4s
tests / linux (pull_request) Successful in 2m19s
tests / windows (push) Failing after 23m42s
2026-10-24 22:19:55 +03:00
galeon 4ceaf000fd fixes
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Failing after 5s
tests / linux (push) Failing after 11s
tests / windows (push) Canceled after 0s
release / build-macos (push) Failing after 5s
release / build-linux (push) Failing after 12s
release / create-release (push) Successful in 5s
release / build-windows (push) Canceled after 0s
release / publish (push) Canceled after 0s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-24 22:11:39 +03:00
galeon d82a9d0729 fixes
tests / windows (pull_request) Skipped
tests / macos (pull_request) Skipped
tests / package-smoke-linux (pull_request) Skipped
tests / package-smoke-windows (pull_request) Skipped
tests / package-smoke-macos (pull_request) Skipped
tests / linux (pull_request) Successful in 2m33s
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Successful in 1m19s
tests / linux (push) Successful in 2m35s
tests / windows (push) Canceled after 0s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-24 22:10:42 +03:00
galeon 2575aae5c6 fix
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Failing after 6s
tests / linux (push) Failing after 12s
release / create-release (push) Canceled after 0s
release / build-linux (push) Canceled after 0s
release / build-windows (push) Canceled after 0s
release / build-macos (push) Canceled after 0s
release / publish (push) Canceled after 0s
tests / windows (push) Canceled after 0s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-24 22:04:27 +03:00
galeon 6442514d4f conflict fixes
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
release / create-release (push) Successful in 3s
tests / macos (push) Successful in 1m26s
tests / windows (push) Canceled after 0s
tests / linux (push) Canceled after 4m53s
release / build-linux (push) Successful in 3m38s
tests / package-smoke-macos (push) Skipped
release / build-macos (push) Failing after 1m49s
release / build-windows (push) Successful in 9m52s
release / publish (push) Skipped
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-24 21:59:31 +03:00
galeon 1817157e4d release pipeline fixes
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / windows (pull_request) Skipped
tests / macos (pull_request) Skipped
tests / package-smoke-linux (pull_request) Skipped
tests / package-smoke-windows (pull_request) Skipped
tests / package-smoke-macos (pull_request) Skipped
tests / macos (push) Successful in 1m19s
tests / linux (push) Successful in 5m48s
tests / linux (pull_request) Successful in 5m20s
tests / windows (push) Canceled after 30m5s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-24 21:45:45 +03:00
galeon 4463d4e5da release fixes and changelog
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / linux (push) Successful in 2m13s
tests / windows (push) Failing after 9m0s
tests / macos (push) Failing after 10m19s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-24 11:38:39 +03:00
galeon 7dd89db508 changelog update
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Successful in 1m25s
tests / linux (push) Successful in 2m4s
tests / windows (push) Successful in 29m8s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-23 15:42:54 +03:00
galeon a89bf20486 release fixes
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Successful in 1m24s
tests / linux (push) Successful in 2m18s
tests / windows (push) Successful in 14m14s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-23 15:26:03 +03:00
galeon ec60df859a releases hotfix
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
tests / macos (push) Successful in 1m23s
tests / linux (push) Successful in 2m14s
tests / windows (push) Failing after 19m40s
release / build-linux (push) Successful in 1m55s
release / build-windows (push) Successful in 6m14s
release / publish (push) Successful in 0s
release / create-release (push) Successful in 3s
release / build-macos (push) Successful in 2m56s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-23 14:35:14 +03:00
galeon 0cacbc3ef3 version bump
tests / package-smoke-linux (push) Skipped
tests / package-smoke-windows (push) Skipped
tests / package-smoke-macos (push) Skipped
release / create-release (push) Successful in 3s
release / build-linux (push) Successful in 3m15s
tests / windows (push) Failing after 16m9s
release / build-windows (push) Failing after 3m35s
release / publish (push) Skipped
tests / macos (push) Successful in 1m22s
tests / linux (push) Successful in 3m6s
release / build-macos (push) Successful in 4m56s
Signed-off-by: galeon <dertiellis@gmail.com>
2026-10-23 14:11:45 +03:00
11 changed files with 261 additions and 71 deletions

No files matched your search

+10 -4
View File
@@ -6,7 +6,7 @@ name: release
# ручной запуск -> только сборки, файлы остаются артефактами прогона # ручной запуск -> только сборки, файлы остаются артефактами прогона
on: on:
push: push:
branches: [master, rc] #branches: [master, rc]
tags: ["v*"] tags: ["v*"]
workflow_dispatch: workflow_dispatch:
@@ -103,6 +103,8 @@ jobs:
runs-on: linux runs-on: linux
env: env:
VERSION: ${{ needs.create-release.outputs.version }} VERSION: ${{ needs.create-release.outputs.version }}
# Только для релизов/пре-релизов; при ручном запуске канал определит CMake по ветке
BUILD_VERSION: ${{ needs.create-release.outputs.tag != '' && needs.create-release.outputs.version || '' }}
RELEASE_ID: ${{ needs.create-release.outputs.release_id }} RELEASE_ID: ${{ needs.create-release.outputs.release_id }}
outputs: outputs:
sums: ${{ steps.pack.outputs.sums }} sums: ${{ steps.pack.outputs.sums }}
@@ -114,7 +116,7 @@ jobs:
export PATH="$QT_TOOLS/CMake/bin:$QT_TOOLS/Ninja:$PATH" export PATH="$QT_TOOLS/CMake/bin:$QT_TOOLS/Ninja:$PATH"
rm -rf build AppDir dist rm -rf build AppDir dist
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \ cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="$QT_ROOT" \ -DCMAKE_PREFIX_PATH="$QT_ROOT" -DLAUNCHER_BUILD_VERSION="$BUILD_VERSION" \
-DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_INSTALL_LIBDIR=lib
cmake --build build -j 8 cmake --build build -j 8
cmake --install build --prefix "$PWD/AppDir/usr" cmake --install build --prefix "$PWD/AppDir/usr"
@@ -157,6 +159,8 @@ jobs:
runs-on: windows runs-on: windows
env: env:
VERSION: ${{ needs.create-release.outputs.version }} VERSION: ${{ needs.create-release.outputs.version }}
# Только для релизов/пре-релизов; при ручном запуске канал определит CMake по ветке
BUILD_VERSION: ${{ needs.create-release.outputs.tag != '' && needs.create-release.outputs.version || '' }}
RELEASE_ID: ${{ needs.create-release.outputs.release_id }} RELEASE_ID: ${{ needs.create-release.outputs.release_id }}
outputs: outputs:
sums: ${{ steps.build.outputs.sums }} sums: ${{ steps.build.outputs.sums }}
@@ -177,7 +181,7 @@ jobs:
Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64" Enter-VsDevShell -VsInstallPath $vs -SkipAutomaticLocation -DevCmdArguments "-arch=x64 -host_arch=x64"
$env:PATH = "$env:QT_TOOLS\CMake_64\bin;$env:QT_TOOLS\Ninja;$env:PATH" $env:PATH = "$env:QT_TOOLS\CMake_64\bin;$env:QT_TOOLS\Ninja;$env:PATH"
cmake -S . -B $build -G Ninja -DCMAKE_BUILD_TYPE=Release "-DCMAKE_PREFIX_PATH=$env:QT_ROOT" cmake -S . -B $build -G Ninja -DCMAKE_BUILD_TYPE=Release "-DCMAKE_PREFIX_PATH=$env:QT_ROOT" "-DLAUNCHER_BUILD_VERSION=$env:BUILD_VERSION"
if ($LASTEXITCODE) { throw "cmake configure" } if ($LASTEXITCODE) { throw "cmake configure" }
cmake --build $build cmake --build $build
if ($LASTEXITCODE) { throw "cmake build" } if ($LASTEXITCODE) { throw "cmake build" }
@@ -228,6 +232,8 @@ jobs:
runs-on: macos runs-on: macos
env: env:
VERSION: ${{ needs.create-release.outputs.version }} VERSION: ${{ needs.create-release.outputs.version }}
# Только для релизов/пре-релизов; при ручном запуске канал определит CMake по ветке
BUILD_VERSION: ${{ needs.create-release.outputs.tag != '' && needs.create-release.outputs.version || '' }}
RELEASE_ID: ${{ needs.create-release.outputs.release_id }} RELEASE_ID: ${{ needs.create-release.outputs.release_id }}
outputs: outputs:
sums: ${{ steps.pack.outputs.sums }} sums: ${{ steps.pack.outputs.sums }}
@@ -239,7 +245,7 @@ jobs:
export PATH="$QT_TOOLS/CMake/CMake.app/Contents/bin:$QT_TOOLS/Ninja:$PATH" export PATH="$QT_TOOLS/CMake/CMake.app/Contents/bin:$QT_TOOLS/Ninja:$PATH"
rm -rf build stage dist dmgroot rm -rf build stage dist dmgroot
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \ cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_PREFIX_PATH="$QT_ROOT" \ -DCMAKE_PREFIX_PATH="$QT_ROOT" -DLAUNCHER_BUILD_VERSION="$BUILD_VERSION" \
-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" -DCMAKE_OSX_ARCHITECTURES="arm64;x86_64"
cmake --build build cmake --build build
cmake --install build --prefix "$PWD/stage" cmake --install build --prefix "$PWD/stage"
+10 -1
View File
@@ -9,4 +9,13 @@
- Система сезонных сборок: полная автоматизация в один клик - Система сезонных сборок: полная автоматизация в один клик
- Авторизация через ely.by и\или лицензию, с возможностью работы скинов - Авторизация через ely.by и\или лицензию, с возможностью работы скинов
### Исправлено ### Исправлено
- UI фиксы - UI фиксы
## [1.0.1-rc1] — 2026-10-23
### Добавлено
- Отображене текущей версии сборки лаунчера на главном окне
### Исправлено
- Исправлен баг когда невозможно выйти из модального окна сезонных сборок и\или отменить текущую загрузку
- Исправлен баг отображения статуса активной сборки на зелёном фоне
- Исправлен баг, что во время игры можно было потенциально сменить сборку
- Исправлен баг первого запуска после установки лаунчера, если у пользователя была не пустая .minecraft
+24 -6
View File
@@ -1,8 +1,27 @@
cmake_minimum_required(VERSION 3.20) cmake_minimum_required(VERSION 3.20)
project(BiLauncher VERSION 1.0.1 LANGUAGES CXX C) project(BiLauncher VERSION 1.0.1 LANGUAGES CXX C)
set(LAUNCHER_VERSION_SUFFIX "-dev")
set(LAUNCHER_VERSION "${PROJECT_VERSION}${LAUNCHER_VERSION_SUFFIX}") # Канал сборки (dev / rc / релиз) не хранится в репозитории, а вычисляется
# при сборке — см. cmake/LauncherVersion.cmake. CI передаёт полную версию:
# -DLAUNCHER_BUILD_VERSION=1.0.1-rc2.
set(LAUNCHER_BUILD_VERSION "" CACHE STRING "Полная версия от CI (X.Y.Z[-rcN]); пусто — по тегу и ветке git")
set(LAUNCHER_VERSION_NUMERIC "${PROJECT_VERSION}")
set(LAUNCHER_SOURCE_DIR "${PROJECT_SOURCE_DIR}")
set(LAUNCHER_GENERATED_DIR "${PROJECT_BINARY_DIR}/generated")
set(LAUNCHER_VERSION_HEADER "${LAUNCHER_GENERATED_DIR}/launcherversion.h")
include(cmake/LauncherVersion.cmake)
message(STATUS "Версия лаунчера: ${LAUNCHER_VERSION} (канал ${LAUNCHER_CHANNEL})")
add_custom_target(launcher_version
COMMAND "${CMAKE_COMMAND}"
"-DLAUNCHER_VERSION_NUMERIC=${LAUNCHER_VERSION_NUMERIC}"
"-DLAUNCHER_SOURCE_DIR=${LAUNCHER_SOURCE_DIR}"
"-DLAUNCHER_VERSION_HEADER=${LAUNCHER_VERSION_HEADER}"
"-DLAUNCHER_BUILD_VERSION=${LAUNCHER_BUILD_VERSION}"
-P "${PROJECT_SOURCE_DIR}/cmake/LauncherVersion.cmake"
BYPRODUCTS "${LAUNCHER_VERSION_HEADER}"
COMMENT "Версия лаунчера из git"
VERBATIM)
set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(QT_NO_PRIVATE_MODULE_WARNING ON) set(QT_NO_PRIVATE_MODULE_WARNING ON)
@@ -146,9 +165,8 @@ target_link_libraries(BiLauncher
PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Svg Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network PRIVATE Qt6::Quick Qt6::QuickControls2 Qt6::Svg Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network
) )
target_compile_definitions(BiLauncher PRIVATE target_include_directories(BiLauncher PRIVATE "${LAUNCHER_GENERATED_DIR}")
LAUNCHER_VERSION="${LAUNCHER_VERSION}" add_dependencies(BiLauncher launcher_version)
)
if(Qt6WebEngineQuick_FOUND) if(Qt6WebEngineQuick_FOUND)
target_link_libraries(BiLauncher PRIVATE Qt6::WebEngineQuick) target_link_libraries(BiLauncher PRIVATE Qt6::WebEngineQuick)
@@ -236,4 +254,4 @@ option(BILAUNCHER_BUILD_TESTS "Собрать автотесты (ctest)" OFF)
if(BILAUNCHER_BUILD_TESTS) if(BILAUNCHER_BUILD_TESTS)
enable_testing() enable_testing()
add_subdirectory(tests) add_subdirectory(tests)
endif() endif()
+23
View File
@@ -101,6 +101,29 @@ Window {
text: Loc.t.app.label.version.arg(Qt.application.version) text: Loc.t.app.label.version.arg(Qt.application.version)
font.pixelSize: 12 font.pixelSize: 12
} }
// Канал сборки из суффикса версии (cmake/LauncherVersion.cmake): у релиза бейджа нет
Rectangle {
id: channelBadge
readonly property var channel: /-(dev|rc)/.exec(Qt.application.version)
visible: channel !== null
anchors.left: launcherVersion.right
anchors.leftMargin: 6
anchors.verticalCenter: launcherVersion.verticalCenter
width: channelLabel.implicitWidth + 8
height: channelLabel.implicitHeight + 2
radius: 3
color: channel && channel[1] === "rc" ? "#c08a1e" : "#b03a3a"
Text {
id: channelLabel
anchors.centerIn: parent
text: channelBadge.channel ? channelBadge.channel[1].toUpperCase() : ""
color: "#ffffff"
font.pixelSize: 10
font.bold: true
}
}
} }
// ── Status toast ─────────────────────────────────────────────────────── // ── Status toast ───────────────────────────────────────────────────────
+101
View File
@@ -0,0 +1,101 @@
# Полная версия лаунчера и канал сборки (dev / rc / release).
#
# В репозитории хранится только число X.Y.Z из project(), одинаковое во всех
# ветках, — поэтому merge dev → rc → master не трогает версию. Канал
# вычисляется при сборке (по убыванию приоритета):
# 1. LAUNCHER_BUILD_VERSION — полная версия от CI: 1.0.1, 1.0.1-rc2;
# 2. тег на HEAD: vX.Y.Z — релиз, vX.Y.Z-rcN — rc;
# 3. ветка (из переменных CI или git): master — релиз, rc/beta — rc;
# 4. всё остальное, в т.ч. сборка без git, — dev.
#
# Работает в двух режимах:
# include() при configure — проверяет входные данные и пишет заголовок;
# cmake -P на каждой сборке — чтобы после git checkout без reconfigure
# канал и хэш коммита не устаревали.
# Входные переменные: LAUNCHER_VERSION_NUMERIC, LAUNCHER_SOURCE_DIR,
# LAUNCHER_VERSION_HEADER, LAUNCHER_BUILD_VERSION (необязательна).
# Результат: LAUNCHER_VERSION, LAUNCHER_CHANNEL и файл LAUNCHER_VERSION_HEADER.
set(_numeric "${LAUNCHER_VERSION_NUMERIC}")
find_package(Git QUIET)
function(_launcher_git out)
set(${out} "" PARENT_SCOPE)
if(NOT GIT_EXECUTABLE)
return()
endif()
execute_process(COMMAND "${GIT_EXECUTABLE}" ${ARGN}
WORKING_DIRECTORY "${LAUNCHER_SOURCE_DIR}"
RESULT_VARIABLE _rc OUTPUT_VARIABLE _out ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
if(_rc EQUAL 0)
set(${out} "${_out}" PARENT_SCOPE)
endif()
endfunction()
set(_full "")
if(LAUNCHER_BUILD_VERSION)
set(_full "${LAUNCHER_BUILD_VERSION}")
string(REGEX REPLACE "^v" "" _full "${_full}")
string(REGEX REPLACE "-.*$" "" _base "${_full}")
if(NOT _base STREQUAL _numeric)
message(FATAL_ERROR "LAUNCHER_BUILD_VERSION=${LAUNCHER_BUILD_VERSION} не совпадает "
"с project(BiLauncher VERSION ${_numeric})")
endif()
else()
# Тег vX.Y.Z или vX.Y.Z-rcN ровно на HEAD, относящийся к текущей версии
_launcher_git(_tags tag --points-at HEAD)
string(REPLACE "\n" ";" _tags "${_tags}")
string(REPLACE "." "\\." _numeric_re "${_numeric}")
foreach(_tag IN LISTS _tags)
if(_tag MATCHES "^v(${_numeric_re}(-rc[0-9]+)?)$")
# Релизный тег важнее rc-тега на том же коммите
if(NOT _full OR NOT CMAKE_MATCH_2)
set(_full "${CMAKE_MATCH_1}")
endif()
endif()
endforeach()
endif()
if(_full)
if(_full MATCHES "-rc[0-9]*$")
set(LAUNCHER_CHANNEL "rc")
elseif(_full STREQUAL _numeric)
set(LAUNCHER_CHANNEL "release")
else()
set(LAUNCHER_CHANNEL "dev")
endif()
set(LAUNCHER_VERSION "${_full}")
else()
# В CI на detached HEAD имени ветки в git нет — берём его из окружения
set(_branch "$ENV{GITHUB_HEAD_REF}")
if(NOT _branch AND "$ENV{GITHUB_REF_TYPE}" STREQUAL "branch")
set(_branch "$ENV{GITHUB_REF_NAME}")
endif()
if(NOT _branch)
_launcher_git(_branch rev-parse --abbrev-ref HEAD)
endif()
if(_branch STREQUAL "master")
set(LAUNCHER_CHANNEL "release")
set(LAUNCHER_VERSION "${_numeric}")
elseif(_branch STREQUAL "rc" OR _branch STREQUAL "beta")
set(LAUNCHER_CHANNEL "rc")
set(LAUNCHER_VERSION "${_numeric}-rc")
else()
set(LAUNCHER_CHANNEL "dev")
set(LAUNCHER_VERSION "${_numeric}-dev")
_launcher_git(_hash rev-parse --short=7 HEAD)
if(_hash)
# Неотслеживаемые файлы (каталоги сборки и т.п.) не считаем
execute_process(COMMAND "${GIT_EXECUTABLE}" diff --quiet HEAD --
WORKING_DIRECTORY "${LAUNCHER_SOURCE_DIR}" RESULT_VARIABLE _dirty ERROR_QUIET)
if(NOT _dirty EQUAL 0)
set(_hash "${_hash}.dirty")
endif()
string(APPEND LAUNCHER_VERSION "+${_hash}")
endif()
endif()
endif()
configure_file("${CMAKE_CURRENT_LIST_DIR}/launcherversion.h.in" "${LAUNCHER_VERSION_HEADER}" @ONLY)
+7
View File
@@ -0,0 +1,7 @@
#pragma once
// Сгенерировано cmake/LauncherVersion.cmake — не редактировать.
#define LAUNCHER_VERSION "@LAUNCHER_VERSION@" // 1.0.1, 1.0.1-rc2, 1.0.1-dev+a1b2c3d
#define LAUNCHER_VERSION_NUMERIC "@LAUNCHER_VERSION_NUMERIC@"
#define LAUNCHER_CHANNEL "@LAUNCHER_CHANNEL@" // dev, rc, release
+33 -7
View File
@@ -40,15 +40,41 @@ cmake --build build
Из Qt Creator проект открывается как обычный CMake-проект. Из Qt Creator проект открывается как обычный CMake-проект.
Версия приложения задаётся в начале `CMakeLists.txt` двумя значениями: ### Версия и канал сборки
- `project(BiLauncher VERSION x.y.z)` — только числа. Отсюда `PROJECT_VERSION` идёт в ресурс версии В репозитории хранится только число: `project(BiLauncher VERSION x.y.z)` в `CMakeLists.txt`. Оно
`.exe`, в `Info.plist` и в установщик: все три принимают только числовую версию. одинаковое во всех ветках, поэтому merge `dev` → `rc` → `master` версию не перетирает и не даёт
- `LAUNCHER_VERSION_SUFFIX` — метка пре-релиза, например `-dev` или `-rc1`. Для релиза пустая. конфликтов. `PROJECT_VERSION` идёт в ресурс версии `.exe`, в `Info.plist` и в установщик: все три
принимают только числовую версию.
Полная строка `LAUNCHER_VERSION` = `PROJECT_VERSION` + суффикс (`1.0.1-dev`) уходит дефайном в код: Канал (dev / rc / релиз) в коде не записан — его на каждой сборке вычисляет
в `QCoreApplication::applicationVersion`, в аргументы запуска игры и в подпись «Версия: …» в левом `cmake/LauncherVersion.cmake` и пишет в сгенерированный `<build>/generated/launcherversion.h`
верхнем углу окна. Почему так, см. [ADR-0002](adr/0002-launcher-version-display.md). (`LAUNCHER_VERSION`, `LAUNCHER_CHANNEL`). Порядок определения:
1. `-DLAUNCHER_BUILD_VERSION=1.0.1-rc2` — полная версия от CI; база обязана совпадать с
`project()`, иначе configure падает;
2. тег на HEAD: `vx.y.z` — релиз, `vx.y.z-rcN` — rc;
3. ветка (из `GITHUB_HEAD_REF`/`GITHUB_REF_NAME` или git): `master` — релиз, `rc` и `beta` — rc;
4. любая другая ветка или сборка без git — dev.
| Сборка | `LAUNCHER_VERSION` | В окне |
|---------------------------|----------------------|-----------------|
| релиз (master, `vx.y.z`) | `1.0.1` | `Версия: 1.0.1` |
| rc из CI (`vx.y.z-rcN`) | `1.0.1-rc2` | + бейдж RC |
| rc локально | `1.0.1-rc` | + бейдж RC |
| dev | `1.0.1-dev+a1b2c3d` | + бейдж DEV |
У dev-сборки после `+` — короткий хэш коммита, `.dirty` — есть незакоммиченные правки в
отслеживаемых файлах. Генерация идёт на каждой сборке, так что после `git checkout` другой
ветки reconfigure не нужен.
Полная строка уходит в `QCoreApplication::applicationVersion`, в аргументы запуска игры и в
подпись «Версия: …» в левом верхнем углу окна; бейдж канала QML берёт из её суффикса. Почему так,
см. [ADR-0002](adr/0002-launcher-version-display.md).
**Когда поднимать версию.** Номер поднимается в `dev` в начале цикла (сразу после релиза) и
дальше приходит в `rc` и `master` через merge. Хотфикс прямо в `rc` или `master` — правка и bump
patch там же, затем обратный merge `master` → `rc` → `dev`.
## Что собирается ## Что собирается
+1
View File
@@ -1,5 +1,6 @@
#pragma once #pragma once
#include "launcherversion.h"
#include "minecraftversion.h" #include "minecraftversion.h"
#include <QObject> #include <QObject>
+1
View File
@@ -1,4 +1,5 @@
#include "launcherpaths.h" #include "launcherpaths.h"
#include "launcherversion.h"
#include "localization.h" #include "localization.h"
#include <QDebug> #include <QDebug>
+49 -49
View File
@@ -1,65 +1,65 @@
; Установщик BiLauncher для Windows (Inno Setup 6). #ifndef AppVersion
; #error Передайте версию: /DAppVersion=X.Y.Z
; Собирается в CI после `cmake --install`:
; iscc /DAppVersion=1.0.0 /DSourceDir=C:\...\stage /DOutputDir=C:\...\dist packaging\windows\BiLauncher.iss
; SourceDir — префикс установки: bin\ с BiLauncher.exe и развёрнутым windeployqt Qt,
; share\doc\BiLauncher\ с лицензиями.
#ifndef AppVersion
#error Передайте версию: /DAppVersion=X.Y.Z
#endif #endif
#ifndef SourceDir #ifndef SourceDir
#error Передайте префикс установки: /DSourceDir=... #error Передайте префикс установки: /DSourceDir=...
#endif #endif
#ifndef OutputDir #ifndef OutputDir
#define OutputDir "." #define OutputDir "."
#endif
#if Pos("-", AppVersion) > 0
#define NumericVersion Copy(AppVersion, 1, Pos("-", AppVersion) - 1)
#else
#define NumericVersion AppVersion
#endif #endif
[Setup] [Setup]
; AppId не менять между версиями — по нему обновление находит прежнюю установку. AppId={{6E0B5C1D-8F2A-4C7E-9B3D-2A1F4E5C7B90}
AppId={{6E0B5C1D-8F2A-4C7E-9B3D-2A1F4E5C7B90} AppName=BiLauncher
AppName=BiLauncher AppVersion={#AppVersion}
AppVersion={#AppVersion} AppVerName=BiLauncher {#AppVersion}
AppVerName=BiLauncher {#AppVersion} AppPublisher=GaleonDev
AppPublisher=GaleonDev AppPublisherURL=https://projects-live.galeonworx.com/galeon/BiLauncher
AppPublisherURL=https://projects-live.galeonworx.com/galeon/BiLauncher AppSupportURL=https://projects-live.galeonworx.com/galeon/BiLauncher/issues
AppSupportURL=https://projects-live.galeonworx.com/galeon/BiLauncher/issues VersionInfoVersion={#NumericVersion}
VersionInfoVersion={#AppVersion} VersionInfoTextVersion={#AppVersion}
DefaultDirName={autopf}\BiLauncher VersionInfoProductTextVersion={#AppVersion}
DefaultGroupName=BiLauncher DefaultDirName={autopf}\BiLauncher
DisableProgramGroupPage=yes DefaultGroupName=BiLauncher
LicenseFile={#SourceDir}\share\doc\BiLauncher\LICENSE DisableProgramGroupPage=yes
OutputDir={#OutputDir} LicenseFile={#SourceDir}\share\doc\BiLauncher\LICENSE
OutputBaseFilename=BiLauncher-{#AppVersion}-win64-setup OutputDir={#OutputDir}
SetupIconFile=..\..\icons\icon.ico OutputBaseFilename=BiLauncher-{#AppVersion}-win64-setup
UninstallDisplayIcon={app}\bin\BiLauncher.exe SetupIconFile=..\..\icons\icon.ico
Compression=lzma2/ultra64 UninstallDisplayIcon={app}\bin\BiLauncher.exe
SolidCompression=yes Compression=lzma2/ultra64
LZMANumBlockThreads=4 SolidCompression=yes
ArchitecturesAllowed=x64compatible LZMANumBlockThreads=4
ArchitecturesInstallIn64BitMode=x64compatible ArchitecturesAllowed=x64compatible
PrivilegesRequiredOverridesAllowed=dialog ArchitecturesInstallIn64BitMode=x64compatible
WizardStyle=modern PrivilegesRequiredOverridesAllowed=dialog
WizardStyle=modern
[Languages] [Languages]
Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl"
Name: "english"; MessagesFile: "compiler:Default.isl" Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks] [Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}" Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"
[Files] [Files]
Source: "{#SourceDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "vc_redist.x64.exe" Source: "{#SourceDir}\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs; Excludes: "vc_redist.x64.exe"
#ifexist SourceDir + "\bin\vc_redist.x64.exe" #ifexist SourceDir + "\bin\vc_redist.x64.exe"
Source: "{#SourceDir}\bin\vc_redist.x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall Source: "{#SourceDir}\bin\vc_redist.x64.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
#endif #endif
[Icons] [Icons]
Name: "{autoprograms}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe" Name: "{autoprograms}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe"
Name: "{autodesktop}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe"; Tasks: desktopicon Name: "{autodesktop}\BiLauncher"; Filename: "{app}\bin\BiLauncher.exe"; Tasks: desktopicon
[Run] [Run]
#ifexist SourceDir + "\bin\vc_redist.x64.exe" #ifexist SourceDir + "\bin\vc_redist.x64.exe"
Filename: "{tmp}\vc_redist.x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "Установка Microsoft Visual C++ Runtime..."; Flags: waituntilterminated Filename: "{tmp}\vc_redist.x64.exe"; Parameters: "/install /quiet /norestart"; StatusMsg: "Установка Microsoft Visual C++ Runtime..."; Flags: waituntilterminated
#endif #endif
Filename: "{app}\bin\BiLauncher.exe"; Description: "{cm:LaunchProgram,BiLauncher}"; Flags: nowait postinstall skipifsilent Filename: "{app}\bin\BiLauncher.exe"; Description: "{cm:LaunchProgram,BiLauncher}"; Flags: nowait postinstall skipifsilent
+2 -4
View File
@@ -58,10 +58,8 @@ qt_add_qml_module(bilauncher_testlib
RESOURCES ${_module_res} RESOURCES ${_module_res}
NO_LINT NO_LINT
) )
target_include_directories(bilauncher_testlib PUBLIC "${PROJECT_SOURCE_DIR}") target_include_directories(bilauncher_testlib PUBLIC "${PROJECT_SOURCE_DIR}" "${LAUNCHER_GENERATED_DIR}")
target_compile_definitions(bilauncher_testlib PUBLIC add_dependencies(bilauncher_testlib launcher_version)
LAUNCHER_VERSION="${LAUNCHER_VERSION}"
)
target_link_libraries(bilauncher_testlib PUBLIC target_link_libraries(bilauncher_testlib PUBLIC
Qt6::Quick Qt6::QuickControls2 Qt6::Qml Qt6::Svg Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network Qt6::Quick Qt6::QuickControls2 Qt6::Qml Qt6::Svg Qt6::Core Qt6::CorePrivate Qt6::Gui Qt6::Network
) )