From d7c751f2b60aecc03caa1adcb907e0259ac15114 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 11:25:21 +0100 Subject: [PATCH 01/86] build webassembly ci without address sanitizer --- .github/workflows/webassembly.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/webassembly.yml b/.github/workflows/webassembly.yml index df2f2129..ab32f339 100644 --- a/.github/workflows/webassembly.yml +++ b/.github/workflows/webassembly.yml @@ -79,7 +79,6 @@ jobs: -B ${{ steps.strings.outputs.build-output-dir }} -DCMAKE_BUILD_TYPE=Release -DALP_WWW_INSTALL_DIR=${{ steps.strings.outputs.install-dir }} - -DALP_ENABLE_ADDRESS_SANITIZER=ON -DALP_ENABLE_ASSERTS=ON -DFMT_INSTALL=OFF -S ${{ github.workspace }} From ffe55c534f22604387f2e65652b2c8e08bcbe16e Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 6 Dec 2023 11:50:06 +0100 Subject: [PATCH 02/86] fix read position of altitude querier --- nucleus/tile_scheduler/cache_quieries.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nucleus/tile_scheduler/cache_quieries.h b/nucleus/tile_scheduler/cache_quieries.h index 096605ff..d7f5436d 100644 --- a/nucleus/tile_scheduler/cache_quieries.h +++ b/nucleus/tile_scheduler/cache_quieries.h @@ -47,7 +47,7 @@ inline float query_altitude(MemoryCache* cache, const glm::dvec2& lat_long) if (height_tile.isNull()) return 1000; const auto x = int(uv.x * height_tile.width()); - const auto y = int(uv.y * height_tile.height()); + const auto y = int((1 - uv.y) * height_tile.height()); const auto rgb = QColor(height_tile.pixel(x, y)); return radix::height_encoding::to_float({rgb.red(), rgb.green(), rgb.blue()}); } From d5b1b3cdc9b53cdeeae593fc00894a015c155d5a Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 12:23:51 +0100 Subject: [PATCH 03/86] this should fix compiler errors on clang + windows --- nucleus/tile_scheduler/Scheduler.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/nucleus/tile_scheduler/Scheduler.cpp b/nucleus/tile_scheduler/Scheduler.cpp index e4cc7383..42f664cb 100644 --- a/nucleus/tile_scheduler/Scheduler.cpp +++ b/nucleus/tile_scheduler/Scheduler.cpp @@ -25,8 +25,6 @@ #include #include #include -#include -#include #include "nucleus/tile_scheduler/utils.h" #include "nucleus/utils/tile_conversion.h" @@ -229,11 +227,16 @@ void Scheduler::persist_tiles() const auto start = std::chrono::steady_clock::now(); const auto r = m_ram_cache.write_to_disk(disk_cache_path()); const auto diff = std::chrono::steady_clock::now() - start; + if (diff > std::chrono::milliseconds(50)) - fmt::println(stderr, "Scheduler::persist_tiles took {} for {} quads.", std::chrono::duration_cast(diff), m_ram_cache.n_cached_objects()); + qDebug() << QString("Scheduler::persist_tiles took %1ms for %2 quads.") + .arg(std::chrono::duration_cast(diff).count()) + .arg(m_ram_cache.n_cached_objects()); if (!r.has_value()) { - qDebug("Writing tiles to disk into %s failed: %s. Removing all files.", disk_cache_path().c_str(), r.error().c_str()); + qDebug() << QString("Writing tiles to disk into %1 failed: %2. Removing all files.") + .arg(QString::fromStdString(disk_cache_path())) + .arg(QString::fromStdString(r.error())); std::filesystem::remove_all(disk_cache_path()); } } @@ -274,7 +277,9 @@ void Scheduler::read_disk_cache() if (r.has_value()) { update_stats(); } else { - qDebug("Reading tiles from disk cache (%s) failed: \n%s\nRemoving all files.", disk_cache_path().c_str(), r.error().c_str()); + qDebug() << QString("Reading tiles from disk cache (%s) failed: \n%s\nRemoving all files.") + .arg(QString::fromStdString(disk_cache_path())) + .arg(QString::fromStdString(r.error())); std::filesystem::remove_all(disk_cache_path()); } } From 8556194be71583a12ab04831f0def23fd234070a Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:43:58 +0100 Subject: [PATCH 04/86] try to fix msvc again --- nucleus/tile_scheduler/Scheduler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nucleus/tile_scheduler/Scheduler.cpp b/nucleus/tile_scheduler/Scheduler.cpp index 42f664cb..0397d182 100644 --- a/nucleus/tile_scheduler/Scheduler.cpp +++ b/nucleus/tile_scheduler/Scheduler.cpp @@ -235,7 +235,7 @@ void Scheduler::persist_tiles() if (!r.has_value()) { qDebug() << QString("Writing tiles to disk into %1 failed: %2. Removing all files.") - .arg(QString::fromStdString(disk_cache_path())) + .arg(QString::fromStdString(disk_cache_path().string())) .arg(QString::fromStdString(r.error())); std::filesystem::remove_all(disk_cache_path()); } @@ -278,7 +278,7 @@ void Scheduler::read_disk_cache() update_stats(); } else { qDebug() << QString("Reading tiles from disk cache (%s) failed: \n%s\nRemoving all files.") - .arg(QString::fromStdString(disk_cache_path())) + .arg(QString::fromStdString(disk_cache_path().string())) .arg(QString::fromStdString(r.error())); std::filesystem::remove_all(disk_cache_path()); } From ad5ddbf416194d3ebed69bcda1f46afeaf521ad9 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:49:19 +0100 Subject: [PATCH 05/86] ci: separate out linux and windows builds, build clang on linux --- .github/workflows/ci.yml | 112 ---------------------------------- .github/workflows/linux.yml | 66 ++++++++++++++++++++ .github/workflows/windows.yml | 65 ++++++++++++++++++++ 3 files changed, 131 insertions(+), 112 deletions(-) delete mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/linux.yml create mode 100644 .github/workflows/windows.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index 6d4da5c8..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,112 +0,0 @@ -name: CI - -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -jobs: - build: - runs-on: ${{ matrix.os }} - defaults: - run: - shell: ${{ matrix.shell }} - - strategy: - fail-fast: false - matrix: - #os: [ubuntu-latest] - os: [ubuntu-latest, windows-latest] - #os: [windows-latest] - build_type: [Release] - include: - - os: windows-latest - arch: 'win64_msvc2019_64' - host: 'windows' - shell: 'powershell' - #shell: 'cmd' - #shell: 'msys2 {0}' - - os: ubuntu-latest - arch: 'gcc_64' - host: 'linux' - shell: 'bash' - - steps: - - uses: actions/checkout@v3 - with: - submodules: 'true' - - - name: Install ninja-build tool (must be after Qt due PATH changes) - uses: turtlesec-no/get-ninja@main - - - name: Make sure MSVC is found when Ninja generator is in use - if: matrix.os == 'windows-latest' - uses: ilammy/msvc-dev-cmd@v1 - - #- name: Install MSYS2 - #if: matrix.os == 'windows-latest' - #uses: msys2/setup-msys2@v2 - #with: - #install: mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake git - #msystem: mingw64 - #release: false - - - name: Install Linux Dependencies - if: matrix.os == 'ubuntu-latest' - run: sudo apt-get install -y build-essential libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 - - - name: Install 7zip - if: matrix.os == 'windows-latest' - run: choco install 7zip.install - - - name: Install Mesa - if: matrix.os == 'windows-latest' - shell: cmd - run: | - curl.exe -L --output mesa.7z --url https://github.com/pal1000/mesa-dist-win/releases/download/20.3.2/mesa3d-20.3.2-release-msvc.7z - "C:\Program Files\7-Zip\7z.exe" x mesa.7z - mklink opengl32.dll "x64\opengl32.dll" - mklink libglapi.dll "x64\libglapi.dll" - - - name: Install Qt - uses: jurplel/install-qt-action@v3 - with: - aqtversion: '==3.1.*' - version: '6.6.1' - host: ${{ matrix.host }} - target: 'desktop' - arch: ${{ matrix.arch }} - dir: '${{github.workspace}}/qt' - install-deps: 'true' - modules: 'qtcharts qtpositioning' - - - name: Configure - env: - CMAKE_PREFIX_PATH: ${{env.Qt6_Dir}}/lib/cmake - run: cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false -B ./build - - - name: Build - run: cmake --build ./build - - - name: Unittests on Linux - if: matrix.os == 'ubuntu-latest' - env: - QT_QPA_PLATFORM: offscreen - DISPLAY: :1 - run: | - ./build/alp_external/radix/unittests/unittests_radix - ./build/unittests/nucleus/unittests_nucleus - Xvfb :1 -screen 0 1024x768x16 & - sleep 5 - ./build/unittests/gl_engine/unittests_gl_engine - - - name: Unittests on Windows - if: matrix.os == 'windows-latest' - env: - MESA_GL_VERSION_OVERRIDE: 3.3 - run: | - ./build/alp_external/radix/unittests/unittests_radix.exe - ./build/unittests/unittests_nucleus.exe - ./build/unittests/unittests_gl_engine.exe - diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 00000000..ae1ecd99 --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,66 @@ +name: Linux tests + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + strategy: + fail-fast: false + matrix: + compiler: [gcc, clang] + build_type: [Release] + include: + - compiler: gcc + CC: '/usr/bin/gcc' + CXX: '/usr/bin/g++' + - compiler: clang + CC: '/usr/bin/clang' + CXX: '/usr/bin/clang++' + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v3 + with: + submodules: 'true' + + - name: Install Linux Dependencies + run: | + sudo apt-get install -y build-essential ninja-build libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 + + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + aqtversion: '==3.1.*' + version: '6.6.1' + host: 'linux' + target: 'desktop' + arch: 'gcc_64' + dir: '${{github.workspace}}/qt' + install-deps: 'true' + modules: 'qtcharts qtpositioning' + + - name: Configure + env: + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} + CMAKE_PREFIX_PATH: ${{env.Qt6_Dir}}/lib/cmake + run: cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false -B ./build + + - name: Build + run: cmake --build ./build + + - name: Unittests on Linux + env: + QT_QPA_PLATFORM: offscreen + DISPLAY: :1 + run: | + ./build/alp_external/radix/unittests/unittests_radix + ./build/unittests/nucleus/unittests_nucleus + Xvfb :1 -screen 0 1024x768x16 & + sleep 5 + ./build/unittests/gl_engine/unittests_gl_engine diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 00000000..3e6aecb0 --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,65 @@ +name: Windows Tests + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +jobs: + build: + runs-on: windows-latest + defaults: + run: + shell: 'powershell' + + steps: + - uses: actions/checkout@v3 + with: + submodules: 'true' + + - name: Install ninja-build tool (must be after Qt due PATH changes) + uses: turtlesec-no/get-ninja@main + + - name: Make sure MSVC is found when Ninja generator is in use + uses: ilammy/msvc-dev-cmd@v1 + + - name: Install 7zip + run: choco install 7zip.install + + - name: Install Mesa + shell: cmd + run: | + curl.exe -L --output mesa.7z --url https://github.com/pal1000/mesa-dist-win/releases/download/20.3.2/mesa3d-20.3.2-release-msvc.7z + "C:\Program Files\7-Zip\7z.exe" x mesa.7z + mklink opengl32.dll "x64\opengl32.dll" + mklink libglapi.dll "x64\libglapi.dll" + + - name: Install Qt + uses: jurplel/install-qt-action@v3 + with: + aqtversion: '==3.1.*' + version: '6.6.1' + host: windows-latest + target: 'desktop' + arch: 'win64_msvc2019_64' + dir: '${{github.workspace}}/qt' + install-deps: 'true' + modules: 'qtcharts qtpositioning' + + - name: Configure + env: + CMAKE_PREFIX_PATH: ${{env.Qt6_Dir}}/lib/cmake + run: cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false -B ./build + + - name: Build + run: cmake --build ./build + + - name: Unittests on Windows + env: + MESA_GL_VERSION_OVERRIDE: 3.3 + run: | + ./build/alp_external/radix/unittests/unittests_radix.exe + ./build/unittests/unittests_nucleus.exe + ./build/unittests/unittests_gl_engine.exe + From c7371f4c2482cf9642ca18bc6564d676e1482096 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 16:53:32 +0100 Subject: [PATCH 06/86] ci: correct windows host name --- .github/workflows/windows.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 3e6aecb0..c700d282 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -40,7 +40,7 @@ jobs: with: aqtversion: '==3.1.*' version: '6.6.1' - host: windows-latest + host: windows target: 'desktop' arch: 'win64_msvc2019_64' dir: '${{github.workspace}}/qt' From be53a2f6fe3b70811cfecf7b9bc13bac7c8dbfa0 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:01:55 +0100 Subject: [PATCH 07/86] update to catch 3.5.1, maybe it fixes compiler errors on linux + clang --- cmake/alp_add_unittest.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cmake/alp_add_unittest.cmake b/cmake/alp_add_unittest.cmake index 7b3f23ea..c8205fd6 100644 --- a/cmake/alp_add_unittest.cmake +++ b/cmake/alp_add_unittest.cmake @@ -18,7 +18,7 @@ find_package(Qt6 REQUIRED COMPONENTS Test) if (NOT TARGET Catch2) - alp_add_git_repository(catch2 URL https://github.com/catchorg/Catch2.git COMMITISH v3.4.0) + alp_add_git_repository(catch2 URL https://github.com/catchorg/Catch2.git COMMITISH v3.5.1) endif() if (EMSCRIPTEN AND ALP_ENABLE_THREADING) From 8ff05874127c2d95f2214125c474ef171af3bd84 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:12:03 +0100 Subject: [PATCH 08/86] try clang15, maybe it fixes compiler errors on linux + clang --- .github/workflows/linux.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index ae1ecd99..76f1a198 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -18,8 +18,8 @@ jobs: CC: '/usr/bin/gcc' CXX: '/usr/bin/g++' - compiler: clang - CC: '/usr/bin/clang' - CXX: '/usr/bin/clang++' + CC: '/usr/bin/clang-15' + CXX: '/usr/bin/clang++-15' runs-on: ubuntu-latest @@ -30,7 +30,7 @@ jobs: - name: Install Linux Dependencies run: | - sudo apt-get install -y build-essential ninja-build libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 + sudo apt-get install -y build-essential ninja-build clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 - name: Install Qt uses: jurplel/install-qt-action@v3 From 5008dd9670ed57cbacab19682b3d43507a6d17a9 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:18:02 +0100 Subject: [PATCH 09/86] also test on clang 17 --- .github/workflows/linux.yml | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 76f1a198..3fcb25d1 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -11,15 +11,18 @@ jobs: strategy: fail-fast: false matrix: - compiler: [gcc, clang] + compiler: [gcc, clang15, clang17] build_type: [Release] include: - compiler: gcc CC: '/usr/bin/gcc' CXX: '/usr/bin/g++' - - compiler: clang + - compiler: clang15 CC: '/usr/bin/clang-15' CXX: '/usr/bin/clang++-15' + - compiler: clang17 + CC: '/usr/bin/clang-17' + CXX: '/usr/bin/clang++-17' runs-on: ubuntu-latest @@ -28,6 +31,13 @@ jobs: with: submodules: 'true' + - name: Install Clang 17 + if: matrix.compiler == 'clang17' + run: | + wget https://apt.llvm.org/llvm.sh + chmod +x ./llvm.sh + sudo ./llvm.sh 17 + - name: Install Linux Dependencies run: | sudo apt-get install -y build-essential ninja-build clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 From 317c0aef02b3c155c2b219d423bc07763f0d6e5a Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:21:58 +0100 Subject: [PATCH 10/86] enable asserts and sanitzer on native builds --- .github/workflows/linux.yml | 8 +++++++- .github/workflows/windows.yml | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 3fcb25d1..edf52245 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -59,7 +59,13 @@ jobs: CC: ${{ matrix.CC }} CXX: ${{ matrix.CXX }} CMAKE_PREFIX_PATH: ${{env.Qt6_Dir}}/lib/cmake - run: cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false -B ./build + run: > + cmake -G Ninja + -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -DALP_ENABLE_POSITIONING=false + -DALP_ENABLE_ADDRESS_SANITIZER=ON + -DALP_ENABLE_ASSERTS=ON + -B ./build - name: Build run: cmake --build ./build diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index c700d282..78232f51 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -50,7 +50,13 @@ jobs: - name: Configure env: CMAKE_PREFIX_PATH: ${{env.Qt6_Dir}}/lib/cmake - run: cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false -B ./build + run: > + cmake -G Ninja + -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} + -DALP_ENABLE_POSITIONING=false + -DALP_ENABLE_ADDRESS_SANITIZER=ON + -DALP_ENABLE_ASSERTS=ON + -B ./build - name: Build run: cmake --build ./build From 640a2cc6bb65ab29f0696536f967aae539045bfe Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:37:43 +0100 Subject: [PATCH 11/86] build debug for better traces from sanitizers --- .github/workflows/linux.yml | 1 + .github/workflows/windows.yml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index edf52245..1ec16611 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -65,6 +65,7 @@ jobs: -DALP_ENABLE_POSITIONING=false -DALP_ENABLE_ADDRESS_SANITIZER=ON -DALP_ENABLE_ASSERTS=ON + -DCMAKE_BUILD_TYPE=Debug -B ./build - name: Build diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 78232f51..88241478 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -56,10 +56,11 @@ jobs: -DALP_ENABLE_POSITIONING=false -DALP_ENABLE_ADDRESS_SANITIZER=ON -DALP_ENABLE_ASSERTS=ON + -DCMAKE_BUILD_TYPE=Debug -B ./build - name: Build - run: cmake --build ./build + run: cmake --build ./build --config Debug - name: Unittests on Windows env: From 7dc44682d79c51a6de00eadd178286db36a99e36 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:47:41 +0100 Subject: [PATCH 12/86] address sanitizer doesn't work for leaks in system libs. need to ignore them --- .github/workflows/linux.yml | 2 -- .github/workflows/windows.yml | 2 -- 2 files changed, 4 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 1ec16611..a1b1329c 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -63,9 +63,7 @@ jobs: cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false - -DALP_ENABLE_ADDRESS_SANITIZER=ON -DALP_ENABLE_ASSERTS=ON - -DCMAKE_BUILD_TYPE=Debug -B ./build - name: Build diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 88241478..4126d27c 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -54,9 +54,7 @@ jobs: cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false - -DALP_ENABLE_ADDRESS_SANITIZER=ON -DALP_ENABLE_ASSERTS=ON - -DCMAKE_BUILD_TYPE=Debug -B ./build - name: Build From 4bfa2cbb90328b472635efa6a29d5c6b07759da9 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 22:00:17 +0100 Subject: [PATCH 13/86] list packages, try update, list again. try again with sanitizer. locally it works --- .github/workflows/linux.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a1b1329c..d0525c61 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -41,6 +41,11 @@ jobs: - name: Install Linux Dependencies run: | sudo apt-get install -y build-essential ninja-build clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 + apt list --installed | grep libstdc++ + sudo apt-get update + sudo apt-get upgrade -y + apt list --installed | grep libstdc++ + - name: Install Qt uses: jurplel/install-qt-action@v3 @@ -64,6 +69,8 @@ jobs: -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false -DALP_ENABLE_ASSERTS=ON + -DALP_ENABLE_ADDRESS_SANITIZER=ON + -DCMAKE_BUILD_TYPE=Debug -B ./build - name: Build From d7db2cef639f381c31c67efa06384f11841b6441 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 11:02:57 +0100 Subject: [PATCH 14/86] correctly clear depth encoding buffer --- gl_engine/Window.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gl_engine/Window.cpp b/gl_engine/Window.cpp index f257b960..6dcf22eb 100644 --- a/gl_engine/Window.cpp +++ b/gl_engine/Window.cpp @@ -249,8 +249,8 @@ void Window::paint(QOpenGLFramebufferObject* framebuffer) const GLuint clearNormalColor[2] = {0u, 0u}; f->glClearBufferuiv(GL_COLOR, 2, clearNormalColor); // Clear Encoded-Depth Buffer - const GLuint clearEncDepthColor[1] = {0u}; - f->glClearBufferuiv(GL_COLOR, 3, clearEncDepthColor); + const GLfloat clearEncDepthColor[] = { 0.0f, 0.0f, 0.0f, 0.0f }; + f->glClearBufferfv(GL_COLOR, 3, clearEncDepthColor); // Clear Depth-Buffer //f->glClearDepthf(0.0f); // for reverse z f->glClear(GL_DEPTH_BUFFER_BIT); From aea2ad52eff4126e1022a34ef1da717d7f5d8736 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 11:05:47 +0100 Subject: [PATCH 15/86] fix debug output string --- nucleus/tile_scheduler/Scheduler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nucleus/tile_scheduler/Scheduler.cpp b/nucleus/tile_scheduler/Scheduler.cpp index 0397d182..c90b8cd9 100644 --- a/nucleus/tile_scheduler/Scheduler.cpp +++ b/nucleus/tile_scheduler/Scheduler.cpp @@ -277,7 +277,7 @@ void Scheduler::read_disk_cache() if (r.has_value()) { update_stats(); } else { - qDebug() << QString("Reading tiles from disk cache (%s) failed: \n%s\nRemoving all files.") + qDebug() << QString("Reading tiles from disk cache (%1) failed: \n%2\nRemoving all files.") .arg(QString::fromStdString(disk_cache_path().string())) .arg(QString::fromStdString(r.error())); std::filesystem::remove_all(disk_cache_path()); From aebb420d584448f330f685fd8fca8abef0ca3a26 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 12:38:16 +0100 Subject: [PATCH 16/86] remove unnecessary compiler flags --- nucleus/CMakeLists.txt | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/nucleus/CMakeLists.txt b/nucleus/CMakeLists.txt index 2dce2408..e53699bc 100644 --- a/nucleus/CMakeLists.txt +++ b/nucleus/CMakeLists.txt @@ -102,13 +102,10 @@ qt_add_library(nucleus STATIC target_include_directories(nucleus PRIVATE . PUBLIC ${CMAKE_SOURCE_DIR}) target_link_libraries(nucleus PUBLIC radix Qt::Core Qt::Gui Qt::Network Qt::Svg fmt::fmt zppbits tl_expected nucleus_version) -if (EMSCRIPTEN) - target_compile_options(nucleus PUBLIC -O3) - target_link_options(nucleus PUBLIC -O3) -endif() -if (ALP_ENABLE_ASSERTS) - target_compile_options(nucleus PUBLIC "-U NDEBUG") -endif() +# if (EMSCRIPTEN) +# # target_compile_options(nucleus PUBLIC -fwasm-exceptions) +# # target_link_options(nucleus PUBLIC -fwasm-exceptions) +# endif() if (ALP_ENABLE_THREADING) target_compile_definitions(nucleus PUBLIC "ALP_ENABLE_THREADING") endif() From bc2f76968cbfa4765f912a0e8a03d68e3bdfeef9 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:02:41 +0100 Subject: [PATCH 17/86] try suppressing leak sanitizer from other libs --- .github/workflows/linux.yml | 9 +++------ sanitizer_supressions/linux_leak.supp | 4 ++++ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 sanitizer_supressions/linux_leak.supp diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index d0525c61..32d5c51e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -40,12 +40,7 @@ jobs: - name: Install Linux Dependencies run: | - sudo apt-get install -y build-essential ninja-build clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 - apt list --installed | grep libstdc++ - sudo apt-get update - sudo apt-get upgrade -y - apt list --installed | grep libstdc++ - + sudo apt-get install -y build-essential ninja-build lld clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 - name: Install Qt uses: jurplel/install-qt-action@v3 @@ -71,6 +66,7 @@ jobs: -DALP_ENABLE_ASSERTS=ON -DALP_ENABLE_ADDRESS_SANITIZER=ON -DCMAKE_BUILD_TYPE=Debug + -DALP_USE_LLVM_LINKER=ON -B ./build - name: Build @@ -80,6 +76,7 @@ jobs: env: QT_QPA_PLATFORM: offscreen DISPLAY: :1 + LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus diff --git a/sanitizer_supressions/linux_leak.supp b/sanitizer_supressions/linux_leak.supp new file mode 100644 index 00000000..fa893459 --- /dev/null +++ b/sanitizer_supressions/linux_leak.supp @@ -0,0 +1,4 @@ +leak:dbus +leak:fontconfig +leak:icui18n +leak:gallium From 9e882952f3db300a1b28ebb739bdcce76749c37e Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:13:55 +0100 Subject: [PATCH 18/86] try "Don't close loaded libraries for better sanitizer output" --- .github/workflows/linux.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 32d5c51e..b421d539 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -53,7 +53,7 @@ jobs: dir: '${{github.workspace}}/qt' install-deps: 'true' modules: 'qtcharts qtpositioning' - + - name: Configure env: CC: ${{ matrix.CC }} @@ -72,12 +72,20 @@ jobs: - name: Build run: cmake --build ./build + - name: Don't close loaded libraries for better sanitizer output + run: | + echo "#include " >> dlclose.c + echo "int dlclose(void*) { return 0; }" >> dlclose.c + clang++ --shared dlclose.c -o libdlclose.so + - name: Unittests on Linux env: QT_QPA_PLATFORM: offscreen DISPLAY: :1 + LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | + ll ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus Xvfb :1 -screen 0 1024x768x16 & From 412df412700e93cb0240291f0bf90a4d57011863 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:16:30 +0100 Subject: [PATCH 19/86] compile with $CXX --- .github/workflows/linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index b421d539..17ca58e4 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -76,7 +76,7 @@ jobs: run: | echo "#include " >> dlclose.c echo "int dlclose(void*) { return 0; }" >> dlclose.c - clang++ --shared dlclose.c -o libdlclose.so + $CXX --shared dlclose.c -o libdlclose.so - name: Unittests on Linux env: From 911cb4b982f7e3f5ceaf50a5823a531581f6ffda Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:19:28 +0100 Subject: [PATCH 20/86] compile with $CC and use ls -l --- .github/workflows/linux.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 17ca58e4..2b975fd4 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -76,7 +76,7 @@ jobs: run: | echo "#include " >> dlclose.c echo "int dlclose(void*) { return 0; }" >> dlclose.c - $CXX --shared dlclose.c -o libdlclose.so + $CC --shared dlclose.c -o libdlclose.so - name: Unittests on Linux env: @@ -85,7 +85,7 @@ jobs: LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | - ll + ls -l ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus Xvfb :1 -screen 0 1024x768x16 & From 18a3bed30e7a4ac86091512c4189d84002165a43 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:25:34 +0100 Subject: [PATCH 21/86] fix $CC and list build files --- .github/workflows/linux.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2b975fd4..6341342b 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -70,9 +70,17 @@ jobs: -B ./build - name: Build - run: cmake --build ./build + env: + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} + run: | + ls -lt ./build + cmake --build ./build - name: Don't close loaded libraries for better sanitizer output + env: + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} run: | echo "#include " >> dlclose.c echo "int dlclose(void*) { return 0; }" >> dlclose.c From 7c25ec000f9947bf9a548ca70b7ecf5ba8ab36e3 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:45:31 +0100 Subject: [PATCH 22/86] link main executable with asan, as per https://stackoverflow.com/a/59894695 --- app/CMakeLists.txt | 10 ++++++++++ plain_renderer/CMakeLists.txt | 10 ++++++++++ unittests/gl_engine/CMakeLists.txt | 9 +++++++++ unittests/nucleus/CMakeLists.txt | 10 ++++++++++ 4 files changed, 39 insertions(+) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index dadcc372..c15a2116 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -155,3 +155,13 @@ if (EMSCRIPTEN) endif() install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() + +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (alpineapp PUBLIC /fsanitize=address) + else() + target_compile_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() diff --git a/plain_renderer/CMakeLists.txt b/plain_renderer/CMakeLists.txt index 948f4c52..dd08a851 100644 --- a/plain_renderer/CMakeLists.txt +++ b/plain_renderer/CMakeLists.txt @@ -51,3 +51,13 @@ if (EMSCRIPTEN) install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() + +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (plain_renderer PUBLIC /fsanitize=address) + else() + target_compile_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() diff --git a/unittests/gl_engine/CMakeLists.txt b/unittests/gl_engine/CMakeLists.txt index 53d9db55..8b7ce8a8 100644 --- a/unittests/gl_engine/CMakeLists.txt +++ b/unittests/gl_engine/CMakeLists.txt @@ -27,3 +27,12 @@ alp_add_unittest(unittests_gl_engine target_link_libraries(unittests_gl_engine PUBLIC gl_engine) +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (unittests_gl_engine PUBLIC /fsanitize=address) + else() + target_compile_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() diff --git a/unittests/nucleus/CMakeLists.txt b/unittests/nucleus/CMakeLists.txt index b114469b..85154cb7 100644 --- a/unittests/nucleus/CMakeLists.txt +++ b/unittests/nucleus/CMakeLists.txt @@ -59,7 +59,17 @@ qt_add_resources(unittests_nucleus "test_data" target_link_libraries(unittests_nucleus PUBLIC nucleus Catch2::Catch2 Qt::Test) target_compile_definitions(unittests_nucleus PUBLIC "ALP_TEST_DATA_DIR=\":/test_data/\"") + if (ANDROID) add_android_openssl_libraries(unittests_nucleus) endif() +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (unittests_nucleus PUBLIC /fsanitize=address) + else() + target_compile_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() From 6ce92e388044ff1971743cba2b9fd597c5a172eb Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:46:24 +0100 Subject: [PATCH 23/86] remove debug output --- .github/workflows/linux.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6341342b..adc79b56 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -74,7 +74,6 @@ jobs: CC: ${{ matrix.CC }} CXX: ${{ matrix.CXX }} run: | - ls -lt ./build cmake --build ./build - name: Don't close loaded libraries for better sanitizer output @@ -93,7 +92,6 @@ jobs: LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | - ls -l ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus Xvfb :1 -screen 0 1024x768x16 & From 3879d644d1622d46a7d192efb25807549feb93c5 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:04:01 +0100 Subject: [PATCH 24/86] Revert "link main executable with asan, as per https://stackoverflow.com/a/59894695" This reverts commit 7c25ec000f9947bf9a548ca70b7ecf5ba8ab36e3. --- app/CMakeLists.txt | 10 ---------- plain_renderer/CMakeLists.txt | 10 ---------- unittests/gl_engine/CMakeLists.txt | 9 --------- unittests/nucleus/CMakeLists.txt | 10 ---------- 4 files changed, 39 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index c15a2116..dadcc372 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -155,13 +155,3 @@ if (EMSCRIPTEN) endif() install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() - -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (alpineapp PUBLIC /fsanitize=address) - else() - target_compile_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() diff --git a/plain_renderer/CMakeLists.txt b/plain_renderer/CMakeLists.txt index dd08a851..948f4c52 100644 --- a/plain_renderer/CMakeLists.txt +++ b/plain_renderer/CMakeLists.txt @@ -51,13 +51,3 @@ if (EMSCRIPTEN) install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() - -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (plain_renderer PUBLIC /fsanitize=address) - else() - target_compile_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() diff --git a/unittests/gl_engine/CMakeLists.txt b/unittests/gl_engine/CMakeLists.txt index 8b7ce8a8..53d9db55 100644 --- a/unittests/gl_engine/CMakeLists.txt +++ b/unittests/gl_engine/CMakeLists.txt @@ -27,12 +27,3 @@ alp_add_unittest(unittests_gl_engine target_link_libraries(unittests_gl_engine PUBLIC gl_engine) -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (unittests_gl_engine PUBLIC /fsanitize=address) - else() - target_compile_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() diff --git a/unittests/nucleus/CMakeLists.txt b/unittests/nucleus/CMakeLists.txt index 85154cb7..b114469b 100644 --- a/unittests/nucleus/CMakeLists.txt +++ b/unittests/nucleus/CMakeLists.txt @@ -59,17 +59,7 @@ qt_add_resources(unittests_nucleus "test_data" target_link_libraries(unittests_nucleus PUBLIC nucleus Catch2::Catch2 Qt::Test) target_compile_definitions(unittests_nucleus PUBLIC "ALP_TEST_DATA_DIR=\":/test_data/\"") - if (ANDROID) add_android_openssl_libraries(unittests_nucleus) endif() -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (unittests_nucleus PUBLIC /fsanitize=address) - else() - target_compile_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() From a07cca2ed12077478364a41580dd7e0514828899 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:16:05 +0100 Subject: [PATCH 25/86] ASAN_OPTIONS: verify_asan_link_order=0 --- .github/workflows/linux.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index adc79b56..5c221c59 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -91,6 +91,7 @@ jobs: DISPLAY: :1 LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp + ASAN_OPTIONS: verify_asan_link_order=0 run: | ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus From 84763b41b13f1051993786d3a89a59d128943077 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:18:09 +0100 Subject: [PATCH 26/86] first attempt at deploy android and webassembly --- .github/workflows/deploy.yml | 161 +++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 .github/workflows/deploy.yml diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..99bec54d --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,161 @@ +name: "webassembly" +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + +# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages +permissions: + contents: read + pages: write + id-token: write + +# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. +# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. +concurrency: + group: "pages" + cancel-in-progress: false + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + qtarch: [wasm_singlethread, wasm_multithread, android_arm64_v8a, android_armv7] + qtversion: ['6.6.1'] + include: + - qtarch: wasm_singlethread + qttarget: 'desktop' + qtmodules: 'qtcharts' + - qtarch: wasm_multithread + qttarget: 'desktop' + qtmodules: 'qtcharts' + - qtarch: android_arm64_v8a + qttarget: 'android' + qtmodules: 'qtcharts qtpositioning' + - qtarch: android_armv7 + qttarget: 'android' + qtmodules: 'qtcharts qtpositioning' + + steps: + - uses: actions/checkout@v3 + + - uses: mymindstorm/setup-emsdk@v13 + if: matrix.qttarget == desktop + with: + version: 3.1.37 + + - name: Install Qt native version (required by android version) + uses: jurplel/install-qt-action@v3 + with: + aqtversion: '==3.1.*' + version: ${{ matrix.qtversion }} + host: linux + target: 'desktop' + arch: gcc_64 + dir: '${{github.workspace}}/qt' + install-deps: 'true' + modules: 'qtcharts qtpositioning' + + - name: Set QT_HOST_PATH + run: echo "QT_HOST_PATH=${Qt6_DIR}" >> "$GITHUB_ENV" + + - name: Install Linux Dependencies + run: sudo apt-get install -y build-essential ninja-build + + - name: Install Qt Webassembly version + uses: jurplel/install-qt-action@v3 + with: + aqtversion: '==3.1.*' + version: ${{ matrix.qtversion }} + host: linux + target: ${{ matrix.qttarget }} + arch: ${{ matrix.qtarch }} + dir: '${{github.workspace}}/qt' + install-deps: 'true' + modules: ${{ matrix.qtmodules }} + + - name: Make qt cross binaries executable + run: | + chmod u+x ${Qt6_DIR}/bin/* + + - name: Verify emcc + if: matrix.qttarget == desktop + run: emcc -v + + - name: Set reusable strings + # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. + id: strings + shell: bash + run: | + echo "build-output-dir=${{ github.workspace }}/build_${{ matrix.qtarch }}" >> "$GITHUB_OUTPUT" + echo "install-dir=${{ github.workspace }}/install/${{ matrix.qtarch }}" >> "$GITHUB_OUTPUT" + + - name: Configure CMake + env: + CMAKE_PREFIX_PATH: ${{env.Qt6_DIR}}/lib/cmake + run: > + ${Qt6_DIR}/bin/qt-cmake + -G Ninja + -B ${{ steps.strings.outputs.build-output-dir }} + -DCMAKE_BUILD_TYPE=Release + -DALP_WWW_INSTALL_DIR=${{ steps.strings.outputs.install-dir }} + -DALP_ENABLE_ASSERTS=ON + -DFMT_INSTALL=OFF + -S ${{ github.workspace }} + + - name: Build + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --target install + + - name: Create artifact + uses: actions/upload-artifact@v4 + with: + name: install_files + path: ${{ github.workspace }}/install/ + if-no-files-found: error + + #- name: Create index.html + #run: | + #echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo " AlpineMaps build" >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html + #echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html + + #- name: Create Pages artifact + #uses: actions/upload-pages-artifact@v3 + #with: + #path: ${{ steps.strings.outputs.install-dir }} + + #- name: Debug output + #run: echo ${{ github.event_name }} + + #deploy: + #if: github.event_name == 'push' + #needs: build + #environment: + #name: github-pages + #url: ${{ steps.deployment.outputs.page_url }} + #runs-on: ubuntu-latest + #steps: + #- name: Setup Pages + #uses: actions/configure-pages@v4 + + #- name: Deploy to GitHub Pages + #id: deployment + #uses: actions/deploy-pages@v4 + + #- name: Debug output + #run: echo ${{ steps.deployment.outputs.page_url }} From e1f7085b3755ee9884404df6d906ae41b63895e9 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 10 Jan 2024 22:00:17 +0100 Subject: [PATCH 27/86] list packages, try update, list again. try again with sanitizer. locally it works --- .github/workflows/linux.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a1b1329c..d0525c61 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -41,6 +41,11 @@ jobs: - name: Install Linux Dependencies run: | sudo apt-get install -y build-essential ninja-build clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 + apt list --installed | grep libstdc++ + sudo apt-get update + sudo apt-get upgrade -y + apt list --installed | grep libstdc++ + - name: Install Qt uses: jurplel/install-qt-action@v3 @@ -64,6 +69,8 @@ jobs: -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DALP_ENABLE_POSITIONING=false -DALP_ENABLE_ASSERTS=ON + -DALP_ENABLE_ADDRESS_SANITIZER=ON + -DCMAKE_BUILD_TYPE=Debug -B ./build - name: Build From a34e2e81a6965cbed45d8729d453aa01c5b972f8 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:02:41 +0100 Subject: [PATCH 28/86] try suppressing leak sanitizer from other libs --- .github/workflows/linux.yml | 9 +++------ sanitizer_supressions/linux_leak.supp | 4 ++++ 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 sanitizer_supressions/linux_leak.supp diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index d0525c61..32d5c51e 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -40,12 +40,7 @@ jobs: - name: Install Linux Dependencies run: | - sudo apt-get install -y build-essential ninja-build clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 - apt list --installed | grep libstdc++ - sudo apt-get update - sudo apt-get upgrade -y - apt list --installed | grep libstdc++ - + sudo apt-get install -y build-essential ninja-build lld clang-15 libgl1-mesa-dev libxcb-cursor-dev xorg-dev libxrandr-dev libxcursor-dev libudev-dev libopenal-dev libflac-dev libvorbis-dev libgl1-mesa-dev libegl1-mesa-dev libdrm-dev libgbm-dev xvfb libxcb-cursor0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-render-util0 - name: Install Qt uses: jurplel/install-qt-action@v3 @@ -71,6 +66,7 @@ jobs: -DALP_ENABLE_ASSERTS=ON -DALP_ENABLE_ADDRESS_SANITIZER=ON -DCMAKE_BUILD_TYPE=Debug + -DALP_USE_LLVM_LINKER=ON -B ./build - name: Build @@ -80,6 +76,7 @@ jobs: env: QT_QPA_PLATFORM: offscreen DISPLAY: :1 + LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus diff --git a/sanitizer_supressions/linux_leak.supp b/sanitizer_supressions/linux_leak.supp new file mode 100644 index 00000000..fa893459 --- /dev/null +++ b/sanitizer_supressions/linux_leak.supp @@ -0,0 +1,4 @@ +leak:dbus +leak:fontconfig +leak:icui18n +leak:gallium From a293841d288d21ea15767b411975149d7ebfc117 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:13:55 +0100 Subject: [PATCH 29/86] try "Don't close loaded libraries for better sanitizer output" --- .github/workflows/linux.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 32d5c51e..b421d539 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -53,7 +53,7 @@ jobs: dir: '${{github.workspace}}/qt' install-deps: 'true' modules: 'qtcharts qtpositioning' - + - name: Configure env: CC: ${{ matrix.CC }} @@ -72,12 +72,20 @@ jobs: - name: Build run: cmake --build ./build + - name: Don't close loaded libraries for better sanitizer output + run: | + echo "#include " >> dlclose.c + echo "int dlclose(void*) { return 0; }" >> dlclose.c + clang++ --shared dlclose.c -o libdlclose.so + - name: Unittests on Linux env: QT_QPA_PLATFORM: offscreen DISPLAY: :1 + LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | + ll ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus Xvfb :1 -screen 0 1024x768x16 & From a82681cbd352ab118d96570d960416175500de14 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:16:30 +0100 Subject: [PATCH 30/86] compile with $CXX --- .github/workflows/linux.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index b421d539..17ca58e4 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -76,7 +76,7 @@ jobs: run: | echo "#include " >> dlclose.c echo "int dlclose(void*) { return 0; }" >> dlclose.c - clang++ --shared dlclose.c -o libdlclose.so + $CXX --shared dlclose.c -o libdlclose.so - name: Unittests on Linux env: From c4a84112c2cbb15d8198133fa97f3810b1a5247b Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:19:28 +0100 Subject: [PATCH 31/86] compile with $CC and use ls -l --- .github/workflows/linux.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 17ca58e4..2b975fd4 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -76,7 +76,7 @@ jobs: run: | echo "#include " >> dlclose.c echo "int dlclose(void*) { return 0; }" >> dlclose.c - $CXX --shared dlclose.c -o libdlclose.so + $CC --shared dlclose.c -o libdlclose.so - name: Unittests on Linux env: @@ -85,7 +85,7 @@ jobs: LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | - ll + ls -l ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus Xvfb :1 -screen 0 1024x768x16 & From f509995efec47cffa038053c54a5e3d94e08cae5 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:25:34 +0100 Subject: [PATCH 32/86] fix $CC and list build files --- .github/workflows/linux.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 2b975fd4..6341342b 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -70,9 +70,17 @@ jobs: -B ./build - name: Build - run: cmake --build ./build + env: + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} + run: | + ls -lt ./build + cmake --build ./build - name: Don't close loaded libraries for better sanitizer output + env: + CC: ${{ matrix.CC }} + CXX: ${{ matrix.CXX }} run: | echo "#include " >> dlclose.c echo "int dlclose(void*) { return 0; }" >> dlclose.c From aa3cd23ddff85f288cf83f857f644165ce6bb329 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:45:31 +0100 Subject: [PATCH 33/86] link main executable with asan, as per https://stackoverflow.com/a/59894695 --- app/CMakeLists.txt | 10 ++++++++++ plain_renderer/CMakeLists.txt | 10 ++++++++++ unittests/gl_engine/CMakeLists.txt | 9 +++++++++ unittests/nucleus/CMakeLists.txt | 10 ++++++++++ 4 files changed, 39 insertions(+) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index dadcc372..c15a2116 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -155,3 +155,13 @@ if (EMSCRIPTEN) endif() install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() + +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (alpineapp PUBLIC /fsanitize=address) + else() + target_compile_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() diff --git a/plain_renderer/CMakeLists.txt b/plain_renderer/CMakeLists.txt index 948f4c52..dd08a851 100644 --- a/plain_renderer/CMakeLists.txt +++ b/plain_renderer/CMakeLists.txt @@ -51,3 +51,13 @@ if (EMSCRIPTEN) install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() + +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (plain_renderer PUBLIC /fsanitize=address) + else() + target_compile_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() diff --git a/unittests/gl_engine/CMakeLists.txt b/unittests/gl_engine/CMakeLists.txt index 53d9db55..8b7ce8a8 100644 --- a/unittests/gl_engine/CMakeLists.txt +++ b/unittests/gl_engine/CMakeLists.txt @@ -27,3 +27,12 @@ alp_add_unittest(unittests_gl_engine target_link_libraries(unittests_gl_engine PUBLIC gl_engine) +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (unittests_gl_engine PUBLIC /fsanitize=address) + else() + target_compile_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() diff --git a/unittests/nucleus/CMakeLists.txt b/unittests/nucleus/CMakeLists.txt index b114469b..85154cb7 100644 --- a/unittests/nucleus/CMakeLists.txt +++ b/unittests/nucleus/CMakeLists.txt @@ -59,7 +59,17 @@ qt_add_resources(unittests_nucleus "test_data" target_link_libraries(unittests_nucleus PUBLIC nucleus Catch2::Catch2 Qt::Test) target_compile_definitions(unittests_nucleus PUBLIC "ALP_TEST_DATA_DIR=\":/test_data/\"") + if (ANDROID) add_android_openssl_libraries(unittests_nucleus) endif() +if (ALP_ENABLE_ADDRESS_SANITIZER) + message(NOTICE "building with address sanitizer enabled") + if(MSVC) + target_compile_options (unittests_nucleus PUBLIC /fsanitize=address) + else() + target_compile_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) + target_link_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) + endif() +endif() From 058f18937262ae153f358a7018c4ddef252bf63e Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:46:24 +0100 Subject: [PATCH 34/86] remove debug output --- .github/workflows/linux.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 6341342b..adc79b56 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -74,7 +74,6 @@ jobs: CC: ${{ matrix.CC }} CXX: ${{ matrix.CXX }} run: | - ls -lt ./build cmake --build ./build - name: Don't close loaded libraries for better sanitizer output @@ -93,7 +92,6 @@ jobs: LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp run: | - ls -l ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus Xvfb :1 -screen 0 1024x768x16 & From c45c16ff5aa8245f56c7fb2da79e51f8a3e4cb89 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:04:01 +0100 Subject: [PATCH 35/86] Revert "link main executable with asan, as per https://stackoverflow.com/a/59894695" This reverts commit 7c25ec000f9947bf9a548ca70b7ecf5ba8ab36e3. --- app/CMakeLists.txt | 10 ---------- plain_renderer/CMakeLists.txt | 10 ---------- unittests/gl_engine/CMakeLists.txt | 9 --------- unittests/nucleus/CMakeLists.txt | 10 ---------- 4 files changed, 39 deletions(-) diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index c15a2116..dadcc372 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -155,13 +155,3 @@ if (EMSCRIPTEN) endif() install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() - -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (alpineapp PUBLIC /fsanitize=address) - else() - target_compile_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(alpineapp PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() diff --git a/plain_renderer/CMakeLists.txt b/plain_renderer/CMakeLists.txt index dd08a851..948f4c52 100644 --- a/plain_renderer/CMakeLists.txt +++ b/plain_renderer/CMakeLists.txt @@ -51,13 +51,3 @@ if (EMSCRIPTEN) install(FILES ${ALP_INSTALL_FILES} DESTINATION ${ALP_WWW_INSTALL_DIR}) endif() - -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (plain_renderer PUBLIC /fsanitize=address) - else() - target_compile_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(plain_renderer PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() diff --git a/unittests/gl_engine/CMakeLists.txt b/unittests/gl_engine/CMakeLists.txt index 8b7ce8a8..53d9db55 100644 --- a/unittests/gl_engine/CMakeLists.txt +++ b/unittests/gl_engine/CMakeLists.txt @@ -27,12 +27,3 @@ alp_add_unittest(unittests_gl_engine target_link_libraries(unittests_gl_engine PUBLIC gl_engine) -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (unittests_gl_engine PUBLIC /fsanitize=address) - else() - target_compile_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(unittests_gl_engine PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() diff --git a/unittests/nucleus/CMakeLists.txt b/unittests/nucleus/CMakeLists.txt index 85154cb7..b114469b 100644 --- a/unittests/nucleus/CMakeLists.txt +++ b/unittests/nucleus/CMakeLists.txt @@ -59,17 +59,7 @@ qt_add_resources(unittests_nucleus "test_data" target_link_libraries(unittests_nucleus PUBLIC nucleus Catch2::Catch2 Qt::Test) target_compile_definitions(unittests_nucleus PUBLIC "ALP_TEST_DATA_DIR=\":/test_data/\"") - if (ANDROID) add_android_openssl_libraries(unittests_nucleus) endif() -if (ALP_ENABLE_ADDRESS_SANITIZER) - message(NOTICE "building with address sanitizer enabled") - if(MSVC) - target_compile_options (unittests_nucleus PUBLIC /fsanitize=address) - else() - target_compile_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) - target_link_options(unittests_nucleus PUBLIC -fno-omit-frame-pointer -fsanitize=address) - endif() -endif() From 092696a3b7e55c12e1cd74d12241aab6bd183be4 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:16:05 +0100 Subject: [PATCH 36/86] ASAN_OPTIONS: verify_asan_link_order=0 --- .github/workflows/linux.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index adc79b56..5c221c59 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -91,6 +91,7 @@ jobs: DISPLAY: :1 LD_PRELOAD: ./libdlclose.so LSAN_OPTIONS: suppressions=./sanitizer_supressions/linux_leak.supp + ASAN_OPTIONS: verify_asan_link_order=0 run: | ./build/alp_external/radix/unittests/unittests_radix ./build/unittests/nucleus/unittests_nucleus From 888649160e3cee7422579dc5c162ec9305cd505c Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:31:13 +0100 Subject: [PATCH 37/86] name deploy ci workflow --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 99bec54d..a160da76 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -1,4 +1,4 @@ -name: "webassembly" +name: "Deploy" on: push: branches: [ "main" ] From 27667e21f961c294b5f16ff244494c9922b54af8 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:32:33 +0100 Subject: [PATCH 38/86] fix syntax --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a160da76..ac00b30a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -43,7 +43,7 @@ jobs: - uses: actions/checkout@v3 - uses: mymindstorm/setup-emsdk@v13 - if: matrix.qttarget == desktop + if: matrix.qttarget == 'desktop' with: version: 3.1.37 From 601f97166cf2c262b704f3745e79668324b4d972 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:35:37 +0100 Subject: [PATCH 39/86] fix syntax 2 --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ac00b30a..edbb691f 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -82,7 +82,7 @@ jobs: chmod u+x ${Qt6_DIR}/bin/* - name: Verify emcc - if: matrix.qttarget == desktop + if: matrix.qttarget == 'desktop' run: emcc -v - name: Set reusable strings From 50337ec529d3f76e278c2933164320a8dea5c53c Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:56:26 +0100 Subject: [PATCH 40/86] change concurrency group --- .github/workflows/deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index edbb691f..27b7e120 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -14,8 +14,8 @@ permissions: # Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. # However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: - group: "pages" - cancel-in-progress: false + group: "deploy" + cancel-in-progress: true jobs: build: From f21a8ec20bb5bd555e54b42db4bc2f6320fe0f65 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:56:45 +0100 Subject: [PATCH 41/86] fix naming --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 27b7e120..e4d541c3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -65,7 +65,7 @@ jobs: - name: Install Linux Dependencies run: sudo apt-get install -y build-essential ninja-build - - name: Install Qt Webassembly version + - name: Install Qt crosscompile target version uses: jurplel/install-qt-action@v3 with: aqtversion: '==3.1.*' From 28a46a5492191bf52897a010dfb3be644c334d40 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 15:58:15 +0100 Subject: [PATCH 42/86] try to fix builds - try to fix wasm multithread by setting its cmake parameter - try to fix android by not installing (cmake install config is wrong), but copying it. --- .github/workflows/deploy.yml | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e4d541c3..930ba501 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -29,9 +29,12 @@ jobs: - qtarch: wasm_singlethread qttarget: 'desktop' qtmodules: 'qtcharts' + additional_build_flags: '--target install' - qtarch: wasm_multithread qttarget: 'desktop' qtmodules: 'qtcharts' + additional_cmake_flags: '-DALP_ENABLE_THREADING=ON' + additional_build_flags: '--target install' - qtarch: android_arm64_v8a qttarget: 'android' qtmodules: 'qtcharts qtpositioning' @@ -104,10 +107,15 @@ jobs: -DALP_WWW_INSTALL_DIR=${{ steps.strings.outputs.install-dir }} -DALP_ENABLE_ASSERTS=ON -DFMT_INSTALL=OFF + ${{ matrix.additional_cmake_flags }} -S ${{ github.workspace }} - name: Build - run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --target install + run: cmake --build ${{ steps.strings.outputs.build-output-dir }} ${{ matrix.additional_build_flags }} + + - name: Copy android packages + if: matrix.qttarget == 'android' + run: cp -r ${{ steps.strings.outputs.build-output-dir }}/app/android-build//build/outputs/apk ${{ steps.strings.outputs.install-dir }} - name: Create artifact uses: actions/upload-artifact@v4 From 4d358867c94f5b567b13ba3acb123acdd813f2a4 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 16:14:18 +0100 Subject: [PATCH 43/86] try to fix android copy command --- .github/workflows/deploy.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 930ba501..b50e520d 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -115,7 +115,9 @@ jobs: - name: Copy android packages if: matrix.qttarget == 'android' - run: cp -r ${{ steps.strings.outputs.build-output-dir }}/app/android-build//build/outputs/apk ${{ steps.strings.outputs.install-dir }} + run: | + mkdir -p ${{ steps.strings.outputs.install-dir }} + cp -r ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/* ${{ steps.strings.outputs.install-dir }} - name: Create artifact uses: actions/upload-artifact@v4 From 36965f6bd81dcb4330937c233e72e05bafe342f0 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 16:15:50 +0100 Subject: [PATCH 44/86] artifacts need different names --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b50e520d..20f60ec1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -122,7 +122,7 @@ jobs: - name: Create artifact uses: actions/upload-artifact@v4 with: - name: install_files + name: install_files_${{ matrix.qtarch }} path: ${{ github.workspace }}/install/ if-no-files-found: error From 4f4709a72ad913cae362d609cdefd6b303cf78c3 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:13:56 +0100 Subject: [PATCH 45/86] try signing apk --- .github/workflows/deploy.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 20f60ec1..c5f55704 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -112,6 +112,19 @@ jobs: - name: Build run: cmake --build ${{ steps.strings.outputs.build-output-dir }} ${{ matrix.additional_build_flags }} + + - name: Signing Android package + if: matrix.qttarget == 'android' + uses: Tlaster/android-sign@v1 + with: + releaseDirectory: | + ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/ + signingKeyBase64: ${{ secrets.SIGNINGKEYBASE64 }} + output: ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/signed + alias: alpinemaps + keyStorePassword: ${{ secrets.KEYSTOREPASSWORD }} + env: + BUILD_TOOLS_VERSION: "30.0.2" - name: Copy android packages if: matrix.qttarget == 'android' From 82579e3cfb6d771b6315b8a99c5adda6456aefff Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:21:17 +0100 Subject: [PATCH 46/86] download artifacts and list files --- .github/workflows/deploy.yml | 55 +++++++++++++----------------------- 1 file changed, 19 insertions(+), 36 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c5f55704..220cfca9 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -135,46 +135,29 @@ jobs: - name: Create artifact uses: actions/upload-artifact@v4 with: - name: install_files_${{ matrix.qtarch }} + name: files_${{ matrix.qtarch }} path: ${{ github.workspace }}/install/ if-no-files-found: error - #- name: Create index.html - #run: | - #echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo " AlpineMaps build" >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html - #echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html - - #- name: Create Pages artifact - #uses: actions/upload-pages-artifact@v3 - #with: - #path: ${{ steps.strings.outputs.install-dir }} + deploy: + if: github.event_name == 'push' + needs: build + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Download artifacts + uses: actions/download-artifact@v4 + with: + path: $GITHUB_WORKSPACE/github_page + + - name: List Files + run: | + tree -d $GITHUB_WORKSPACE/github_page/ - #- name: Debug output - #run: echo ${{ github.event_name }} - - #deploy: - #if: github.event_name == 'push' - #needs: build - #environment: - #name: github-pages - #url: ${{ steps.deployment.outputs.page_url }} - #runs-on: ubuntu-latest - #steps: - #- name: Setup Pages - #uses: actions/configure-pages@v4 + - name: Setup Pages + uses: actions/configure-pages@v4 #- name: Deploy to GitHub Pages #id: deployment From c183b165bfd364fcefb9ac15a7cd81e117accbd9 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Thu, 11 Jan 2024 18:24:47 +0100 Subject: [PATCH 47/86] try r0adkll/sign-android-release@v1 --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 220cfca9..5c1d90c1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -115,7 +115,7 @@ jobs: - name: Signing Android package if: matrix.qttarget == 'android' - uses: Tlaster/android-sign@v1 + uses: r0adkll/sign-android-release@v1 with: releaseDirectory: | ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/ From 0a61f4fecbb689cd14392c2e45a7c95b708877c6 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:26:25 +0100 Subject: [PATCH 48/86] try signing directly with qt tools --- .github/workflows/deploy.yml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5c1d90c1..578157b8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -115,16 +115,10 @@ jobs: - name: Signing Android package if: matrix.qttarget == 'android' - uses: r0adkll/sign-android-release@v1 - with: - releaseDirectory: | - ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/ - signingKeyBase64: ${{ secrets.SIGNINGKEYBASE64 }} - output: ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/signed - alias: alpinemaps - keyStorePassword: ${{ secrets.KEYSTOREPASSWORD }} - env: - BUILD_TOOLS_VERSION: "30.0.2" + run: | + echo ${{ secrets.SIGNINGKEYBASE64 }} > release.keystore.base64 + base64 -d release.keystore.base64 > release.keystore + $QT_HOST_PATH/bin/androiddeployqt --input ${{ steps.strings.outputs.build-output-dir }}/app/android-alpineapp-deployment-settings.json --output ${{ steps.strings.outputs.build-output-dir }}/app/android-build --android-platform android-33 --gradle --release --sign release.keystore alpinemaps --storepass ${{ secrets.KEYSTOREPASSWORD }} - name: Copy android packages if: matrix.qttarget == 'android' From 3273b28dacbbca041b7c515cc4299d412e842a9f Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:28:13 +0100 Subject: [PATCH 49/86] try without modules for native version (don't think they are needed for cross compilation) --- .github/workflows/deploy.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 578157b8..a890069b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -60,7 +60,6 @@ jobs: arch: gcc_64 dir: '${{github.workspace}}/qt' install-deps: 'true' - modules: 'qtcharts qtpositioning' - name: Set QT_HOST_PATH run: echo "QT_HOST_PATH=${Qt6_DIR}" >> "$GITHUB_ENV" From bcf2f5b3a468cf6c2ec16e11c66e6ef89e013df4 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:48:24 +0100 Subject: [PATCH 50/86] try to deploy to github pages --- .github/workflows/deploy.yml | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index a890069b..cad2362b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -143,18 +143,23 @@ jobs: - name: Download artifacts uses: actions/download-artifact@v4 with: - path: $GITHUB_WORKSPACE/github_page + path: ${{github.workspace}}/github_page - name: List Files run: | tree -d $GITHUB_WORKSPACE/github_page/ + - name: Generate Directory Listings + uses: jayanta525/github-pages-directory-listing@v4.0.0 + with: + FOLDER: ${{github.workspace}}/github_page + - name: Setup Pages uses: actions/configure-pages@v4 - #- name: Deploy to GitHub Pages - #id: deployment - #uses: actions/deploy-pages@v4 + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 - #- name: Debug output - #run: echo ${{ steps.deployment.outputs.page_url }} + - name: Deployed url + run: echo ${{ steps.deployment.outputs.page_url }} From 3e5f8be51c7b900f7c89a5b19628059d504e86cb Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 14:53:47 +0100 Subject: [PATCH 51/86] fix syntax --- .github/workflows/deploy.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index cad2362b..e705450b 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -150,9 +150,9 @@ jobs: tree -d $GITHUB_WORKSPACE/github_page/ - name: Generate Directory Listings - uses: jayanta525/github-pages-directory-listing@v4.0.0 - with: - FOLDER: ${{github.workspace}}/github_page + uses: jayanta525/github-pages-directory-listing@v4.0.0 + with: + FOLDER: ${{github.workspace}}/github_page - name: Setup Pages uses: actions/configure-pages@v4 From d72b226fd47f27b7b0544135e624668d05cab796 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 15:22:03 +0100 Subject: [PATCH 52/86] move files such that we have a shallower tree --- .github/workflows/deploy.yml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e705450b..e6647144 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -140,10 +140,16 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: + - name: Download artifacts uses: actions/download-artifact@v4 with: - path: ${{github.workspace}}/github_page + path: ${{github.workspace}}/downloaded + + - name: Move into place + run: | + mkdir $GITHUB_WORKSPACE/github_page + mv $GITHUB_WORKSPACE/downloaded/*/* $GITHUB_WORKSPACE/github_page/ - name: List Files run: | From 14aa062bc75035595ae3f27ccc4d51664fac89b9 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 15:22:15 +0100 Subject: [PATCH 53/86] list all files in tree --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index e6647144..3127678a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -153,7 +153,7 @@ jobs: - name: List Files run: | - tree -d $GITHUB_WORKSPACE/github_page/ + tree $GITHUB_WORKSPACE/github_page/ - name: Generate Directory Listings uses: jayanta525/github-pages-directory-listing@v4.0.0 From 847d3fd60963da2c08e49f051c35f973203f2839 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 15:25:28 +0100 Subject: [PATCH 54/86] ah, forgot to create pages artifact --- .github/workflows/deploy.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3127678a..027e4567 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -159,7 +159,12 @@ jobs: uses: jayanta525/github-pages-directory-listing@v4.0.0 with: FOLDER: ${{github.workspace}}/github_page - + + - name: Create Pages artifact + uses: actions/upload-pages-artifact@v3 + with: + path: ${{github.workspace}}/github_page + - name: Setup Pages uses: actions/configure-pages@v4 From 8ee8d3435f0878651636dac3d971f22c6fd84c6f Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 15:25:49 +0100 Subject: [PATCH 55/86] remove old webassembly deploy yml --- .github/workflows/webassembly.yml | 138 ------------------------------ 1 file changed, 138 deletions(-) delete mode 100644 .github/workflows/webassembly.yml diff --git a/.github/workflows/webassembly.yml b/.github/workflows/webassembly.yml deleted file mode 100644 index ab32f339..00000000 --- a/.github/workflows/webassembly.yml +++ /dev/null @@ -1,138 +0,0 @@ -name: "webassembly" -on: - push: - branches: [ "main" ] - pull_request: - branches: [ "main" ] - -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages -permissions: - contents: read - pages: write - id-token: write - -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. -concurrency: - group: "pages" - cancel-in-progress: false - -jobs: - build: - runs-on: ubuntu-latest - steps: - - uses: mymindstorm/setup-emsdk@v13 - with: - version: 3.1.37 - - uses: actions/checkout@v3 - - name: Install Qt native version (required by webassembly version) - uses: jurplel/install-qt-action@v3 - with: - aqtversion: '==3.1.*' - version: '6.6.1' - host: linux - target: 'desktop' - arch: gcc_64 - dir: '${{github.workspace}}/qt' - install-deps: 'true' - modules: 'qtcharts qtpositioning' - - - name: Set QT_HOST_PATH - run: echo "QT_HOST_PATH=${Qt6_DIR}" >> "$GITHUB_ENV" - - - name: Install Linux Dependencies - run: sudo apt-get install -y build-essential ninja-build - - - name: Install Qt Webassembly version - uses: jurplel/install-qt-action@v3 - with: - aqtversion: '==3.1.*' - version: '6.6.1' - host: linux - target: 'desktop' - arch: wasm_singlethread - dir: '${{github.workspace}}/qt' - install-deps: 'true' - modules: 'qtcharts' - - - name: Make qt webassembly binaries executable - run: | - chmod u+x ${Qt6_DIR}/bin/* - - - name: Verify emcc - run: emcc -v - - - name: Set reusable strings - # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. - id: strings - shell: bash - run: | - echo "build-output-dir=${{ github.workspace }}/build" >> "$GITHUB_OUTPUT" - echo "install-dir=${{ github.workspace }}/install" >> "$GITHUB_OUTPUT" - - - name: Configure CMake - env: - CMAKE_PREFIX_PATH: ${{env.Qt6_DIR}}/lib/cmake - run: > - ${Qt6_DIR}/bin/qt-cmake - -G Ninja - -B ${{ steps.strings.outputs.build-output-dir }} - -DCMAKE_BUILD_TYPE=Release - -DALP_WWW_INSTALL_DIR=${{ steps.strings.outputs.install-dir }} - -DALP_ENABLE_ASSERTS=ON - -DFMT_INSTALL=OFF - -S ${{ github.workspace }} - - - name: Build - run: cmake --build ${{ steps.strings.outputs.build-output-dir }} --target install - - - name: Create artifact - uses: actions/upload-artifact@v4 - with: - name: webassembly_out - path: ${{ steps.strings.outputs.install-dir }} - if-no-files-found: error - - - name: Create index.html - run: | - echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html - echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - echo " AlpineMaps build" >> ${{ steps.strings.outputs.install-dir }}/index.html - echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - echo " " >> ${{ steps.strings.outputs.install-dir }}/index.html - echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html - echo "" >> ${{ steps.strings.outputs.install-dir }}/index.html - - - name: Create Pages artifact - uses: actions/upload-pages-artifact@v3 - with: - path: ${{ steps.strings.outputs.install-dir }} - - - name: Debug output - run: echo ${{ github.event_name }} - - deploy: - if: github.event_name == 'push' - needs: build - environment: - name: github-pages - url: ${{ steps.deployment.outputs.page_url }} - runs-on: ubuntu-latest - steps: - - name: Setup Pages - uses: actions/configure-pages@v4 - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v4 - - - name: Debug output - run: echo ${{ steps.deployment.outputs.page_url }} From 72b38fcebef9eb549bf376ae34a3a073cd9f95e8 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 15:52:01 +0100 Subject: [PATCH 56/86] try to make directory listing work --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 027e4567..85987ddd 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -158,7 +158,7 @@ jobs: - name: Generate Directory Listings uses: jayanta525/github-pages-directory-listing@v4.0.0 with: - FOLDER: ${{github.workspace}}/github_page + FOLDER: github_page - name: Create Pages artifact uses: actions/upload-pages-artifact@v3 From ebd9543eccd3bde30e19b3d647f06c0cb21f8a17 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 15:52:39 +0100 Subject: [PATCH 57/86] move list pages debug output --- .github/workflows/deploy.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 85987ddd..7cbafa6e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -150,15 +150,15 @@ jobs: run: | mkdir $GITHUB_WORKSPACE/github_page mv $GITHUB_WORKSPACE/downloaded/*/* $GITHUB_WORKSPACE/github_page/ - - - name: List Files - run: | - tree $GITHUB_WORKSPACE/github_page/ - name: Generate Directory Listings uses: jayanta525/github-pages-directory-listing@v4.0.0 with: FOLDER: github_page + + - name: List Files + run: | + tree $GITHUB_WORKSPACE/github_page/ - name: Create Pages artifact uses: actions/upload-pages-artifact@v3 From 45dfc93c39e3fd524b70b13e2e3b35bfafaaa277 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 17:00:17 +0100 Subject: [PATCH 58/86] try to fix headers for multithreaded version --- .github/workflows/deploy.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 7cbafa6e..77c6e869 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -151,6 +151,12 @@ jobs: mkdir $GITHUB_WORKSPACE/github_page mv $GITHUB_WORKSPACE/downloaded/*/* $GITHUB_WORKSPACE/github_page/ + - name: Fix headers for wasm_multithread + run: | + cd $GITHUB_WORKSPACE/github_page/wasm_multithread + wget https://raw.githubusercontent.com/gzuidhof/coi-serviceworker/master/coi-serviceworker.min.js + sed -i -e 's###g' GoofyTC.html + - name: Generate Directory Listings uses: jayanta525/github-pages-directory-listing@v4.0.0 with: From 1ab9a7359118b9e79640c63a4662495d3482a732 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 17:20:37 +0100 Subject: [PATCH 59/86] Fix filename --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 77c6e869..f2dfa184 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -155,7 +155,7 @@ jobs: run: | cd $GITHUB_WORKSPACE/github_page/wasm_multithread wget https://raw.githubusercontent.com/gzuidhof/coi-serviceworker/master/coi-serviceworker.min.js - sed -i -e 's###g' GoofyTC.html + sed -i -e 's###g' alpineapp.html - name: Generate Directory Listings uses: jayanta525/github-pages-directory-listing@v4.0.0 From d72d3efea5961207ff31b52869133390c1721876 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 18:12:08 +0100 Subject: [PATCH 60/86] fix filename of coi-serviceworker --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 77c6e869..8ca169b3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -155,7 +155,7 @@ jobs: run: | cd $GITHUB_WORKSPACE/github_page/wasm_multithread wget https://raw.githubusercontent.com/gzuidhof/coi-serviceworker/master/coi-serviceworker.min.js - sed -i -e 's###g' GoofyTC.html + sed -i -e 's###g' GoofyTC.html - name: Generate Directory Listings uses: jayanta525/github-pages-directory-listing@v4.0.0 From 85f2c1cf8e1ccf9d8ce7594b000ffa32cac5778b Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 22:57:14 +0100 Subject: [PATCH 61/86] CI fixes (#80) * this should enable the version number * previous attempt failed, at least try to really use vUnknown * really really use vUnknown * this should fetch the tags * add cmake option to shut down alpine app after 60s and try testing with ASAN in CI * clean up --- .github/workflows/deploy.yml | 11 ++++------- .github/workflows/linux.yml | 3 ++- CMakeLists.txt | 1 + app/CMakeLists.txt | 3 +++ app/main.cpp | 6 +++++- cmake/alp_generate_version_file.cmake | 2 +- 6 files changed, 16 insertions(+), 10 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index acf04146..28af4018 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -43,7 +43,10 @@ jobs: qtmodules: 'qtcharts qtpositioning' steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true - uses: mymindstorm/setup-emsdk@v13 if: matrix.qttarget == 'desktop' @@ -161,10 +164,6 @@ jobs: uses: jayanta525/github-pages-directory-listing@v4.0.0 with: FOLDER: github_page - - - name: List Files - run: | - tree $GITHUB_WORKSPACE/github_page/ - name: Create Pages artifact uses: actions/upload-pages-artifact@v3 @@ -178,5 +177,3 @@ jobs: id: deployment uses: actions/deploy-pages@v4 - - name: Deployed url - run: echo ${{ steps.deployment.outputs.page_url }} diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index 5c221c59..a8b4a9ae 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -62,9 +62,9 @@ jobs: run: > cmake -G Ninja -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} - -DALP_ENABLE_POSITIONING=false -DALP_ENABLE_ASSERTS=ON -DALP_ENABLE_ADDRESS_SANITIZER=ON + -DALP_ENABLE_APP_SHUTDOWN_AFTER_60S=ON -DCMAKE_BUILD_TYPE=Debug -DALP_USE_LLVM_LINKER=ON -B ./build @@ -98,3 +98,4 @@ jobs: Xvfb :1 -screen 0 1024x768x16 & sleep 5 ./build/unittests/gl_engine/unittests_gl_engine + ./build/app/alpineapp diff --git a/CMakeLists.txt b/CMakeLists.txt index a05fe2f4..9e6ea078 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ option(ALP_ENABLE_ADDRESS_SANITIZER "compiles atb with address sanitizer enabled option(ALP_ENABLE_THREAD_SANITIZER "compiles atb with thread sanitizer enabled (only debug, works only on g++ and clang)" OFF) option(ALP_ENABLE_ASSERTS "enable asserts (do not define NDEBUG)" ON) option(ALP_ENABLE_TRACK_OBJECT_LIFECYCLE "enables debug cmd printout of constructors & deconstructors if implemented" OFF) +option(ALP_ENABLE_APP_SHUTDOWN_AFTER_60S "Shuts down the app after 60S, used for CI testing with asan." OFF) set(ALP_EXTERN_DIR "extern" CACHE STRING "name of the directory to store external libraries, fonts etc..") diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index dadcc372..30e8e1a5 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -127,6 +127,9 @@ if (ALP_ENABLE_POSITIONING) target_link_libraries(alpineapp PUBLIC Qt::Positioning) target_compile_definitions(alpineapp PUBLIC "ALP_ENABLE_GNSS") endif() +if (ALP_ENABLE_APP_SHUTDOWN_AFTER_60S) + target_compile_definitions(alpineapp PUBLIC "ALP_APP_SHUTDOWN_AFTER_60S") +endif() if (ANDROID OR EMSCRIPTEN) target_compile_definitions(alpineapp PUBLIC ALP_QML_SOURCE_DIR="qrc:///qt/qml/app/") diff --git a/app/main.cpp b/app/main.cpp index f4f64ceb..b3b1926f 100644 --- a/app/main.cpp +++ b/app/main.cpp @@ -139,8 +139,12 @@ int main(int argc, char **argv) #if (defined(__linux) && !defined(__ANDROID__)) || defined(_WIN32) || defined(_WIN64) root_window->showMaximized(); #endif +#ifdef ALP_APP_SHUTDOWN_AFTER_60S + QTimer::singleShot(60000, &app, &QCoreApplication::quit); +#endif - RenderThreadNotifier::instance()->set_root_window(root_window); + RenderThreadNotifier::instance() + ->set_root_window(root_window); return app.exec(); } diff --git a/cmake/alp_generate_version_file.cmake b/cmake/alp_generate_version_file.cmake index 86aacc87..18fac213 100644 --- a/cmake/alp_generate_version_file.cmake +++ b/cmake/alp_generate_version_file.cmake @@ -28,7 +28,7 @@ execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --dirty=-d --abbrev=1 if (ALP_VERSION STREQUAL "") message(WARNING "Retrieving version string from git was not successfull. Setting it to 'vUnknown'") - set(${output_variable} "vUnknown" PARENT_SCOPE) + set(ALP_VERSION "vUnknown") else() string(REPLACE "-g" "." ALP_VERSION ${ALP_VERSION}) string(REPLACE "-" "." ALP_VERSION ${ALP_VERSION}) From 47e2228a33282889e993a7259f8a5a02e0f17ea0 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sat, 13 Jan 2024 23:57:35 +0100 Subject: [PATCH 62/86] don't fail if we have no android signing key --- .github/workflows/deploy.yml | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 28af4018..1f511f43 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -116,11 +116,30 @@ jobs: run: cmake --build ${{ steps.strings.outputs.build-output-dir }} ${{ matrix.additional_build_flags }} - name: Signing Android package - if: matrix.qttarget == 'android' + env: + secret_test: ${{ secrets.KEYSTOREPASSWORD }} + if: matrix.qttarget == 'android' && ${{ env.secret_test != '' }} run: | echo ${{ secrets.SIGNINGKEYBASE64 }} > release.keystore.base64 base64 -d release.keystore.base64 > release.keystore $QT_HOST_PATH/bin/androiddeployqt --input ${{ steps.strings.outputs.build-output-dir }}/app/android-alpineapp-deployment-settings.json --output ${{ steps.strings.outputs.build-output-dir }}/app/android-build --android-platform android-33 --gradle --release --sign release.keystore alpinemaps --storepass ${{ secrets.KEYSTOREPASSWORD }} + + - name: Readme why Android package was not signed + env: + secret_test: ${{ secrets.KEYSTOREPASSWORD }} + if: matrix.qttarget == 'android' && ${{ env.secret_test == '' }} + run: | + echo "Well, the apk wasn't signed because there is no key to sign it with in your repository (the one this was created in)." >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "These are the steps to generate such a key:" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "- https://stackoverflow.com/questions/3997748/how-can-i-create-a-keystore. Use 'alpinemaps' as the alias!" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "- If you have the android dev setup ready in Qt Creator, you can also create the keystore via Projects (on the left side toolboar) -> Android Qt ... -> Build -> Build Steps -> Build Android APK -> Application Signature -> Create. Use 'alpinemaps' as the alias!" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "- Then you have to encode the keystore in base64, e.g., on linux via 'base64 keystorefile > keystorefile.base64'" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "- Finally, create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo " SIGNINGKEYBASE64 = the base64 encoded key" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo " KEYSTOREPASSWORD = the password used to create the keystore" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "Oh, and I hope this saved your day ;)" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - name: Copy android packages if: matrix.qttarget == 'android' From a69e9a2bff84f1e643dcd79d3a0c2d4422bef7ae Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 00:32:52 +0100 Subject: [PATCH 63/86] don't fail if we have no android signing key #2 --- .github/workflows/deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 1f511f43..2a714dfe 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -118,7 +118,7 @@ jobs: - name: Signing Android package env: secret_test: ${{ secrets.KEYSTOREPASSWORD }} - if: matrix.qttarget == 'android' && ${{ env.secret_test != '' }} + if: matrix.qttarget == 'android' && env.secret_test != '' run: | echo ${{ secrets.SIGNINGKEYBASE64 }} > release.keystore.base64 base64 -d release.keystore.base64 > release.keystore @@ -127,7 +127,7 @@ jobs: - name: Readme why Android package was not signed env: secret_test: ${{ secrets.KEYSTOREPASSWORD }} - if: matrix.qttarget == 'android' && ${{ env.secret_test == '' }} + if: matrix.qttarget == 'android' && env.secret_test == '' run: | echo "Well, the apk wasn't signed because there is no key to sign it with in your repository (the one this was created in)." >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt echo "" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt From d19c92b8a5b940a0c5ddc655ada488000eb1667b Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 01:33:34 +0100 Subject: [PATCH 64/86] Create creating_apk_keys.md --- creating_apk_keys.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 creating_apk_keys.md diff --git a/creating_apk_keys.md b/creating_apk_keys.md new file mode 100644 index 00000000..7562c4d0 --- /dev/null +++ b/creating_apk_keys.md @@ -0,0 +1,12 @@ +# Easy way (shared keys) +Create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets: +- SIGNINGKEYBASE64 = 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 +- KEYSTOREPASSWORD = asdfasdf + +# These are the steps to generate such a key: +- https://stackoverflow.com/questions/3997748/how-can-i-create-a-keystore. Use 'alpinemaps' as the alias! +- If you have the android dev setup ready in Qt Creator, you can also create the keystore via Projects (on the left side toolboar) -> Android Qt ... -> Build -> Build Steps -> Build Android APK -> Application Signature -> Create. Use 'alpinemaps' as the alias! +- Then you have to encode the keystore in base64, e.g., on linux via 'base64 keystorefile > keystorefile.base64' +- Finally, create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets + SIGNINGKEYBASE64 = the base64 encoded key + KEYSTOREPASSWORD = the password used to create the keystore From 6255502f951c08ff17a931d84ef79a272cb4dc76 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 01:37:10 +0100 Subject: [PATCH 65/86] Update creating_apk_keys.md --- creating_apk_keys.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/creating_apk_keys.md b/creating_apk_keys.md index 7562c4d0..6bb23339 100644 --- a/creating_apk_keys.md +++ b/creating_apk_keys.md @@ -1,7 +1,8 @@ # Easy way (shared keys) Create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets: -- SIGNINGKEYBASE64 = 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 -- KEYSTOREPASSWORD = asdfasdf +- SIGNINGKEYBASE64 = +> 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 +- KEYSTOREPASSWORD = _asdfasdf_ # These are the steps to generate such a key: - https://stackoverflow.com/questions/3997748/how-can-i-create-a-keystore. Use 'alpinemaps' as the alias! From aeada9283e4bab2c2e0dd3479954559701f32644 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 01:39:53 +0100 Subject: [PATCH 66/86] Update README.md --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9a1e0d59..a92b6d3c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # alpine-renderer -A developer version is available at [alpinemaps.org](https://alpinemaps.org), and an apk for android under https://alpinemaps.org/apk. Be aware that it can break at any time! +This is the software behind [alpinemaps.org](https://alpinemaps.org). + +A developer version (trunk) is released [here]([https://alpinemaps.org](https://alpinemapsorg.github.io/renderer/)), including APKs for android. Be aware that it can break at any time! We are in discord, talk to us! https://discord.gg/p8T9XzVwRa @@ -7,8 +9,8 @@ https://discord.gg/p8T9XzVwRa # Cloning and building `git clone git@github.com:AlpineMapsOrg/renderer.git` -After that it should be a normal cmake project. That is, you run cmake to generate a project or build file and then run your favourite tool. All dependencies should be pulled automatically into `renderer/external` while you run CMake. -We use Qt Creator (with mingw on Windows), which is the only tested setup atm and makes setup of Android and WebAssembly builds reasonably easy. If you have questions, please open a new [discussion](https://github.com/AlpineMapsOrg/renderer/discussions). +After that it should be a normal cmake project. That is, you run cmake to generate a project or build file and then run your favourite tool. All dependencies should be pulled automatically while you run CMake. +We use Qt Creator (with mingw on Windows), which is the only tested setup atm and makes setup of Android and WebAssembly builds reasonably easy. If you have questions, please go to discord. ## Dependencies * Qt 6.6.0, or greater @@ -45,3 +47,11 @@ We use Qt Creator (with mingw on Windows), which is the only tested setup atm an (in case you use Qt Creator, go to Preferences -> C++ -> Code Style: Formatting mode: Full, Format while typing, Format edited code on file save, don't override formatting) * follow the [Qt recommendations](https://wiki.qt.io/API_Design_Principles) and the [c++ core guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) everywhere else. +# Developer workflow +* Fork this repository. +* Work in branches or your main. +* Make pull requests from your main branch. +* Github Actions will run the unit tests and creating packages for the browser and Android. +* Make sure that the unit tests run through. +* We will also look at the browser version during the pull request. +* Ideally you'll also setup the signing keys for Android packages ([instructions](https://github.com/AlpineMapsOrg/renderer/blob/main/creating_apk_keys.md)). From 9b3b0469fafcc3049e80181ad67cd41e2c9004cd Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 02:37:43 +0100 Subject: [PATCH 67/86] Update creating_apk_keys.md --- creating_apk_keys.md | 88 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 87 insertions(+), 1 deletion(-) diff --git a/creating_apk_keys.md b/creating_apk_keys.md index 6bb23339..e130111b 100644 --- a/creating_apk_keys.md +++ b/creating_apk_keys.md @@ -1,7 +1,93 @@ # Easy way (shared keys) Create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets: - SIGNINGKEYBASE64 = -> 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 - KEYSTOREPASSWORD = _asdfasdf_ # These are the steps to generate such a key: From 1c87fb32afcfa727b0fc6097db93758907ca98a7 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 02:46:16 +0100 Subject: [PATCH 68/86] Update creating_apk_keys.md --- creating_apk_keys.md | 88 +------------------------------------------- 1 file changed, 1 insertion(+), 87 deletions(-) diff --git a/creating_apk_keys.md b/creating_apk_keys.md index e130111b..30bb840c 100644 --- a/creating_apk_keys.md +++ b/creating_apk_keys.md @@ -1,93 +1,7 @@ # Easy way (shared keys) Create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets: - SIGNINGKEYBASE64 = -> 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 - KEYSTOREPASSWORD = _asdfasdf_ # These are the steps to generate such a key: From af04c5bd515034f87e8308bc1071d5ccd5023701 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:39:24 +0100 Subject: [PATCH 69/86] stop old runs (no need to waste ressources) --- .github/workflows/deploy.yml | 2 -- .github/workflows/linux.yml | 4 ++++ .github/workflows/windows.yml | 4 ++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2a714dfe..02ceca67 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -11,8 +11,6 @@ permissions: pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "deploy" cancel-in-progress: true diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml index a8b4a9ae..6eb12d51 100644 --- a/.github/workflows/linux.yml +++ b/.github/workflows/linux.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [ "main" ] +concurrency: + group: "linux" + cancel-in-progress: true + jobs: build: strategy: diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 4126d27c..3fb46667 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -6,6 +6,10 @@ on: pull_request: branches: [ "main" ] +concurrency: + group: "windows" + cancel-in-progress: true + jobs: build: runs-on: windows-latest From 7d8793237e8aa74353e8cf30d44977fded492585 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:44:06 +0100 Subject: [PATCH 70/86] test env --- .github/workflows/deploy.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 02ceca67..b9855271 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,6 +41,14 @@ jobs: qtmodules: 'qtcharts qtpositioning' steps: + - name: Test ssh/scp + run: | + echo home=$HOME + tree -a $HOME + ssh -V + scp + exit 42 + - uses: actions/checkout@v4 with: fetch-depth: 0 From 820c7b459c2ea9107b9bf9f35e26f368d0006398 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 15:49:52 +0100 Subject: [PATCH 71/86] install openssh, only list one subdirectory --- .github/workflows/deploy.yml | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index b9855271..9a687286 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,10 +41,14 @@ jobs: qtmodules: 'qtcharts qtpositioning' steps: + + - name: Install dependencies + run: sudo apt-get install -y build-essential ninja-build openssh-client + - name: Test ssh/scp run: | echo home=$HOME - tree -a $HOME + tree -aL 2 $HOME ssh -V scp exit 42 @@ -73,9 +77,6 @@ jobs: - name: Set QT_HOST_PATH run: echo "QT_HOST_PATH=${Qt6_DIR}" >> "$GITHUB_ENV" - - name: Install Linux Dependencies - run: sudo apt-get install -y build-essential ninja-build - - name: Install Qt crosscompile target version uses: jurplel/install-qt-action@v3 with: From 9569889ffe047ea21b7ee4692971ab2ece2b9707 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 16:44:37 +0100 Subject: [PATCH 72/86] try ftp deployment --- .github/workflows/deploy.yml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 9a687286..6f391a99 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -43,15 +43,7 @@ jobs: steps: - name: Install dependencies - run: sudo apt-get install -y build-essential ninja-build openssh-client - - - name: Test ssh/scp - run: | - echo home=$HOME - tree -aL 2 $HOME - ssh -V - scp - exit 42 + run: sudo apt-get install -y build-essential ninja-build lftp - uses: actions/checkout@v4 with: @@ -180,6 +172,20 @@ jobs: mkdir $GITHUB_WORKSPACE/github_page mv $GITHUB_WORKSPACE/downloaded/*/* $GITHUB_WORKSPACE/github_page/ + - name: Upload to alpinemaps.org/cd + env: + FTP_USER: ${{ secrets.FTP_USER }} + FTP_PASS: ${{ secrets.FTP_PASS }} + FTP_HOST: ${{ secrets.FTP_HOST }} + if: env.FTP_HOST != '' + run: | + DEPLOYMENT_VERSION_NAME=$(git describe --tags --dirty=-d --abbrev=1) + lftp -c " + set ftp:ssl-force true; + open -u $FTP_USER,$FTP_PASS $FTP_HOST; + mirror -R -e -v -n $GITHUB_WORKSPACE/github_page/. ./$DEPLOYMENT_VERSION_NAME; + " + - name: Fix headers for wasm_multithread run: | cd $GITHUB_WORKSPACE/github_page/wasm_multithread From 938d67ce5113a5899960ee635f19e09e96264298 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 17:21:34 +0100 Subject: [PATCH 73/86] try ftp deployment #2 --- .github/workflows/deploy.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 6f391a99..54491cb8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -94,8 +94,9 @@ jobs: id: strings shell: bash run: | - echo "build-output-dir=${{ github.workspace }}/build_${{ matrix.qtarch }}" >> "$GITHUB_OUTPUT" - echo "install-dir=${{ github.workspace }}/install/${{ matrix.qtarch }}" >> "$GITHUB_OUTPUT" + echo "build-output-dir=${{ github.workspace }}/build_${{ matrix.qtarch }}" >> $GITHUB_OUTPUT + echo "install-dir=${{ github.workspace }}/install/${{ matrix.qtarch }}" >> $GITHUB_OUTPUT + echo "DEPLOYMENT_VERSION_NAME=$(git describe --tags --dirty=-d --abbrev=1)" >> $GITHUB_ENV - name: Configure CMake env: @@ -179,7 +180,6 @@ jobs: FTP_HOST: ${{ secrets.FTP_HOST }} if: env.FTP_HOST != '' run: | - DEPLOYMENT_VERSION_NAME=$(git describe --tags --dirty=-d --abbrev=1) lftp -c " set ftp:ssl-force true; open -u $FTP_USER,$FTP_PASS $FTP_HOST; From a0b8e2fe5c769c57fc5110ab4c20d3afd63108de Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 18:51:31 +0100 Subject: [PATCH 74/86] lftp is needed in deploy step, not build step --- .github/workflows/deploy.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 54491cb8..78f17891 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -41,9 +41,8 @@ jobs: qtmodules: 'qtcharts qtpositioning' steps: - - name: Install dependencies - run: sudo apt-get install -y build-essential ninja-build lftp + run: sudo apt-get install -y build-essential ninja-build - uses: actions/checkout@v4 with: @@ -161,7 +160,10 @@ jobs: name: github-pages url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest + steps: + - name: Install dependencies + run: sudo apt-get install -y lftp - name: Download artifacts uses: actions/download-artifact@v4 From fbd82bc6e68def03ee722a9340f992854cb70631 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 19:28:39 +0100 Subject: [PATCH 75/86] try to get the deployment_version_name out of the build job --- .github/workflows/deploy.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 78f17891..59d29a60 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -39,6 +39,8 @@ jobs: - qtarch: android_armv7 qttarget: 'android' qtmodules: 'qtcharts qtpositioning' + outputs: + deployment_version_name: ${{ steps.strings.deployment_version_name }} steps: - name: Install dependencies @@ -95,7 +97,7 @@ jobs: run: | echo "build-output-dir=${{ github.workspace }}/build_${{ matrix.qtarch }}" >> $GITHUB_OUTPUT echo "install-dir=${{ github.workspace }}/install/${{ matrix.qtarch }}" >> $GITHUB_OUTPUT - echo "DEPLOYMENT_VERSION_NAME=$(git describe --tags --dirty=-d --abbrev=1)" >> $GITHUB_ENV + echo "deployment_version_name=$(git describe --tags --dirty=-d --abbrev=1)" >> $GITHUB_OUTPUT - name: Configure CMake env: @@ -180,6 +182,7 @@ jobs: FTP_USER: ${{ secrets.FTP_USER }} FTP_PASS: ${{ secrets.FTP_PASS }} FTP_HOST: ${{ secrets.FTP_HOST }} + DEPLOYMENT_VERSION_NAME: ${{ jobs.build.deployment_version_name }} if: env.FTP_HOST != '' run: | lftp -c " From c9f1244f496d0382cacda147df8cf128c0395310 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 19:44:28 +0100 Subject: [PATCH 76/86] fix output (?) --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 59d29a60..05e2a8db 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -182,7 +182,7 @@ jobs: FTP_USER: ${{ secrets.FTP_USER }} FTP_PASS: ${{ secrets.FTP_PASS }} FTP_HOST: ${{ secrets.FTP_HOST }} - DEPLOYMENT_VERSION_NAME: ${{ jobs.build.deployment_version_name }} + DEPLOYMENT_VERSION_NAME: ${{ needs.build.outputs.deployment_version_name }} if: env.FTP_HOST != '' run: | lftp -c " From 12312b881a4aa1fd750fff86371978b146ef5f38 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 20:24:13 +0100 Subject: [PATCH 77/86] outputs are not working. clone instead. --- .github/workflows/deploy.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 05e2a8db..2e596b20 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -39,8 +39,6 @@ jobs: - qtarch: android_armv7 qttarget: 'android' qtmodules: 'qtcharts qtpositioning' - outputs: - deployment_version_name: ${{ steps.strings.deployment_version_name }} steps: - name: Install dependencies @@ -97,7 +95,6 @@ jobs: run: | echo "build-output-dir=${{ github.workspace }}/build_${{ matrix.qtarch }}" >> $GITHUB_OUTPUT echo "install-dir=${{ github.workspace }}/install/${{ matrix.qtarch }}" >> $GITHUB_OUTPUT - echo "deployment_version_name=$(git describe --tags --dirty=-d --abbrev=1)" >> $GITHUB_OUTPUT - name: Configure CMake env: @@ -166,6 +163,12 @@ jobs: steps: - name: Install dependencies run: sudo apt-get install -y lftp + + - name: Clone repository (only for version number) + uses: actions/checkout@v4 + with: + fetch-depth: 0 + fetch-tags: true - name: Download artifacts uses: actions/download-artifact@v4 @@ -182,13 +185,12 @@ jobs: FTP_USER: ${{ secrets.FTP_USER }} FTP_PASS: ${{ secrets.FTP_PASS }} FTP_HOST: ${{ secrets.FTP_HOST }} - DEPLOYMENT_VERSION_NAME: ${{ needs.build.outputs.deployment_version_name }} if: env.FTP_HOST != '' run: | lftp -c " set ftp:ssl-force true; open -u $FTP_USER,$FTP_PASS $FTP_HOST; - mirror -R -e -v -n $GITHUB_WORKSPACE/github_page/. ./$DEPLOYMENT_VERSION_NAME; + mirror -R -e -v -n $GITHUB_WORKSPACE/github_page/. ./alpinemaps_$(git describe --tags --dirty=-d --abbrev=1); " - name: Fix headers for wasm_multithread From 59bd64b9de3205db7d051e4b14f07b094cc89570 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 21:40:23 +0100 Subject: [PATCH 78/86] rename step name --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 2e596b20..14d9aeb8 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -180,7 +180,7 @@ jobs: mkdir $GITHUB_WORKSPACE/github_page mv $GITHUB_WORKSPACE/downloaded/*/* $GITHUB_WORKSPACE/github_page/ - - name: Upload to alpinemaps.org/cd + - name: Upload to an FTP host env: FTP_USER: ${{ secrets.FTP_USER }} FTP_PASS: ${{ secrets.FTP_PASS }} From 8deb1494b32499be17dcd188fb09a1c88e5b2502 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Sun, 14 Jan 2024 23:09:18 +0100 Subject: [PATCH 79/86] improve main icon / logo (#85) * replace the logo with something that doesn't look like an arrow * make logo rounder --- app/CMakeLists.txt | 3 +- app/Main.qml | 2 +- app/android/res/drawable-hdpi/icon.png | Bin 8767 -> 3123 bytes app/android/res/drawable-ldpi/icon.png | Bin 3093 -> 1244 bytes app/android/res/drawable-mdpi/icon.png | Bin 5042 -> 1922 bytes app/android/res/drawable-xhdpi/icon.png | Bin 13178 -> 4429 bytes app/android/res/drawable-xxhdpi/icon.png | Bin 23575 -> 7096 bytes app/android/res/drawable-xxxhdpi/icon.png | Bin 35275 -> 9948 bytes app/icons/favicon.ico | Bin 154372 -> 5987 bytes app/icons/favicon_256.png | Bin 121344 -> 0 bytes app/icons/icon.svg | 73 ++++++++++++++++++++++ 11 files changed, 76 insertions(+), 2 deletions(-) delete mode 100644 app/icons/favicon_256.png create mode 100644 app/icons/icon.svg diff --git a/app/CMakeLists.txt b/app/CMakeLists.txt index 30e8e1a5..f863aaa6 100644 --- a/app/CMakeLists.txt +++ b/app/CMakeLists.txt @@ -68,7 +68,7 @@ qt_add_qml_module(alpineapp icons/peak.svg icons/search.svg icons/favicon.ico - icons/favicon_256.png + icons/icon.svg icons/material/monitoring.svg icons/material/3d_rotation.svg icons/material/map.svg @@ -85,6 +85,7 @@ qt_add_qml_module(alpineapp icons/presets/basic.png icons/presets/shaded.png icons/presets/snow.png + ) qt_add_resources(alpineapp "height_data" diff --git a/app/Main.qml b/app/Main.qml index da4cfccd..4a75574c 100644 --- a/app/Main.qml +++ b/app/Main.qml @@ -95,7 +95,7 @@ Item { id: menu bannerTitle: "Alpine Maps" - bannerIconSource: "../icons/favicon_256.png" + bannerIconSource: "../icons/icon.svg" bannerSubtitle: _alpine_renderer_version selectedButtonId: 0 diff --git a/app/android/res/drawable-hdpi/icon.png b/app/android/res/drawable-hdpi/icon.png index b3258fb307161c1b1a54f55760968bba244b7c9f..186bd50948a8d0291f96d85f420ffa01602703f4 100644 GIT binary patch delta 3111 zcmV+?4A}F(M6(!>D}NB2000o20Vd5lGynh#Br&V^Z-+BY(|(%Xw$c+3|c+0!U3w<;^$W#BLuxpFMKq2nP=y z1mz|U041m)`@oR^{0_sgTEBk1eD1mDq}^_pfJ{tGlt+&qmB)`C*I&nu9g_ASp*+8S#2xlN61P2ZrV9Xdj2!4eC(~D?`#6ULG1n*0L5JK?elTT7uSg7|BWA7<1 zFMr432p$WZPAA*8ZNp~MRfz*N1aoq7!YWfxP{78G8+CEOK4KW1tqKyrw}Fie8mFqN zih1+q>BjMTy|lHp={GE0x-_iN{QP{XtE-0`n>KA4k38~-DW#g5n@LSg)tcp~iDpc& zVjuy$3TzvEPenxq3l=OG;$JRbzD!R~4}SpZ>FH!-WP}$i1RFPQBqb$9KbD=H9kS;c znKWqyJ+38kf_!hyMAo|U;GY}&Mm z{QP{anE`y=l7JwXHPG{@Fe*TW?I)giV%Uejd-pEq&!1O2%WC+G_M=-$0dHqQZ=Uz6QL)pm7!~SU_cEWx$?s@!~~3{q$1+ii(Pi>4YiT+uQZ` zRt*GDSy@R9X*RKOGbLLFOj~{R8evQn`Otx>|t~KqbFF4|yGnj$a0YB6P=jG+GYSk*^ z_#Vc&bLX@g52dB0Bqdo3A{`wa_v}s zk3P!UwQGrwk2fX2m|CQzrIDGLX;lY$dwc2X>H=W)?Aewbd@zI%?0?+3)0o0k0Z&3fYB{g2fg%nXf;sLf77G_H#OmmJa+U97j=x3d!ly zr}b}r$&w|eW`Eql80iQWhz%PyFn|7htvM6;X0U7h4fHz$9O%>i5$F#j^xnODoI7_8P;-_@Qwt6M2zI}jHER}4P5Mff9knVu#Gwu| zP;+zhRp4KN1YWps0guN6s0~q(rWP9hRm9O?`}XZdH}N>I*?2zS_z*%2n^pU-T11mt zXxxt!BYzx8NlEP8tGge8TK}7*9SCS3Ddju(h5Np~K0UQaNJwDOqD4_Fr}ZEqgsF`R zBSlS3jj_;|3h2us!3@*}v>T7LwY7!Z5M`CSckj~K*$Jr4P-$stQOS!2yWP(I{rgEs zNa%}?k8eR0`GFt?YH4X1kW&6ZYn$B=Wrd!e9)E7#x&^4kfw(x+HLQ`qQ&3Rwy{4w7 zY>&s&40yB?L6<9}lt+aS&jLd>L`|GHk>cXws5NSDZy(hNHi#Ga74WhU;zFPcf=*&Q z9?uCW<$uB2hA6X)as-pWUx39zh&92C10f9b+H0@f7DAlx-w^S7{S_58%8UH z5P$wV{D%>48hq4$)gqeI!br3m6(XP$*aQ>{A>I~3_{`iCa;!)x-#vBe)PQzfESxhy ze}BJTE=f*KHm;+O1U;yY<_Cokx2@hB(m*XOEj>1ytrr+?v)LkA6bwXncQ?0hD_!Tz znG;pHBm^Gd4d4|a#I;C;g!8slKA&$q#D6BW(9l*+_XpmAyz3ds|5HErA zsI{)Qg%DvYqE;~VVXLaDZd6uQZt(eh%Yci~K2+;LHk&QlWu9xOZGr_th__;G9DlI5 zk-WUT{21!@@4GQf$F1P;c(`^=`OFCuCNN{hj7Y@XLS@}qLWmy;AqFB5Vg}2@#qD-` z+-~>FQp$O#KM1h&t=+hBgTB5#K&?|*+)LCCybjC}LhKSk^oF}3S|au*<>lpPySln6 zP?N82v-d?&l7_o)$6DLmOd%fP*fl}=`eSdv@)YjJG z@pzarWeT00oyOA1P1H}Vz9WRVHBx$6WyJnqq^zv$bXQl`5@3sz@;?CAuV2?!MO-eI zW*iUd2YNX|h@B6TabSf1fo0H%|G?>VJ`NmiZ*SL!%iOthwQ63m5MpaI3FZF{GiS~` zfckB_Z}#lj&yTh~4b>002ovPDHLkV1n-K B<3Rub literal 8767 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 SClC801Ry7+ELkOP8vH+1W2yB3 diff --git a/app/android/res/drawable-ldpi/icon.png b/app/android/res/drawable-ldpi/icon.png index 150cb293ffae561582f771e0e3e8ca2bdd451c3b..4c259fcd85d8c5c25507f62cda6c1e049fe7490d 100644 GIT binary patch delta 1217 zcmV;y1U~zf7~BbvD}NB2000o20Vd5lGynhuj!8s8R9J=8mrZQbbr{D#Puq>X@UltQ zk*t^^3>(VaY)vL<2Q6Edk4Jd~Ec{M&5=Bz}{o$?y3+&wuy(f8PEr{14%LmgJ+r zJkaPm=t&h@_jFn^jX&le%{8n%cW} zuL6DnEWmJeb+xkF?aFSqtH#Dg1^fY2Jqhw-fPV1cL1nYq)WE=inw*?e6B84vuC7i2 zZv$T)IdVj0F@HZluQqPnsDQUtLtv_4dky%sudmP4($d16J9h{Mg8(!&H8D6i2yhDM za=BbNr!8ByaPs6yfcF90;|hoXU-b0!m^(W=iO1vY*s+6c+qUH{96o%Q*4EYyfMfUW z-389ESd5)JcQybYK8}De@U`FXukw1mq|<4pr>6-9gMWxf?vmMTCK`m7b?eq~ z;lc%g*8%rh1oQ$EUaz-$-@bi_2%4sG@7_JSySq!A@87>qO-&8kw{I`8g+d_?95`SG z#sMk0U?9K`eAC(4S<} zNx&Z9JAaSIQ`gtmmm^@39-P>hC#2F{*63-Au$D1Q+Ui^V>RL?Y>8^2NnPG)*g;{<*n1 zQmNF682}g@9K_@C)B)#81dNW3{v{$m7aOLhr?FbCbaZqW2Gul;`uchtj*^Eef!SJ`SSVP%Mp#V)7GrE|jQaZecHqqd0cXyf`4yPW9vZFQVyrZRM%cP_E5pOX z03QI)fOJ8f7u|n zZrwuH^)+VzptiP_^XJbeO(xS_$o!zl;(t1joSK@dbGzMGt=6(ZG)-gErcK!G_O16(39AtI`h%91q}3SHP z8D-!fGJjlJMdTw9S*}D}RzRMRA4TL95qbAva3E8EtJO+#b94461$+*?C?fBP$l_{< zR}=sc2n14ozyI9w@^YJqTm@9#1Uh6p`(+V1mfzV=4U?0TN88%k?uNtR-;`4Rr%qS~ fEx?*LP&xbyO)hUu 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 IM6N<$f<~>x$N&HU diff --git a/app/android/res/drawable-xhdpi/icon.png b/app/android/res/drawable-xhdpi/icon.png index 7416be95219267d621f92ababc850272abce9029..798eb696fb8eb5d4f78a489832e132cda3959394 100644 GIT binary patch delta 4427 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 L$};6rCPDuLj8r>P diff --git a/app/android/res/drawable-xxhdpi/icon.png b/app/android/res/drawable-xxhdpi/icon.png index cb08dc1c0843dbac7d9d82c34bd0e90ab05084ed..93ab5a4b3cad49874639406843b30bf70399f95f 100644 GIT binary patch literal 7096 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%0AW%UyJ($dmJ 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%0DmNO@NzUN%if01w)adUS9)jq&_RhZjp8*5oTj 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 diff --git a/app/icons/favicon.ico b/app/icons/favicon.ico index 92dcaed788d860733106a52fb505a1af9127ebed..89902493af7b9dcdc78c833f65dc568e068d99c4 100644 GIT binary patch literal 5987 zcmbtYg%8ZB-gBOM@B4YK7X$*6&dUP~;srfq1A!o<@q1%K9R^wsTGEg~ zPgm>FrS$Tqp&&g@UfJ(nzWMkYnt{jiUZ#UUY}9&M_sn1myNKY-xEY>)q!YcUc8X@cC>n5TsgBH4V&Msnq6AM%yeZBcri1}xl%EGB_VW`O$p(k}=Vc6D}Qnz1^ z-9BBxE~T}<#$Zz5Beq$uy0Z5IMuSI#)fm6<(nS8BFHx2)Irlebg)|Ry8mBcm_|;0a zjHVpO2pXL?@1+Z@xalYBcS#3LDT+xvWKkC!XKmPk;dd3G0VR=g(AUQAyo(X&$-UU) zX=4tNlTwZPEvCdU6$MjQ_ni46X0LHU4BMhRJ1Y&|^w7jWj4zJ!Jg~5uYs#k|e#Dz} z^>4uN6m_6F>sP9H=LGlby92U>F3WrJQFz>n2UD;yN|2>6O(3c6D76WT{pI9wZQoU7 z!g24_$)vse=0Jg3B?JF?*BJtDN(A+@!d<#tW0cuwm~~w7Vw*=7V)(3Z3tHi4i4UpW z_jU7l86FF~dc&^c&TKyTlXGbN0=-iIb~MH1({;n*n3)pps$Z!8AhB)Pe;IhnrF7nb zwkJJO22bBkIhurp#0Tq8nJ4}p^OVXTBY)^;+MpRZB_1?|Nbk*SE1Scv)P5K;p#2+9 z7Dz{6b;Hv+QCZ|O(kgdu%c%BBLE>h*oFZ&EN5u7~pvp{VqFs`+JyFN(agRo;@4l!l z5$r4sJ(dm8N=`kDv}(AO%H4I-g`XTUX}0_c6Q)NJa_ZHnjIFdUHbS+s}>7Gk$R*7;11I*Tpr?&*w~CH z=!V34jE^aWeOI4;%95z^wO}h=#92YPtP3*)*|Lny)n||2v);0m;J7jV@_9aYLgs$J zRY}wDRlHMA$v(N1!;uscOHsEoF&E4)@{d4BtgDCk6@p4NbT%^>+${>P;Of`51zGmX!dDECsHySVmserAT{!TG~_~_TSf> z(gq{U{*{tgaLE9%l3KxIYA>;y<9OxUy@FN=k4>O0V)ScZS`mk&-}ZT;FLPgc1ovt4 zt<*JRfH={u4b^H5r<9@a$xkNkNl$Gh+)8Z7JI$Olp^sc}7ju%Ta+ATJ9& z{zp7w)X{rbSrqe?1XKrQ6^L5|LNU#DbEg4?fu({ z6lU6B@=vj>S6~@Iv*qK~IpG*C&>kaVBHxvPKV21VV)F@CXHo>p>Jv|160~=Pj)TT9 zh%P^UxciZV>0UKFOx#tq!q*(&CRq{CFQ7>5Gsk02DqA3Id9oF6*A7aeGvpgd&Jnl& zb=wMaV>=1rN8nZ3pz_D=9kKT3=JgMR0_uZ1VTSNvd66I)|Dj@+B`3qS^+Z+ST(yhQ zXjrc~!F8282sFn^&2$%|xE%I7xBizrfx#VNx+_vXl(uS22qHWktC|)nWsb_gH`jo7 z(SE(J-}J?l>;%r4w8EgkMgv-uP&mH$>b*!WpRh-I;}wfm9DvQGSE)W@%}p4U5_{Gc zaPV8=GgJT(ms#fMdv&mR2e3Mkv(+G=YzeQXTcT9TCVaos5`qq$j*Rar(S0q{L3q~< z#q^bxPWkJ?KWuZKah+ow8ZQ&Q788OCee2WBHRb`S=o}?0J@_SIoHDC;`ft~NlN4V} zN@r<%4o6pOIY19}(t&W*j1_|79Uv;MgMpA1N$#fjpaSX4$)_xxGD_h`i^pS_uP@YQ zTgu>coM>Csa~aM*N)_>U_27qF47G@Vk#ZlKNNWhXblv#xE*_cgHQ)?=u?(p9pUk+f z>7?4LYi~Eld*}bD%^=>A8y@^7o1NbNi8cp&+6zM^$Hwlb593em6)y(AJA7F7_*>=` zlO0)85ijO3C2rXGl*!BNktsP8&Qaw!w?*sJHjFpwFUJ*bIF>od^grD!@`|Y+yLd4XA>x@R<%kc z+yqAx$`sH4Uq}29em2dZH&2z|wdGWN#MaMx@8};9&r@FOwCVeSV7*V?EstCI_RYhE zSt_~C^J>~C*{M!_y#@oYHi|V^2CsK*^?xpo# zOv`g#g&{%8G4=q&je4Jd)L9a%AkgvO4_K$tvf(zT*Ot#i9>rJ3LH)LTMR0ntnr!s4 z2EnxiO*z+UlZ~R{zl-Z-3XS!OD~ehCT}(X6FvW|9#AQCx{9qic z*St65jPieqVrMoVh^WK}HvDM$T#kWgyh80d1~5#++xixrX#GF!nb9fT9hAsJP_j(x zZQHui^;hwokmw&%R10rk=-$LMMJUELMx4>N4i>xR_dWoAo*y zwBW85oE3o|>(&bTZ-qMMb9=|nBbtl{Uv?xuYl#MGy1GVRTy&JBZNb+3#8^sMZt9OITPwC*>+Vfg>J6aU#zcvjL@wKOF$DK$#?7V8J+aqc zSEkFnmtkm|vzve#5S>2S!C}08TQB<6$yQ%(LbdGXN*pnnUqx@HNXYN9?OG^3&D&k>YnS@J@)I@#9%!dq`EV< zV1Rw>n$q#?)9;f&pMUx(+Bu*{+lAg4;o4=uwlfK|bATkrMRP`60Vb-ofgk(%hy(#|CBjV)l;^j=At&ZDr6WWvf4j{d_EElqs7+`+PHTB<-+lw1e1r zY1wFO?ZuVo8>R3?syu~Pu76eD(RcL)hg>NzouRoNKA2i@evY*-%?0zSFZ^Lixby(@ z;)unP`Q9kmZ_3Zn_eh3V$4w)>$o+13k{{6XUoohsTi`q_g^kdzN})#2tzc+lKt0>m zzN`?xGT_+yTglDNHR6fcO<~H3kUy}KL#^Im6tcNoVF@FJ z{47cZvQ@`@-rH0(+XuCZQc?esKzOTyQ0gofAV#OH}hI5X}Jy?LjX;Gsy{w$Q$iJjxn8eMcZ% z&Zd7w+*IQ@(uLH8l%x4vOe%B=4h5`sg!Zq_yaR)w(|6n3Z`jFO0E{)JBMS3T16aB^ z)vi0UCL1@|G&rgpq{kpXmZP^Z@!Zc3Ro`r`a>d}{rZfSiM`$#B0EJ#lf~&op3W9@OnDgC!jb**j!j6Otf>yf}6nNsp z*46|c_8|A;_9U;Rn&^FgqUXM%sJj+G$TbtD_#ADAo2k+~%kII$-+8qp&$B)wQ!KN3 zup?2E60L=}42uVDtkv>3IJtJSH>^KUi-+1gR!NcWXfPD~Z?}pVe9_FG>QF(PGRHi5 zD_?QWGBIEmR~uSXuhD;#MMJF5ox5~(g(&GsEfc@&y)4c4ocG)JtMboh^;cCqZpf4A zng#@{5O?oI9RiKG+kJ_(WD~=Cn>i`nBGbHL6!weie@}c;T1gIsP_D`bB?jOA7w6_e zC%!W>uQije0aCtbp4xwxOHl7(?v{TpupH%vy@r~a>NpTHAK(JZ(U^lmE}BQFcGS6~ zYwJJ$J-a?JCXAvV;v6#_dTWi{=Ui zrj(lYk8HdUbhP*p%USwpEIWAq#OELRwJKRFfcq}WJG&$n!<_Li@4)=1kJ?PchHRd> z0<=&QV+kJPsDv|mJ0h`He@JDZi?f~kw98n)WV*dHvst}OZbo-fiGdZ)d$rQa6G4XcJ2Rc*72pnbss5eN<{z9;|s6KsufmRaa_SB`M&&G13R z6xEOE(Kt+95U9DXxQmb3o1B?DY~1GMLEmB(f|86ie1+)M@Dtzc#hYHEz*H@uc5buQ z@jI?j>VJi!#L9R+QreEy6O*hw|3$$zBu{>_r`4wFx3hMSj_+dnII7?(XAdT*na4Vc z(D2N_zK6YLj|idPF0NjY=3;ItF6N!Cu*4yevm+L7BAdn3>?M*4?uDv1Na zaC5??5xHBW4&T9IgU!Bpou{e3n=8aMf@@kuf-JQp_^79~kK}k3IHVpU|Ij~s5XoM^ zLr*m1`bekY3Rq|mgucV@DI}*^58gTx6;>3%`51%TH}gp?!Q5*Cvh!b?rl(T*;Io9o#50R}iA(B@mj!>Evx)F< zA0bNK4r}_e^e8%gGRV84*7jByEswj4%L>hO{7DPD{_G+`5I64dw@4c~Mb^T@{U%GU-l?yApcYD}}MKB$RbnZC=HE5?vF=XQrn%CC~c50bR%eF^IOFY(tHjP#v{77QxJH$UKu>m>oK1q09L3TLZTD8{ro-ZNp`o23-Z}v=rldPQZ!t&12+T$gD?Z z6$?@?fro)aBW`g48>~HxNUr)@6@M)5mHsPX0U@U?sfbXSaE`S8CD@am zQI3nZtnW2t)oh<7WJ|^U_mFIL7c=xLt$PQkX&m)H$|5t*@(n?yE#^+Z?4A7uV2Hyp zsm2HosZ9DE#{$Nk(B)LBTr}^_(wB#{9pO!c!-dtro4Xi1W!(ifr*Wz6rfRkgHr5JU z;KuE1cZJTs3iwnRX2E>p?}OU^4PY%Lxqlf@X_0P@e)%iKPW{6eh!2h2ZH8E(>`Y3Z z3X2fkAR1!P9ykou))agsWVmfoKY7aznhBO70k5-U2NYJ<_hjSsAchykzD%aOsQTu( z5ZW#I`f^FuZNFMqe)^n-w{dWN8HL7I#|stD0?eLKGwx0as#7F&RJw&1=}Qe6&G7&H zJP2?nhGzYtysk`Ta*Hc#H$8&ZA)Xy?RrL#>N6XoGytZ9FG#q{K|o8i_D za{$=${mi#S-Xxy(h9ZR3Me}Jz`5j2YdjBm-H$ESr=@;9WR(YiK`Az}CF*)dn@itL? z346}S*;)E1o3D{)N^pv$ig;}{MO-#%Qs`XP$kp*T5EvdJZ0grK!byFU%X0%<5%lw} zq!#NHv&5qDG4v$zQ=9(xA8aqS!tlE-APb5O8KEC!u7bwo=?~zr9b|rkPUe^OfF!*f wVY!Uo?4e?nOwZPf9Vh=EJIuT^KYs&ZYGNamTq6Y1{y0eQfuUBFrhVl90N$J2bN~PV literal 154372 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

2N$Tz+TP?m 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 r&Lruy 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 MRMk_dQMQfvA7-S?qyPW_ diff --git a/app/icons/favicon_256.png b/app/icons/favicon_256.png deleted file mode 100644 index 0639c7f783ab4b9aea50c222b60a77a8ad692018..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121344 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

v5#~$zXn_z2^1bl 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

-*i-P3m$|le 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

BpbngqBu9Ac01ygUnQGIO*hEthk5 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 bBQGwCyOc-;<)^$M@J~x!N3B@ZCglGB_u@YG diff --git a/app/icons/icon.svg b/app/icons/icon.svg new file mode 100644 index 00000000..c6be0ea4 --- /dev/null +++ b/app/icons/icon.svg @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + From 0d4d1c38913ab5e978a4cb50c75d341db88cec19 Mon Sep 17 00:00:00 2001 From: Adam <5292991+adam-ce@users.noreply.github.com> Date: Mon, 15 Jan 2024 00:24:54 +0100 Subject: [PATCH 80/86] fix link in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a92b6d3c..7d971683 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # alpine-renderer This is the software behind [alpinemaps.org](https://alpinemaps.org). -A developer version (trunk) is released [here]([https://alpinemaps.org](https://alpinemapsorg.github.io/renderer/)), including APKs for android. Be aware that it can break at any time! +A developer version (trunk) is released [here](https://alpinemapsorg.github.io/renderer/), including APKs for android. Be aware that it can break at any time! We are in discord, talk to us! https://discord.gg/p8T9XzVwRa From 6fb443ea6d5502349b19e36dd0e36e0820b36c86 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Tue, 16 Jan 2024 19:34:52 +0100 Subject: [PATCH 81/86] get cd artifact name from repo name --- .github/workflows/deploy.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 14d9aeb8..bbffa38a 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -187,10 +187,11 @@ jobs: FTP_HOST: ${{ secrets.FTP_HOST }} if: env.FTP_HOST != '' run: | + reponame=$(echo $GITHUB_REPOSITORY | grep -oE "[^/]*$") lftp -c " set ftp:ssl-force true; open -u $FTP_USER,$FTP_PASS $FTP_HOST; - mirror -R -e -v -n $GITHUB_WORKSPACE/github_page/. ./alpinemaps_$(git describe --tags --dirty=-d --abbrev=1); + mirror -R -e -v -n $GITHUB_WORKSPACE/github_page/. ./${reponame}_$(git describe --tags --dirty=-d --abbrev=1); " - name: Fix headers for wasm_multithread From dadf8c70d6a537c95bf136be266fd1ff88264d08 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Tue, 16 Jan 2024 19:36:05 +0100 Subject: [PATCH 82/86] further improve icon --- app/Main.qml | 4 +- app/android/res/drawable-hdpi/icon.png | Bin 3123 -> 2996 bytes app/android/res/drawable-ldpi/icon.png | Bin 1244 -> 1344 bytes app/android/res/drawable-mdpi/icon.png | Bin 1922 -> 1934 bytes app/android/res/drawable-xhdpi/icon.png | Bin 4429 -> 4207 bytes app/android/res/drawable-xxhdpi/icon.png | Bin 7096 -> 6870 bytes app/android/res/drawable-xxxhdpi/icon.png | Bin 9948 -> 9834 bytes app/icons/favicon.ico | Bin 5987 -> 4286 bytes app/icons/icon.svg | 44 +++++++----- app/icons/icon_small.svg | 81 ++++++++++++++++++++++ 10 files changed, 109 insertions(+), 20 deletions(-) create mode 100644 app/icons/icon_small.svg diff --git a/app/Main.qml b/app/Main.qml index 4a75574c..b20a7664 100644 --- a/app/Main.qml +++ b/app/Main.qml @@ -27,8 +27,8 @@ import "components" Item { id: main - property int theme: Material.Light //Material.System - property int accent: Material.Green + property int theme: Material.Light + property int accent: Material.BlueGrey property string selectedPage: "map"; diff --git a/app/android/res/drawable-hdpi/icon.png b/app/android/res/drawable-hdpi/icon.png index 186bd50948a8d0291f96d85f420ffa01602703f4..2f9d4c3bf04f3cf6ea15cae1aeb22d58354acf20 100644 GIT binary patch delta 2969 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 P00000NkvXXu0mjfqKu-$ delta 3097 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 diff --git a/app/android/res/drawable-ldpi/icon.png b/app/android/res/drawable-ldpi/icon.png index 4c259fcd85d8c5c25507f62cda6c1e049fe7490d..c7df150dc2e0d95dcf2d817e9e458e5caeb176a8 100644 GIT binary patch delta 1318 zcmV+>1=;%C3BU@FD}Mn%0003%0kZKjP5=M^8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H11kFiAK~z|U?U!FnQ&$|vKj-$+3dDBpD)>-%sHB}N3yD;tOkF09 zNUD<%H;5Rr7e<0Hi+ixiW^^xG2urrPsJJC2;7oksWiR-!g@0DlApuN5)odeX)l%ie*w=UKq>XQQp*3r z6o^Q{1!&haEe1RQJQ?-owcxD4ERfg<{0K-!88e7&Hd{|oQPDre#l_>m55OnDn=eEF z&;b0IMQ)TYMSldl-F_=Owmegto?8G=1bhZ0Gl5G=O2p&w7=8+9GMP+qK)hbBc)ecH zG|h|qr-6Pfe*-Ino_EJ zS)mI+*MId#hYufCd-v`|DMct0iUT+t4tDL@wW9Ol;v$JeBCh~|o}M0DE|=kct(08?Ij|)s`(_sjjYW zs=d9v!fZCD1JP)d$;rue0CjbBs=T~>RRKGyo=pKTo-9qie&$8g_OO1%e9mf(DLeMM?G)~|f!%62#I2^u{On)YA0K0eZez1Q1`W&EWG|Jt(cL8uX9Lb7` zih=|H1OfpzZ{8eRb{!gk)oQ&0EF_ajhKGksjm9l4EslI3kx0ZizS+8UYr*6Ix~|jT z-(RfjdK~D|0FEC&9s~MDMn=Y$mX^u^Hf-21>-Bo`f=oyT* zL94}L$w7$6%>B0m9d)z{aD^N|DGzI{7Q zURqlE;3?z}fo}mfa3CK!fSz3;B7eVKy?V7-L|T+m9|JX+@o+di4Qv8%yWR6ZcACrq z-vMWU#nsfUDgdCdvGEab3Ahvt25W(jlv1rg(Ty875=Ogi+qT6rx{dSXP`d=gpGBOu zLhtX_u3f7b8XEdS*Y%sgV?g@*`zJ*tEFuR)|MXvw=iayu@Lj%qxgYv@`e&9E cS@1IKUnfAGI5_RNA^-pY07*qoM6N<$f}W;uaR2}S delta 1217 zcmV;y1U~z~3fu{hD}NB2000o20Vd5lGynhuj!8s8R9J=8mrZQbbr{D#Puq>X@UltQ zk*t^^3>(VaY)vL<2Q6Edk4Jd~Ec{M&5=Bz}{o$?y3+&wuy(f8PEr{14%LmgJ+r zJkaPm=t&h@_jFn^jX&le%{8n%cW} zuL6DnEWmJeb+xkF?aFSqtH#Dg1^fY2Jqhw-fPV1cL1nYq)WE=inw*?e6B84vuC7i2 zZv$T)IdVj0F@HZluQqPnsDQUtLtv_4dky%sudmP4($d16J9h{Mg8(!&H8D6i2yhDM za=BbNr!8ByaPs6yfcF90;|hoXU-b0!m^(W=iO1vY*s+6c+qUH{96o%Q*4EYyfMfUW z-389ESd5)JcQybYK8}De@U`FXukw1mq|<4pr>6-9gMWxf?vmMTCK`m7b?eq~ z;lc%g*8%rh1oQ$EUaz-$-@bi_2%4sG@7_JSySq!A@87>qO-&8kw{I`8g+d_?95`SG z#sMk0U?9K`eAC(4S<} zNx&Z9JAaSIQ`gtmmm^@39-P>hC#2F{*63-Au$D1Q+Ui^V>RL?Y>8^2NnPG)*g;{<*n1 zQmNF682}g@9K_@C)B)#81dNW3{v{$m7aOLhr?FbCbaZqW2Gul;`uchtj*^Eef!SJ`SSVP%Mp#V)7GrE|jQaZecHqqd0cXyf`4yPW9vZFQVyrZRM%cP_E5pOX z03QI)fOJ8f7u|n zZrwuH^)+VzptiP_^XJbeO(xS_$o!zl;(t1joSK@dbGzMGt=6(ZG)-gErcK!G_O16(39AtI`h%91q}3SHP z8D-!fGJjlJMdTw9S*}D}RzRMRA4TL95qbAva3E8EtJO+#b94461$+*?C?fBP$l_{< zR}=sc2n14ozyI9w@^YJqTm@9#1Uh6p`(+V1mfzV=4U?0TN88%k?uNtR-;`4Rr%qS~ fEx?*LP&xbyO)ha3n(92EhIbdBugV1G6lVH$MLcazbK%1AGkp4fq+* z3LFPY(Z#(|doS(#*KXNQUv;6s)Kej`@b(!Fm&-+C zVt-zZA`T6;zq@)B5zIE$XE?v50n5n>xIC(8A zARTxg_$hkP0yBDPtB0_(Ezj;w@ZEe`V zTefVWuC6XF0RVM%byQVV8D<*rP6U221>^yLM1Nmt9ELMBHI!RzbmaX8GOqQ-$fYh7Jk*7yU!nRo@9Ku?+d1X2cIWg@pw`pT%w4w#6h1ztV94nV`C$`cI`4u1%Gq`*^y#R0XCbBBS(%WWKKQ%SQqeqWS+wFD-?Yxm-&Huc-ys!l! z9%N-@(bCdlb-e*}TOGEvw6ynQ4HBCB0EZ7Bj(Owx`FTc0Mohc7xHxKRE{6*jE>Khy z)Sw;%zHAsa^eualDDZl{Jbd`jw11Z?UVzcjQC_@wVcLlla44KkCs(gtwYn7gEW80= zYin!!2k`r71N8UzBO<14w9T<#O&>_SfJ0GJQ^TP{hpev6zz-p?3W>;d^cRXCc)ea8 zJa}N*PNy@pO^yg_0mJHM0Q5fT+O=yWCnsCoUjgcD0K>z>zXiraFAUB7cz=r5@Aq^6 z{(aMSI2;rf7Os@L375;o`Sa(kE(NsP0B+s7m*=H@OdI$pH2w2+mRWp#C%JCWb-e;0TG`pR?X&Yhs#kEeJcJpWglK2~I8WN_um z6~nv>+%N^SwY5!)$gcoqW`AbHng$SG@xsf`|4=kEG*Dh%F4@`H&44ec7x4T2*8v$A z7!beTZ?cVN=M7xXy?gh9e5+l7LNIT$*?!sH-d_IX$&uyP2h7%shdiv`Qc$Pk9FUGWoKXpxPqQ0O-iYIv4W!^u76CbtE-;_KM|1|{r&wFBJwTtHzf1=(DZ?b z0tEOc@B`pIrPSO?NL!K6Up|4U?F0Jy`ug&fQg4Y!6R>e`aAQ!goNgo~C5g-BBH$DB zo%0&-fl|u1TH-GaJv}|CJv}|A?RNVI=nbI{klfr{pWp9a6p>$xNcrn!nHW9;d~wg7 kJ#UFf;xEE$_#eZ60WS7{d{ruojQ{`u07*qoM6N<$g3%hAVE_OC delta 1886 zcmV-k2ch_m4}uSnIe#=sL_t(&f$f=XOjPL=$A9M{Gx!2Cv20NT1`%gqm>r2I8G{Qm zf`W<)trEL6CL4{=v?;X-jjm}5T5WWdnkH>i`=wuOHrqDo%er0L#@(c}O_P4{75t!# zArTf$s+JmtapviVJ9l~+<`r0JoBopf={fhg|8t*n&OOg_;eY@9Zy>;%3oT+UyaPml zy$da5Hk?8iuYh4-*}}@nj<@-@c;k9!K^0}e*D;CTv15m_TCEBQ0-iYA*MQF^x#X28 zHt{7OEFua}BBHKbxuOmqK5VSQ0H8%}3xP1xSIK;R@l}g|3kYkPrfO~06lz+dlPZ!&>`bRybg5E zhXWgctAMSpt`48i7ZaeA;^xhpK;rN*Gd?~ZbAKQeIXO98x^&5SMlX5+n6(3L;6q?} zZEY=0O-<9@-q_d}t>GGpnD<2!di36*E z-veu$PABc{?MXw!NZ#$+x2F}7P579}%YVz`!i5W6>bgClgd^De!P44?t2{_9ZAIl3=R$w z3WeCbd9#sdDKRQgwkrU7LihLg8{e33poe%uG(c_Gu;GJfQM9=_{*0s85tSDYPC{cUY@mhgWld= z3JVJX4xqO+GtdAuP5Tq@_hb_pt%J|!Bi%}Y{sn&V;sq5I6)D3q9m|(5=hUfFhR*K- zIq^0cKyPpF6nZ6^K{l;}!Cc}$o_`}pj!<1)4SIX?R{XfRUcR4b0(0w7Sy`FUL+4U~ z;>pd;rN6%)(OZIV19tOx%mJm;hrrAD3CyiSs*cjkToX7RpU-D>wne}<&0{eK`uh5w z0Dm6q{MH}Mak@4$frj$knOJ%9AmzL`5RrPNhG8Pz9~&eP0%me436;75Q{M0!Q!xp^?r zXY%8xPoGW%0)hNgrw++5R>0+Q%~EfS2=Hs*Z4ntvW;DZrzP`Rmm&^5$Qfg1CQ-?%M zPEIm9I*Q$Hr?|LyR;r`?88|K?e@thXaOZOO?%g$zdFx4X0$EoP{2K4 zAFw48@sRvj<*Rjdbpw@^l}S6)M9iTAjiG;_UKf#HM33z=BAEjp4-5=609~Z$QsbFL z1)4zrMdcKcABadO(;E$vo{NY`Wb4+gmjM^>u82g^O_oIk3IUe^hlqSDzOrOP+QVJH z-#_N}`@awlhg+3W4}X%`DWx(Ap$PCRpjt#aMPxL4$ z!C;Wl(NPKu3n?lpiXT?MUjUzow28>wIjJ_0)gPMX=H`F;{r=;crfrG}iY42~$Oz$Z z7?;Zxe=Ktk=m6?6tt{D)?Jp((>g(%oK7Rc84H5Y=@Dvgz@K-13mBk|>KhLJJWW%f+ z0O;uG2>X1#ABIAqDy7uVhKGk0fYa%mKtG&yh{*R7h1-85Hk<7P@V6B!R`?fM%YPOB Y0?JKQccx}zBLDyZ07*qoM6N<$f_#*YX#fBK diff --git a/app/android/res/drawable-xhdpi/icon.png b/app/android/res/drawable-xhdpi/icon.png index 798eb696fb8eb5d4f78a489832e132cda3959394..c816cee000bcf1a56545989ca4b5150a6bc89e5c 100644 GIT binary patch delta 4189 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 DMJaG; diff --git a/app/android/res/drawable-xxhdpi/icon.png b/app/android/res/drawable-xxhdpi/icon.png index 93ab5a4b3cad49874639406843b30bf70399f95f..1ad8e1e029129425f0a5b0f31783bc1bd9332392 100644 GIT binary patch literal 6870 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 jHzdEi|L?(~c_Z&|DngQvps@k|r~AN_&>k@ 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%0AW%UyJ($dmJ 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 literal 9948 zcmZ{KRajKr8}Gm%3?+krGz?vSl#HZ2uMjcNF&`+(jXuW zXYoHb=jP1w40AE;*(=`nS8IPzSCz-dp}>JaAoz+3GMeDC_5KaR1b;Q>?XkcIwv&Rs zD+B^hy?>)I4+=knKoAf`8A)xg)V(xsx0h3X2jW+Y9EOAFff8Yo2s&&YH909vMO}ow z1YSE7lZpVlTR((3t9yDQ7(=MsaY0xswlQ~TyTrJ=VQ?oUIo~l^v)0D=GPS|RzM>5i zPXS?xt#2)HmVVYVsY34duX(k8GwfJ@rz}|TYO$)kI^b&eX0B!F42$#s|MGmI73f~H zkBU%YPlR1FIXy~D``uhur`J!m8~~L>U|f?gtJp*t7(AhmxFfsn9w{NPRWPqP-X-5ZW#6AcMnI3yhI5t3e?KDKYIR(uIKsa@+%XOujrWI= zCXgvYJkWoC@arOz9{ZD$CKSS3d%{c)q22Al zxcKE$CALITA!_D&XK@Aw^qZ1z4F0XHuag^J^y_||wn z&O#pl_sYES_Hw7&v*pT=fs0FR>K4Y`Rrz-F5h;UcrV^wiP+T%ZpvTSjwXw09kB@Ly zSC{=Xf!rPG@7^0(bMIi;4{~6FtmASHBo42K}E&L`H*L` z8I_3Fh@jVD=22|Mb!TB|>93{(-U{9jF}0}L7M{lD&fW}|%293uR8a~N*-DGnb>use zD&)$_&VD&KOioVjd%a4_!oi_*S~J=zmWk+}i=_0??_)t;JYE{-|ELYEqx5>fs=@b2 z3W4%@`DO3}s>G<%}SKH+{O6q>i(iE+(zh(iiLDG#B0<9isTC~r3@QvWzPOrJ z5Svyjv^?1;8MzoVZL|P1WlcUDg4@eWpHI}!^RHXGyX8b^j*T@84XGz4CK~*|qVaE0 z(2=k*%Zza94?L(TIJ{*u%_VD9UdECj51-M2wawSN>VLN-p{AyGb9YbjH__K8&&%t7 zNvyB054LFVgpEf=`0&9RM3;w#ti&c(xlsX{7~3wUH>BVc@DeRR86*8;(o?IkU%zC) zzJ@-e)~xwjQqpm7X7|>}$Y`iLlG6KhLU%AZEKAHE)A|9X$}CA1cg)6yC5`tQp+kT+ zm6&g0f|1XM#YLkkX07O}_&o&;Bw^GzzKJmJ2g8(1BMptV?TM1UzP^>e>py+ZS3>h0 z#>dBtN=n9k!XUn4v^!Jfo15ZyLbSezfyG;@xkDo<%u_$rI|&`8D*~}-yd>smNp5a# zsDxZlw6}+$mMR!7_5b{q->xw(J;w7J|8)OLo3t}_0`l3t zlRh5$R9i@JFJHj>vX!;I*qKJ}}-B2i~tMPc52te>81Jb?!!yKGAE9RTC?+(}9X4M^nyHu~0~$9d5R|7+>V~nMzqter|lP_>=^)SPhI;mE>nzH3x(Qva+%wch|@4q~#Ln*#RMh&BQJ- zXvFBo(Bx6PTg6!B(fN7bIs5sksrw&RSxShHm-F-U)Bc%3NhsxX&~zrp`(rWG;9+o5 z5b*{@JeUysFhh3N>QM#2{^aCjHx*CBFqYgCRURZy>j6XTt1mfKg@s}6JCi()^LuIs zH8uR4h7GyC<(7xGeM3VVE1|TLgVPti_|CT@!+E{xe@w|asThnZtEy}q9GFB!4JYjJ zcuQZCUu>GEnn3D%or0pWw%$rgqW$;Ze;p6~JGcd1)?iR5H2=W3!X(fUpO)}=W6*4Z z-NAa$*JNs>#p=zQX&W1xF9``f3k9zUrPK`#2WuSW+|(LRk^eMSw09jLTMB*cJ)>c2 z>l+(?N2CeBIO|OBGMk#3`qu&Y`51tyANe$i9JWG*b&CnS9tvHh=%ll;v%lG$UZaKw z?7L=AdbHOCJ~01 z@$rwt!^6K+on=Xf!Y~Kb&g^V$d;1g(6nwotXy_J*7W}{p?mx*@jO`sB7WhFWAO*X> z(PK`7LfZ}5baQ#4**(~ig=Hm_;`5m10Yv92UF&K`gEq*?>Ra7=m&s?0;&QC zqJF@$-n-v=v{f)Ff(W(Q#yK$$*_J&=@NTQCpYc1)5+5xK;JvS1@=sA`HJ{CIXhsTe@$Q9^lKakI)NgR_rgsA41$K7+jYyFsPZ1Apq#F7i`QY-|)y*>j z0j-xWNsjCnK<|BKkpJR9K}qRe){jD2&oqjn<|>Vois;d9vR``L|@`=QD2%BoR$$t^-JLb8|~HqUEzCjv(by-3Ak621K$qR=UfGHv)BcJG1 zAc~O{>a4j7*K*1K5?N7j40N=|Tt-wHS73AXEmH+zl9KuYp;&IejftYSVn6A0s0O2X zMH8kiNoc+7+B_Z|8EMUyjmS32|KocH#(8;pSt$0DP=@RYRxj&_HUgEIl@$m!G!4y> zksn)O&g459>QuNT*pi3|mD${!zP-Jj7>~BMx2G6&{V}e;{{_GObf$eQXl;Pp|80-% z0o44rH&^g8vR8J4Uyp4gMZJ_CNurQvX`xvR4{B%--fzCzPvkGmQV;W7^p>x`#>PM= zEbk(UoZ7MI2*H2RQC3>2tbf-&kSY|L_S|zjK7B$^&~NMo)Ed$p!8|y$dZhmPwGx2C z0YyXtr(yQjuY)H(fH#$GqCTw6ez(JWn9P=|M}$s@ttN7Wf&2K0I-jC+h(hkZGYOUs zxdi^9XzqFJR`%G=X(gx)3JQwf{YYWw-x#{(Mtn_1uU=7%_u12HP!9$AqU)`sPXHtm zO!wX(U!Yr*$!#rLt!RflrX!&W*TD0S>gfP0`P(QNB~3d3dwZxU`XgP?x&0)0YA15L zks%32r&nc(f42Cpyf_KV3qw8R%j{=!N(sFpZwiXO_KV}q@#$%@+SipiIqzLJhmwrA zo;)$Xz5dm|g7scfHBH#UXJPe-+pHT8_gyZtfIvdiyR&UZL{)UwlRoU?7mxa$A!mB= z%O?{AtcIv`zP=)HFCB1dyt}<(-x3F1m@OQsf(h{R1;b!(ufoNnJslu8i4{{vC~^~q zc^H2}@)@jdy&FQFS`L`(&3?xwziu;$zTc3U?&1+FlBqJo)$5Dn{HdQmfBq+$8G$-E zar?JBlQYipm)=!KlkG1hNgp>-b6LK3Ju2q!Uzh!syIa)FH??$;zBmqDAz17sEUMm~oLT&I-Skv++%E4k-w&`v5gm*^K9-9OM98 z9j`=v7;PF58M_{hPWcLyw5j!^t2fKxB%Mz`kpiBSZ)lGFxja-aaJ!R3h zsof(!3TAq~%Y#WjOB)-u!NEc7xJz6Pv9ptt#2PjZ4zt;37VC^kuwbeFr$`w#NtRg9 z)&LA&s$lTiFq^1Eyjf8|8`NKG<7lTmEMen&Tzc_LmDSvD482fzP(ixSi_LF;87w9pb{hk2v;2O0>%YDskcx`2T?$C7vKk&+T6*i__s?ElPz|#6*zezr z6$2Z|6&1gGME4trey@4FO2b(crNF1F{U1?5K|#5Lwh3Iu`Atm=_lWMHDO3KYtM7mC zHZngyAbQ415Fn~hYh7%M;P@~Jaf#+#e?6-37`!Thb}2z^%p`0o>+D_A@W@JP&EPmIhs>6%rEoJ{hFv}Vbam^(5K@LANGZXpUZi-oSBfqvb z;cO{j>BI-LGCn?jP14QP<>eQ}%N+SAk5n|&PLAKM8SOZqVHEy23j-e#&wP8%@!5NE zF0LrR!Wx>IF(-jjqoY|Li^!i^epEe~(7cyQ+J!XY{=S-dBeAjoh_C+bjf>jc^fn>C zo}lP?Ahf(QE0Ya6wVwg>=BuP63cD9GRqcZ!Ectb9P-(8%K1}s{1@M=fr)P>$d2w-N za0&loX4TZ*s$sE`ojc8C(})IQ!iFUe!G;6PJeGdUqAgpc+K1XqB0p_)~vH50y`2HlnaEzuv zIZ4XGB9F=M192Qy@6PFLS<7flTwE8B|K5hFBgDDs(f?hKSz<0rzS?%RX2b=$1AvxF zr%&1kL`?5+o>IaqPL4up3kZI5}9`$79GeCU;5kjmMlc)#P;Ivx*~@cA&1pa zss_#UOKt5xw*Q1N%cp*7sfo(U23O`L(pochjb;mcS`06tlm1+$dLo?(7`l{KBuY4&<3LV4}#zGt4PaxzkaiN5ZRQgo+skFdKGOt*xz<= z>I1yt%YMuN#;Q9&5B5ZtP7DRAX`27$%50*KM#je4`{QOimX_#)9Y+sYX(BD9fg~v` zFSqK8VPbn;TJL|;!26e|BKXgQQ{fwA_eXNG6sJ9z7(lSMH&^c2SS$F>FD6S@K3^|I zcWnuW+O2`BzkbaFnm*68%W63NWr)~E(2k)0XZx?9m(P0pVp(ESQtV8lN+n@!V|hw5 zl@<|YTg;kY#K`%PJFT^2V`I0m!<#>BvbIlsipt6?!9TF2=}Tw9@2x2(0{}9I%`2=r zm-X;}BSYBwCf}j~hFOVU=`U11!)2?myO=%g{ywk_+_Vuc2KpV%KRFb`&GycY)_ztP zyATr+gJQhCa7##R$o8Kp)1!-^G{x0 z9yTGS2Rg7HyE9et2`5h}iWp55{R-#smg97d>K|T5k_behfTiTXH3A|EC=>hoiwEa_ za-zOS)p=+KsWRWk6DNvj&(OEogRtA}N3Uy<7xhiSsp0`fMR~^R>hKSGcKsu1kc5PU zx%NI265zS+VM6x~fv<1RAU<kvqM zXv|#T*qElr!Qxjteq3Dh$xuGzsAX4G+#960h0O8E)~BpH2TA|2dkHUW0hHEMGHs^KVHXtfE5}ryy=>!ZJZCd21d3Z zDk=PfkHaU5Bw%eI-KYnGCvFgV^_ed}HmC>xd8tKgN(3-a>1UMkPw z02}$G?VX2ceGLu(fcs`D%Jl9nkkCAFaLd`W3NbxlTJ2`X>sSUh@e`|8*6)F&r~NF` z3Ik|i@qj;%JBif(FjrbIviWIx>(X^{q2L>6f{OH|mzm)iplxdWF!K7Lpc|>U-p8;4 z49UAPJpZi8-XBi&E%O-?iuKS9@|O8BU%1ThNB6z0zaJPO48wls2CWHRwscU?*f`%# zGn0T##C!;FY->om|FcmRD%(&3m(KrV@Vy{a4$f;SHn^)M+@V@2>kg!cC#xt2L)vvjGsG|kkdItf=ch?6M zK7Zoi)tDooAwxgnzYq>Fwf4L7TyQ77xKJb@{E%|IIm{s~XgOGE(e~xb@3X6mlLGOt zxDH2jIkH55&p-Bla3t$qLfZ%!#2B5ME1AFcX)=0E(x{$w3|S~*X%(jbNc0Nb_ajCp zwyZg1s@ymrz?$ug_E3g+`Mlu9<|Y`&o)@%taIlFX#^g;KNIL*0DLlmXg!V^|h3%6n z=8ziu9#I`~9W5%$>YcpEJ8$&8aFItnJUKh#csl*}?_c`@Lt7R=kX~DP2?|PD8=cCM z>F}PoDoSUnz@F6$9!0!}I-k>Gm&t*F0k_T#(lxo}l9Hb%mx(-PF|R~Mwt%1qu^&*0 z{gw*<&DEJtGVmh<0|SlGHck~**G{&^`*F5GjPPkj(5Ts0KdD{+JpLccz;o8V zrCsfg)Z(Lz^u=LS(k>3021(q~gXOy}9|n>vbp^`H`?a5A6H9SkX@6ir6|03OH1Wis zE?S<(TZWWHJJk14r%Wd%_u9i7{ZawVtmB)__4OIeqZzz7yzrjY(XG`wyp3Y|K zA+z`o+KHcv8Wgm@b-sW9z8w1g+q^;-;NQ4)X(c5khmuQfs$#NCKx<4*{(lwTZ2v0S zU2J+?YyL#OSXo|08*^lQ+%*IPtA{+Ktvuky&f>Qhh}`z1Y1=X0OXk5HO--}*Rugx- zfrGWNx7X%7qR){nkiVMIAa6}*xn39R;P#h8Z;}N0=!=O^5VULzt65)bY1X@K#Z*3a z0#`elZMxukdwcKB)vB@hrUsYVk;bK~S8r*{u@Ya}JtCvNTzq%H!)=o8Bk~R?&w9M! zwC4q-#{7PlZapG{yFu`v-Jd6t7W!b@eZ2w)Y?_ z>38}B0zw|26KmXe&v@$(ny=`K#Om?&KfYER$QI60XSLkwY-^KzNG+UeucfQIDL6U} zqyZ+@;4n5&A=_crIzNa$5smehl0t^Fiu@_6?m=U?HBN7FZek)&7epuYJUCgMdzT%NkAkyTSKmM@|6dKI2 zumbV2n&_!EqqEeNdSQQ;J%p>}+J(T0d-iNgn^uH|0E8HyQrPf2)OCW6u5N@?d=prc z#QcQs7fm)o2VKpylJ1j|o)+v#EBi^V^U-hFp;RF=A5q|c0pWNx#6806P;Zb>dhtTe zoM%^?{(rH|=iXAaPV>?p3kV1y4U4v7~zEp&41&}jh?%Qz@CC2I+AqP9aQ$(lF<;>gtnW-BP`yZM*WOe+QsW+l+7jCJ;6W?XwjX6ckX8 zaK86>_wHgD>Kfbyym~yB@xI^zfx@uPyC3yNNO=2XUMkhV%jM8kpQxVWttq2-d;cj< zURriK{BMJzOvwVu?L2>XVq0YQR@;nIkzT?rO-v-}(b7e{D;d_Ps5=pdTISbx3{qhN z!Ehc~78Y|2cGNk?v-kp{rsAR^=Uv38H`0Lo3(6E>Hu4HNAr;m_BqhVQy7WQ{ua)~F zL7;JpAxJlMI0Hbqr{8QqS!@1!C|y)3pyk3@0jRbgXrBn6f~Zo;MrGJh!qLNPZs)f_ zq319!sGieKumX()^2sjg9=is2Oulbd_kOBO7 zIa)Ahtz``>s{+jvb{3W%p77z0tU1UJ%|9BZ2+`*O_}6HMI;AOd3X0S1C#``{Q835V z5NRHef4lvOb~*k5j=kg)aK$Ltzgm7LH9yY_^1X0X zqO-8F`hj^!o1WH!(TsDQ0;gZWS^XB{1cfZ(V7|8^pcP9kcy;@0YU;TWgBHvCn2e0! z&JRTY?S9_-^Wc{2@SViGDQ+KPW&Z<^oFxFSF6Ac%5>rxk3WG>3-8?+TW@c=BnzFOo zkKUz{Vbd|7Xr;S%^|og|gqVwHO7=zH$}aT=0kh# zw|pf9JD%4~iN=E-o}QePKK;Rp%KY}tSw=>_cnlE?_l$v;p{1fVKlG)nv+ttQp;rh& z8^BT?&q&odlnUlR;r1q`iOW8`HB%)&H;plc*nM8-2+b=lww1BRlg^6PTyO-I;*)l5 zSdeP2)uvrgFk=JJF69&=Y}POp_?CW{?YHUQ%W^>51X^wrh5ADJQXG6~Lw zc=h)1=}_J=wNQm>QdazPqGjXHoZMeUSs@V2p!;V5DpF`diC9#rcy`_x{rwi&>~b?f&;8Ufh~;ql z-ZcEcRPdoMjvi=WEjk&4E{$E8%1L^<<%EpuHI^lIHnxk6d!+K;`C7XTV$nTvw$Go1 znXC&kTnGsN?KaY*xWy+uxfKmR5?F*cxgRdKoq8_$ovr$}+}W7m5Kg|WeA+;kc^{Hb zCNMf-pVRQVt>jX_@rVg#`Y|ejI3zqgeUC*zgOUD#A6-ai{yF)dF+@aocxuD19gJI? zbDXg%v!CO0GH=#>I$;>-2j@4p)U6)NOZXj5YXjLzLEzNKCAocp&zyH$y0s_N%|q^b z8OshIf&{X35&S%eUk(35o%4=JqjL;!6ZC<&JZvEbPdK-RxLP zvfm>Yl)Du)u$5-nsDpd4Q&P@pV}LxbyGVKrF^62jv<-#_Y@q7W%%lIdXd>X}-p0np zX{KZuXamPA4xL-$1#vWp6s)#1Sxd9Q$5Os3FjJ$++lPpCOh^SdQMnaZ^jh5sF~x{p z#Ck0r;w~(~A17J=aekf?YD6rR82W8da=INN(V$F8Nf`ygA#oeBZvJIz`-Uf)#Ev*LyuX!O`ja%~+$sH(>`5zp%`w;W}YZUwrHvRh?%P?`zxn=UT@BQ6lLt5Jk}BPEl@QHufLZqXN?B;Xc{vkj#sp7Y-Q zdnXlEQuGHkUa?2CEN5$LTgLzF*|j7qaWN0xDwo3OBElEFlov_tjpRf(hHSv-ZX=$b zGxQK*!Y#YPNx&Eh$U~0chn$ZorGT}@xd~eT-dY9;fIY!{WjL&QBG?aspa-^^fca*4 zi=@B9>o~`8f$Oy|FK3QHfJ-lZba?|i7aOapl7~5u*%XC&v^itK^P8J*Pr4#VGoUmW zw=~|R8QN}Lhfks;T^oyT7C)+xA$Ih$dq=<^JT?%nHMRq-|z;!pfYZVuhD#$VIZ=U8nfP9%qB9o#W4 zF{NX|55NN!%GL8q@TAD^Sb9vT^FVmJ2>u|GtsDvsrC;x|UjCT`!xKRgMikx;X&08j zR(`*WZUnIndE@b9Zf9QcBP$fSWFON40%SX6IYo$Rv*ic$Gfgn^WYYAN}%u+u$9PN>mIyhe2l7A3LfV4v9XW2hFrZ?kMT>r#_ z}cJLwTXnYUbmO)~*2u{d+fQDgo$+1P2KFE)e zYH5Q$gI$9MQ8wwOs>}impmo9cl>Ba3=z+ReSXc+3RbF;*m(_g#PTrPzfg$F)G2k>X zd7z{9?Fo zZzRtd8uIQtlp$xkhdS(7iI16Z}Ty;-4351`|z1Oo~twTNP8uKm=b*7dB-DMbTcwzcZmkqzJv~ zgPtYG`qA-JG*oG{;v0TxO2y~S;U~|E?>{N=l46m z&+nXj&bfD1QB3$}vnljfnSDV~5*0;x1wxZ@6{2?ag6*p5RHqG!B82$Y3AtZ^UZ0+x z&itqH-`d)GadUI?qtMXMZ^8CLVrpt?5BzVScOlbdDC|JP`ZUva+(T z^h|wyWMt$C^P{4o9_YBn>O(Yq3R$6`@<7}&$Q=?A;$B-@^BXtku)4Y`V3#?#TrPw^ z_j(HJGL#2BGY^Nuks1~jw$Ed0Yim1Vrm?iyY!BFPadGinxWPzkwH7i%ez|}@f_dNN zxCsdfE+d!kYinzL?AP1dYd{2byEisA_5tTGIyxEw{{8;`eu4eMGRF22|6 z6&V>Bk2J=b#=p({o}M0IHk*GVJIcpPOG|>e`qFB($~ibXI?|2q{OZuqkn9J>7vR3Z zY%cTj^MB$wXlZFVlV4R;CF3kCESwM3to!@>B0N0&sTTVel!;(YGMCG)t}fbR^n65O zV&b108yf*Rba!`4elTm$=ktk@k`mbmv1uPD_4W04nX4~zb8}C$JjL+vZ~%X1W=6)U zsHphc@sE#>OMk?@No*1>Z$Ux94|+D$J3BjRjj8XM!otD;z7yv%=0=SfA0K}%|M>V= z#Ky)l|2~*WI=^;o&oLsHv%ueu(!T zv#F%`teBXXllJy@nL}%9E7{burlFxBfZx&4A^XnH&!5R(US5_yi1nqOt?@rbJFiJP z7d&-!bux$4)KqmHVxNok^>x1-CMG6iY??dc<#xM8a&j{J(4I~<^0gd_VRJ$3>!W9G zx7$TiQxms|fq?-(KJ7c~C)JK~(1;h!&CRkeVqZUt&26yb>rk1|rA7vZ+ z9vmE~bKvoKL}q3t+ug9g#N!O6gg<>gf6sBTCPZ{}w7L%Q{UatPCxyjg;rPF@-`w1s z%J1vzV;hyt!7zpq2|6}`q8~?}WLkJH>c*}~NWDy=5(|A$Y z4;00EOHs^_$)TJcL{w@Q{ueAvsR_SkeD297uNjNV4PW8ovfV6yne+1pOj2 GTz>&sw4R6n literal 5987 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 diff --git a/app/icons/icon.svg b/app/icons/icon.svg index c6be0ea4..fc44b2fa 100644 --- a/app/icons/icon.svg +++ b/app/icons/icon.svg @@ -7,7 +7,7 @@ viewBox="0 0 377.95275 377.95277" version="1.1" id="svg5" - inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" + inkscape:version="1.3.2 (091e20e, 2023-11-25)" sodipodi:docname="icon.svg" inkscape:export-filename="/home/madam/Documents/work/tuw/alpinemaps/renderer/app/icons/icon_512.png" inkscape:export-xdpi="130.048" @@ -26,15 +26,17 @@ inkscape:pagecheckerboard="0" inkscape:document-units="mm" showgrid="false" - inkscape:zoom="1.28" - inkscape:cx="186.32813" - inkscape:cy="189.84375" + inkscape:zoom="2" + inkscape:cx="109.25" + inkscape:cy="192.5" inkscape:window-width="2560" inkscape:window-height="1369" inkscape:window-x="2560" inkscape:window-y="0" inkscape:window-maximized="1" - inkscape:current-layer="layer1" /> + inkscape:current-layer="layer1" + inkscape:showpageshadow="2" + inkscape:deskcolor="#d1d1d1" /> + id="g1" + transform="matrix(1.1221629,0,0,1.1221629,-26.63737,-12.567281)"> + + sodipodi:nodetypes="ccccc" /> + style="color:#000000;fill:#000000;-inkscape-stroke:none" + d="m 209.30319,73.471058 -59.60311,250.601702 33.43151,6.32287 39.25894,-237.384487 28.16374,5.667052 93.77839,160.229175 16.21226,-26.38589 -99.5274,-151.001981 z" + id="path2" + sodipodi:nodetypes="ccccccccc" /> + sodipodi:nodetypes="ccccccc" /> diff --git a/app/icons/icon_small.svg b/app/icons/icon_small.svg new file mode 100644 index 00000000..14d69f79 --- /dev/null +++ b/app/icons/icon_small.svg @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + From ec8ebe152e3dc99dec7bee1c5d70ab74cd8af71c Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Tue, 16 Jan 2024 20:17:11 +0100 Subject: [PATCH 83/86] make deploy workflow more generic --- .github/workflows/deploy.yml | 45 +++++++++++++++++++++--------------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index bbffa38a..438c3579 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -93,8 +93,14 @@ jobs: id: strings shell: bash run: | - echo "build-output-dir=${{ github.workspace }}/build_${{ matrix.qtarch }}" >> $GITHUB_OUTPUT - echo "install-dir=${{ github.workspace }}/install/${{ matrix.qtarch }}" >> $GITHUB_OUTPUT + BUILD_DIR="build" + APK_TARGET="app" + echo "BUILD_DIR=$BUILD_DIR" >> $GITHUB_ENV + echo "APK_TARGET=$APK_TARGET" >> $GITHUB_ENV + + echo "INSTALL_DIR=install/${{ matrix.qtarch }}" >> $GITHUB_ENV + echo "APK_DIR=$BUILD_DIR/$APK_TARGET/android-build/build/outputs/apk/" >> $GITHUB_ENV + echo "ANDROID_BUILD_DIR=$BUILD_DIR/$APK_TARGET/android-build/" >> $GITHUB_ENV - name: Configure CMake env: @@ -102,16 +108,16 @@ jobs: run: > ${Qt6_DIR}/bin/qt-cmake -G Ninja - -B ${{ steps.strings.outputs.build-output-dir }} + -B $BUILD_DIR -DCMAKE_BUILD_TYPE=Release - -DALP_WWW_INSTALL_DIR=${{ steps.strings.outputs.install-dir }} + -DALP_WWW_INSTALL_DIR=$INSTALL_DIR -DALP_ENABLE_ASSERTS=ON -DFMT_INSTALL=OFF ${{ matrix.additional_cmake_flags }} -S ${{ github.workspace }} - name: Build - run: cmake --build ${{ steps.strings.outputs.build-output-dir }} ${{ matrix.additional_build_flags }} + run: cmake --build $BUILD_DIR ${{ matrix.additional_build_flags }} - name: Signing Android package env: @@ -120,30 +126,31 @@ jobs: run: | echo ${{ secrets.SIGNINGKEYBASE64 }} > release.keystore.base64 base64 -d release.keystore.base64 > release.keystore - $QT_HOST_PATH/bin/androiddeployqt --input ${{ steps.strings.outputs.build-output-dir }}/app/android-alpineapp-deployment-settings.json --output ${{ steps.strings.outputs.build-output-dir }}/app/android-build --android-platform android-33 --gradle --release --sign release.keystore alpinemaps --storepass ${{ secrets.KEYSTOREPASSWORD }} + $QT_HOST_PATH/bin/androiddeployqt --input $BUILD_DIR/$APK_TARGET/android-alpineapp-deployment-settings.json --output $ANDROID_BUILD_DIR --android-platform android-33 --gradle --release --sign release.keystore alpinemaps --storepass ${{ secrets.KEYSTOREPASSWORD }} - name: Readme why Android package was not signed env: secret_test: ${{ secrets.KEYSTOREPASSWORD }} if: matrix.qttarget == 'android' && env.secret_test == '' run: | - echo "Well, the apk wasn't signed because there is no key to sign it with in your repository (the one this was created in)." >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "These are the steps to generate such a key:" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "- https://stackoverflow.com/questions/3997748/how-can-i-create-a-keystore. Use 'alpinemaps' as the alias!" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "- If you have the android dev setup ready in Qt Creator, you can also create the keystore via Projects (on the left side toolboar) -> Android Qt ... -> Build -> Build Steps -> Build Android APK -> Application Signature -> Create. Use 'alpinemaps' as the alias!" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "- Then you have to encode the keystore in base64, e.g., on linux via 'base64 keystorefile > keystorefile.base64'" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "- Finally, create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo " SIGNINGKEYBASE64 = the base64 encoded key" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo " KEYSTOREPASSWORD = the password used to create the keystore" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt - echo "Oh, and I hope this saved your day ;)" >> ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + README_PATH=$APK_DIR/read_me_in_case_you_wonder_why_the_apk_is_not_signed.txt + echo "Well, the apk wasn't signed because there is no key to sign it with in your repository (the one this was created in)." >> $README_PATH + echo "" >> $README_PATH + echo "These are the steps to generate such a key:" >> $README_PATH + echo "- https://stackoverflow.com/questions/3997748/how-can-i-create-a-keystore. Use 'alpinemaps' as the alias!" >> $README_PATH + echo "- If you have the android dev setup ready in Qt Creator, you can also create the keystore via Projects (on the left side toolboar) -> Android Qt ... -> Build -> Build Steps -> Build Android APK -> Application Signature -> Create. Use 'alpinemaps' as the alias!" >> $README_PATH + echo "- Then you have to encode the keystore in base64, e.g., on linux via 'base64 keystorefile > keystorefile.base64'" >> $README_PATH + echo "- Finally, create the following secrets in github -> your repo -> Settings -> Secrets and variables -> Actions -> Repository secrets" >> $README_PATH + echo " SIGNINGKEYBASE64 = the base64 encoded key" >> $README_PATH + echo " KEYSTOREPASSWORD = the password used to create the keystore" >> $README_PATH + echo "" >> $README_PATH + echo "Oh, and I hope this saved your day ;)" >> $README_PATH - name: Copy android packages if: matrix.qttarget == 'android' run: | - mkdir -p ${{ steps.strings.outputs.install-dir }} - cp -r ${{ steps.strings.outputs.build-output-dir }}/app/android-build/build/outputs/apk/release/* ${{ steps.strings.outputs.install-dir }} + mkdir -p $INSTALL_DIR + cp -r $APK_DIR/* $INSTALL_DIR - name: Create artifact uses: actions/upload-artifact@v4 From 1979015998d95d03045757d2af667c997252263c Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Tue, 16 Jan 2024 22:22:46 +0100 Subject: [PATCH 84/86] don't hide project dependent strings --- .github/workflows/deploy.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 438c3579..3c291a12 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -89,8 +89,6 @@ jobs: run: emcc -v - name: Set reusable strings - # Turn repeated input strings (such as the build output directory) into step outputs. These step outputs can be used throughout the workflow file. - id: strings shell: bash run: | BUILD_DIR="build" @@ -101,6 +99,7 @@ jobs: echo "INSTALL_DIR=install/${{ matrix.qtarch }}" >> $GITHUB_ENV echo "APK_DIR=$BUILD_DIR/$APK_TARGET/android-build/build/outputs/apk/" >> $GITHUB_ENV echo "ANDROID_BUILD_DIR=$BUILD_DIR/$APK_TARGET/android-build/" >> $GITHUB_ENV + echo "DEPLOYMENT_SETTINGS=BUILD_DIR/$APK_TARGET/android-alpineapp-deployment-settings.json" >> $GITHUB_ENV - name: Configure CMake env: @@ -126,7 +125,7 @@ jobs: run: | echo ${{ secrets.SIGNINGKEYBASE64 }} > release.keystore.base64 base64 -d release.keystore.base64 > release.keystore - $QT_HOST_PATH/bin/androiddeployqt --input $BUILD_DIR/$APK_TARGET/android-alpineapp-deployment-settings.json --output $ANDROID_BUILD_DIR --android-platform android-33 --gradle --release --sign release.keystore alpinemaps --storepass ${{ secrets.KEYSTOREPASSWORD }} + $QT_HOST_PATH/bin/androiddeployqt --input $DEPLOYMENT_SETTINGS --output $ANDROID_BUILD_DIR --android-platform android-33 --gradle --release --sign release.keystore alpinemaps --storepass ${{ secrets.KEYSTOREPASSWORD }} - name: Readme why Android package was not signed env: From d5ac90c1c850810fa57f87d768f8a0f1e8efdfb2 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Tue, 16 Jan 2024 22:41:29 +0100 Subject: [PATCH 85/86] forgot a $ --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 3c291a12..a24007b5 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -99,7 +99,7 @@ jobs: echo "INSTALL_DIR=install/${{ matrix.qtarch }}" >> $GITHUB_ENV echo "APK_DIR=$BUILD_DIR/$APK_TARGET/android-build/build/outputs/apk/" >> $GITHUB_ENV echo "ANDROID_BUILD_DIR=$BUILD_DIR/$APK_TARGET/android-build/" >> $GITHUB_ENV - echo "DEPLOYMENT_SETTINGS=BUILD_DIR/$APK_TARGET/android-alpineapp-deployment-settings.json" >> $GITHUB_ENV + echo "DEPLOYMENT_SETTINGS=$BUILD_DIR/$APK_TARGET/android-alpineapp-deployment-settings.json" >> $GITHUB_ENV - name: Configure CMake env: From 6c739f4030ab6f6bc0e85665a9651228ebf77d23 Mon Sep 17 00:00:00 2001 From: Adam Celarek <5292991+adam-ce@users.noreply.github.com> Date: Wed, 17 Jan 2024 00:29:29 +0100 Subject: [PATCH 86/86] switch to fixed version dependencies for internal stuff as well (don't break if we are looking at old commits, or when adam works on some stuff in the dependencies). --- CMakeLists.txt | 4 ++-- nucleus/CMakeLists.txt | 2 +- unittests/CMakeLists.txt | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9e6ea078..b93e32b3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -80,8 +80,8 @@ if (ALP_ENABLE_POSITIONING) endif() include(cmake/alp_add_git_repository.cmake) -alp_add_git_repository(renderer_static_data URL https://github.com/AlpineMapsOrg/renderer_static_data.git COMMITISH origin/main DO_NOT_ADD_SUBPROJECT) -alp_add_git_repository(alpineapp_fonts URL https://github.com/AlpineMapsOrg/fonts.git COMMITISH origin/main DO_NOT_ADD_SUBPROJECT) +alp_add_git_repository(renderer_static_data URL https://github.com/AlpineMapsOrg/renderer_static_data.git COMMITISH v23.11 DO_NOT_ADD_SUBPROJECT) +alp_add_git_repository(alpineapp_fonts URL https://github.com/AlpineMapsOrg/fonts.git COMMITISH v23.11 DO_NOT_ADD_SUBPROJECT) alp_add_git_repository(doc URL https://github.com/AlpineMapsOrg/documentation.git COMMITISH origin/main DO_NOT_ADD_SUBPROJECT DESTINATION_PATH doc) diff --git a/nucleus/CMakeLists.txt b/nucleus/CMakeLists.txt index e53699bc..f261418c 100644 --- a/nucleus/CMakeLists.txt +++ b/nucleus/CMakeLists.txt @@ -20,7 +20,7 @@ project(alpine-renderer-nucleus LANGUAGES CXX) -alp_add_git_repository(radix URL https://github.com/AlpineMapsOrg/radix.git COMMITISH origin/main NOT_SYSTEM) +alp_add_git_repository(radix URL https://github.com/AlpineMapsOrg/radix.git COMMITISH v24.01.17 NOT_SYSTEM) alp_add_git_repository(tl_expected URL https://github.com/TartanLlama/expected.git COMMITISH v1.1.0 DO_NOT_ADD_SUBPROJECT) if (NOT TARGET fmt) alp_add_git_repository(fmt URL https://github.com/fmtlib/fmt.git COMMITISH 10.1.1) diff --git a/unittests/CMakeLists.txt b/unittests/CMakeLists.txt index 5efeeb4e..6b20df7c 100644 --- a/unittests/CMakeLists.txt +++ b/unittests/CMakeLists.txt @@ -18,7 +18,7 @@ project(alpine-renderer-unittests LANGUAGES CXX) -alp_add_git_repository(qml_catch2_console URL https://github.com/AlpineMapsOrg/qml_catch2_console.git COMMITISH origin/main DO_NOT_ADD_SUBPROJECT) +alp_add_git_repository(qml_catch2_console URL https://github.com/AlpineMapsOrg/qml_catch2_console.git COMMITISH v24.01.17 DO_NOT_ADD_SUBPROJECT) include(${CMAKE_SOURCE_DIR}/cmake/alp_add_unittest.cmake) add_subdirectory(nucleus)