From 867e30861cc26f37c1d86973dd941033913d9ddb Mon Sep 17 00:00:00 2001 From: NeoPlays <80448387+NeoPlays@users.noreply.github.com> Date: Tue, 1 Sep 2026 08:24:43 +0200 Subject: [PATCH 1/3] FIX: Molecule test --- .../update-stereum/molecule/full/verify.yml | 102 +++++++++--------- 1 file changed, 53 insertions(+), 49 deletions(-) diff --git a/controls/roles/update-stereum/molecule/full/verify.yml b/controls/roles/update-stereum/molecule/full/verify.yml index 1db7d8718d..2272f58ac5 100644 --- a/controls/roles/update-stereum/molecule/full/verify.yml +++ b/controls/roles/update-stereum/molecule/full/verify.yml @@ -5,53 +5,57 @@ hosts: all gather_facts: false tasks: - - - name: Waiting for updates to finish (reboot, script after reboot "stereum-services-update.sh") - pause: - seconds: 60 - - # Stereum config files - - stat: path=/etc/stereum/stereum.yaml - register: stereum_config_file - - stat: path=/opt/stereum/ansible - register: stereum_ansible_dir - - debug: - msg: "{{ stereum_ansible_dir }}" - - name: Check for config - assert: - that: - - stereum_config_file.stat.exists - - stereum_ansible_dir.stat.isdir is defined - - stereum_ansible_dir.stat.isdir - - # check for correct version of repository - - name: Get git hash - ansible.builtin.command: git show --format="%H" --no-patch - args: - chdir: "/opt/stereum/ansible" - register: git_hash - - debug: - msg: "{{ git_hash }}" - - name: Check for correct git hash - assert: - that: - - git_hash.stdout != "8544bf99fb62b44d0efe4cd8f981c31663335c21" - - # check for new version of docker container beacon - - raw: docker inspect --format={% raw %}'{{ .Config.Image }}'{% endraw %} stereum-f3a6cbe4-5e4b-4ba4-a0f2-2504b6750379 - register: docker_container_tag - - name: check container tag version - assert: - that: - - docker_container_tag.stdout.startswith("sigp/lighthouse:") - - - raw: docker inspect --format={% raw %}'{{ .Config.Image }}'{% endraw %} stereum-9024aec6-12a8-456a-8096-ee7ef6f67167 - register: docker_container_tag - - name: check container tag version - assert: - that: - - docker_container_tag.stdout.startswith("sigp/lighthouse:") - - '"v2.0.0" not in docker_container_tag.stdout' - - + - name: Waiting for the server to come back after the update reboot + ansible.builtin.wait_for_connection: + delay: 15 + timeout: 600 + + - name: Waiting for updates to finish (reboot, script after reboot "stereum-services-update.sh") + raw: docker inspect --format={% raw %}'{{ .Config.Image }}'{% endraw %} stereum-9024aec6-12a8-456a-8096-ee7ef6f67167 + register: beacon_container_tag + until: 'beacon_container_tag.rc == 0 and beacon_container_tag.stdout.startswith("sigp/lighthouse:") and "v2.0.0" not in beacon_container_tag.stdout' + retries: 60 + delay: 10 + changed_when: false + + # Stereum config files + - stat: path=/etc/stereum/stereum.yaml + register: stereum_config_file + - stat: path=/opt/stereum/ansible + register: stereum_ansible_dir + - debug: + msg: "{{ stereum_ansible_dir }}" + - name: Check for config + assert: + that: + - stereum_config_file.stat.exists + - stereum_ansible_dir.stat.isdir is defined + - stereum_ansible_dir.stat.isdir + + # check for correct version of repository + - name: Get git hash + ansible.builtin.command: git show --format="%H" --no-patch + args: + chdir: "/opt/stereum/ansible" + register: git_hash + - debug: + msg: "{{ git_hash }}" + - name: Check for correct git hash + assert: + that: + - git_hash.stdout != "c531dc2e89ec30c289e886fb3ff2a763e92b21d5" + + # check for new version of docker container beacon + - raw: docker inspect --format={% raw %}'{{ .Config.Image }}'{% endraw %} stereum-f3a6cbe4-5e4b-4ba4-a0f2-2504b6750379 + register: docker_container_tag + - name: check container tag version + assert: + that: + - docker_container_tag.stdout.startswith("sigp/lighthouse:") + + - name: check container tag version + assert: + that: + - beacon_container_tag.stdout.startswith("sigp/lighthouse:") + - '"v2.0.0" not in beacon_container_tag.stdout' # EOF From e78cab28c4bd14096a1f8887f78db76be5e6b303 Mon Sep 17 00:00:00 2001 From: NeoPlays <80448387+NeoPlays@users.noreply.github.com> Date: Tue, 1 Sep 2026 08:57:19 +0200 Subject: [PATCH 2/3] CHORE: bump version --- launcher/package-lock.json | 10 +++++----- launcher/package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/launcher/package-lock.json b/launcher/package-lock.json index f37e6a08b3..db00a4ad0d 100644 --- a/launcher/package-lock.json +++ b/launcher/package-lock.json @@ -1,12 +1,12 @@ { "name": "stereum-launcher", - "version": "2.5.0", + "version": "2.5.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "stereum-launcher", - "version": "2.5.0", + "version": "2.5.2", "hasInstallScript": true, "license": "https://wrapbootstrap.com/help/licenses", "dependencies": { @@ -11093,9 +11093,9 @@ "optional": true }, "node_modules/nanoid": { - "version": "3.3.17", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.17.tgz", - "integrity": "sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==", + "version": "3.3.18", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz", + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==", "funding": [ { "type": "github", diff --git a/launcher/package.json b/launcher/package.json index a608558f88..fcefd5c761 100755 --- a/launcher/package.json +++ b/launcher/package.json @@ -1,6 +1,6 @@ { "name": "stereum-launcher", - "version": "2.5.1", + "version": "2.5.2", "private": true, "description": "Stereum Ethereum Node Setup Launcher", "author": { From 75fe8b4536ca59c4110d458dbe4ce3ecc6b8e536 Mon Sep 17 00:00:00 2001 From: NeoPlays <80448387+NeoPlays@users.noreply.github.com> Date: Tue, 1 Sep 2026 08:57:48 +0200 Subject: [PATCH 3/3] FIX: Simplify Language Selector --- .../components/menu/SingleMenu.vue | 5 +- .../UI/language-page/components/MenuBody.vue | 181 ++++++------------ .../components/ServerHeader.vue | 16 ++ .../UI/setting-page/SettingScreen.vue | 10 +- .../components/base/InstallationLayout.vue | 4 + .../src/components/base/StandaloneLayout.vue | 45 +++++ launcher/src/store/languages.js | 31 ++- launcher/src/store/nodeHeader.js | 3 + 8 files changed, 163 insertions(+), 132 deletions(-) create mode 100644 launcher/src/components/base/StandaloneLayout.vue diff --git a/launcher/src/components/UI/base-header/components/menu/SingleMenu.vue b/launcher/src/components/UI/base-header/components/menu/SingleMenu.vue index fa18dbf37c..868ba6995b 100644 --- a/launcher/src/components/UI/base-header/components/menu/SingleMenu.vue +++ b/launcher/src/components/UI/base-header/components/menu/SingleMenu.vue @@ -10,7 +10,7 @@ import { useRouter } from 'vue-router'; import { useNodeHeader } from '@/store/n diff --git a/launcher/src/components/UI/server-management/components/ServerHeader.vue b/launcher/src/components/UI/server-management/components/ServerHeader.vue index c4be14ec0b..2963d232c0 100644 --- a/launcher/src/components/UI/server-management/components/ServerHeader.vue +++ b/launcher/src/components/UI/server-management/components/ServerHeader.vue @@ -6,6 +6,16 @@ import { ref, watchEffect, onMounted } from 'vue'; V {{ currentVersion ? currentVersion : "2.0" }} + +
+ +
@@ -45,6 +55,7 @@ import { useFooter } from "@/store/theFooter"; import i18n from "@/includes/i18n"; import ControlService from "@/store/ControlService"; +import SingleMenu from "@/components/UI/base-header/components/menu/SingleMenu.vue"; const t = i18n.global.t; @@ -66,6 +77,11 @@ const emit = defineEmits(["tabPicker"]); // Computed property to check if current route is '/login' const isLoginRoute = computed(() => route.path === "/login"); +const launcherMenuItems = [ + { name: "Help", icon: "/img/icon/base-header-icons/header-help-button.png" }, + { name: "Settings", icon: "/img/icon/base-header-icons/header-stereum-settings-button.png", path: "/setting" }, +]; + const tabTooltip = (tab) => { if (tab.name === "login") { return login; diff --git a/launcher/src/components/UI/setting-page/SettingScreen.vue b/launcher/src/components/UI/setting-page/SettingScreen.vue index c446088e40..3936c318e8 100644 --- a/launcher/src/components/UI/setting-page/SettingScreen.vue +++ b/launcher/src/components/UI/setting-page/SettingScreen.vue @@ -1,5 +1,5 @@ diff --git a/launcher/src/store/languages.js b/launcher/src/store/languages.js index 09073b449e..141be57a3f 100755 --- a/launcher/src/store/languages.js +++ b/launcher/src/store/languages.js @@ -10,108 +10,126 @@ export const useLangStore = defineStore("languages", { langOptions: [ { name: "english", + englishName: "English", flag: "img/flag/united-kingdom.png", label: "en", isSelected: false, }, { name: "deutsch", + englishName: "German", flag: "img/flag/germany.png", label: "de", isSelected: false, }, { name: "français", + englishName: "French", flag: "img/flag/france.png", label: "fr", isSelected: false, }, { name: "ESPAÑOL", + englishName: "Spanish", flag: "img/flag/spain.png", label: "es", isSelected: false, }, { name: "فارسی", + englishName: "Persian", flag: "img/flag/iran.png", label: "fa", isSelected: false, }, { name: "العربية", + englishName: "Arabic", flag: "img/flag/saudi-arabia.png", label: "ar", isSelected: false, }, { name: "Türkçe", + englishName: "Turkish", flag: "img/flag/turkey.png", label: "tr", isSelected: false, }, { name: "dutch", + englishName: "Dutch", flag: "img/flag/netherlands.png", label: "nl", isSelected: false, }, { name: "Português", + englishName: "Portuguese", flag: "img/flag/portugal.png", - label: "po", + label: "pt", isSelected: false, }, { name: "日本語", + englishName: "Japanese", flag: "img/flag/japan.png", - label: "jp", + label: "ja", isSelected: false, }, { name: "Italiano", + englishName: "Italian", flag: "img/flag/italy.png", label: "it", isSelected: false, }, { name: "Pусский", + englishName: "Russian", flag: "img/flag/russia.png", label: "ru", isSelected: false, }, { name: "简体中文", + englishName: "Chinese", flag: "img/flag/china.png", label: "zh", isSelected: false, }, { name: "български", + englishName: "Bulgarian", flag: "img/flag/bulgaria.png", label: "bg", isSelected: false, }, { name: "монгол хэл", + englishName: "Mongolian", flag: "img/flag/mongolia.png", label: "mn", isSelected: false, }, { name: "Српски", + englishName: "Serbian", flag: "img/flag/serbia.png", label: "sr", isSelected: false, }, { name: "Česká", + englishName: "Czech", flag: "img/flag/czech.png", label: "cs", isSelected: false, }, { name: "Việt Nam", + englishName: "Vietnamese", flag: "img/flag/vietnam.png", label: "vi", isSelected: false, @@ -119,54 +137,63 @@ export const useLangStore = defineStore("languages", { //new languages added { name: "हिन्दी", + englishName: "Hindi", flag: "img/flag/india.png", label: "hi", isSelected: false, }, { name: "বাংলা", + englishName: "Bengali", flag: "img/flag/bangladesh.png", label: "bn", isSelected: false, }, { name: "اردو", + englishName: "Urdu", flag: "img/flag/pakistan.png", label: "ur", isSelected: false, }, { name: "Bahasa Indonesia", + englishName: "Indonesian", flag: "img/flag/indonesia.png", label: "id", isSelected: false, }, { name: "Kiswahili", + englishName: "Swahili", flag: "img/flag/kenya.png", label: "sw", isSelected: false, }, { name: "मराठी", + englishName: "Marathi", flag: "img/flag/india.png", label: "mr", isSelected: false, }, { name: "తెలుగు", + englishName: "Telugu", flag: "img/flag/india.png", label: "te", isSelected: false, }, { name: "தமிழ்", + englishName: "Tamil", flag: "img/flag/india.png", label: "ta", isSelected: false, }, { name: "한국어", + englishName: "Korean", flag: "img/flag/korea.png", label: "ko", isSelected: false, diff --git a/launcher/src/store/nodeHeader.js b/launcher/src/store/nodeHeader.js index 797dc9ac63..7fbea89d87 100755 --- a/launcher/src/store/nodeHeader.js +++ b/launcher/src/store/nodeHeader.js @@ -46,6 +46,9 @@ export const useNodeHeader = defineStore("nodeHeader", { varificationCode: "", validVarificationCode: "", refresh: true, + // true while the settings page is opened without a node connection (e.g. from the login screen), + // so it renders standalone instead of inside the node layout + settingsStandalone: false, stereumUpdate: {}, searchingForUpdates: false, isUpdateAvailable: false,