de8d70dd2bb3cc336b646b30c732765cd52925f3
azure-pipelines/main.yml
| ... | ... | @@ -28,7 +28,7 @@ resources: |
| 28 | 28 | # For available versions, please have a look here (use the tag, not the release name): |
| 29 | 29 | # https://github.tools.sap/SAPMobile/sap-mobile-pipeline/releases |
| 30 | 30 | # ---------- |
| 31 | - ref: 'refs/tags/3.13.3' |
|
| 31 | + #ref: 'refs/tags/3.13.3' |
|
| 32 | 32 | |
| 33 | 33 | ################################################################# |
| 34 | 34 | ######################### Pipeline Start ######################## |
| ... | ... | @@ -53,3 +53,4 @@ extends: |
| 53 | 53 | # to determine which app is to be built/released/signed |
| 54 | 54 | # Default: Race Manager App |
| 55 | 55 | momaAssemblyId: 189 |
| 56 | + naasReleaseEnabled: true |
configuration/createHudsonJobForBug.sh
| ... | ... | @@ -5,8 +5,7 @@ if [ $# -eq 0 ]; then |
| 5 | 5 | echo |
| 6 | 6 | echo "Constructs a Hudson job for the given bugid" |
| 7 | 7 | echo "Example: $0 4221 [ {Bugzilla-API-Key} ]" |
| 8 | - echo "Builds a Hudson job for bug branch bug4221, linking to the Bugzilla bug and copying a release" |
|
| 9 | - echo "from Github to https://releases.sapsailing.com if the Github Actions Workflow built one." |
|
| 8 | + echo "Builds a Hudson job for bug branch bug4221, and linking to the Bugzilla bug." |
|
| 10 | 9 | echo "If a Bugzilla API Key is provided (may also be specified in the BUGZILLA_API_KEY environment" |
| 11 | 10 | echo "variable), it is used to add the bug summary to the build job's description." |
| 12 | 11 | echo "Get a Bugzilla API Key for your user account at https://bugzilla.sapsailing.com/bugzilla/userprefs.cgi?tab=apikey" |
configuration/environments_scripts/central_mongo_setup/files/etc/mongodb/mongodb-archive.conf
| ... | ... | @@ -14,4 +14,6 @@ systemLog: |
| 14 | 14 | path: "/var/log/mongodb/archive.log" |
| 15 | 15 | replication: |
| 16 | 16 | replSetName: "archive" |
| 17 | - |
|
| 17 | +# Disable FTDC to avoid crashes |
|
| 18 | +setParameter: |
|
| 19 | + diagnosticDataCollectionEnabled: false |
configuration/environments_scripts/central_mongo_setup/files/etc/mongodb/mongodb-hidden-live-replica.conf
| ... | ... | @@ -14,4 +14,6 @@ systemLog: |
| 14 | 14 | path: "/var/log/mongodb/hidden-live-replica.log" |
| 15 | 15 | replication: |
| 16 | 16 | replSetName: "live" |
| 17 | - |
|
| 17 | +# Disable FTDC to avoid crashes |
|
| 18 | +setParameter: |
|
| 19 | + diagnosticDataCollectionEnabled: false |
configuration/environments_scripts/central_mongo_setup/files/etc/mongodb/mongodb-slow.conf
| ... | ... | @@ -14,4 +14,6 @@ systemLog: |
| 14 | 14 | path: "/var/log/mongodb/slow.log" |
| 15 | 15 | replication: |
| 16 | 16 | replSetName: "slow" |
| 17 | - |
|
| 17 | +# Disable FTDC to avoid crashes |
|
| 18 | +setParameter: |
|
| 19 | + diagnosticDataCollectionEnabled: false |
configuration/environments_scripts/central_reverse_proxy/files/home/httpdConf/repo.git/hooks/post-receive
| ... | ... | @@ -12,7 +12,7 @@ COMMAND="sudo service httpd reload" |
| 12 | 12 | MAIN_BRANCH_NAME="main" |
| 13 | 13 | DISPOSABLE_BRANCH_NAME="disposable" |
| 14 | 14 | CENTRAL_BRANCH_NAME="central" |
| 15 | -CHECKED_OUT_WORKSPACE_NAME="checked-out" # Assumes it is in the root user. |
|
| 15 | +CHECKED_OUT_WORKSPACE_NAME="checked-out" |
|
| 16 | 16 | sync_repo() { |
| 17 | 17 | #$1 tag key to use |
| 18 | 18 | #$2 branch to check out |
configuration/environments_scripts/mongo_instance_setup/files/etc/mongod.conf
| ... | ... | @@ -43,3 +43,6 @@ replication: |
| 43 | 43 | #auditLog: |
| 44 | 44 | |
| 45 | 45 | #snmp: |
| 46 | +# Disable FTDC to avoid crashes |
|
| 47 | +setParameter: |
|
| 48 | + diagnosticDataCollectionEnabled: false |
configuration/environments_scripts/repo/usr/local/bin/imageupgrade_functions.sh
| ... | ... | @@ -456,6 +456,12 @@ EOF |
| 456 | 456 | if ! grep "logRotate: reopen" /etc/mongod.conf; then |
| 457 | 457 | sudo sed -i -e 's/^ logAppend: true/ logAppend: true\n logRotate: reopen/' /etc/mongod.conf |
| 458 | 458 | fi |
| 459 | +sudo su - -c "cat >>/etc/mongod.conf << EOF |
|
| 460 | +# Disable FTDC to avoid crashes |
|
| 461 | +setParameter: |
|
| 462 | + diagnosticDataCollectionEnabled: false |
|
| 463 | +EOF |
|
| 464 | +" |
|
| 459 | 465 | } |
| 460 | 466 | |
| 461 | 467 | # Copies the /root/secrets and /root/mail.properties file to the local instance, ensuring only root can read it |
configuration/environments_scripts/sailing_server/setup-sailing-server.sh
| ... | ... | @@ -32,7 +32,7 @@ else |
| 32 | 32 | sudo mv imageupgrade_functions.sh /usr/local/bin |
| 33 | 33 | # build-crontab |
| 34 | 34 | . imageupgrade_functions.sh |
| 35 | - # Install MongoDB 5.0 and configure as replica set "replica" |
|
| 35 | + # Install MongoDB 7.0 and configure as replica set "replica" |
|
| 36 | 36 | setup_mongo_7_0_on_AL2023 |
| 37 | 37 | sudo su - -c "cat << EOF >>/etc/mongod.conf |
| 38 | 38 | replication: |
ios/SAPTracker/src/xcode/SAPTracker/zh.lproj/Localizable.strings
java/com.sap.sailing.declination.test/src/com/sap/sailing/declination/test/NOAADeclinationImportTest.java
| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | package com.sap.sailing.declination.test; |
| 2 | 2 | |
| 3 | 3 | import org.junit.jupiter.api.BeforeEach; |
| 4 | +import org.junit.jupiter.api.Disabled; |
|
| 4 | 5 | |
| 5 | 6 | import com.sap.sailing.declination.impl.NOAAImporterForTesting; |
| 6 | 7 | |
| 8 | +@Disabled("US Government Shutdown around 2026-02-04") |
|
| 7 | 9 | public class NOAADeclinationImportTest extends DeclinationImportTest<NOAAImporterForTesting> { |
| 8 | 10 | @BeforeEach |
| 9 | 11 | public void setUp() { |
java/com.sap.sailing.declination.test/src/com/sap/sailing/declination/test/NOAADeclinationServiceTest.java
| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | package com.sap.sailing.declination.test; |
| 2 | 2 | |
| 3 | 3 | import org.junit.jupiter.api.BeforeEach; |
| 4 | +import org.junit.jupiter.api.Disabled; |
|
| 4 | 5 | |
| 5 | 6 | import com.sap.sailing.declination.impl.NOAAImporter; |
| 6 | 7 | |
| 8 | +@Disabled("US Government Shutdown around 2026-02-04") |
|
| 7 | 9 | public class NOAADeclinationServiceTest extends DeclinationServiceTest<NOAAImporter> { |
| 8 | 10 | @Override |
| 9 | 11 | @BeforeEach |
java/com.sap.sailing.declination.test/src/com/sap/sailing/declination/test/NOAADeclinationStoreTest.java
| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | package com.sap.sailing.declination.test; |
| 2 | 2 | |
| 3 | 3 | import org.junit.jupiter.api.BeforeEach; |
| 4 | +import org.junit.jupiter.api.Disabled; |
|
| 4 | 5 | |
| 5 | 6 | import com.sap.sailing.declination.impl.NOAAImporter; |
| 6 | 7 | |
| 8 | +@Disabled("US Government Shutdown around 2026-02-04") |
|
| 7 | 9 | public class NOAADeclinationStoreTest extends DeclinationStoreTest<NOAAImporter> { |
| 8 | 10 | @Override |
| 9 | 11 | @BeforeEach |
java/com.sap.sailing.declination.test/src/com/sap/sailing/declination/test/NOAASimpleDeclinationTest.java
| ... | ... | @@ -1,9 +1,11 @@ |
| 1 | 1 | package com.sap.sailing.declination.test; |
| 2 | 2 | |
| 3 | 3 | import org.junit.jupiter.api.BeforeEach; |
| 4 | +import org.junit.jupiter.api.Disabled; |
|
| 4 | 5 | |
| 5 | 6 | import com.sap.sailing.declination.impl.NOAAImporter; |
| 6 | 7 | |
| 8 | +@Disabled("US Government Shutdown around 2026-02-04") |
|
| 7 | 9 | public class NOAASimpleDeclinationTest extends SimpleDeclinationTest<NOAAImporter> { |
| 8 | 10 | @BeforeEach |
| 9 | 11 | public void setUp() { |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_cs.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Filtrovat IP adresy |
| 2586 | 2586 | unlock=Odblokovat |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IP adresy blokované pro zneužití vytvoření uživatele |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=Nelze načíst IP blokované pro zneužití vytvoření uživatele |
| 2589 | +sourceCode=Zdrojový kód |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_da.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Filtrer IP-adresser |
| 2586 | 2586 | unlock=Ophæv spærre |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IP''er spærret for misbrug af brugeroprettelse |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=Kan ikke indlæse IP''er spærret for misbrug af brugeroprettelse |
| 2589 | +sourceCode=Kildetekst |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_es.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Filtrar direcciones IP |
| 2586 | 2586 | unlock=Desbloquear |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IPs bloqueadas para abuso de creación de usuario |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=No se pueden cargar las IPs bloqueadas para el abuso de creación de usuarios |
| 2589 | +sourceCode=Código fuente |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_fr.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Filtrer les adresses IP |
| 2586 | 2586 | unlock=Débloquer |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IP bloquées pour abus de création d''utilisateur |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=Impossible de charger les adresses IP bloquées pour abus de création d''utilisateur |
| 2589 | +sourceCode=Code source |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_it.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Filtra indirizzi IP |
| 2586 | 2586 | unlock=Sblocca |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IP bloccati per abuso creazione utente |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=Impossibile caricare, IP bloccati per abuso creazione utente |
| 2589 | +sourceCode=Codice sorgente |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ja.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=IP アドレスのフィルタリング |
| 2586 | 2586 | unlock=ロック解除 |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=ユーザ作成の不正使用のために IP がロックされました |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=ユーザ作成の不正使用のためにブロックされている IP をロードできません |
| 2589 | +sourceCode=ソースコード |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_pt.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Filtrar endereços IP |
| 2586 | 2586 | unlock=Desbloquear |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IPs bloqueados por abuso de criação de usuário |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=Impossível carregar IPs bloqueados por abuso de criação de usuário |
| 2589 | +sourceCode=Texto fonte |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_ru.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Фильтровать IP-адреса |
| 2586 | 2586 | unlock=Разблокировать |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IP заблокированы за злоупотребление созданием пользователей |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=Не удалось загрузить IP, блокированные за злоупотребление созданием пользователей |
| 2589 | +sourceCode=Исходный текст |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_sl.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=Filtriranje IP-naslovov |
| 2586 | 2586 | unlock=Odstrani blokado |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=IP-ji blokirani zaradi zlorabe ustvarjanja uporabnika |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=Prenos IP-jev, blokiranih zaradi zlorabe ustvarjanja uporabnika, ni mogoč |
| 2589 | +sourceCode=Izvorna koda |
java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/ui/client/StringMessages_zh.properties
| ... | ... | @@ -2586,3 +2586,4 @@ filterIpAddresses=筛选 IP 地址 |
| 2586 | 2586 | unlock=解锁 |
| 2587 | 2587 | ipsLockedForUserCreationAbuse=因用户创建滥用而锁定 IP |
| 2588 | 2588 | unableToLoadIpsBlockedForUserCreationAbuse=无法加载因用户创建滥用而被阻止的 IP |
| 2589 | +sourceCode=源代码 |
java/com.sap.sailing.polars.test/src/com/sap/sailing/polars/mining/test/PolarDataMinerTest.java
| ... | ... | @@ -137,10 +137,10 @@ public class PolarDataMinerTest { |
| 137 | 137 | } |
| 138 | 138 | |
| 139 | 139 | int millisLeft = 500000; |
| 140 | - while (miner.isCurrentlyActiveAndOrHasQueue() && millisLeft > 0) { |
|
| 140 | + while (miner.isCurrentlyActiveOrHasQueue() && millisLeft > 0) { |
|
| 141 | 141 | Thread.sleep(100); |
| 142 | 142 | millisLeft = millisLeft - 100; |
| 143 | - if (miner.isCurrentlyActiveAndOrHasQueue() && millisLeft <= 0) { |
|
| 143 | + if (miner.isCurrentlyActiveOrHasQueue() && millisLeft <= 0) { |
|
| 144 | 144 | throw new TimeoutException(); |
| 145 | 145 | } |
| 146 | 146 | } |
java/com.sap.sailing.polars/src/com/sap/sailing/polars/impl/PolarDataServiceImpl.java
| ... | ... | @@ -83,8 +83,8 @@ public class PolarDataServiceImpl extends AbstractReplicableWithObjectInputStrea |
| 83 | 83 | this.polarDataMiner = new PolarDataMiner(settings, cubicRegressionPerCourseProcessor, speedRegressionPerAngleClusterProcessor, angleClusterGroup); |
| 84 | 84 | } |
| 85 | 85 | |
| 86 | - public boolean isCurrentlyActiveAndOrHasQueue() { |
|
| 87 | - return polarDataMiner.isCurrentlyActiveAndOrHasQueue(); |
|
| 86 | + public boolean isCurrentlyActiveOrHasQueue() { |
|
| 87 | + return polarDataMiner.isCurrentlyActiveOrHasQueue(); |
|
| 88 | 88 | } |
| 89 | 89 | |
| 90 | 90 | private ClusterGroup<Bearing> createAngleClusterGroup() { |
java/com.sap.sailing.polars/src/com/sap/sailing/polars/mining/PolarDataMiner.java
| ... | ... | @@ -228,7 +228,7 @@ public class PolarDataMiner { |
| 228 | 228 | } |
| 229 | 229 | } |
| 230 | 230 | |
| 231 | - public boolean isCurrentlyActiveAndOrHasQueue() { |
|
| 231 | + public boolean isCurrentlyActiveOrHasQueue() { |
|
| 232 | 232 | boolean isActive = executor.getActiveCount() > 0; |
| 233 | 233 | boolean hasQueue = executor.getQueue().size() > 0; |
| 234 | 234 | return isActive || hasQueue; |
java/com.sap.sailing.windestimation.test/src/com/sap/sailing/windestimation/integration/IncrementalMstHmmWindEstimationForTrackedRaceTest.java
| ... | ... | @@ -140,7 +140,7 @@ public class IncrementalMstHmmWindEstimationForTrackedRaceTest extends OnlineTra |
| 140 | 140 | final PolarDataServiceImpl polarDataService = new PolarDataServiceImpl(); |
| 141 | 141 | getTrackedRace().setPolarDataService(polarDataService); |
| 142 | 142 | polarDataService.insertExistingFixes(getTrackedRace()); |
| 143 | - Wait.wait(()->!polarDataService.isCurrentlyActiveAndOrHasQueue(), /* timeout */ Optional.of(Duration.ONE_MINUTE), |
|
| 143 | + Wait.wait(()->!polarDataService.isCurrentlyActiveOrHasQueue(), /* timeout */ Optional.of(Duration.ONE_MINUTE), |
|
| 144 | 144 | /* sleepBetweenAttempts */ Duration.ONE_SECOND.times(5), Level.INFO, "Waiting for polar data service to finish computing"); |
| 145 | 145 | OnlineTracTracBasedTest.fixApproximateMarkPositionsForWindReadOut(getTrackedRace(), timePointForFixes); |
| 146 | 146 | final IncrementalWindEstimation windEstimation = windEstimationFactoryService.createIncrementalWindEstimationTrack(getTrackedRace()); |
java/com.sap.sailing.www/release_notes_admin.html
| ... | ... | @@ -23,6 +23,18 @@ |
| 23 | 23 | <div class="mainContent"> |
| 24 | 24 | <h2 class="releaseHeadline">Release Notes - Administration Console</h2> |
| 25 | 25 | <div class="innerContent"> |
| 26 | + <h2 class="articleSubheadline">January 2026</h2> |
|
| 27 | + <ul class="bulletList"> |
|
| 28 | + <li>Extended RabbitMQ channel heartbeat interval to 1h. This will suffice even for |
|
| 29 | + longer garbage collection cycles that may happen during replica set start-up.</li> |
|
| 30 | + <li>Using explicit ("manual") RabbitMQ message delivery acknowledgements for initial |
|
| 31 | + load when starting up a replica, combined with a "prefetch" (basicQos) value of 1. |
|
| 32 | + This way, when the replica is processing data |
|
| 33 | + and doesn't read fast enough, the RabbitMQ server will wait for the next message |
|
| 34 | + confirmation before sending more messages. This avoids socket buffer overflows |
|
| 35 | + which previously could lead to the RabbitMQ server timing out trying to send |
|
| 36 | + messages to the replica's channel.</li> |
|
| 37 | + </ul> |
|
| 26 | 38 | <h2 class="articleSubheadline">December 2025</h2> |
| 27 | 39 | <ul class="bulletList"> |
| 28 | 40 | <li>Added boat class Fareast 28R.</li> |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_cs.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=Další informace |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports na |
| 4 | -followSports=Sledovat SAP Sports |
|
| 4 | +followSports=Sledujte nás na |
|
| 5 | 5 | welcomeToSailingAnalytics=Vítejte v SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP přenese příznivce jachtařského sportu tak blízko vodní hladině jako nikdo předtím.\ Výsledková tabule přináší dokonalý přehled o aktuálním pořadí, rychlosti lodí a odstupech od vítěze. Díky SAP můžete být u každé rozjížďky a nikdy vám neunikne žádný předjížděcí manévr.\ Do ruky se vám dostává jednoduchý způsob, jak sledovat přímé přenosy jachtařských závodů, ať už jste kdekoli. |
| 7 | 7 | inSailingContent=Jachtařský sport je ideálním prostředím, v němž může SAP představit svá řešení a současně pomoci odvětví v dalším rozvoji. Svým vstupem do jachtařského sportu SAP toto sportovní odvětví proměnil díky nástrojům, které:<ul><li>pomáhají posádkám analyzovat výkonnost a optimalizovat strategii,</li><li>přinášejí fanouškům jedinečný zážitek,</li><li>nabízejí médiím informace a analytická data pro informovanější pokrytí.</li></ul>Společnost SAP se v jachtařském odvětví pohybuje již řadu let a za tu dobu si v něm vybudovala pozici, která se odráží v podpoře týmů i nejrůznějších závodů jako například:<ul><li>technický partner evropských jachtařských lig,</li><li>partner největší jachtařské regaty na světě Kieler Woche,</li><li>technický partner Sailing Champions League,</li><li>titulární sponsor mistrovství světa SAP 5O5,</li><li>oficiální technologický partner asociace WORLD SAILING.</li></ul> |
| 8 | +followGitHub=Sailing Analytics zapnuto |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_da.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=Læs mere |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports på |
| 4 | -followSports=Følg SAP Sports |
|
| 4 | +followSports=Følg os på |
|
| 5 | 5 | welcomeToSailingAnalytics=Velkommen til SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP bringer sejlsportsfans tættere på det, der sker på vandet, end nogensiden før. Live-ranglisten forbedrer oplevelsen for fans med rangordninger i realtid, bådhastigheder og vindermarginer. Følg hver kapsejlads, og gå aldrig glip af en rundingsmanøvre med SAP. Det er den nemmeste måde at se sejlsport live, uanset hvor du er. |
| 7 | 7 | inSailingContent=Sailing er den perfekte platform for SAP til at fremvise løsninger og hjælpe sporten med at køre som aldrig før. SAP''s involvering i sporten har forvandlet sejladsoplevelsen ved at levere værktøjer, som:<ul><li>Hjælper sejlere med at analysere præstationer og optimere strategi</li><li>Bringer fans tættere på begivenhederne</li><li>Giver medierne oplysninger og analyser til at levere en mere informeret kommentering</li></ul>SAP har en mangeårig involvering i sejlads og har etableret en portefølje, der spænder over teams og regattaer, herunder:<ul><li>Teknisk partner for European Sailing Leagues</li><li>Partner i verdens største regatta, Kielerugen</li><li>Teknisk partner i Sailing Champions League</li><li>Hovedsponsor for SAP 5O5 World Championships</li><li>Officiel teknologipartner for WORLD SAILING</li></ul> |
| 8 | +followGitHub=Sailing Analytics på |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_es.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=Leer más |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports en |
| 4 | -followSports=Seguir SAP Sports |
|
| 4 | +followSports=Síganos en |
|
| 5 | 5 | welcomeToSailingAnalytics=Le damos la bienvenida a SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP lleva a los amantes de la navegación al corazón de la experiencia náutica.\ Con la tabla de clasificación en directo, los fans de las regatas podrán acceder en tiempo real a rankings, velocidades de embarcaciones y márgenes de victoria. Siga cada prueba con SAP y no se pierda ningún adelantamiento.\ Una manera sencilla de ver regatas en directo desde cualquier rincón del mundo. |
| 7 | 7 | inSailingContent=Sailing proporciona la plataforma perfecta para que SAP muestre soluciones y ayude a que el deporte funcione como nunca antes. La participación de SAP en el deporte ha transformado la experiencia de la vela proporcionando herramientas, que:<ul><li>Ayudan a los navegantes a analizar el rendimiento y optimizar la estrategia</li><li>Acercar a los aficionados a la acción</li><li>Proporcionar a los medios de comunicación información y conocimientos para ofrecer unos comentarios más fundamentados</li></ul>SAP tiene una larga participación en la vela y ha establecido un portafolio que abarca equipos y regatas, incluyendo:<ul><li>Socio Técnico de las Ligas Europeas de Vela </li><li>Socio de la regata más grande del mundo, la Kieler Woche (Semana de Kiel)</li><li>Socio técnico de la Sailing Champions League</li><li>Patrocinador principal del Campeonato Mundial SAP 5O5</li><li>Socio tecnológico oficial de la WORLD SAILING</li></ul>. |
| 8 | +followGitHub=Sailing Analytics en |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_fr.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=En savoir plus |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports sur |
| 4 | -followSports=Suivre SAP Sports |
|
| 4 | +followSports=Suivez-nous sur |
|
| 5 | 5 | welcomeToSailingAnalytics=Bienvenue dans SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=Grâce aux solutions SAP, l''action sur l''eau est à portée de main pour les amateurs de la voile, comme jamais auparavant.\ Le palmarès actualisé en direct ajoute un vrai plus, avec des classements, vitesses de bateaux et marges de victoire en temps réel. Avec SAP, suivez chaque course et ne ratez aucune manœuvre de passage.\ Regarder les compétitions de voile en direct où que vous soyez devient un jeu d''enfant. |
| 7 | 7 | inSailingContent=Pour SAP, la voile est une plate-forme idéale pour présenter des solutions et permettre à la discipline d''atteindre une autre dimension. L''engagement de SAP dans cette discipline a transformé l''expérience de la voile grâce à des outils qui :<ul><li>aident les compétiteurs à analyser leur performance et à optimiser leur stratégie</li><li>rapprochent les amateurs du feu de l''action</li><li>mettent à disposition des médias des informations et des analyses permettant d''étoffer les commentaires qui accompagnent les manifestations</li></ul>L''engagement de SAP dans le sport de la voile est de longue date, porte sur de nombreuses équipes et régates avec un portefeuille élargi qui comprend :<ul><li>Partenaire technologique de la Ligue Européenne de Voile</li><li>Partenaire de la régate la plus grande au monde, Kieler Woche (semaine de Kiel)</li><li>Partenaire technologique de la Sailing Champions League</li><li>Sponsor principal de la compétition SAP 5O5 World Championships</li><li>Partenaire technologique officiel de WORLD SAILING</li></ul> |
| 8 | +followGitHub=Sailing Analytics sur |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_it.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=Ulteriori informazioni |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports su |
| 4 | -followSports=Segui SAP Sports |
|
| 4 | +followSports=Seguici su |
|
| 5 | 5 | welcomeToSailingAnalytics=Benvenuti in SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP avvicina i fan della vela all''azione in acqua come mai prima. \ Le classifiche in tempo reale aumentano l''esperienza degli appassionati grazie alle posizioni in classifica in tempo reale, le informazioni sulla velocità delle barche e i margini di vittoria. Segui tutte le gare e non perderti una manovra di passaggio grazie a SAP. \ Il modo semplice per seguire le gare di vela ovunque ti trovi. |
| 7 | 7 | inSailingContent=Sailing rappresenta per SAP la piattaforma perfetta in cui presentare le proprie soluzioni e offrire un supporto senza precedenti alla gestione di questo sport. L’impegno di SAP in ambito sportivo ha trasformato l’esperienza velistica con strumenti capaci di:<ul><li>aiutare i velisti ad analizzare le prestazioni e ottimizzare le strategie</li><li>avvicinare i fan della vela all’azione</li><li>fornire informazioni e approfondimenti ai media per offrire un commento informato più dettagliato</li></ul>SAP è da lungo tempo impegnata nel mondo della vela, con un portafoglio di team e regate, tra cui:<ul><li>Partner tecnico delle European Sailing League</li><li>Partner della più grande regata del mondo, la Kieler Woche (Settimana di Kiel)</li><li>Partner tecnico della Sailing Champions League</li><li>Title sponsor delle SAP 5O5 World Championship</li><li>Partner tecnologico ufficiale del WORLD SAILING</li></ul> |
| 8 | +followGitHub=Sailing Analytics attivo |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_ja.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=続きを読む |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports: |
| 4 | -followSports=SAP Sports をフォロー |
|
| 4 | +followSports=フォロー: |
|
| 5 | 5 | welcomeToSailingAnalytics=SAP Sailing Analytics へようこそ |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP は、水上で行われている動きをセーリングファンにとってかつてないほど身近なものにします。\nこの実況リーダーボードでランキング、艇速、艇差をリアルタイムに把握してファンとしての体験を充実したものにできます。SAP を使ってすべてのレースを追いかければ、追い抜きのマニューバーを見逃すことはありません。\nこれこそ、セーリング競技を生で簡単に視聴する方法なのです。 |
| 7 | 7 | inSailingContent=SAP Sailing は、SAP がソリューションを紹介し、スポーツの運営を今までになかったようなやり方で支援するためにうってつけのプラットフォームを提供します。スポーツに SAP が関与することで、以下のことを行うツールが提供されセーリングエクスペリエンスが変革されました。<ul><li>セーリング競技者がパフォーマンスを分析し、戦略を最適化できるよう支援する</li><li>アクションをファンにより身近なものにする</li><li>情報に基づくすばらしい解説ができるように情報やインサイトをメディアに提供する</li></ul>SAP は長年にわたってセーリングに関わってきており、以下のとおりチームおよびレガッタを横断したポートフォリオを確立しています。<ul><li>欧州セーリング連盟のテクニカルパートナー</li><li>世界最大のレガッタであるキーラー週間のパートナー</li><li>セーリングチャンピオンズリーグのテクニカルパートナー</li><li>SAP 5O5 ワールドチャンピオンシップのタイトルスポンサー</li><li>ワールドセーリングの公式テクノロジーパートナー</li></ul> |
| 8 | +followGitHub=Sailing Analytics: |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_pt.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=Ler mais |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports ativado |
| 4 | -followSports=Seguir SAP Sports |
|
| 4 | +followSports=Siga-nos em |
|
| 5 | 5 | welcomeToSailingAnalytics=Bem-vindo à SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=A SAP aproxima os fãs de vela da ação na água como nunca antes.\ O painel de classificação ao vivo intensifica a experiência dos fãs com classificações, velocidades de barcos e margens de vitória em tempo real. Siga todas as corridas e nunca perca uma manobra de passagem com a SAP.\ Esta é a forma simples de ver ao vivo regatas a vela onde quer que esteja. |
| 7 | 7 | inSailingContent=O Sailing oferece a plataforma perfeita para a SAP apresentar soluções e ajudar o esporte a operar como nunca antes. O envolvimento da SAP no esporte transformou a experiência de vela fornecendo ferramentas que:<ul><li>Ajude os marinheiros a analisar o desempenho e otimizar a estratégia</li><li>Aproxime os torcedores da ação</li><li>Forneça à mídia informações e insights para fornecer um comentário mais informado</li></ul>A SAP tem um envolvimento de longa data com a vela e estabeleceu um portfólio de spanning entre equipes e regatas, incluindo:<ul><li>Parceiro Técnico da Liga Europeia de Vela</li><li> Parceiro da maior regata do mundo, Kieler Woche (Semana de Kiel)</li><li>Parceiro Técnico da Liga dos Campeões de Vela</li><li>Patrocinador principal do Campeonato Mundial SAP 5O5</li><li>Parceiro de tecnologia oficial da WORLD SAILING</li></ul> |
| 8 | +followGitHub=Sailing Analytics em |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_ru.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=См. также |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports в |
| 4 | -followSports=Отслеживать SAP Sports |
|
| 4 | +followSports=Следите за нами в |
|
| 5 | 5 | welcomeToSailingAnalytics=Вас приветствует SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP позволяет любителям парусного спорта подойти к происходящему на воде ближе, чем когда-либо ранее.\ Онлайн-таблица лидеров содержит обновляемые в режиме реального времени данные о рангах участников, скоростях лодок и преимуществе лидеров. Следите за каждой гонкой и не пропустите ни одного маневра с SAP.\ Это удобный способ наблюдения за парусными гонками в реальном времени откуда угодно. |
| 7 | 7 | inSailingContent=Sailing – это идеальная платформа SAP для демонстрации решений и трансформации представления о спорте. Своими решениями SAP изменила парусный спорт, предоставив инструменты, которые:<ul><li>Помогают спортсменам анализировать эффективность и оптимизировать стратегию</li><li>Помогают болельщикам быть ближе к действию</li><li>Предоставляют больше информации и комментариев</li></ul>SAP давно участвует в парусном спорте и создала свое портфолио из команд и регатт:<ul><li>Технический партнер Европейской парусной лиги</li><li>Партнер крупнейшей мировой регаты в Киле (Кильская неделя)</li><li>Технический партнер Парусной лиги чемпионов Европы</li><li>Титульный спонсор чемпионата мира SAP 5O5</li><li>Официальный технологический партнер WORLD SAILING</li></ul> |
| 8 | +followGitHub=Sailing Analytics в |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_sl.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=Več informacij |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | 3 | sportsOn=SAP Sports na |
| 4 | -followSports=Spremljaj SAP Sports |
|
| 4 | +followSports=Sledite nam na |
|
| 5 | 5 | welcomeToSailingAnalytics=Pozdravljeni v SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP zbližuje privržence jadranja in dogajanje na vodi na način, kot ga še nismo videli. \ Lestvica vodilnih se osvežuje v živo in s sprotnim prikazom uvrstitev, hitrostmi jadrnic in zmagovalnimi razlikami zares obogati izkušnjo. SAP bo poskrbel, da ne boste zamudili nobenega plova in nobenega prehitevanja. \ Tako lahko tekmovanja v jadranju spremljate praktično povsod. |
| 7 | 7 | inSailingContent=Jadranje je za SAP idealna platforma, na kateri lahko predstavi svoje rešitve in pripomore k športu kot še nikoli prej. SAP-jeva udeležba v panogi je preoblikovala jadralno izkušnjo z zagotavljanjem orodij, ki:<ul><li>Pomagajo jadralcem analizirati zmogljivosti in optimizirati strategijo</li><li>Dogajanje približajo gledalcem</li><li>Medijem zagotavljajo informacije in vpoglede ter tako omogočajo še bolj informirano komentiranje</li></ul>SAP se na področju jadranja udejstvuje že vrsto let in je vzpostavil portfelj, ki zajema ekipe in regate ter vključuje:<ul><li>Tehnični partner evropskih jadralnih lig</li><li>Partner največje regate na svetu, Kieler Woche (Kielski teden)</li><li>Tehnični partner Sailing Champions League</li><li>Glavni sponzor svetovnih prvenstev SAP 5O5</li><li>Uradni tehnološki partner WORLD SAILING</li></ul> |
| 8 | +followGitHub=Analitika jadranja na |
java/com.sap.sse.branding.sap/resources/stringmessages/SAPBrandingStringMessages_zh.properties
| ... | ... | @@ -1,7 +1,8 @@ |
| 1 | 1 | sailingAnalyticsReadMore=更多信息 |
| 2 | 2 | sailingAnalyticsSailing=SAP Sailing |
| 3 | -sportsOn=SAP Sports - |
|
| 4 | -followSports=关注 SAP Sports |
|
| 3 | +sportsOn=SAP Sports |
|
| 4 | +followSports=关注我们 |
|
| 5 | 5 | welcomeToSailingAnalytics=欢迎使用 SAP Sailing Analytics |
| 6 | 6 | welcomeToSailingAnalyticsBody=SAP 使船赛粉丝得以近距离直击水上运动,史无前例。\\u5B9E况积分榜让粉丝全程了解最新排名、船速和输赢差距。使用 SAP 关注每场比赛轮次,绝不错过任何一个操作。\\u4E0D论您身在何地,这都是观看实况帆船比赛的简单方式。 |
| 7 | 7 | inSailingContent=SAP 凭借此航行应用提供完美的平台,向用户展示解决方案,并以前所未有的顺畅速度呈现体育赛事。SAP 通过提供各种工具转换其在参与此项运动中获得的航行经验,这些工具:<ul><li>帮助水手分析表现并优化策略</li><li>让粉丝近距离直击运动</li><li>为媒体提供信息和见解,从而提供深度评论</li></ul>SAP 长期参与航行运动,并成立了跨越团队和比赛的组合,包括:<ul><li>欧洲帆船联盟的技术合作伙伴</li><li>世界上最大的帆船盛事“基尔周”的合作伙伴</li><li>帆船俱乐部冠军联赛的技术合作伙伴</li><li>SAP 5O5 世界锦标赛的冠名赞助商</li><li>世界帆船运动的官方技术合作伙伴</li></ul> |
| 8 | +followGitHub=Sailing Analytics |
java/com.sap.sse.landscape.aws/src/com/sap/sse/landscape/aws/impl/AwsApplicationReplicaSetImpl.java
| ... | ... | @@ -15,6 +15,7 @@ import java.util.logging.Level; |
| 15 | 15 | import java.util.logging.Logger; |
| 16 | 16 | import java.util.stream.IntStream; |
| 17 | 17 | |
| 18 | +import com.sap.sailing.landscape.common.SharedLandscapeConstants; |
|
| 18 | 19 | import com.sap.sse.ServerInfo; |
| 19 | 20 | import com.sap.sse.common.Duration; |
| 20 | 21 | import com.sap.sse.common.HttpRequestHeaderConstants; |
| ... | ... | @@ -332,7 +333,7 @@ implements AwsApplicationReplicaSet<ShardingKey, MetricsT, ProcessT> { |
| 332 | 333 | // or no load balancer forwards to it; in any case we can only default to the assumption that the process may be an archive |
| 333 | 334 | // server: |
| 334 | 335 | if (getName().equals(ARCHIVE_SERVER_NAME)) { |
| 335 | - setHostname("www.sapsailing.com"); // TODO this should probably be archive-failover.sapsailing.com for the fail-over ARCHIVE server |
|
| 336 | + setHostname("www."+SharedLandscapeConstants.DEFAULT_DOMAIN_NAME); // TODO this should probably be archive-failover.sapsailing.com for the fail-over ARCHIVE server; TODO bug6208: use something other than "www" for the ARCHIVE |
|
| 336 | 337 | } else { |
| 337 | 338 | logger.warning("Found an application replica set " + getName() + " that is not the " |
| 338 | 339 | + ARCHIVE_SERVER_NAME + " replica set; no hostname can be inferred."); |
java/com.sap.sse.replication/src/com/sap/sse/replication/RabbitMQConnectionFactoryHelper.java
| ... | ... | @@ -5,7 +5,7 @@ import com.rabbitmq.client.ConnectionFactory; |
| 5 | 5 | public class RabbitMQConnectionFactoryHelper { |
| 6 | 6 | /** |
| 7 | 7 | * Creates a RabbitMQ {@link ConnectionFactory} that has a connection timeout of 30s, a network recovery interval of |
| 8 | - * 10s, a heartbeat interval of 6 minutes, and that uses automatic recovery and topology recovery. |
|
| 8 | + * 10s, a heartbeat interval of 30 minutes, and that uses automatic recovery and topology recovery. |
|
| 9 | 9 | */ |
| 10 | 10 | public static ConnectionFactory getConnectionFactory() { |
| 11 | 11 | final ConnectionFactory connectionFactory = new ConnectionFactory(); |
| ... | ... | @@ -13,7 +13,7 @@ public class RabbitMQConnectionFactoryHelper { |
| 13 | 13 | connectionFactory.setAutomaticRecoveryEnabled(true); |
| 14 | 14 | connectionFactory.setTopologyRecoveryEnabled(true); |
| 15 | 15 | connectionFactory.setNetworkRecoveryInterval(10000); |
| 16 | - connectionFactory.setRequestedHeartbeat(360); |
|
| 16 | + connectionFactory.setRequestedHeartbeat(1800); |
|
| 17 | 17 | return connectionFactory; |
| 18 | 18 | } |
| 19 | 19 | } |
java/com.sap.sse.replication/src/com/sap/sse/replication/impl/RabbitInputStreamProvider.java
| ... | ... | @@ -39,14 +39,16 @@ public class RabbitInputStreamProvider extends NamedImpl { |
| 39 | 39 | messagesAreWrittenToThis = new PipedOutputStream(); |
| 40 | 40 | clientReadsFromThis = new PipedInputStream(messagesAreWrittenToThis); |
| 41 | 41 | final QueueingConsumer messageConsumer = new QueueingConsumer(channel); |
| 42 | - channel.basicConsume(queueName, /* auto-ack */ true, messageConsumer); |
|
| 42 | + channel.basicQos(1); // with "manual" acknowledgement, process one message at a time, avoiding overloading inbound socket |
|
| 43 | + channel.basicConsume(queueName, /* auto-ack */ false, messageConsumer); |
|
| 43 | 44 | new Thread(getClass().getSimpleName()) { |
| 44 | 45 | @Override |
| 45 | 46 | public void run() { |
| 46 | 47 | while (true) { |
| 47 | 48 | try { |
| 48 | - Delivery delivery = messageConsumer.nextDelivery(); |
|
| 49 | + final Delivery delivery = messageConsumer.nextDelivery(); |
|
| 49 | 50 | byte[] bytesFromMessage = delivery.getBody(); |
| 51 | + channel.basicAck(delivery.getEnvelope().getDeliveryTag(), /* multiple */ false); |
|
| 50 | 52 | if (RabbitOutputStream.startsWithTerminationCommand(bytesFromMessage, bytesFromMessage.length)) { |
| 51 | 53 | if (bytesFromMessage.length == RabbitOutputStream.TERMINATION_COMMAND.length) { |
| 52 | 54 | // received exactly TERMINATION_COMMAND |
java/com.sap.sse.replication/src/com/sap/sse/replication/impl/RabbitOutputStream.java
| ... | ... | @@ -131,28 +131,35 @@ public class RabbitOutputStream extends OutputStream { |
| 131 | 131 | * The method is synchronized as it needs exclusive and atomic access to {@link #count} and {@link #streamBuffer}. |
| 132 | 132 | */ |
| 133 | 133 | private synchronized void sendBuffer() throws IOException { |
| 134 | - if (count > 0) { |
|
| 135 | - if (this.channel != null && this.channel.isOpen()) { |
|
| 136 | - final byte[] message; |
|
| 137 | - // check for the unlikely case that a client has coincidentally submitted the TERMINATION_COMMAND; we escape by |
|
| 138 | - // appending a random byte which makes the length differ; the input stream provider will skip one byte after receiving |
|
| 139 | - // the TERMINATION_COMMAND at the beginning of a message whose length is greater than that of the TERMINATION_COMMAND. |
|
| 140 | - if (startsWithTerminationCommand(streamBuffer, count)) { |
|
| 141 | - message = new byte[count+1]; |
|
| 134 | + try { |
|
| 135 | + if (count > 0) { |
|
| 136 | + if (this.channel != null && this.channel.isOpen()) { |
|
| 137 | + final byte[] message; |
|
| 138 | + // check for the unlikely case that a client has coincidentally submitted the TERMINATION_COMMAND; we escape by |
|
| 139 | + // appending a random byte which makes the length differ; the input stream provider will skip one byte after receiving |
|
| 140 | + // the TERMINATION_COMMAND at the beginning of a message whose length is greater than that of the TERMINATION_COMMAND. |
|
| 141 | + if (startsWithTerminationCommand(streamBuffer, count)) { |
|
| 142 | + message = new byte[count+1]; |
|
| 143 | + } else { |
|
| 144 | + message = new byte[count]; |
|
| 145 | + } |
|
| 146 | + System.arraycopy(streamBuffer, 0, message, 0, count); |
|
| 147 | + this.channel.basicPublish(/* empty exchange name means the default exchange with direct routing; |
|
| 148 | + all queues by default bind to this exchange, using the queue name |
|
| 149 | + as the routing key. |
|
| 150 | + See also https://www.rabbitmq.com/tutorials/amqp-concepts#exchange-default |
|
| 151 | + */ "", /* routingKey */ queueName, /* properties */ null, message); |
|
| 152 | + count = 0; |
|
| 142 | 153 | } else { |
| 143 | - message = new byte[count]; |
|
| 154 | + this.closed = true; |
|
| 155 | + throw new IOException("AMPQ Channel seems to be closed!"); |
|
| 144 | 156 | } |
| 145 | - System.arraycopy(streamBuffer, 0, message, 0, count); |
|
| 146 | - this.channel.basicPublish(/* empty exchange name means the default exchange with direct routing; |
|
| 147 | - all queues by default bind to this exchange, using the queue name |
|
| 148 | - as the routing key. |
|
| 149 | - See also https://www.rabbitmq.com/tutorials/amqp-concepts#exchange-default |
|
| 150 | - */ "", /* routingKey */ queueName, /* properties */ null, message); |
|
| 151 | - count = 0; |
|
| 152 | - } else { |
|
| 153 | - this.closed = true; |
|
| 154 | - throw new IOException("AMPQ Channel seems to be closed!"); |
|
| 155 | 157 | } |
| 158 | + } catch (IOException e) { |
|
| 159 | + logger.log(Level.SEVERE, "IOException while sending data to RabbitMQ queue "+queueName, e); |
|
| 160 | + throw e; // re-throw; callers will have to know that their write failed |
|
| 161 | + // The re-throw will most likely lead to a writeFatalException(...) on the ObjectOutputStream |
|
| 162 | + // which doesn't help really because it breaks the protocol. |
|
| 156 | 163 | } |
| 157 | 164 | } |
| 158 | 165 |
java/target/status
| ... | ... | @@ -32,7 +32,7 @@ RESPONSE_STATUS_CODE=$(echo $STATUS | head -n 1 | cut -d ' ' -f 2) |
| 32 | 32 | |
| 33 | 33 | echo "AVAILABILITY_STATUS: $RESPONSE_STATUS_CODE" >&2 |
| 34 | 34 | echo "AVAILABILITY_DETAILS:" >&2 |
| 35 | -echo "$STATUS" | grep "^{" | jq . |
|
| 35 | +echo "$STATUS" | grep "^{" | jq -C . |
|
| 36 | 36 | |
| 37 | 37 | if [[ $RESPONSE_STATUS_CODE =~ 2.. ]]; then |
| 38 | 38 | echo "Server $SERVER_NAME is available on $SERVER_PORT" >&2 |
wiki/howto/onboarding.md
| ... | ... | @@ -13,9 +13,15 @@ First of all, make sure you've looked at [http://www.amazon.de/Patterns-Elements |
| 13 | 13 | - The primary Git repository for the project is hosted on Github (see [https://github.com/SAP/sailing-analytics](https://github.com/SAP/sailing-analytics)). To clone, use ``git@github.com:SAP/sailing-analytics.git``. |
| 14 | 14 | - If you are on Windows, keep in mind you may run into the following problem. By default, the filesystem in Windows enforces a 260 character limit on paths. The longest path length for a file in this project, if the drive name is included, is 263 characters. A possible solution is to pass a single character name for the project folder in the git clone command, and clone the project on drive root, which may bring the longest file path down to compatible length. Alternatively, Windows 10 and 11 offer settings to enable a much much longer maximum file path that requires additional configuration. You may check that out at your own will. |
| 15 | 15 | - To gain write access you have to become member of the [sailing-analytics-team](https://github.com/orgs/SAP/teams/sailing-analytics-team) organization. For that you need to [link your Github user to the Github SAP organization](https://wiki.one.int.sap/wiki/display/ospodocs/Self-Service+for+Joining+an+SAP+GitHub+Organization). For that to work, your Github account needs to have your @sap.com e-mail address assigned and verified. We still have a shadow repository around that, e.g., powers our Wiki at [https://wiki.sapsailing.com](https://wiki.sapsailing.com) and which lives at ``ssh://trac@sapsailing.com/home/trac/git``. |
| 16 | + - Announcements relevant for developers are posted on [GitHub](https://github.com/SAP/sailing-analytics) in the Discussions tab. In order to get notifications you can subscribe to discussions by clicking on "Watch" in the Repository, then "Custom". In the new Popup select "Discussions" and confirm by clicking "Apply". |
|
| 17 | + |
|
| 18 | + <img src="/wiki/images/github/GitHubWatch.jpg" style="width: 50%"/> |
|
| 19 | + <img src="/wiki/images/github/GitHubSubscribe.jpg" style="width: 45%"/> |
|
| 16 | 20 | |
| 17 | 21 | - In case you'd like to get access to the external git at `ssh://trac@sapsailing.com/home/trac/git` please send your SSH public key to one of the project maintainers, requesting git access. Make sure to NOT generate the key using Putty. Putty keys don't work reliably under Linux and on Windows/Cygwin environments. Use ssh-keygen in a Cygwin or Linux or MacOS/X environment instead. For further instructions for generating an ssh-key see [GitHub](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent). |
| 18 | 22 | Note: If you want to use the ssh-key in the context of our solution, it can be an RSA or ED25519 format. Example for creating a key: `ssh-keygen -t ed25519 -b 512 -C "test@test.com"`. Make sure to set a non-empty password for your key. |
| 23 | + Everytime you use your ssh key with encryption key you get prompted to provide the passphrase. |
|
| 24 | + To automate this process you can setup an ssh agent. On Linux your desktop environment will usually handle this for you. For macOS you can use this [guide](https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent). |
|
| 19 | 25 | |
| 20 | 26 | 2. Bugzilla |
| 21 | 27 | |
| ... | ... | @@ -34,10 +40,10 @@ First of all, make sure you've looked at [http://www.amazon.de/Patterns-Elements |
| 34 | 40 | - Request a [Hudson](https://hudson.sapsailing.com) user by sending e-mail to Axel Uhl or Simon Marcel Pamies. |
| 35 | 41 | |
| 36 | 42 | ### Installations |
| 37 | -1. Eclipse IDE for Eclipse Committers, version ["2025-03"](https://www.eclipse.org/downloads/packages/release/2025-03/r/eclipse-ide-eclipse-committers). If you are using a Mac and want to use SAPJVM, this has to be the 64 bit version. This is because SAPJVM is not available for Apple Silicon Macs, and Eclipse's OS architecture must match the JVM architecture. |
|
| 43 | +1. Eclipse IDE for Eclipse Committers, version ["2025-12"](https://www.eclipse.org/downloads/packages/release/2025-12/r/eclipse-ide-eclipse-committers). If you are using a Mac and want to use SAPJVM, this has to be the 64 bit version. This is because SAPJVM is not available for Apple Silicon Macs, and Eclipse's OS architecture must match the JVM architecture. Mac users can install SDKMAN! to manage and install different JDKs. For example Amazon Corretto 8: `sdk install java 8.0.472-amzn`. |
|
| 38 | 44 | 2. JDK 1.8 (Java SE 8), ideal is the SAPJVM 1.8: Go to [https://tools.eu1.hana.ondemand.com/#cloud](https://tools.eu1.hana.ondemand.com/#cloud), scroll down to `SAP JVM` select your operating System, extract the downloaded .zip into desired location (e.g. Windows `C:\Program Files\Java`. If you want to make this your default JDK, set the `JAVA_HOME` variable to it. In any case, set the `JAVA8_HOME` variable to it which is required by a few build scripts where certain steps currently are not yet compatible with newer JDK releases. For Gradle builds (currently using Gradle 7.6), such as our Android build process, also install Java 17 and set the `JAVA17_HOME` variable to it. |
| 39 | -3. Git (e.g. Git for Windows v2.18), [http://git-scm.com](http://git-scm.com) / [https://git-for-windows.github.io](https://git-for-windows.github.io)still |
|
| 40 | -4. Configure git (see [Git repository configuration essentials](#onboarding-information_sap-sailing-analytics-development-setup_git-repository-configuration-essentials)) |
|
| 45 | +3. Git (e.g. Git for Windows v2.18), [http://git-scm.com](http://git-scm.com) / [https://git-for-windows.github.io](https://git-for-windows.github.io) still |
|
| 46 | +4. Configure git (see [Git repository configuration essentials](#git-repository-configuration-essentials)) |
|
| 41 | 47 | 5. MongoDB (at least Release 6.0), download: [https://www.mongodb.com/](https://www.mongodb.com/). You may need to choose the community edition. In addition, install `mongosh`. |
| 42 | 48 | 6. RabbitMQ, download from [http://www.rabbitmq.com](http://www.rabbitmq.com). Requires Erlang to be installed. RabbitMQ installer will assist in installing Erlang. Some sources report that there may be trouble with the latest versions of RabbitMQ. In some cases, McAffee seems to block the installation of the latest version on SAP hardware; in other cases connection problems to the newest versions have been reported. We know that version 3.6.8 works well. [https://github.com/rabbitmq/rabbitmq-server/releases/tag/rabbitmq_v3_6_8](https://github.com/rabbitmq/rabbitmq-server/releases/tag/rabbitmq_v3_6_8) |
| 43 | 49 | 7. Maven 3.1.1 (or higher), [http://maven.apache.org](http://maven.apache.org) |
| ... | ... | @@ -45,17 +51,17 @@ First of all, make sure you've looked at [http://www.amazon.de/Patterns-Elements |
| 45 | 51 | 8. Forked GWT SDK 2.12.4 release [https://github.com/SAP/gwt-forward-serialization-rpc/releases/download/gwt-2.12.4/gwt-2.12.4.zip](https://github.com/SAP/gwt-forward-serialization-rpc/releases/download/gwt-2.12.4/gwt-2.12.4.zip)). The official releases can be found at [http://www.gwtproject.org/download.html](http://www.gwtproject.org/download.html) |
| 46 | 52 | but shouldn't be used unless we roll back the changes of branch ``bug5077`` or GWT has merged and released the [pull request 9779](https://github.com/gwtproject/gwt/pull/9779). |
| 47 | 53 | Download the GWT SDK and extract it to a location of your preference (e.g. `C:\Program Files\gwt` on Windows or `/opt` on Linux or MacOS/X). |
| 48 | - You will see in section [Tuning the Eclipse Installation](#onboarding-information_sap-sailing-analytics-development-setup_tuning-the-eclipse-installation) |
|
| 54 | + You will see in section [Tuning the Eclipse Installation](#tuning-the-eclipse-installation) |
|
| 49 | 55 | below how you announce this GWT SDK to your Eclipse installation. |
| 50 | 56 | 9. Standalone Android SDK (see section "Additional steps required for Android projects"). OPTIONALLY: You may additionally install Android Studio ([https://developer.android.com/tools/studio/index.html](https://developer.android.com/tools/studio/index.html)) or IntelliJ IDEA ([https://www.jetbrains.com/idea/download/](https://www.jetbrains.com/idea/download/)). |
| 51 | 57 | Make sure that the environment variable `ANDROID_HOME` is set (e.g. Windows C:\Users\\**'user'**\AppData\Local\Android\Sdk ) |
| 52 | 58 | 10. Get the content of the git repository |
| 53 | 59 | Clone the repository to your local file system from `git@github.com:SAP/sailing-analytics.git` or `ssh://trac@sapsailing.com/home/trac/git` User "trac" has all public ssh keys. |
| 54 | -11. Install the eclipse plugins (see [Automatic Eclipse plugin installation](#onboarding-information_sap-sailing-analytics-development-setup_automatic-eclipse-plugin-installation)) |
|
| 55 | -12. Configure Eclipse (see [Tuning the Eclipse Installation](#onboarding-information_sap-sailing-analytics-development-setup_tuning-the-eclipse-installation)) |
|
| 56 | -13. Configure Maven to use the correct JRE by following the instructions in the paragraph [maven-setup](#onboarding-information_sap-sailing-analytics-development-setup_maven-setup) |
|
| 57 | -14. Follow the instructions in the [development setup](#onboarding-information_sap-sailing-analytics-development-setup_sap-sailing-analytics-development-setup) to build the project. |
|
| 58 | -15. The steps for building the project for a deployment can be found in the [Build for deployment](#onboarding-information_sap-sailing-analytics-development-setup_build-for-deployment) section. This is not needed in the daily development workflow and should only be run when needed. |
|
| 60 | +11. Install the eclipse plugins (see [Automatic Eclipse plugin installation](#automatic-eclipse-plugin-installation)) |
|
| 61 | +12. Configure Eclipse (see [Tuning the Eclipse Installation](#tuning-the-eclipse-installation)) |
|
| 62 | +13. Configure Maven to use the correct JRE by following the instructions in the paragraph [maven-setup](#maven-setup) |
|
| 63 | +14. Follow the instructions in the [development setup](#sap-sailing-analytics-development-setup) to build the project. |
|
| 64 | +15. The steps for building the project for a deployment can be found in the [Build for deployment](#build-for-deployment) section. This is not needed in the daily development workflow and should only be run when needed. |
|
| 59 | 65 | 16. Install Ant: https://ant.apache.org/manual/install.html and makes sure to add to path: it is necessary for building gwt. |
| 60 | 66 | 17. Chrome or Firefox. Safari does not work reliably with this project. |
| 61 | 67 | |
| ... | ... | @@ -80,7 +86,7 @@ Depending on the location of your local repository, it's filepaths might be too |
| 80 | 86 | Copy the settings.xml (may be in $GIT_HOME/configuration/maven-settings.xml and $GIT_HOME/configuration/maven-settings-proxy.xml) **and** the toolchains.xml from the top-level git folder to your ~/.m2 directory. Adjust the proxy settings in settings.xml accordingly (suggested settings for inside a corporate network requiring a HTTP proxy for access to external web). Set the paths inside of toolchains.xml to your JDKs depending on where you installed them (this is like setting the compiler for your IDE, but for Maven; This makes it possible to build with the same Maven configuration on every system). Make sure the mvn executable you installed above is in your path. |
| 81 | 87 | |
| 82 | 88 | ### Automatic Eclipse plugin installation |
| 83 | -The necessary Eclipse plugins can be automatically installed into a newly unzipped version of ["2025-03"](https://www.eclipse.org/downloads/packages/release/2025-03/r/eclipse-ide-eclipse-committers) by using the `./configuration/pluginsForEclipse2025-03.p2f` file, found in the git repository cloned in _step 11_. To install the plugins open Eclipse and install Software Items from File. (File ⇒ Import ⇒ Install ⇒ Install Software from File). The description file is located at `/configuration/pluginsForEclipse2025-03.p2f`. |
|
| 89 | +The necessary Eclipse plugins can be automatically installed into a newly unzipped version of ["2025-12"](https://www.eclipse.org/downloads/packages/release/2025-12/r/eclipse-ide-eclipse-committers) by using the `./configuration/pluginsForEclipse2025-12.p2f` file, found in the git repository cloned in _step 11_. To install the plugins open Eclipse and install Software Items from File. (File ⇒ Import ⇒ Install ⇒ Install Software from File). The description file is located at `/configuration/pluginsForEclipse2025-12.p2f`. |
|
| 84 | 90 | Make sure to select all Plugins (it might not be possible to select Lucene ignore that) and click next. In the pop-up dialog shown next, select the top radio button ("Update my installation to be compatible with the items being installed"). Skip the `Installation details`, accept the licence agreements and click finish. While Eclipse is installing the plugins a pop-up will appear in the background where you need to trust all plugins. Be aware that the installation may take several minutes depending on your Internet connection. |
| 85 | 91 | |
| 86 | 92 | Be also aware that with this p2f-file it's not possible to update the plugins to newer versions. |
| ... | ... | @@ -242,7 +248,9 @@ This applies only if you try to get old "GWT Dev Mode" to work, support for whic |
| 242 | 248 | Install the GWT Browser Plugin for the GWT Development mode. As of 2016-08-31 Firefox is the only browser supporting the GWT plugin, you have to download Firefox version 24 for it to work. The Plugin can be found on this page: [https://code.google.com/archive/p/google-web-toolkit/downloads](https://code.google.com/archive/p/google-web-toolkit/downloads) |
| 243 | 249 | |
| 244 | 250 | ### Create Hudson Job |
| 245 | -If you want a hudson job to run when you push your branch then you can run a script in `configuration` called . Run options for a branch titled `createHudsonJobForBug.sh`. For you bug branch titled `bug<bug number>`, create a build job, which will create a release, by running the script like so: `./createHudsonJobForBug.sh <bug number>`. |
|
| 251 | +If you want a hudson job to run when you push your branch then you can run a script in `configuration` called `createHudsonJobForBug.sh`. For you bug branch titled `bug<bug number>`, create a build job, which will create a release, by running the script like so: `./createHudsonJobForBug.sh <bug number>`. |
|
| 252 | +If you'd like the script to include the bug's summary in its description, set your BUGZILLA_API_KEY environment variable to an API key you obtain from [https://bugzilla.sapsailing.com/bugzilla/userprefs.cgi?tab=apikey](https://bugzilla.sapsailing.com/bugzilla/userprefs.cgi?tab=apikey) or pass the API key as the second argument, after the bug ID, as in |
|
| 253 | +`./configuration/createHudsonJobForBug.sh <bug number> {Bugzilla-API-Key}` |
|
| 246 | 254 | If on Windows, you may need to disable any web shields in antivirus software, to allow `curl` to function. If on Mac, you may need to install gnu-sed (``gsed``) via Homebrew. |
| 247 | 255 | |
| 248 | 256 | ### Issues when playing around with AWS |
| ... | ... | @@ -253,9 +261,6 @@ The path to the solution: On my instance in eu-west-2a, I ran aws --debug ec2 de |
| 253 | 261 | Solution: This was occurring because the website didn't have any content in the /var/www/html. Whilst a site was still served (namely the Apache test page) it does throw a 403 error. If you fill the directory with and index.html the test then passes and a 200 code is returned |
| 254 | 262 | - Problem: Target platform reload in Eclipse. Sometimes reloading via Window -> Plug-in Development -> Target Platform doesn't work, so open the target definition itself and try reloading there. Often a restart proves helpful after the reload. In addition, you can clean all projects and rebuild; then rebuild the individual projects that fail. Sometimes the errors are actually just warnings and you can try to run the GWT SDM (remember the other SDM's must be run if everything is brand new). Lastly, try clearing the plugins content found at `WORKSPACE_HOME/.metadata/.plugins/org.eclipse.pde.core/.bundle_pool/plugins`. |
| 255 | 263 | |
| 256 | -### Tips for Mac users |
|
| 257 | -Mac users can install SDKMAN! to manage and install different JDKs. |
|
| 258 | - |
|
| 259 | 264 | ### Extra Reading |
| 260 | 265 | Check out [refactoring patterns](https://refactoring.guru/) as a sort of cheatsheet for the aforementioned design patterns books. |
| 261 | 266 | We also have an [onboarding glossary](https://wiki.sapsailing.com/wiki/howto/glossary). |
wiki/images/github/GitHubSubscribe.jpg
| ... | ... | Binary files /dev/null and b/wiki/images/github/GitHubSubscribe.jpg differ |
wiki/images/github/GitHubWatch.jpg
| ... | ... | Binary files /dev/null and b/wiki/images/github/GitHubWatch.jpg differ |
wiki/info/landscape/building-and-deploying.md
| ... | ... | @@ -91,7 +91,7 @@ When working with Hyperspace to prepare the creation of the actual Azure Pipelin |
| 91 | 91 | |
| 92 | 92 | The pipeline configuration is produced as a [Github pull request](https://github.tools.sap/SAP-Sailing-Analytics/sapsailing/pull/1) for the Git repository used for Hyperspace onboarding. In particular, it contains a "Fastlane" configuration under ``fastlane/Fastfile`` and the actual pipeline configuration in ``azure-pipelines/mail.yml``. The fastlane config in ``fastlane/Fastfile`` we could slighly adjust and simplify because we only build ``.apk`` files, no ``.aab`` libraries. Furthermore, we need adjustments for the location of the ``gradle.properties`` file into which a git-based technical version identifier shall be generated during the build process. Later more on the details of this. |
| 93 | 93 | |
| 94 | -In the ``azure-pipelines/main.yml`` file under the ``trigger:`` property we configure which Git branches and/or tags shall trigger a pipeline execution. The core part then is defined by a reference to the pipeline's template, and specific adjustments can then be made to the template pipeline in the ``extends:`` section. The ``isRelease`` boolean property controls whether the build shall be a release build that triggers code signing, in particular. The ``productiveBranchName`` property controls for buils of which branch all scanning and test tasks shall be performed. We required special adjustments of the ``jdkVersion`` property to ``11`` and the ``androidVersion`` to ``33`` for our Gradle app build to work. Furthermore, the MoMa Assembly ID must be configured in the ``momaAssemblyId`` property. Each app folder now has its own ``files2sign.json`` file in its app folder under ``mobile/`` because this allows us to limit the build output to files under the app's own folder. |
|
| 94 | +In the ``azure-pipelines/main.yml`` file under the ``trigger:`` property we configure which Git branches and/or tags shall trigger a pipeline execution. The core part then is defined by a reference to the pipeline's template, and specific adjustments can then be made to the template pipeline in the ``extends:`` section. The ``isRelease`` boolean property controls whether the build shall be a release build that triggers code signing, in particular. The ``productiveBranchName`` property controls for buils of which branch all scanning and test tasks shall be performed. We required special adjustments of the ``jdkVersion`` property to ``17`` and the ``androidVersion`` to ``35`` for our Gradle app build to work. Furthermore, the MoMa Assembly ID must be configured in the ``momaAssemblyId`` property. Each app folder now has its own ``files2sign.json`` file in its app folder under ``mobile/`` because this allows us to limit the build output to files under the app's own folder. |
|
| 95 | 95 | |
| 96 | 96 | Since we want to build and release two apps out of one Git repo and ideally with one pipeline, we work with Git branches, one per app that we want to release, as follows: |
| 97 | 97 | |
| ... | ... | @@ -114,6 +114,7 @@ Couldn't fetch secret at 'piper/PIPELINE-GROUP-5565/PIPELINE-29049/cumulus' - Er |
| 114 | 114 | see also [here](https://pages.github.tools.sap/SAPMobile/Documentation/Support/faq/#my-pipeline-fails-with-invalid-secret-id-or-invalid-role-id). |
| 115 | 115 | |
| 116 | 116 | The build uses a SonarQube check step. For that, the [SonarQube Security Configuration](https://sonar.tools.sap/account/security) is where we create access tokens. These, in turn, have to be set in the [Vault here](https://vault.tools.sap/ui/vault/secrets/piper/kv/PIPELINE-GROUP-5565%2FPIPELINE-29049%2Fsonar-SAP-Sailing-Analytics-Sonarqube/details?namespace=ies%2Fhyperspace%2Fpipelines) as a new version in the ``token`` field, with the ``url`` field being set to ``https://sonar.tools.sap``. These tokens are good for at most one year. The error we see upon token expiry would be something like |
| 117 | + |
|
| 117 | 118 | ``` |
| 118 | 119 | error sonarExecuteScan - 18:56:54.249 ERROR Error during SonarScanner CLI execution |
| 119 | 120 | info sonarExecuteScan - java.lang.IllegalStateException: Error status returned by url [https://sonar.tools.sap/api/v2/analysis/jres?os=linux&arch=x86_64]: 401 |
| ... | ... | @@ -123,7 +124,7 @@ Our points of contact for the Hyperspace / Azure Pipeline migration are Marc Bor |
| 123 | 124 | |
| 124 | 125 | ### Running a Build / Release / Promote Cycle |
| 125 | 126 | |
| 126 | -To release the apps, go to the MoMa records of the two apps ([https://moma.mo.sap.corp/#/apps/124](https://moma.mo.sap.corp/#/apps/124) and [https://moma.mo.sap.corp/#/apps/123](https://moma.mo.sap.corp/#/apps/123)) and from there into the Assembly-Data and press the "Add Release" button. Make sure the "Build System" is set to "free - Hyperspace Azure Pipelines". Then run the ``configuration/releaseAndroidApps.sh`` script, like this: |
|
| 127 | +To release the apps, go to the MoMa records of the two apps ([https://moma.mo.sap.corp/#/apps/124](https://moma.mo.sap.corp/#/apps/124) and [https://moma.mo.sap.corp/#/apps/123](https://moma.mo.sap.corp/#/apps/123)) and from there into the Assembly-Data and press the "Add Release" button. Make sure the "Build System" is set to "free - Hyperspace Azure Pipelines". Make sure you set the "Is this build to be uploaded to Google Play Store (after manual approval)?" field to "Yes - directly to Google Play (General Availability)" in case you have tested you apps already and are sure they can be uploaded to the public store. Otherwise, select "Yes - but to Google Closed Track first (with option for GA afterwards)" which will upload to the Google Closed Track store first, so you can test the apps once more prior to publication. In this case you'll have to resume or reject the "Manual Validation" step (GP Prod Deploy?) after your tests. Then run the ``configuration/releaseAndroidApps.sh`` script, like this: |
|
| 127 | 128 | |
| 128 | 129 | ``` |
| 129 | 130 | ./configuration/releaseAndroidApps.sh |
| ... | ... | @@ -139,6 +140,8 @@ Additional options: |
| 139 | 140 | |
| 140 | 141 | It starts with checking out the ``hyperspace`` branch, then increments the minor version number by one in all relevant files, in particular the ``files2sign.json`` files and the ``gradle.properties`` files in the app directories. It then commits these changes to the ``hyperspace`` branch and checks out each release branch one after another, merges the ``hyperspace`` branch with the version number updates and all other functional changes into the release branch and pushes it. This triggers the release build pipeline execution including code signing in Azure DevOps. The pipeline executions including their logs can be observed [here](https://dev.azure.com/hyperspace-mobile/SAP-Sailing-Analytics/_build?definitionId=496). |
| 141 | 142 | |
| 142 | -When the release pipelines ran successfully, they will have updated the MoMa assembly metadata for the respective apps, including the version numbers and the staging repositories used. Furthermore, a "Build Release Pipeline Project Link" is generated, such as [https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.android.buoy.positioning.app-android/](https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.android.buoy.positioning.app-android/) for the SAP Sailing Buoy Pinger app, and [https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.racecommittee.app-android/](https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.racecommittee.app-android/) for the SAP Sailing Race Manager app. Before using these pipelines, go to the MoMa Google Play Metadata section for each app you'd like to release and click on "Add Release" there, too. You will have to make a few adjustments to some fields, such as that you're only releasing a "Patch" with specific release notes which you then have to submit to naming@sap.com for approval before you can send them to LXLabs using the respective button on the Google Play Metadata page in MoMa. |
|
| 143 | +When the release pipelines ran successfully, they will have updated the MoMa assembly metadata for the respective apps, including the version numbers and the staging repositories used. |
|
| 144 | + |
|
| 145 | +(In previous pipeline versions, a "Build Release Pipeline Project Link" was generated, such as [https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.android.buoy.positioning.app-android/](https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.android.buoy.positioning.app-android/) for the SAP Sailing Buoy Pinger app, and [https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.racecommittee.app-android/](https://gkemobilepipelines.jaas-gcp.cloud.sap.corp/job/NAAS%20-%20Mobile%20Freestyle/job/com.sap.sailing.racecommittee.app-android/) for the SAP Sailing Race Manager app. Before using these pipelines, we would go to the MoMa Google Play Metadata section for each app you'd like to release and click on "Add Release" there, too. You will have to make a few adjustments to some fields, such as that you're only releasing a "Patch" with specific release notes which you then have to submit to naming@sap.com for approval before you can send them to LXLabs using the respective button on the Google Play Metadata page in MoMa. Only once you have all approvals in place, use the "Build Release Pipeline Project Link" for the app you'd like to release and run a build there. Note that these builds have interactive steps that pause and ask you to confirm the promotion to the Play Store. Your released app(s) should then show in the Google Play Store after a few hours.) |
|
| 143 | 146 | |
| 144 | -Only once you have all approvals in place, use the "Build Release Pipeline Project Link" for the app you'd like to release and run a build there. Note that these builds have interactive steps that pause and ask you to confirm the promotion to the Play Store. Your released app(s) should then show in the Google Play Store after a few hours. |
|
| ... | ... | \ No newline at end of file |
| 0 | +Now (2026-01-23) the "NAAS Promote" step in the Azure build pipeline will upload the readily-built apps to the Google Play store (supposedly after a human-in-the-loop confirmation). We haven't completed this process yet because we are currently still in the transition. NAAS, however, |
|
| ... | ... | \ No newline at end of file |