Compare commits
1 Commits
matheusgom
...
release/20
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
99591d1e54 |
@@ -1,61 +1,48 @@
|
|||||||
# Configuration file for clang-format, based on docs/CPP_STYLE.md.
|
# Configuration file for clang-format, based on docs/CPP_STYLE.md.
|
||||||
|
|
||||||
|
---
|
||||||
BasedOnStyle: Google
|
BasedOnStyle: Google
|
||||||
|
|
||||||
AccessModifierOffset: -2
|
AccessModifierOffset: -2
|
||||||
AlignAfterOpenBracket: Align
|
|
||||||
AlignConsecutiveMacros: AcrossEmptyLinesAndComments
|
|
||||||
AlignEscapedNewlines: LeftWithLastLine
|
|
||||||
AlignOperands: AlignAfterOperator
|
AlignOperands: AlignAfterOperator
|
||||||
AllowShortBlocksOnASingleLine: Empty
|
AllowShortBlocksOnASingleLine: Empty
|
||||||
AllowShortCaseLabelsOnASingleLine: true
|
|
||||||
AllowShortFunctionsOnASingleLine: Inline
|
|
||||||
AllowShortIfStatementsOnASingleLine: Never
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
AllowShortLoopsOnASingleLine: false
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AllowShortCaseLabelsOnASingleLine: true
|
||||||
BraceWrapping:
|
BraceWrapping:
|
||||||
AfterCaseLabel: true
|
AfterCaseLabel: true
|
||||||
AfterClass: true
|
AfterClass: true
|
||||||
AfterControlStatement: Always
|
AfterControlStatement: Always
|
||||||
AfterEnum: true
|
AfterEnum: true
|
||||||
AfterExternBlock: true
|
|
||||||
AfterFunction: true
|
AfterFunction: true
|
||||||
AfterNamespace: true
|
AfterNamespace: true
|
||||||
AfterObjCDeclaration: true
|
AfterObjCDeclaration: true
|
||||||
AfterStruct: true
|
AfterStruct: true
|
||||||
AfterUnion: true
|
AfterUnion: true
|
||||||
|
AfterExternBlock: true
|
||||||
BeforeCatch: true
|
BeforeCatch: true
|
||||||
BeforeElse: true
|
BeforeElse: true
|
||||||
BeforeLambdaBody: true
|
BeforeLambdaBody: true
|
||||||
BeforeWhile: true
|
BeforeWhile: true
|
||||||
|
IndentBraces: false
|
||||||
SplitEmptyFunction: false
|
SplitEmptyFunction: false
|
||||||
SplitEmptyNamespace: false
|
|
||||||
SplitEmptyRecord: false
|
SplitEmptyRecord: false
|
||||||
BinPackArguments: true
|
SplitEmptyNamespace: false
|
||||||
BinPackParameters: true
|
|
||||||
BreakAfterJavaFieldAnnotations: true
|
|
||||||
BreakBeforeBraces: Custom
|
BreakBeforeBraces: Custom
|
||||||
BreakConstructorInitializers: BeforeComma
|
BreakConstructorInitializers: BeforeComma
|
||||||
BreakInheritanceList: BeforeComma
|
BreakInheritanceList: BeforeComma
|
||||||
ColumnLimit: 120
|
ColumnLimit: 120
|
||||||
ConstructorInitializerIndentWidth: 2
|
ConstructorInitializerIndentWidth: 2
|
||||||
ContinuationIndentWidth: 4
|
ContinuationIndentWidth: 2
|
||||||
DerivePointerAlignment: false
|
DerivePointerAlignment: false
|
||||||
EmptyLineBeforeAccessModifier: Always
|
|
||||||
IncludeBlocks: Preserve
|
IncludeBlocks: Preserve
|
||||||
IndentAccessModifiers: false
|
|
||||||
IndentCaseLabels: false
|
IndentCaseLabels: false
|
||||||
IndentExternBlock: NoIndent
|
IndentExternBlock: NoIndent
|
||||||
InsertBraces: false
|
|
||||||
InsertNewlineAtEOF: true
|
InsertNewlineAtEOF: true
|
||||||
LambdaBodyIndentation: OuterScope
|
PackConstructorInitializers: Never
|
||||||
PackConstructorInitializers: CurrentLine
|
|
||||||
PointerAlignment: Middle
|
PointerAlignment: Middle
|
||||||
RemoveBracesLLVM: true
|
|
||||||
RemoveSemicolon: true
|
|
||||||
QualifierAlignment: Right
|
QualifierAlignment: Right
|
||||||
SpacesInContainerLiterals: false
|
SpacesInContainerLiterals: false
|
||||||
Standard: Latest
|
Standard: Latest
|
||||||
TabWidth: 2
|
TabWidth: 2
|
||||||
|
UseTab: Never
|
||||||
---
|
|
||||||
Language: Java
|
|
||||||
AllowShortFunctionsOnASingleLine: Empty
|
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
# Files that should not be formatted.
|
|
||||||
./3party
|
|
||||||
# A patched copy of the https://registry.khronos.org/OpenGL/api/GLES3/gl3.h
|
|
||||||
./android/sdk/src/main/cpp/app/organicmaps/sdk/opengl/gl3stub.h
|
|
||||||
# Formatting it leads to crashes in runtime. Newer protobuf may fix it.
|
|
||||||
./libs/indexer/drules_struct.pb.cc
|
|
||||||
# No need to format this 3party tool.
|
|
||||||
tools/osmctools/*.c
|
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
name: 🐞 Bug Report
|
name: 🐞 Bug Report
|
||||||
description: Report a problem you've encountered
|
description: Report a problem you've encountered
|
||||||
|
title: "bug: "
|
||||||
labels:
|
labels:
|
||||||
- bug
|
- bug
|
||||||
body:
|
body:
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
name: "💡 Feature Request"
|
name: "💡 Feature Request"
|
||||||
description: "Suggest an idea or improvement for CoMaps"
|
description: "Suggest an idea or improvement for CoMaps"
|
||||||
|
title: "feat: "
|
||||||
labels:
|
labels:
|
||||||
- "enhancement"
|
- "enhancement"
|
||||||
body:
|
body:
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ on:
|
|||||||
- track_generator/**
|
- track_generator/**
|
||||||
- xcode/**
|
- xcode/**
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
android-google-beta:
|
android-google-beta:
|
||||||
name: Android Google Beta
|
name: Android Google Beta
|
||||||
@@ -68,6 +71,10 @@ jobs:
|
|||||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Compile
|
- name: Compile
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: android
|
working-directory: android
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
name: Android Check Store Metadata
|
name: Android Check Metadata
|
||||||
on:
|
on:
|
||||||
workflow_dispatch: # Manual trigger
|
workflow_dispatch: # Manual trigger
|
||||||
pull_request:
|
pull_request:
|
||||||
@@ -21,8 +21,5 @@ jobs:
|
|||||||
android
|
android
|
||||||
tools/python/check_store_metadata.py
|
tools/python/check_store_metadata.py
|
||||||
|
|
||||||
- name: Check Google Play metadata
|
- name: Check metadata
|
||||||
run: ./tools/python/check_store_metadata.py gplay
|
run: ./tools/python/check_store_metadata.py android
|
||||||
|
|
||||||
- name: Check F-Droid metadata
|
|
||||||
run: ./tools/python/check_store_metadata.py fdroid
|
|
||||||
|
|||||||
@@ -34,6 +34,9 @@ on:
|
|||||||
- track_generator/**
|
- track_generator/**
|
||||||
- xcode/**
|
- xcode/**
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
name: Android Lint
|
name: Android Lint
|
||||||
@@ -48,6 +51,10 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: android
|
working-directory: android
|
||||||
@@ -86,6 +93,10 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -4,6 +4,9 @@ on:
|
|||||||
schedule:
|
schedule:
|
||||||
- cron: '0 5 * * 0' # Once per week at 05:00 UTC
|
- cron: '0 5 * * 0' # Once per week at 05:00 UTC
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
precondition:
|
precondition:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -70,6 +73,10 @@ jobs:
|
|||||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Compile
|
- name: Compile
|
||||||
shell: bash
|
shell: bash
|
||||||
working-directory: android
|
working-directory: android
|
||||||
|
|||||||
@@ -2,25 +2,30 @@ name: Android Release Metadata
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch: # Manual trigger
|
workflow_dispatch: # Manual trigger
|
||||||
|
|
||||||
|
env:
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
android-release-metadata:
|
android-release-metadata:
|
||||||
name: Upload Google Play metadata
|
name: Upload Google Play metadata
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
environment: production
|
environment: production
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout sources
|
||||||
|
# TODO: use shallow (and sparse?) checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
|
||||||
fetch-depth: 1
|
# - name: Parallel submodules checkout
|
||||||
sparse-checkout: |
|
# shell: bash
|
||||||
android
|
# run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
tools/python/check_store_metadata.py
|
|
||||||
|
|
||||||
- name: Restore release keys
|
- name: Restore release keys
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
|
echo "$PRIVATE_H" | base64 -d > private.h
|
||||||
echo "$GOOGLE_PLAY_JSON" | base64 -d > android/app/google-play.json
|
echo "$GOOGLE_PLAY_JSON" | base64 -d > android/app/google-play.json
|
||||||
env:
|
env:
|
||||||
|
PRIVATE_H: ${{ secrets.PRIVATE_H }}
|
||||||
GOOGLE_PLAY_JSON: ${{ secrets.GOOGLE_PLAY_JSON }}
|
GOOGLE_PLAY_JSON: ${{ secrets.GOOGLE_PLAY_JSON }}
|
||||||
|
|
||||||
- name: Upload
|
- name: Upload
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ on:
|
|||||||
env:
|
env:
|
||||||
RELEASE_NOTES: android/app/src/google/play/release-notes/en-US/default.txt
|
RELEASE_NOTES: android/app/src/google/play/release-notes/en-US/default.txt
|
||||||
FDROID_VERSION: android/app/src/fdroid/play/version.yaml
|
FDROID_VERSION: android/app/src/fdroid/play/version.yaml
|
||||||
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
tag:
|
tag:
|
||||||
@@ -116,6 +117,10 @@ jobs:
|
|||||||
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
SECURE_PROPERTIES: ${{ secrets.SECURE_PROPERTIES }}
|
||||||
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
RELEASE_KEYSTORE: ${{ secrets.RELEASE_KEYSTORE }}
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Set up SDK
|
- name: Set up SDK
|
||||||
shell: bash
|
shell: bash
|
||||||
run: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
|
run: echo "sdk.dir=$ANDROID_SDK_ROOT" > android/local.properties
|
||||||
|
|||||||
@@ -3,20 +3,20 @@ on:
|
|||||||
workflow_dispatch: # Manual trigger
|
workflow_dispatch: # Manual trigger
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- packaging/app.comaps.comaps.metainfo.xml
|
- packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
- .forgejo/workflows/appstream-check.yaml # Run check on self change
|
- .forgejo/workflows/appstream-check.yaml # Run check on self change
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate-appstream:
|
validate-appstream:
|
||||||
name: Validate appstream metadata xml
|
name: Validate appstream metadata xml
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
sparse-checkout: |
|
sparse-checkout: |
|
||||||
packaging/app.comaps.comaps.metainfo.xml
|
packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
|
|
||||||
- name: Install appstream validator and flatpak Builder
|
- name: Install appstream validator and flatpak Builder
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -29,8 +29,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Lint appstream data with flatpak Builder
|
- name: Lint appstream data with flatpak Builder
|
||||||
shell: bash
|
shell: bash
|
||||||
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.comaps.comaps.metainfo.xml
|
run: flatpak run --command=flatpak-builder-lint org.flatpak.Builder appstream packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
|
|
||||||
- name: Run appstreamcli in pedantic mode
|
- name: Run appstreamcli in pedantic mode
|
||||||
shell: bash
|
shell: bash
|
||||||
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.comaps.comaps.metainfo.xml
|
run: flatpak run --command=appstreamcli org.flatpak.Builder validate --pedantic packaging/app.organicmaps.desktop.metainfo.xml
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
should-run-check:
|
should-run-check:
|
||||||
name: Should run coverage
|
name: Should run coverage
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
outputs:
|
outputs:
|
||||||
run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }}
|
run-from-pr: ${{ steps.run-from-pr.outputs.run-from-pr }}
|
||||||
manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }}
|
manually-triggered: ${{ steps.manually-triggered.outputs.manually-triggered }}
|
||||||
@@ -59,9 +59,14 @@ jobs:
|
|||||||
coverage:
|
coverage:
|
||||||
needs: should-run-check
|
needs: should-run-check
|
||||||
name: Generate coverage report
|
name: Generate coverage report
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}}
|
if: ${{ needs.should-run-check.outputs.run-from-pr == 'true' || needs.should-run-check.outputs.manually-triggered == 'true'}}
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free disk space by removing .NET, Android and Haskell
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -89,6 +94,10 @@ jobs:
|
|||||||
llvm \
|
llvm \
|
||||||
gcovr
|
gcovr
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
name: DCO
|
|
||||||
on: [pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Check for Developer Certificate of Origin (DCO) compliance
|
|
||||||
uses: https://github.com/KineticCafe/actions-dco@fb284c903a7673a3d4b0bdd104479a6f0d46dae7 # v1.3.6
|
|
||||||
@@ -3,20 +3,20 @@ on:
|
|||||||
workflow_dispatch: # Manual trigger
|
workflow_dispatch: # Manual trigger
|
||||||
pull_request:
|
pull_request:
|
||||||
paths:
|
paths:
|
||||||
- qt/res/linux/app.comaps.comaps.desktop
|
- qt/res/app.organicmaps.desktop.desktop
|
||||||
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change
|
- .forgejo/workflows/desktop-file-check.yaml # Run check on self change
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
validate-desktop-file:
|
validate-desktop-file:
|
||||||
name: Validate .desktop file
|
name: Validate .desktop file
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 1
|
fetch-depth: 1
|
||||||
sparse-checkout: |
|
sparse-checkout: |
|
||||||
qt/res/linux/app.comaps.comaps.desktop
|
qt/res/app.organicmaps.desktop.desktop
|
||||||
|
|
||||||
- name: Install desktop-file-validate tool
|
- name: Install desktop-file-validate tool
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -27,4 +27,4 @@ jobs:
|
|||||||
|
|
||||||
- name: Validate desktop file
|
- name: Validate desktop file
|
||||||
shell: bash
|
shell: bash
|
||||||
run: desktop-file-validate qt/res/linux/app.comaps.comaps.desktop && echo "Successfully validated .desktop file"
|
run: desktop-file-validate qt/res/app.organicmaps.desktop.desktop && echo "Successfully validated .desktop file"
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ jobs:
|
|||||||
name: Apple TestFlight
|
name: Apple TestFlight
|
||||||
runs-on: macos-15
|
runs-on: macos-15
|
||||||
env:
|
env:
|
||||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||||
LANGUAGE: en_US.UTF-8
|
LANGUAGE: en_US.UTF-8
|
||||||
LC_ALL: en_US.UTF-8
|
LC_ALL: en_US.UTF-8
|
||||||
|
|||||||
@@ -37,11 +37,11 @@ jobs:
|
|||||||
name: Build iOS
|
name: Build iOS
|
||||||
runs-on: macos-15
|
runs-on: macos-15
|
||||||
env:
|
env:
|
||||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||||
LANGUAGE: en_US.UTF-8
|
LANGUAGE: en_US.UTF-8
|
||||||
LC_ALL: en_US.UTF-8
|
LC_ALL: en_US.UTF-8
|
||||||
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
|
TEST_RESULTS_BUNDLE_NAME: OMaps-Test-Results
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -74,8 +74,8 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
xcodebuild test \
|
xcodebuild test \
|
||||||
-workspace xcode/CoMaps.xcworkspace \
|
-workspace xcode/omim.xcworkspace \
|
||||||
-scheme CoMaps \
|
-scheme OMaps \
|
||||||
-configuration Debug \
|
-configuration Debug \
|
||||||
-sdk iphonesimulator \
|
-sdk iphonesimulator \
|
||||||
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
|
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
|
||||||
@@ -97,8 +97,8 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
xcodebuild build \
|
xcodebuild build \
|
||||||
-workspace xcode/CoMaps.xcworkspace \
|
-workspace xcode/omim.xcworkspace \
|
||||||
-scheme CoMaps \
|
-scheme OMaps \
|
||||||
-configuration Release \
|
-configuration Release \
|
||||||
-destination 'generic/platform=iOS' \
|
-destination 'generic/platform=iOS' \
|
||||||
-quiet \
|
-quiet \
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ jobs:
|
|||||||
name: iOS Release
|
name: iOS Release
|
||||||
runs-on: macos-15
|
runs-on: macos-15
|
||||||
env:
|
env:
|
||||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||||
LANGUAGE: en_US.UTF-8
|
LANGUAGE: en_US.UTF-8
|
||||||
LC_ALL: en_US.UTF-8
|
LC_ALL: en_US.UTF-8
|
||||||
|
|||||||
@@ -31,13 +31,18 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
linux-no-unity:
|
linux-no-unity:
|
||||||
name: Linux no unity build
|
name: Linux no unity build
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
# Cancels previous jobs if the same branch or PR was updated again.
|
# Cancels previous jobs if the same branch or PR was updated again.
|
||||||
concurrency:
|
concurrency:
|
||||||
group: ${{ github.workflow }}-no-unity-${{ github.event.pull_request.number || github.ref }}
|
group: ${{ github.workflow }}-no-unity-${{ github.event.pull_request.number || github.ref }}
|
||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free disk space by removing .NET, Android and Haskell
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
@@ -66,6 +71,10 @@ jobs:
|
|||||||
libqt6positioning6-plugins \
|
libqt6positioning6-plugins \
|
||||||
libqt6positioning6
|
libqt6positioning6
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
@@ -90,7 +99,7 @@ jobs:
|
|||||||
|
|
||||||
linux-matrix:
|
linux-matrix:
|
||||||
name: Linux builds and tests
|
name: Linux builds and tests
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-24.04
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -102,6 +111,11 @@ jobs:
|
|||||||
cancel-in-progress: true
|
cancel-in-progress: true
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
|
- name: Free disk space by removing .NET, Android and Haskell
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet /usr/local/lib/android /opt/ghc
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
@@ -128,19 +142,15 @@ jobs:
|
|||||||
libqt6positioning6-plugins \
|
libqt6positioning6-plugins \
|
||||||
libqt6positioning6
|
libqt6positioning6
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
key: ${{ github.workflow }}-unity-${{ matrix.compiler.CC }}-${{ matrix.CMAKE_BUILD_TYPE }}
|
key: ${{ github.workflow }}-unity-${{ matrix.compiler.CC }}-${{ matrix.CMAKE_BUILD_TYPE }}
|
||||||
|
|
||||||
- name: Configure repository
|
|
||||||
shell: bash
|
|
||||||
env:
|
|
||||||
SKIP_MAP_DOWNLOAD: 1
|
|
||||||
SKIP_GENERATE_SYMBOLS: 1
|
|
||||||
SKIP_GENERATE_DRULES: 1
|
|
||||||
run: ./configure.sh
|
|
||||||
|
|
||||||
- name: CMake
|
- name: CMake
|
||||||
shell: bash
|
shell: bash
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ jobs:
|
|||||||
name: macOS builds and tests
|
name: macOS builds and tests
|
||||||
runs-on: macos-15
|
runs-on: macos-15
|
||||||
env:
|
env:
|
||||||
DEVELOPER_DIR: /Applications/Xcode_26.app/Contents/Developer
|
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||||
HOMEBREW_NO_ANALYTICS: 1
|
HOMEBREW_NO_ANALYTICS: 1
|
||||||
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
HOMEBREW_NO_INSTALL_CLEANUP: 1
|
||||||
strategy:
|
strategy:
|
||||||
@@ -57,6 +57,10 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6
|
HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1 brew install ninja qt@6
|
||||||
|
|
||||||
|
- name: Configure repository
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
@@ -1,577 +0,0 @@
|
|||||||
name: map-generator
|
|
||||||
on:
|
|
||||||
workflow_dispatch: # Manual trigger
|
|
||||||
inputs:
|
|
||||||
map-generator-test:
|
|
||||||
description: 'Test (non-prod) generation?'
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
# run-copy-coasts:
|
|
||||||
# description: 'Copy last used coastlines?'
|
|
||||||
# required: false
|
|
||||||
# default: true
|
|
||||||
# type: boolean
|
|
||||||
run-isolines:
|
|
||||||
description: 'Update altitude isolines?'
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
run-tiger:
|
|
||||||
description: 'Update TIGER address data?'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
run-planet-pbf:
|
|
||||||
description: 'Update PBF planet (for Wiki & subways)?'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
run-subways:
|
|
||||||
description: 'Update subways?'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
run-wiki:
|
|
||||||
description: 'Update Wikipedia descriptions?'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
run-planet-o5m:
|
|
||||||
description: 'Update O5M planet (for mapgen)?'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
run-mapgen:
|
|
||||||
description: 'Run maps generation?'
|
|
||||||
required: false
|
|
||||||
default: true
|
|
||||||
type: boolean
|
|
||||||
map-generator-continue:
|
|
||||||
description: 'Continue previous map generation?'
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
# map-generator-countries:
|
|
||||||
# description: 'Generate specific MWMs? (i.e. "US_New York_*, foo")'
|
|
||||||
# required: false
|
|
||||||
# type: string
|
|
||||||
run-upload:
|
|
||||||
description: 'Upload latest maps to CDN?'
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
type: boolean
|
|
||||||
# reset:
|
|
||||||
# description: 'Reset part of the system?'
|
|
||||||
# required: false
|
|
||||||
# default: 'no'
|
|
||||||
# type: choice
|
|
||||||
# options:
|
|
||||||
# - 'no'
|
|
||||||
# - wiki-ratelimit
|
|
||||||
|
|
||||||
## RCLONE_CONF is multi-line text containing keys and credentials for us2,ru1,fi1,de1 servers
|
|
||||||
|
|
||||||
env:
|
|
||||||
RCLONE_CONF: ${{ secrets.RCLONE_CONF }}
|
|
||||||
WIKIMEDIA_USERNAME: ${{ secrets.WIKIMEDIA_USERNAME }}
|
|
||||||
WIKIMEDIA_PASSWORD: ${{ secrets.WIKIMEDIA_PASSWORD }}
|
|
||||||
ZULIP_BOT_EMAIL: ${{ secrets.ZULIP_BOT_EMAIL }}
|
|
||||||
ZULIP_API_KEY: ${{ secrets.ZULIP_API_KEY }}
|
|
||||||
MWMTEST: ${{ inputs.map-generator-test }}
|
|
||||||
MWMCONTINUE: ${{ inputs.map-generator-continue }}
|
|
||||||
# MWMCOUNTRIES: ${{ inputs.map-generator-countries }}
|
|
||||||
DEBIAN_FRONTEND: noninteractive
|
|
||||||
TZ: Etc/UTC
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
clone-repos:
|
|
||||||
name: Clone Git Repos
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal:/mnt/4tbexternal
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: "~"
|
|
||||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
- name: Checkout main repo
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "Cloning $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY branch $FORGEJO_REF_NAME"
|
|
||||||
cd ~
|
|
||||||
git clone --depth 1 --recurse-submodules --shallow-submodules -b $FORGEJO_REF_NAME --single-branch $FORGEJO_SERVER_URL/$FORGEJO_REPOSITORY.git comaps
|
|
||||||
- name: Checkout wikiparser repo
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd ~
|
|
||||||
git clone --depth 1 --single-branch https://codeberg.org/comaps/wikiparser.git
|
|
||||||
- name: Checkout subways repo
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd ~
|
|
||||||
git clone --depth 1 --single-branch https://codeberg.org/comaps/subways.git
|
|
||||||
|
|
||||||
copy-coasts:
|
|
||||||
# if: inputs.run-copy-coasts
|
|
||||||
name: Copy Previously Generated Coasts
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- name: Copy Coasts
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
echo "WorldCoasts available:"
|
|
||||||
ls -al /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.*
|
|
||||||
|
|
||||||
if [ -f /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom ]; then
|
|
||||||
|
|
||||||
echo "Before:"
|
|
||||||
ls -al /home/planet/latest_coasts*
|
|
||||||
# TODO: don't copy coasts from test generations
|
|
||||||
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.geom /home/planet/latest_coasts.geom
|
|
||||||
cp -p /mnt/4tbexternal/osm-maps/*/intermediate_data/WorldCoasts.rawgeom /home/planet/latest_coasts.rawgeom
|
|
||||||
|
|
||||||
echo "After:"
|
|
||||||
ls -al /home/planet/latest_coasts*
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
echo "No WorldCoasts found."
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
update-isolines:
|
|
||||||
if: inputs.run-isolines
|
|
||||||
name: Update Isolines
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
needs:
|
|
||||||
- clone-repos
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: "~"
|
|
||||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
# TODO: we only need to update these if our SRTM or countries change
|
|
||||||
# TODO: after update, verify that sizable files exist: /home/planet/isolines/*.isolines
|
|
||||||
- name: Update Isolines
|
|
||||||
shell: bash
|
|
||||||
# TODO: preserve previous isolines version?
|
|
||||||
# TODO: cleanup the tmp-tiles dir after completion
|
|
||||||
run: |
|
|
||||||
cd ~/comaps/
|
|
||||||
./tools/unix/build_omim.sh -p ~ -R topography_generator_tool
|
|
||||||
rm -rf /home/planet/isolines/
|
|
||||||
mkdir /home/planet/isolines/
|
|
||||||
~/omim-build-relwithdebinfo/topography_generator_tool \
|
|
||||||
--profiles_path=./data/conf/isolines/isolines-profiles.json \
|
|
||||||
--countries_to_generate_path=./data/conf/isolines/countries-to-generate.json \
|
|
||||||
--tiles_isolines_out_dir=/home/planet/isolines/tmp-tiles/ \
|
|
||||||
--countries_isolines_out_dir=/home/planet/isolines/ \
|
|
||||||
--data_dir=./data/ \
|
|
||||||
--srtm_path=/home/planet/SRTM-patched-europe/ \
|
|
||||||
--threads=96
|
|
||||||
- name: Check isolines
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
NUMISO=$(ls -al /home/planet/isolines/*.isolines | wc -l)
|
|
||||||
echo "Found $NUMISO isolines"
|
|
||||||
if [ $NUMISO -lt 10 ]; then
|
|
||||||
echo "ERROR: Did generation fail?"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- name: Notify Zulip
|
|
||||||
run: |
|
|
||||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
|
||||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
|
||||||
--data-urlencode type=stream \
|
|
||||||
--data-urlencode 'to="DevOps"' \
|
|
||||||
--data-urlencode topic=codeberg-bot \
|
|
||||||
--data-urlencode 'content=Isolines are done!'
|
|
||||||
|
|
||||||
update-tiger:
|
|
||||||
if: inputs.run-tiger
|
|
||||||
name: Update TIGER
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
needs:
|
|
||||||
- clone-repos
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: "~"
|
|
||||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
- name: Build address_parser
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd ~/comaps
|
|
||||||
#rm -rf ~/omim-build-relwithdebinfo/CMakeCache.txt
|
|
||||||
#rm -rf ~/omim-build-relwithdebinfo/CMakeFiles
|
|
||||||
./tools/unix/build_omim.sh -p ~ -R address_parser_tool
|
|
||||||
- name: Update TIGER from Nominatim
|
|
||||||
shell: bash
|
|
||||||
# TODO: use curl instead of wget2
|
|
||||||
run: |
|
|
||||||
# TODO: maybe remove old osm-planet/tiger first?
|
|
||||||
cd /home/planet/
|
|
||||||
mkdir -p tiger
|
|
||||||
wget2 https://nominatim.org/data/tiger-nominatim-preprocessed-latest.csv.tar.gz
|
|
||||||
cd ~/comaps
|
|
||||||
tar -xOzf /home/planet/tiger-nominatim-preprocessed-latest.csv.tar.gz | ~/omim-build-relwithdebinfo/address_parser_tool --output_path=/home/planet/tiger
|
|
||||||
|
|
||||||
update-planet-pbf:
|
|
||||||
if: inputs.run-planet-pbf
|
|
||||||
name: Update PBF Planet
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- name: Download Planet File if Absent
|
|
||||||
shell: bash
|
|
||||||
# TODO: replace wget2 with curl -Z
|
|
||||||
run: |
|
|
||||||
if [ ! -d /home/planet/planet/ ]; then
|
|
||||||
mkdir -p /home/planet/planet/
|
|
||||||
fi
|
|
||||||
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
|
|
||||||
cd /home/planet/planet/
|
|
||||||
wget2 --verbose --progress=bar --continue https://ftpmirror.your.org/pub/openstreetmap/pbf/planet-latest.osm.pbf
|
|
||||||
else
|
|
||||||
echo "planet-latest.osm.pbf was found, raw download not required."
|
|
||||||
fi
|
|
||||||
- name: Update PBF Planet
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd /home/planet/planet/
|
|
||||||
rm -f planet-latest-new.osm.pbf
|
|
||||||
pyosmium-up-to-date planet-latest.osm.pbf -o planet-latest-new.osm.pbf -v --size 16384
|
|
||||||
mv planet-latest-new.osm.pbf planet-latest.osm.pbf
|
|
||||||
- name: Notify Zulip
|
|
||||||
run: |
|
|
||||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
|
||||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
|
||||||
--data-urlencode type=stream \
|
|
||||||
--data-urlencode 'to="DevOps"' \
|
|
||||||
--data-urlencode topic=codeberg-bot \
|
|
||||||
--data-urlencode 'content=PBF planet update is done!'
|
|
||||||
|
|
||||||
update-subways:
|
|
||||||
if: inputs.run-subways
|
|
||||||
name: Update Subways
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
needs:
|
|
||||||
- clone-repos
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: "~"
|
|
||||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
- name: Update Subways
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd ~/comaps/
|
|
||||||
cp tools/unix/maps/settings.sh.prod tools/unix/maps/settings.sh
|
|
||||||
./tools/unix/maps/generate_subways.sh
|
|
||||||
- name: Notify Zulip
|
|
||||||
run: |
|
|
||||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
|
||||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
|
||||||
--data-urlencode type=stream \
|
|
||||||
--data-urlencode 'to="DevOps"' \
|
|
||||||
--data-urlencode topic=codeberg-bot \
|
|
||||||
--data-urlencode 'content=Subways are done!'
|
|
||||||
|
|
||||||
wiki-update:
|
|
||||||
if: inputs.run-wiki
|
|
||||||
name: Update Wikipedia
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
needs:
|
|
||||||
- clone-repos
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: "~"
|
|
||||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
- name: Check for planet file
|
|
||||||
shell: bash
|
|
||||||
# TODO: remove debug output
|
|
||||||
run: |
|
|
||||||
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
|
|
||||||
echo "ERROR: No file at /home/planet/planet/planet-latest.osm.pbf"
|
|
||||||
ls -al /home/planet/
|
|
||||||
ls -al /home/planet/planet/
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- name: Only get new dumps once per 30 days
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [[ '${{ inputs.reset }}' == 'wiki-ratelimit' ]]; then
|
|
||||||
echo "Bypassing wiki rate limit upon request."
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
datediff() {
|
|
||||||
d1=$(date -d "$1" +%s)
|
|
||||||
d2=$(date -d "$2" +%s)
|
|
||||||
echo $(( (d1 - d2) / 86400 ))
|
|
||||||
}
|
|
||||||
RECENTDUMPDATE=$(find /home/planet/wikipedia/dumps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
|
|
||||||
TODAY=$(date +%Y%m%d)
|
|
||||||
DATEDIFF=$(datediff $TODAY $RECENTDUMPDATE)
|
|
||||||
if [ $DATEDIFF -lt 30 ]; then
|
|
||||||
echo "ERROR: The most recent wiki dump is from $RECENTDUMPDATE, $DATEDIFF days ago. Wikimedia limits users to 15 snapshot requests per month."
|
|
||||||
echo "Set the 'reset' option to 'wiki-ratelimit' to bypass this."
|
|
||||||
ls -al /home/planet/wikipedia/dumps/
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- name: Update Wikipedia from Enterprise API
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
#todo: curl in download.sh can fail when rate limited and even save error messages to the output. need to validate.
|
|
||||||
#downloading all languages can also trigger rate limits or fail as well. needs work.
|
|
||||||
#also: a failure to download means a failure to build, and could result in no wiki descriptions etc.
|
|
||||||
#also-also: do we want to remove old wiki data in planet between builds? pastk: no need, its being updated / augmented
|
|
||||||
mkdir -p /home/planet/wikipedia/dumps
|
|
||||||
mkdir -p /home/planet/wikipedia/build
|
|
||||||
cd ~/wikiparser
|
|
||||||
ls -al
|
|
||||||
echo "Downloading ..."
|
|
||||||
./download.sh /home/planet/wikipedia/dumps
|
|
||||||
ls -al /home/planet/wikipedia/dumps/*
|
|
||||||
echo "Running ..."
|
|
||||||
./run.sh /home/planet/wikipedia/build \
|
|
||||||
/home/planet/planet/planet-latest.osm.pbf \
|
|
||||||
/home/planet/wikipedia/dumps/latest/*.tar.gz
|
|
||||||
echo "DONE"
|
|
||||||
- name: Check that the latest dumps are present, recent, and not super tiny
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
FAILCHECK=0
|
|
||||||
|
|
||||||
# Check all .tar.gz files in /home/planet/wikipedia/dumps/latest/
|
|
||||||
for file in /home/planet/wikipedia/dumps/latest/*.tar.gz; do
|
|
||||||
# Check if file exists (handles case where glob doesn't match)
|
|
||||||
[ -e "$file" ] || continue
|
|
||||||
|
|
||||||
# Get file size in MB and modification time in days
|
|
||||||
size_mb=$(stat -f%z "$file" 2>/dev/null | awk '{print int($1/1024/1024)}' || stat -c%s "$file" | awk
|
|
||||||
'{print int($1/1024/1024)}')
|
|
||||||
days_old=$(find "$file" -mtime -7 | wc -l)
|
|
||||||
|
|
||||||
# Verify conditions
|
|
||||||
if [ "$size_mb" -lt 100 ]; then
|
|
||||||
echo "FAIL: $file is only ${size_mb}MB (< 100MB)"
|
|
||||||
FAILCHECK=1
|
|
||||||
elif [ "$days_old" -eq 0 ]; then
|
|
||||||
echo "FAIL: $file is older than 7 days"
|
|
||||||
ls -al $file
|
|
||||||
FAILCHECK=1
|
|
||||||
else
|
|
||||||
echo "PASS: $file (${size_mb}MB, modified within 7 days)"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
exit $FAILCHECK
|
|
||||||
- name: Notify Zulip
|
|
||||||
run: |
|
|
||||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
|
||||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
|
||||||
--data-urlencode type=stream \
|
|
||||||
--data-urlencode 'to="DevOps"' \
|
|
||||||
--data-urlencode topic=codeberg-bot \
|
|
||||||
--data-urlencode 'content=Wiki update is done!'
|
|
||||||
|
|
||||||
update-planet-o5m:
|
|
||||||
if: inputs.run-planet-o5m
|
|
||||||
name: Update O5M Planet
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- name: Check for O5M Planet File
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [ ! -f /home/planet/planet/planet.o5m ]; then
|
|
||||||
echo "WARN: No file at /home/planet/planet/planet.o5m"
|
|
||||||
|
|
||||||
if [ ! -f /home/planet/planet/planet-latest.osm.pbf ]; then
|
|
||||||
echo "ERROR: No file at /home/planet/planet/planet-latest.osm.pbf"
|
|
||||||
ls -al /home/planet/
|
|
||||||
ls -al /home/planet/planet/
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Converting planet-latest.osm.pbf to planet.o5m"
|
|
||||||
cd /home/planet/planet/
|
|
||||||
osmconvert -v --drop-author --drop-version --hash-memory=4000 planet-latest.osm.pbf -o=planet.o5m
|
|
||||||
echo "Conversion is done."
|
|
||||||
fi
|
|
||||||
- name: Update O5M planet
|
|
||||||
run: |
|
|
||||||
echo "Starting..."
|
|
||||||
cd /home/planet/planet/
|
|
||||||
rm -f planet-new.o5m
|
|
||||||
osmupdate -v --drop-author --drop-version --hash-memory=4000 --max-merge=32 --out-o5m planet.o5m planet-new.o5m
|
|
||||||
mv planet-new.o5m planet.o5m
|
|
||||||
echo "Done."
|
|
||||||
- name: Notify Zulip
|
|
||||||
run: |
|
|
||||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
|
||||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
|
||||||
--data-urlencode type=stream \
|
|
||||||
--data-urlencode 'to="DevOps"' \
|
|
||||||
--data-urlencode topic=codeberg-bot \
|
|
||||||
--data-urlencode 'content=O5M planet update is done!'
|
|
||||||
|
|
||||||
generate-maps:
|
|
||||||
if: inputs.run-mapgen
|
|
||||||
name: Generate Maps
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
needs:
|
|
||||||
- clone-repos
|
|
||||||
timeout-minutes: 40320
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
options: --ulimit nofile=262144:262144
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: "~"
|
|
||||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
- name: Make output folders if necessary
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [ ! -d /mnt/4tbexternal/osm-maps ]; then
|
|
||||||
mkdir -p /mnt/4tbexternal/osm-maps
|
|
||||||
fi
|
|
||||||
- name: Get SRTM if necessary
|
|
||||||
# TODO: it should be a separate step like Wiki or isolines
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
if [ ! -d /home/planet/SRTM-patched-europe/ ]; then
|
|
||||||
echo "ERROR: NO SRTM"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
- name: Run docker_maps_generator.sh
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
cd ~/comaps
|
|
||||||
bash ./tools/unix/maps/docker_maps_generator.sh
|
|
||||||
- name: Notify Zulip
|
|
||||||
run: |
|
|
||||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
|
||||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
|
||||||
--data-urlencode type=stream \
|
|
||||||
--data-urlencode 'to="DevOps"' \
|
|
||||||
--data-urlencode topic=codeberg-bot \
|
|
||||||
--data-urlencode 'content=Generator is done!'
|
|
||||||
|
|
||||||
upload-maps:
|
|
||||||
if: inputs.run-upload
|
|
||||||
name: Upload Maps
|
|
||||||
runs-on: mapfilemaker
|
|
||||||
container:
|
|
||||||
image: codeberg.org/comaps/maps_generator:f6d53d54f794
|
|
||||||
volumes:
|
|
||||||
- /mnt/4tbexternal/:/mnt/4tbexternal/
|
|
||||||
- /mnt/4tbexternal/osm-planet:/home/planet
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-map-generator-${{ github.event.pull_request.number || github.ref }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
steps:
|
|
||||||
- uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
path: "~"
|
|
||||||
key: cache-${{ github.run_id }}-${{ github.run_attempt }}
|
|
||||||
- name: Write config file
|
|
||||||
run: |
|
|
||||||
mkdir -p ~/.config/rclone/
|
|
||||||
echo "${{ secrets.RCLONE_CONF }}" > ~/.config/rclone/rclone.conf
|
|
||||||
- name: Upload map files to CDNs
|
|
||||||
shell: bash
|
|
||||||
run: |
|
|
||||||
shopt -s nullglob
|
|
||||||
buildfolder=$(find /mnt/4tbexternal/osm-maps/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f5)
|
|
||||||
builddate=$(find /mnt/4tbexternal/osm-maps/*/ -mindepth 1 -maxdepth 1 -iname "2*" -type d | sort -n -r | head -1 | cut -d/ -f6)
|
|
||||||
mwmfiles=( /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm )
|
|
||||||
|
|
||||||
if (( ${#mwmfiles[@]} )); then
|
|
||||||
echo "<$(date +%T)> Uploading maps from $buildfolder/$builddate..."
|
|
||||||
cd ~/comaps/tools/unix/maps
|
|
||||||
./upload_to_cdn.sh /mnt/4tbexternal/osm-maps/$buildfolder/$builddate
|
|
||||||
echo "<$(date +%T)> Finished uploading maps from $buildfolder/$builddate."
|
|
||||||
else
|
|
||||||
echo "<$(date +%T)> No MWM files in /mnt/4tbexternal/osm-maps/$buildfolder/$builddate/*.mwm, not uploading maps."
|
|
||||||
echo "<$(date +%T)> Found top level: $(ls -alt /mnt/4tbexternal/osm-maps/*)"
|
|
||||||
echo "<$(date +%T)> Found second level: $(ls -alt /mnt/4tbexternal/osm-maps/$buildfolder/*)"
|
|
||||||
fi
|
|
||||||
- name: Notify Zulip
|
|
||||||
run: |
|
|
||||||
curl -X POST https://comaps.zulipchat.com/api/v1/messages \
|
|
||||||
-u $ZULIP_BOT_EMAIL:$ZULIP_API_KEY \
|
|
||||||
--data-urlencode type=stream \
|
|
||||||
--data-urlencode 'to="DevOps"' \
|
|
||||||
--data-urlencode topic=codeberg-bot \
|
|
||||||
--data-urlencode 'content=Upload is done!'
|
|
||||||
|
|
||||||
22
.forgejo/workflows/stale.yml
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
name: Close stale PRs
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: "0 0 * * *" # Runs every day at midnight
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
stale:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
pull-requests: write
|
||||||
|
steps:
|
||||||
|
- uses: actions/stale@v9
|
||||||
|
with:
|
||||||
|
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
days-before-pr-stale: 180 # 6 months before warning
|
||||||
|
days-before-pr-close: 365 # Closed after 12 months
|
||||||
|
stale-pr-label: "stale"
|
||||||
|
stale-pr-message: "Hi! This PR has been inactive for 6 months. If it's still relevant, please update it to let us know you’d like to keep it open 😊"
|
||||||
|
close-pr-message: "This PR has been automatically closed after 12 months of inactivity."
|
||||||
|
days-before-issue-stale: -1 # Issues are never stale
|
||||||
|
days-before-issue-close: -1 # Issues are never closed
|
||||||
|
remove-stale-when-updated: true
|
||||||
20
.github/workflows/android-check.yaml
vendored
@@ -6,8 +6,7 @@ on:
|
|||||||
- main
|
- main
|
||||||
|
|
||||||
env:
|
env:
|
||||||
JAVA_HOME: /usr/lib/jvm/temurin-21-jdk-amd64 # Java 21 is required for Android Gradle 8 plugin
|
JAVA_HOME: /usr/lib/jvm/temurin-17-jdk-amd64 # Java 17 is required for Android Gradle 8 plugin
|
||||||
SKIP_MAP_DOWNLOAD: true
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
lint:
|
lint:
|
||||||
@@ -23,16 +22,9 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
- name: Install protobuf
|
- name: Init boost, generate textures
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: ./configure.sh --skip-map-download
|
||||||
sudo apt-get update -y
|
|
||||||
sudo apt-get install -y python3-pip
|
|
||||||
pip install "protobuf<3.21" --break-system-packages
|
|
||||||
|
|
||||||
- name: Configure repository
|
|
||||||
shell: bash
|
|
||||||
run: ./configure.sh
|
|
||||||
|
|
||||||
- name: Lint
|
- name: Lint
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -73,9 +65,7 @@ jobs:
|
|||||||
libxinerama-dev \
|
libxinerama-dev \
|
||||||
libxcursor-dev \
|
libxcursor-dev \
|
||||||
libxi-dev \
|
libxi-dev \
|
||||||
python3-pip \
|
|
||||||
zlib1g-dev
|
zlib1g-dev
|
||||||
pip install "protobuf<3.21" --break-system-packages
|
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
@@ -86,6 +76,10 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(nproc) * 20))
|
||||||
|
|
||||||
|
- name: Init boost, generate textures
|
||||||
|
shell: bash
|
||||||
|
run: ./configure.sh --skip-map-download
|
||||||
|
|
||||||
- name: Configure ccache
|
- name: Configure ccache
|
||||||
uses: hendrikmuhs/ccache-action@v1.2
|
uses: hendrikmuhs/ccache-action@v1.2
|
||||||
with:
|
with:
|
||||||
|
|||||||
51
.github/workflows/code-style-check.yaml
vendored
@@ -1,51 +0,0 @@
|
|||||||
name: Code style check
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches: [ master ]
|
|
||||||
paths: # Should stay in sync with tools/unix/clang-format.sh
|
|
||||||
- '.github/workflows/code-style-check.yaml'
|
|
||||||
- 'android/app/src/**.java'
|
|
||||||
- 'android/sdk/src/**.java'
|
|
||||||
- 'android/sdk/src/main/cpp/**.[ch]pp'
|
|
||||||
- 'dev_sandbox/**.[ch]pp'
|
|
||||||
- 'generator/**.[ch]pp'
|
|
||||||
- 'iphone/**.[ch]pp'
|
|
||||||
- 'iphone/**.[hm]'
|
|
||||||
- 'iphone/**.mm'
|
|
||||||
- 'libs/**.[ch]pp'
|
|
||||||
- 'libs/**.[hm]'
|
|
||||||
- '!libs/indexer/drules_struct.pb.h'
|
|
||||||
- 'libs/**.mm'
|
|
||||||
- 'qt/**.[ch]pp'
|
|
||||||
- 'qt/**.h'
|
|
||||||
- 'tools/**.[ch]pp'
|
|
||||||
- '.clang-format'
|
|
||||||
- '.clang-format-ignore'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
code-style-check:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Install clang-format
|
|
||||||
run: |
|
|
||||||
sudo apt purge -y clang-format-18 # Remove default old version of clang-format
|
|
||||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | sudo apt-key add -
|
|
||||||
echo 'deb http://apt.llvm.org/noble/ llvm-toolchain-noble-20 main' | sudo tee /etc/apt/sources.list.d/llvm-toolchain-noble-20.list
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y clang-format-20
|
|
||||||
sudo update-alternatives --force --install /usr/bin/clang-format clang-format /usr/bin/clang-format-20 10
|
|
||||||
sudo update-alternatives --force --install /usr/bin/git-clang-format git-clang-format /usr/bin/git-clang-format-20 10
|
|
||||||
clang-format --version
|
|
||||||
- name: Checkout sources
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Check code style
|
|
||||||
run: tools/unix/clang-format.sh
|
|
||||||
|
|
||||||
- name: Post clang-format comments
|
|
||||||
if: failure()
|
|
||||||
uses: reviewdog/action-suggester@v1.21.0
|
|
||||||
with:
|
|
||||||
tool_name: clang-format
|
|
||||||
fail_level: error
|
|
||||||
26
.github/workflows/ios-check.yaml
vendored
@@ -8,14 +8,13 @@ on:
|
|||||||
jobs:
|
jobs:
|
||||||
ios-check:
|
ios-check:
|
||||||
name: Build iOS
|
name: Build iOS
|
||||||
runs-on: macos-26
|
runs-on: macos-15
|
||||||
env:
|
env:
|
||||||
DEVELOPER_DIR: /Applications/Xcode_26.1.app/Contents/Developer
|
DEVELOPER_DIR: /Applications/Xcode_16.app/Contents/Developer
|
||||||
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
LANG: en_US.UTF-8 # Fastlane complains that the terminal is using ASCII.
|
||||||
LANGUAGE: en_US.UTF-8
|
LANGUAGE: en_US.UTF-8
|
||||||
LC_ALL: en_US.UTF-8
|
LC_ALL: en_US.UTF-8
|
||||||
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
|
TEST_RESULTS_BUNDLE_NAME: CoMaps-Test-Results
|
||||||
SIMULATOR_DEVICE: 'iPhone 17 Pro Max'
|
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
@@ -30,10 +29,6 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
brew install qt \
|
brew install qt \
|
||||||
optipng
|
optipng
|
||||||
pip3 install "protobuf<3.21" --break-system-packages
|
|
||||||
xcodebuild -downloadComponent metalToolchain
|
|
||||||
xcodebuild -downloadPlatform iOS
|
|
||||||
|
|
||||||
- name: Checkout sources
|
- name: Checkout sources
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
|
||||||
@@ -41,11 +36,11 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
|
run: git submodule update --depth 1 --init --recursive --jobs=$(($(sysctl -n hw.logicalcpu) * 20))
|
||||||
|
|
||||||
- name: Configure repository
|
- name: Init boost, download World map, generate textures
|
||||||
shell: bash
|
shell: bash
|
||||||
run: ./configure.sh
|
run: ./configure.sh
|
||||||
|
|
||||||
- name: Configure Xcode cache
|
- name: Configure XCode cache
|
||||||
uses: irgaly/xcode-cache@v1
|
uses: irgaly/xcode-cache@v1
|
||||||
with:
|
with:
|
||||||
key: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}-${{ github.sha }}
|
key: xcode-cache-deriveddata-${{ github.workflow }}-${{ matrix.buildType }}-${{ github.sha }}
|
||||||
@@ -55,15 +50,12 @@ jobs:
|
|||||||
if: matrix.buildType == 'Debug'
|
if: matrix.buildType == 'Debug'
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
# Start sim before the build to make sure it's booted when tests start.
|
|
||||||
xcrun simctl boot "${{ env.SIMULATOR_DEVICE }}" || true
|
|
||||||
xcrun simctl bootstatus "${{ env.SIMULATOR_DEVICE }}" -b
|
|
||||||
xcodebuild test \
|
xcodebuild test \
|
||||||
-workspace xcode/CoMaps.xcworkspace \
|
-workspace xcode/omim.xcworkspace \
|
||||||
-scheme CoMaps \
|
-scheme OMaps \
|
||||||
-configuration Debug \
|
-configuration Debug \
|
||||||
-sdk iphonesimulator \
|
-sdk iphonesimulator \
|
||||||
-destination "platform=iOS Simulator,name=${{ env.SIMULATOR_DEVICE }},OS=latest" \
|
-destination 'platform=iOS Simulator,name=iPhone 16 Pro Max,OS=latest' \
|
||||||
-quiet \
|
-quiet \
|
||||||
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
|
-resultBundlePath ${{ env.TEST_RESULTS_BUNDLE_NAME }}.xcresult \
|
||||||
CODE_SIGNING_REQUIRED=NO \
|
CODE_SIGNING_REQUIRED=NO \
|
||||||
@@ -82,8 +74,8 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
xcodebuild build \
|
xcodebuild build \
|
||||||
-workspace xcode/CoMaps.xcworkspace \
|
-workspace xcode/omim.xcworkspace \
|
||||||
-scheme CoMaps \
|
-scheme OMaps \
|
||||||
-configuration Release \
|
-configuration Release \
|
||||||
-destination 'generic/platform=iOS' \
|
-destination 'generic/platform=iOS' \
|
||||||
-quiet \
|
-quiet \
|
||||||
|
|||||||
37
.gitignore
vendored
@@ -9,35 +9,23 @@ Makefile.Release
|
|||||||
object_script.*.Debug
|
object_script.*.Debug
|
||||||
object_script.*.Release
|
object_script.*.Release
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
*.local.*
|
|
||||||
|
|
||||||
stxxl.errlog
|
stxxl.errlog
|
||||||
stxxl.log
|
stxxl.log
|
||||||
screenlog.0
|
screenlog.0
|
||||||
|
|
||||||
|
data/styles/*/*/out/*
|
||||||
|
data/resources-*_design/*
|
||||||
# symbols png/sdf are now generated at build
|
# symbols png/sdf are now generated at build
|
||||||
data/symbols/**/symbols.png
|
data/resources-*_*/symbols.png
|
||||||
data/symbols/**/symbols.sdf
|
data/resources-*_*/symbols.sdf
|
||||||
|
data/drules_proto_default_design.bin
|
||||||
|
data/colors_design.txt
|
||||||
|
data/patterns_design.txt
|
||||||
data/bookmarks
|
data/bookmarks
|
||||||
data/edits.xml
|
data/edits.xml
|
||||||
data/World.mwm
|
data/World.mwm
|
||||||
data/WorldCoasts.mwm
|
data/WorldCoasts.mwm
|
||||||
data/world_mwm/*
|
|
||||||
data/*_hash
|
|
||||||
data/drules_proto*
|
|
||||||
data/classificator.txt*
|
|
||||||
data/types.txt*
|
|
||||||
data/visibility.txt*
|
|
||||||
data/colors.txt*
|
|
||||||
data/patterns.txt*
|
|
||||||
# TODO: designer is not used at the moment
|
|
||||||
# data/symbols/*/design/
|
|
||||||
# data/colors_design.txt
|
|
||||||
# data/patterns_design.txt
|
|
||||||
|
|
||||||
# Auto-generated from data/categories-strings/* by tools/unix/generate_categories.sh
|
|
||||||
data/categories.txt
|
|
||||||
|
|
||||||
# Compiled Python
|
# Compiled Python
|
||||||
*.pyc
|
*.pyc
|
||||||
@@ -56,9 +44,10 @@ omim.sdf
|
|||||||
*.suo
|
*.suo
|
||||||
*.aps
|
*.aps
|
||||||
*.rc
|
*.rc
|
||||||
!qt/res/windows/windows.rc
|
!qt/res/windows.rc
|
||||||
*.pdb
|
*.pdb
|
||||||
out/
|
out/*
|
||||||
|
qt/mapswithme.log
|
||||||
|
|
||||||
# XCode
|
# XCode
|
||||||
xcode/keys/*
|
xcode/keys/*
|
||||||
@@ -73,7 +62,7 @@ iphone/*/build/*
|
|||||||
tools/emacsmode/build
|
tools/emacsmode/build
|
||||||
**/DerivedData/*
|
**/DerivedData/*
|
||||||
**/xcshareddata/*
|
**/xcshareddata/*
|
||||||
!iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/CoMaps.xcscheme
|
!iphone/Maps/Maps.xcodeproj/xcshareddata/xcschemes/OMaps.xcscheme
|
||||||
**/xcuserdata
|
**/xcuserdata
|
||||||
**/xcschemes
|
**/xcschemes
|
||||||
iphone/**/*.moved-aside
|
iphone/**/*.moved-aside
|
||||||
@@ -188,6 +177,10 @@ tools/python/maps_generator/var/etc/map_generator.ini
|
|||||||
tools/python/routing/etc/*.ini
|
tools/python/routing/etc/*.ini
|
||||||
tools/unix/maps/settings.sh
|
tools/unix/maps/settings.sh
|
||||||
|
|
||||||
|
# Helpers
|
||||||
|
/node_modules/
|
||||||
|
/package-lock.json
|
||||||
|
|
||||||
# Visual Studio
|
# Visual Studio
|
||||||
.vs
|
.vs
|
||||||
|
|
||||||
|
|||||||
4
.gitmodules
vendored
@@ -65,7 +65,3 @@
|
|||||||
[submodule "3party/imgui/imgui"]
|
[submodule "3party/imgui/imgui"]
|
||||||
path = 3party/imgui/imgui
|
path = 3party/imgui/imgui
|
||||||
url = https://github.com/ocornut/imgui
|
url = https://github.com/ocornut/imgui
|
||||||
[submodule "3party/glaze"]
|
|
||||||
path = 3party/glaze
|
|
||||||
url = https://github.com/stephenberry/glaze
|
|
||||||
branch = main
|
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ endif()
|
|||||||
|
|
||||||
add_subdirectory(agg)
|
add_subdirectory(agg)
|
||||||
add_subdirectory(bsdiff-courgette)
|
add_subdirectory(bsdiff-courgette)
|
||||||
add_subdirectory(glaze)
|
|
||||||
add_subdirectory(minizip)
|
add_subdirectory(minizip)
|
||||||
add_subdirectory(open-location-code)
|
add_subdirectory(open-location-code)
|
||||||
add_subdirectory(opening_hours)
|
add_subdirectory(opening_hours)
|
||||||
|
|||||||
@@ -4,9 +4,7 @@ set(FT_DISABLE_HARFBUZZ ON)
|
|||||||
add_subdirectory(freetype)
|
add_subdirectory(freetype)
|
||||||
|
|
||||||
# Fix warning with ONE_PIXEL macro clash.
|
# Fix warning with ONE_PIXEL macro clash.
|
||||||
if(NOT MSVC)
|
target_compile_options(freetype PRIVATE -Wno-macro-redefined)
|
||||||
target_compile_options(freetype PRIVATE -Wno-macro-redefined)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# Use ft2build.h from the current directory instead of the default.
|
# Use ft2build.h from the current directory instead of the default.
|
||||||
target_include_directories(freetype
|
target_include_directories(freetype
|
||||||
|
|||||||
@@ -11,23 +11,14 @@ target_include_directories(${PROJECT_NAME}
|
|||||||
harfbuzz/src
|
harfbuzz/src
|
||||||
)
|
)
|
||||||
|
|
||||||
if (MSVC)
|
# Keep these settigns in sync with xcode/harfbuzz project.
|
||||||
target_compile_options(${PROJECT_NAME}
|
target_compile_options(${PROJECT_NAME}
|
||||||
PRIVATE
|
|
||||||
/GR-
|
|
||||||
/EHsc-
|
|
||||||
/Zc:threadSafeInit-
|
|
||||||
)
|
|
||||||
else()
|
|
||||||
# Keep these settings in sync with xcode/harfbuzz project.
|
|
||||||
target_compile_options(${PROJECT_NAME}
|
|
||||||
PRIVATE
|
PRIVATE
|
||||||
-fno-rtti
|
-fno-rtti
|
||||||
-fno-exceptions
|
-fno-exceptions
|
||||||
-fno-threadsafe-statics
|
-fno-threadsafe-statics
|
||||||
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-format-pedantic>
|
$<$<OR:$<CXX_COMPILER_ID:Clang>,$<CXX_COMPILER_ID:AppleClang>>:-Wno-format-pedantic>
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
target_compile_definitions(${PROJECT_NAME}
|
target_compile_definitions(${PROJECT_NAME}
|
||||||
PRIVATE
|
PRIVATE
|
||||||
@@ -37,19 +28,13 @@ target_compile_definitions(${PROJECT_NAME}
|
|||||||
#$<$<BOOL:${APPLE}>:HAVE_CORETEXT>
|
#$<$<BOOL:${APPLE}>:HAVE_CORETEXT>
|
||||||
HAVE_ATEXIT
|
HAVE_ATEXIT
|
||||||
HAVE_GETPAGESIZE
|
HAVE_GETPAGESIZE
|
||||||
HAVE_MPROTECT
|
|
||||||
HAVE_SYSCONF
|
|
||||||
)
|
|
||||||
|
|
||||||
if (NOT MSVC)
|
|
||||||
target_compile_definitions(${PROJECT_NAME}
|
|
||||||
PRIVATE
|
|
||||||
HAVE_MMAP
|
HAVE_MMAP
|
||||||
|
HAVE_MPROTECT
|
||||||
HAVE_PTHREAD
|
HAVE_PTHREAD
|
||||||
|
HAVE_SYSCONF
|
||||||
HAVE_SYS_MMAN_H
|
HAVE_SYS_MMAN_H
|
||||||
HAVE_UNISTD_H
|
HAVE_UNISTD_H
|
||||||
)
|
)
|
||||||
endif()
|
|
||||||
|
|
||||||
target_link_libraries(${PROJECT_NAME} Freetype::Freetype)
|
target_link_libraries(${PROJECT_NAME} Freetype::Freetype)
|
||||||
|
|
||||||
|
|||||||
@@ -172,7 +172,6 @@ add_library(icuuc
|
|||||||
icu/icu4c/source/common/uvector.cpp
|
icu/icu4c/source/common/uvector.cpp
|
||||||
icu/icu4c/source/common/uvectr32.cpp
|
icu/icu4c/source/common/uvectr32.cpp
|
||||||
icu/icu4c/source/common/uvectr64.h
|
icu/icu4c/source/common/uvectr64.h
|
||||||
icu/icu4c/source/common/wintz.cpp
|
|
||||||
icu/icu4c/source/common/wintz.h
|
icu/icu4c/source/common/wintz.h
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ set(SRC
|
|||||||
protobuf/src/google/protobuf/message_lite.cc
|
protobuf/src/google/protobuf/message_lite.cc
|
||||||
protobuf/src/google/protobuf/repeated_field.cc
|
protobuf/src/google/protobuf/repeated_field.cc
|
||||||
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
|
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_gcc.cc
|
||||||
protobuf/src/google/protobuf/stubs/atomicops_internals_x86_msvc.cc
|
|
||||||
protobuf/src/google/protobuf/stubs/bytestream.cc
|
protobuf/src/google/protobuf/stubs/bytestream.cc
|
||||||
protobuf/src/google/protobuf/stubs/common.cc
|
protobuf/src/google/protobuf/stubs/common.cc
|
||||||
protobuf/src/google/protobuf/stubs/int128.cc
|
protobuf/src/google/protobuf/stubs/int128.cc
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
#include <boost/utility/enable_if.hpp>
|
#include <boost/utility/enable_if.hpp>
|
||||||
#include <boost/utility.hpp>
|
#include <boost/utility.hpp>
|
||||||
#include <boost/type_traits/is_pod.hpp>
|
#include <boost/type_traits/is_pod.hpp>
|
||||||
|
#include <boost/iostreams/device/mapped_file.hpp>
|
||||||
|
|
||||||
#include "mappable_vector.hpp"
|
#include "mappable_vector.hpp"
|
||||||
|
|
||||||
@@ -282,6 +283,12 @@ namespace succinct { namespace mapper {
|
|||||||
return mapper.bytes_read();
|
return mapper.bytes_read();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
size_t map(T& val, boost::iostreams::mapped_file_source const& m, uint64_t flags = 0, const char* friendly_name = "<TOP>")
|
||||||
|
{
|
||||||
|
return map(val, m.data(), flags, friendly_name);
|
||||||
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
uint64_t size_of(T& val)
|
uint64_t size_of(T& val)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -8,6 +8,7 @@
|
|||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
|
||||||
#include <boost/iterator/iterator_facade.hpp>
|
#include <boost/iterator/iterator_facade.hpp>
|
||||||
|
#include <boost/iostreams/device/mapped_file.hpp>
|
||||||
|
|
||||||
namespace succinct { namespace util {
|
namespace succinct { namespace util {
|
||||||
|
|
||||||
@@ -204,6 +205,29 @@ namespace succinct { namespace util {
|
|||||||
std::string m_cur_value;
|
std::string m_cur_value;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct mmap_lines
|
||||||
|
{
|
||||||
|
typedef buffer_line_iterator iterator;
|
||||||
|
typedef buffer_line_iterator const_iterator;
|
||||||
|
|
||||||
|
mmap_lines(std::string filename)
|
||||||
|
: m_map(filename)
|
||||||
|
{}
|
||||||
|
|
||||||
|
const_iterator begin() const
|
||||||
|
{
|
||||||
|
return const_iterator(m_map.data(), m_map.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
const_iterator end() const
|
||||||
|
{
|
||||||
|
return const_iterator();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
boost::iostreams::mapped_file_source m_map;
|
||||||
|
};
|
||||||
|
|
||||||
struct input_error : std::invalid_argument
|
struct input_error : std::invalid_argument
|
||||||
{
|
{
|
||||||
input_error(std::string const& what)
|
input_error(std::string const& what)
|
||||||
|
|||||||
@@ -19,18 +19,7 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "vulkan_wrapper.h"
|
#include "vulkan_wrapper.h"
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
#ifndef WIN32_LEAN_AND_MEAN
|
|
||||||
#define WIN32_LEAN_AND_MEAN
|
|
||||||
#endif
|
|
||||||
#ifndef NOMINMAX
|
|
||||||
#define NOMINMAX
|
|
||||||
#endif
|
|
||||||
#include <windows.h>
|
|
||||||
#else
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
int InitVulkan(void) {
|
int InitVulkan(void) {
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
@@ -41,9 +30,6 @@ int InitVulkan(void) {
|
|||||||
if (!libvulkan) {
|
if (!libvulkan) {
|
||||||
libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
|
libvulkan = dlopen("libMoltenVK.dylib", RTLD_NOW | RTLD_LOCAL);
|
||||||
}
|
}
|
||||||
#elif defined( _WIN32 )
|
|
||||||
HMODULE libvulkan = LoadLibraryA("vulkan-1.dll");
|
|
||||||
auto dlsym = [](HMODULE h, char const * name) { return GetProcAddress(h, name); };
|
|
||||||
#else
|
#else
|
||||||
void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
|
void* libvulkan = dlopen("libvulkan.so.1", RTLD_NOW | RTLD_LOCAL);
|
||||||
if (!libvulkan) {
|
if (!libvulkan) {
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
cmake_minimum_required(VERSION 3.22.1)
|
cmake_minimum_required(VERSION 3.22.1)
|
||||||
|
|
||||||
project(omim C CXX)
|
project(omim C CXX)
|
||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 23)
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
set(CMAKE_C_STANDARD 23)
|
set(CMAKE_C_STANDARD 17)
|
||||||
# Our code does not rely on gnu extensions.
|
# Our code does not rely on gnu extensions.
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_C_EXTENSIONS OFF)
|
set(CMAKE_C_EXTENSIONS OFF)
|
||||||
@@ -39,12 +38,12 @@ if (APPLE AND NOT ("${CMAKE_SYSTEM_NAME}" STREQUAL Android))
|
|||||||
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963
|
# https://gitlab.kitware.com/cmake/cmake/-/issues/21963
|
||||||
enable_language(OBJC)
|
enable_language(OBJC)
|
||||||
set(CMAKE_OBJC_EXTENSIONS OFF)
|
set(CMAKE_OBJC_EXTENSIONS OFF)
|
||||||
set(CMAKE_OBJC_STANDARD 23)
|
set(CMAKE_OBJC_STANDARD 11)
|
||||||
set(CMAKE_OBJC_FLAGS -fobjc-arc)
|
set(CMAKE_OBJC_FLAGS -fobjc-arc)
|
||||||
set(CMAKE_OBJC_VISIBILITY_PRESET hidden)
|
set(CMAKE_OBJC_VISIBILITY_PRESET hidden)
|
||||||
enable_language(OBJCXX)
|
enable_language(OBJCXX)
|
||||||
set(CMAKE_OBJCXX_EXTENSIONS OFF)
|
set(CMAKE_OBJCXX_EXTENSIONS OFF)
|
||||||
set(CMAKE_OBJCXX_STANDARD 23)
|
set(CMAKE_OBJCXX_STANDARD 20)
|
||||||
set(CMAKE_OBJCXX_FLAGS -fobjc-arc)
|
set(CMAKE_OBJCXX_FLAGS -fobjc-arc)
|
||||||
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
|
set(CMAKE_OBJCXX_VISIBILITY_PRESET hidden)
|
||||||
endif()
|
endif()
|
||||||
@@ -85,7 +84,7 @@ if (MSVC)
|
|||||||
add_compile_options(/utf-8)
|
add_compile_options(/utf-8)
|
||||||
add_link_options(/INCREMENTAL:NO)
|
add_link_options(/INCREMENTAL:NO)
|
||||||
else()
|
else()
|
||||||
add_compile_options(-ffast-math $<$<CXX_COMPILER_ID:GNU>:-Wno-psabi>)
|
add_compile_options(-ffast-math)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (PLATFORM_WIN)
|
if (PLATFORM_WIN)
|
||||||
@@ -104,16 +103,12 @@ if (${CMAKE_BUILD_TYPE} STREQUAL "Debug")
|
|||||||
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
elseif (${CMAKE_BUILD_TYPE} MATCHES "Rel")
|
||||||
add_definitions(-DRELEASE)
|
add_definitions(-DRELEASE)
|
||||||
if (NOT MSVC)
|
if (NOT MSVC)
|
||||||
add_compile_options(-O3 $<$<CXX_COMPILER_ID:GNU>:-flto=auto>)
|
add_compile_options(-Ofast) # Also enables -ffast-math
|
||||||
endif()
|
endif()
|
||||||
else()
|
else()
|
||||||
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
message(FATAL_ERROR "Unknown build type: " ${CMAKE_BUILD_TYPE})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (${CMAKE_BUILD_TYPE} STREQUAL "RelWithDebInfo")
|
|
||||||
add_compile_options(-fno-omit-frame-pointer)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
|
message(STATUS "Build type: " ${CMAKE_BUILD_TYPE})
|
||||||
|
|
||||||
if (PLATFORM_LINUX OR PLATFORM_ANDROID)
|
if (PLATFORM_LINUX OR PLATFORM_ANDROID)
|
||||||
@@ -162,15 +157,15 @@ if (NOT PLATFORM_IPHONE AND NOT PLATFORM_ANDROID)
|
|||||||
find_package(Qt6 COMPONENTS REQUIRED ${qt_components} PATHS $ENV{QT_PATH} /opt/homebrew/opt/qt@6 /usr/local/opt/qt@6 /usr/lib/x86_64-linux-gnu/qt6)
|
find_package(Qt6 COMPONENTS REQUIRED ${qt_components} PATHS $ENV{QT_PATH} /opt/homebrew/opt/qt@6 /usr/local/opt/qt@6 /usr/lib/x86_64-linux-gnu/qt6)
|
||||||
|
|
||||||
set(MINIMUM_REQUIRED_QT_VERSION 6.4.0)
|
set(MINIMUM_REQUIRED_QT_VERSION 6.4.0)
|
||||||
if (Qt6_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
|
if (Qt6Widgets_VERSION VERSION_LESS ${MINIMUM_REQUIRED_QT_VERSION})
|
||||||
message(FATAL_ERROR "Unsupported Qt version: ${Qt6_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
|
message(FATAL_ERROR "Unsupported Qt version: ${Qt6Widgets_VERSION}, the minimum required is ${MINIMUM_REQUIRED_QT_VERSION}")
|
||||||
else()
|
else()
|
||||||
message(STATUS "Found Qt version: ${Qt6_VERSION}")
|
message(STATUS "Found Qt version: ${Qt6Widgets_VERSION}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# To allow #include "base/file_name.hpp" in all sources.
|
# To allow #include "base/file_name.hpp" in all sources.
|
||||||
include_directories("${CMAKE_HOME_DIRECTORY}" "${CMAKE_HOME_DIRECTORY}/libs" "${CMAKE_HOME_DIRECTORY}/tools")
|
include_directories(${CMAKE_HOME_DIRECTORY})
|
||||||
|
|
||||||
if (USE_PCH)
|
if (USE_PCH)
|
||||||
message(STATUS "Precompiled headers are ON")
|
message(STATUS "Precompiled headers are ON")
|
||||||
@@ -182,7 +177,7 @@ if (USE_PCH)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Should be on the root level, not in 3party, so tests can get these dependencies.
|
# Should be on the root level, not in 3party, so tests can get these dependencies.
|
||||||
if (PLATFORM_LINUX)
|
if (PLATFORM_LINUX OR PLATFORM_WIN)
|
||||||
find_package(ICU COMPONENTS uc i18n data REQUIRED)
|
find_package(ICU COMPONENTS uc i18n data REQUIRED)
|
||||||
find_package(Freetype REQUIRED)
|
find_package(Freetype REQUIRED)
|
||||||
find_package(harfbuzz REQUIRED)
|
find_package(harfbuzz REQUIRED)
|
||||||
@@ -209,49 +204,49 @@ if (PLATFORM_DESKTOP AND NOT WITH_SYSTEM_PROVIDED_3PARTY)
|
|||||||
include_directories("${PROJECT_BINARY_DIR}/3party/gflags/include")
|
include_directories("${PROJECT_BINARY_DIR}/3party/gflags/include")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Fix for #include <boost/regex.hpp>
|
|
||||||
include_directories("${OMIM_ROOT}/3party/boost")
|
|
||||||
|
|
||||||
# Used in qt/ and shaders/
|
# Used in qt/ and shaders/
|
||||||
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
||||||
|
|
||||||
execute_process(
|
add_subdirectory(base)
|
||||||
COMMAND ${Python3_EXECUTABLE} -c "import google.protobuf;
|
add_subdirectory(coding)
|
||||||
print(google.protobuf.__version__)"
|
add_subdirectory(descriptions)
|
||||||
RESULT_VARIABLE PROTOBUF_CHECK
|
add_subdirectory(drape)
|
||||||
OUTPUT_VARIABLE PROTOBUF_VERSION
|
add_subdirectory(drape_frontend)
|
||||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
add_subdirectory(editor)
|
||||||
ERROR_QUIET
|
add_subdirectory(ge0)
|
||||||
)
|
add_subdirectory(generator/mwm_diff)
|
||||||
|
add_subdirectory(geometry)
|
||||||
if(PROTOBUF_CHECK EQUAL 0)
|
add_subdirectory(indexer)
|
||||||
if(PROTOBUF_VERSION VERSION_LESS "4.0.0")
|
add_subdirectory(kml)
|
||||||
message(STATUS "Python protobuf ${PROTOBUF_VERSION} found (< 4.0)")
|
add_subdirectory(map)
|
||||||
else()
|
add_subdirectory(cppjansson)
|
||||||
message(FATAL_ERROR "Python protobuf ${PROTOBUF_VERSION} found, but version < 4.0 required")
|
add_subdirectory(platform)
|
||||||
endif()
|
add_subdirectory(routing)
|
||||||
else()
|
add_subdirectory(routing_common)
|
||||||
message(FATAL_ERROR "Python protobuf not found. Install version <4.0")
|
add_subdirectory(search)
|
||||||
endif()
|
add_subdirectory(shaders)
|
||||||
|
add_subdirectory(storage)
|
||||||
|
add_subdirectory(tracking)
|
||||||
add_subdirectory(libs)
|
add_subdirectory(traffic)
|
||||||
|
add_subdirectory(transit)
|
||||||
|
|
||||||
if (PLATFORM_DESKTOP)
|
if (PLATFORM_DESKTOP)
|
||||||
add_subdirectory(dev_sandbox)
|
omim_add_tool_subdirectory(feature_list)
|
||||||
add_subdirectory(generator)
|
add_subdirectory(generator)
|
||||||
add_subdirectory(tools)
|
add_subdirectory(openlr)
|
||||||
|
add_subdirectory(poly_borders)
|
||||||
|
omim_add_tool_subdirectory(topography_generator)
|
||||||
|
add_subdirectory(track_analyzing)
|
||||||
|
omim_add_tool_subdirectory(track_generator)
|
||||||
if (NOT SKIP_QT_GUI)
|
if (NOT SKIP_QT_GUI)
|
||||||
add_subdirectory(qt)
|
add_subdirectory(qt)
|
||||||
|
omim_add_tool_subdirectory(skin_generator)
|
||||||
endif()
|
endif()
|
||||||
if (GENERATOR_TOOL)
|
add_subdirectory(dev_sandbox)
|
||||||
add_compile_options(-march=native -mtune=native)
|
|
||||||
message(STATUS "target CPU optimizations enabled, produced binaries will NOT work on a different CPU")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
omim_add_test_subdirectory(libs/qt_tstfrm)
|
omim_add_test_subdirectory(qt_tstfrm)
|
||||||
|
|
||||||
if (PLATFORM_ANDROID)
|
if (PLATFORM_ANDROID)
|
||||||
add_subdirectory(android/sdk/src/main/cpp)
|
add_subdirectory(android/app/src/main/cpp)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
11
CONTRIBUTORS
@@ -1,19 +1,12 @@
|
|||||||
This file contains a list of people who have contributed to this project.
|
This file contains a list of people who have contributed to this project.
|
||||||
It is not necessarily comprehensive as contributors must manually add themselves.
|
Its not neccesarily comprehensive.
|
||||||
Feel free to add yourself here along with your first contribution!
|
Feel free to add yourself here along with your first contribution!
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
CoMaps contributors:
|
CoMaps contributors:
|
||||||
(in alphabetical order)
|
(in alphabetic order)
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
Bastian Greshake Tzovaras
|
|
||||||
clover sage
|
|
||||||
Harry Bond <me@hbond.xyz>
|
|
||||||
thesupertechie
|
|
||||||
vikiawv
|
|
||||||
Yannik Bloscheck
|
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
Organic Maps (formerly OMaps) contributors:
|
Organic Maps (formerly OMaps) contributors:
|
||||||
(in alphabetic order)
|
(in alphabetic order)
|
||||||
|
|||||||
194
README.md
@@ -1,93 +1,66 @@
|
|||||||
<!-- Navigation Bar -->
|
<!--<div align="center">
|
||||||
<p align="center">
|
<img src="qt/res/logo.png" height="100"/>
|
||||||
<a href="https://codeberg.org/comaps#comaps">Project Intro</a> |
|
</div>-->
|
||||||
<a href="https://codeberg.org/comaps/Governance#comaps-project-governance-docs">Governance</a> |
|
|
||||||
<a href="https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md">FAQ</a> |
|
<!-- a nav bar -->
|
||||||
<a href="#contributing">Contribute</a> |
|
[Project Intro](https://codeberg.org/comaps#comaps)
|
||||||
<a href="https://www.comaps.app/donate">Donate</a> |
|
| [Governance](https://codeberg.org/comaps/Governance#comaps-project-governance-docs)
|
||||||
<a href="https://codeberg.org/comaps#keep-connected">Keep Connected</a>
|
| [FAQ](https://codeberg.org/comaps/Governance/src/branch/main/FAQ.md)
|
||||||
|
| [Contribute](#contributing)
|
||||||
|
| [Donate](https://www.comaps.app/donate)
|
||||||
|
| [Keep Connected](https://codeberg.org/comaps#keep-connected)
|
||||||
|
|
||||||
|
# [CoMaps](https://comaps.app) – Hike, Bike, Drive Offline – Easy Map Navigation with Privacy
|
||||||
|
|
||||||
|
[
|
||||||
|

|
||||||
|
](https://github.com/comaps/comaps/actions/workflows/android-check.yaml)
|
||||||
|
[
|
||||||
|

|
||||||
|
](https://github.com/comaps/comaps/actions/workflows/ios-check.yaml)
|
||||||
|
[
|
||||||
|

|
||||||
|
](https://opencollective.com/comaps)
|
||||||
|
[
|
||||||
|

|
||||||
|
](https://liberapay.com/CoMaps)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org) data and reinforced with commitment to transparency, privacy and being not-for-profit. CoMaps is a fork/spin-off of Organic Maps, which in turn is a fork of Maps.ME.
|
||||||
|
|
||||||
|
There are apps for Android and iOS (and ARM macOS).
|
||||||
|
An alpha linux / macOS Qt desktop version, which is also suitable for linux phones.
|
||||||
|
|
||||||
|
The first app release is available as an APK download now! We are still working on publishing on F-Droid, Google Play Store and iOS App Store as well, please stay tuned!
|
||||||
|
|
||||||
|
<!--
|
||||||
|
[<img src="docs/badges/apple-appstore.png" alt="App Store" width="160">](https://apps.apple.com/app/comaps/id1567437057)
|
||||||
|
[<img src="docs/badges/google-play.png" alt="Google Play" width="160">](https://play.google.com/store/apps/details?id=app.comaps)
|
||||||
|
[<img src="docs/badges/fdroid.png" alt="F-Droid" width="160">](https://f-droid.org/en/packages/app.comaps/)
|
||||||
|
-->
|
||||||
|
[<img src="docs/badges/codeberg.png" alt="Codeberg" width="160">](https://codeberg.org/comaps/comaps/releases)
|
||||||
|
|
||||||
|
<p float="left">
|
||||||
|
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.jpg" width="180" />
|
||||||
|
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.jpg" width="180" />
|
||||||
|
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.jpg" width="180" />
|
||||||
|
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.jpg" width="180" />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<div align="center" >
|
**Offline-focused**: Plan and navigate your trip abroad without the need for cellular service, search waypoints while on a distant hike, etc. All app functions are designed to work offline.
|
||||||
<img src="docs/badges/logo.svg" width="150">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
**Respecting Privacy**: The app is designed with privacy in mind - does not identify people, does not track, and does not collect personal information. Ads-free.
|
||||||
|
|
||||||
<div align="center">
|
**Simple and Polished**: essential easy to use features that just work.
|
||||||
<h1><a href="https://comaps.app/">CoMaps</a></h1>
|
|
||||||
<h2>Hike, Bike, Drive Offline - Easy Map Navigation with Privacy</h2>
|
|
||||||
</div>
|
|
||||||
<div align="center">
|
|
||||||
<p align="center">
|
|
||||||
<a href="https://codeberg.org/comaps/comaps/src/branch/main/LICENSE">
|
|
||||||
<img src="https://img.shields.io/github/license/comaps/comaps?style=for-the-badge&logo=opensourceinitiative&logoColor=white&color=588157" alt="License"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/comaps/comaps/actions/workflows/android-check.yaml">
|
|
||||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/android-check.yaml?label=Android%20Build&logo=android&logoColor=white&style=for-the-badge" alt="Android Build Status"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://github.com/comaps/comaps/actions/workflows/ios-check.yaml">
|
|
||||||
<img src="https://img.shields.io/github/actions/workflow/status/comaps/comaps/.github/workflows/ios-check.yaml?label=iOS%20Build&logo=apple&logoColor=white&style=for-the-badge" alt="iOS Build Status"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://opencollective.com/comaps">
|
|
||||||
<img src="https://img.shields.io/opencollective/all/comaps?label=Open%20Collective%20Donors&logo=opencollective&logoColor=white&style=for-the-badge&color=588157" alt="Open Collective Donors"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://liberapay.com/CoMaps">
|
|
||||||
<img src="https://img.shields.io/liberapay/patrons/CoMaps.svg?label=Liberapay%20Patrons&logo=liberapay&logoColor=white&style=for-the-badge&color=588157" alt="Liberapay Patrons"/>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
---
|
**Saves Your Battery and Space**: Doesn’t drain your battery like other navigation apps. Compact maps save precious space on your phone.
|
||||||
|
|
||||||
A community-led free & open source maps app based on [OpenStreetMap](https://www.openstreetmap.org), built for transparency, privacy, and not-for-profit values. A fork of Organic Maps, originally based on Maps.ME.
|
**Free and Built by the Community**: People like you helped build the app by adding places to [OpenStreetMap](https://www.openstreetmap.org), testing and giving feedback on features and contributing their development skills and money.
|
||||||
|
|
||||||
<p align="center">
|
**Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.**
|
||||||
<a href="https://apps.apple.com/app/comaps/id6747180809">
|
|
||||||
<img src="docs/badges/apple-appstore.png" alt="App Store" width="160"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://play.google.com/store/apps/details?id=app.comaps.google">
|
|
||||||
<img src="docs/badges/google-play.png" alt="Google Play" width="160"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://f-droid.org/en/packages/app.comaps.fdroid/">
|
|
||||||
<img src="docs/badges/fdroid.png" alt="F-Droid" width="160"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://apt.izzysoft.de/fdroid/index/apk/app.comaps">
|
|
||||||
<img src="docs/badges/izzyondroid.png" alt="Obtainium" width="160"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://apps.obtainium.imranr.dev/redirect?r=obtainium://add/https://codeberg.org/comaps/comaps">
|
|
||||||
<img src="docs/badges/obtainium.png" alt="Obtainium" width="160"/>
|
|
||||||
</a>
|
|
||||||
<a href="https://codeberg.org/comaps/comaps/releases">
|
|
||||||
<img src="docs/badges/codeberg.png" alt="Codeberg" width="160"/>
|
|
||||||
</a>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
|
### Main Features
|
||||||
<!-- Screenshots -->
|
|
||||||
<p align="center">
|
|
||||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/1.png" width="180" />
|
|
||||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/2.png" width="180" />
|
|
||||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/3.png" width="180" />
|
|
||||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/4.png" width="180" />
|
|
||||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/5.png" width="180" />
|
|
||||||
<img src="android/app/src/fdroid/play/listings/en-US/graphics/phone-screenshots/6.png" width="180" />
|
|
||||||
</p>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚡️ Highlights
|
|
||||||
|
|
||||||
- **Offline-first**: Navigate without a connection
|
|
||||||
- **Privacy-respecting**: No tracking, ads or data collection
|
|
||||||
- **Lightweight**: Battery- and space-efficient
|
|
||||||
- **Simple**: Polished, user-focused interface
|
|
||||||
- **Cross-platform**: Available for Android, iOS, MacOS, and Linux.
|
|
||||||
- **Community-built**: Free, open source, and collaborative
|
|
||||||
- **Transparent**: Open finances and governance
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 Main Features
|
|
||||||
|
|
||||||
- Downloadable detailed maps with places which are not available with Google Maps
|
- Downloadable detailed maps with places which are not available with Google Maps
|
||||||
|
|
||||||
@@ -117,56 +90,37 @@ A community-led free & open source maps app based on [OpenStreetMap](https://www
|
|||||||
|
|
||||||
- Android Auto and CarPlay support
|
- Android Auto and CarPlay support
|
||||||
|
|
||||||
***Freedom Is Here – Navigate the world with privacy and community at the forefront.***
|
*Freedom Is Here - Discover your journey, navigate the world with privacy and community at the forefront!*
|
||||||
|
|
||||||
---
|
## Contributing
|
||||||
|
|
||||||
## 🤝 Contributing
|
|
||||||
|
|
||||||
You can help by donating, contributing code, translating, or by telling others about it. To build the best maps app there is a need for software development, design, product, community development, and other areas. Reach out to us and let us know how you want to help.
|
You can help by donating, contributing code, translating, or by telling others about it. To build the best maps app there is a need for software development, design, product, community development, and other areas. Reach out to us and let us know how you want to help.
|
||||||
|
|
||||||
- Build instructions: [docs/INSTALL.md](docs/INSTALL.md)
|
If you want to build the project, check [docs/INSTALL.md](docs/INSTALL.md). If you want to help the project,
|
||||||
- Contribution guide: [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md)
|
see [docs/CONTRIBUTING.md](docs/CONTRIBUTING.md). You can help in many ways, the ability to code is not necessary.
|
||||||
|
|
||||||
There is a dedicated [Zulip](https://codeberg.org/comaps/Governance/src/branch/main/contribute.md#3-team-messaging) chat for active contributors.
|
Some docs might be outdated, contain broken links or old references to Organic Maps, etc. Its a work in progress and help is much appreciated!
|
||||||
|
|
||||||
---
|
There is a dedicated Zulip chat for active contributors: [comaps.zulipchat.com](https://comaps.zulipchat.com)
|
||||||
|
|
||||||
## 💬 Feedback
|
### Feedback
|
||||||
|
|
||||||
- Rate us on [App Store](https://apps.apple.com/app/comaps/id6747180809) and [Google Play](https://play.google.com/store/apps/details?id=app.comaps.google)
|
<!-- uncomment when linked resources are ready
|
||||||
|
- **Rate us on the [App Store](https://apps.apple.com/app/comaps/id1567437057)
|
||||||
|
and [Google Play](https://play.google.com/store/apps/details?id=app.comaps)**. -->
|
||||||
- Star our repos on Codeberg
|
- Star our repos on Codeberg
|
||||||
- Report bugs or request features on the [issue tracker](https://codeberg.org/comaps/comaps/issues)
|
- Report bugs and discuss features at [the issue tracker](https://codeberg.org/comaps/comaps/issues)
|
||||||
|
|
||||||
---
|
## How is development funded?
|
||||||
|
|
||||||
## 💸 Funding
|
The app is free for everyone, so we rely on donations. Please [donate](https://opencollective.com/comaps/donate) to support the CoMaps community and see this open project thrive!
|
||||||
|
|
||||||
CoMaps is free. To fund development, we rely on your voluntary support ♥️
|
|
||||||
Donate via [OpenCollective](https://opencollective.com/comaps/donate) or [Liberapay](https://liberapay.com/CoMaps).
|
|
||||||
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
|
The project's financial information is completely open and transparent at [our Open Collective](https://opencollective.com/comaps).
|
||||||
|
|
||||||
---
|
## License and Copyright
|
||||||
|
|
||||||
## 🔒 Privacy
|
Licensed under the Apache License, Version 2.0. See
|
||||||
|
[LICENSE](LICENSE),
|
||||||
The Android app has been reviewed by [Exodus Privacy](https://reports.exodus-privacy.eu.org/en/reports/app.comaps.google/latest/).
|
[NOTICE](NOTICE)
|
||||||
|
and [data/copyright.html](data/copyright.html)
|
||||||
To [verify](https://developer.android.com/studio/command-line/apksigner#usage-verify) the APK, use the following signing certificate fingerprints:
|
for more information.
|
||||||
```
|
|
||||||
SHA-256: 4894e8e6963627ef660031d8593fe77297f835acb4e23810003e926135023b4c
|
|
||||||
SHA-1: 8b7b5739f917e9f7c681671ced0c9c8562123ade
|
|
||||||
MD5: 9cce0ffea281dc2f0e0a154d6d2e281e
|
|
||||||
```
|
|
||||||
|
|
||||||
To verify CoMaps via [AppVerifier](https://github.com/soupslurpr/AppVerifier), use the following signing certificate fingerprint:
|
|
||||||
```
|
|
||||||
app.comaps
|
|
||||||
48:94:E8:E6:96:36:27:EF:66:00:31:D8:59:3F:E7:72:97:F8:35:AC:B4:E2:38:10:00:3E:92:61:35:02:3B:4C
|
|
||||||
```
|
|
||||||
---
|
|
||||||
|
|
||||||
## ⚖️ License
|
|
||||||
|
|
||||||
Licensed under the Apache License 2.0.
|
|
||||||
See [LICENSE](LICENSE), [NOTICE](NOTICE), and [data/copyright.html](data/copyright.html).
|
|
||||||
|
|||||||
4
android/.idea/icon.svg
generated
@@ -1,4 +0,0 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" width="64pt" height="64pt" viewBox="0 0 835 835">
|
|
||||||
<path d="M698.5 141.1a20 20 0 0 1 30.8-1.3A416 416 0 0 1 835 417.4a416 416 0 0 1-93.3 263 20 20 0 0 1-31.3-.6l-43-56.6a20 20 0 0 1-.2-24 307 307 0 0 0 59.3-181.8c0-74.2-26.2-142.3-69.9-195.6a20 20 0 0 1-.5-24.8zM260.7 456.4a20 20 0 0 1-7.7-36.7l282-177.4a20 20 0 0 1 29.9 22.7l-97 318.9a20 20 0 0 1-37.5 2.2l-49.2-111.5z" style="fill:#ccdfca"/>
|
|
||||||
<path d="M626.3 753a20 20 0 0 1-6.2 29.6A416 416 0 0 1 417.5 835 417.7 417.7 0 0 1 0 417.4 417.7 417.7 0 0 1 603.3 43.5a20 20 0 0 1 7 30l-42.4 55.8a20 20 0 0 1-24.2 6.1 307 307 0 0 0-126.2-27 309 309 0 0 0-309 309c0 170.6 138.5 309 309 309a307 307 0 0 0 141.6-34.3 20 20 0 0 1 25.1 5.6z" style="fill:#fefdf6"/>
|
|
||||||
</svg>
|
|
||||||
|
Before Width: | Height: | Size: 753 B |
@@ -18,4 +18,5 @@ RUN apt-get update && apt-get install -y --no-install-recommends \
|
|||||||
libxi-dev \
|
libxi-dev \
|
||||||
optipng
|
optipng
|
||||||
WORKDIR /root/comaps
|
WORKDIR /root/comaps
|
||||||
|
RUN ./configure.sh
|
||||||
CMD ./gradlew -Parm64 assembleFdroidDebug
|
CMD ./gradlew -Parm64 assembleFdroidDebug
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
To build, install and run e.g. a Web Debug version on your device/emulator: './gradlew runWebDebug'
|
To build, install and run e.g. a Web Debug version on your device/emulator: './gradlew runWebDebug'
|
||||||
|
|
||||||
Or to compile a redistributable Fdroid Test apk for testing: './gradlew assembleFdroidBeta'
|
Or to compile a redistributable Fdroid Beta apk for testing: './gradlew assembleFdroidBeta'
|
||||||
|
|
||||||
Or to build test apks for all flavors: './gradlew assembleBeta'
|
Or to build beta apks for all flavors: './gradlew assembleBeta'
|
||||||
|
|
||||||
To see all available build targets './gradlew tasks'
|
To see all available build targets './gradlew tasks'
|
||||||
|
|
||||||
|
|||||||
3
android/app/.gitignore
vendored
@@ -24,6 +24,3 @@
|
|||||||
/src/main/res/drawable-mdpi/uk_northern_ireland.png
|
/src/main/res/drawable-mdpi/uk_northern_ireland.png
|
||||||
/src/main/res/drawable-mdpi/uk_scotland.png
|
/src/main/res/drawable-mdpi/uk_scotland.png
|
||||||
/src/main/res/drawable-mdpi/uk_wales.png
|
/src/main/res/drawable-mdpi/uk_wales.png
|
||||||
|
|
||||||
# Symlinked to F-Droid relnotes by tools/unix/link_gplay_relnotes.sh
|
|
||||||
/src/google/play/release-notes
|
|
||||||
@@ -7,6 +7,7 @@ buildscript {
|
|||||||
// Detect flavors from the task name.
|
// Detect flavors from the task name.
|
||||||
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
def taskName = getGradle().getStartParameter().getTaskRequests().toString().toLowerCase()
|
||||||
def isFdroid = taskName.contains('fdroid')
|
def isFdroid = taskName.contains('fdroid')
|
||||||
|
def isBeta = taskName.contains('beta')
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath libs.android.tools
|
classpath libs.android.tools
|
||||||
@@ -15,70 +16,134 @@ buildscript {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
repositories {
|
||||||
|
google()
|
||||||
|
mavenCentral()
|
||||||
|
maven { url 'https://www.jitpack.io' } // MPAndroidChart
|
||||||
|
}
|
||||||
|
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
apply plugin: 'com.github.triplet.play'
|
apply plugin: 'com.github.triplet.play'
|
||||||
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
apply plugin: 'ru.cian.huawei-publish-gradle-plugin'
|
||||||
|
|
||||||
|
def run(cmd) {
|
||||||
|
def stdout = new ByteArrayOutputStream()
|
||||||
|
exec {
|
||||||
|
commandLine = cmd
|
||||||
|
standardOutput = stdout
|
||||||
|
}
|
||||||
|
return stdout.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
import com.github.triplet.gradle.androidpublisher.ReleaseStatus
|
||||||
|
import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform
|
||||||
|
|
||||||
|
def getVersion() {
|
||||||
|
def isWindows = DefaultNativePlatform.getCurrentOperatingSystem().isWindows()
|
||||||
|
def bash = isWindows ? 'C:\\Program Files\\Git\\bin\\bash.exe' : 'bash'
|
||||||
|
def versionCode = Integer.parseInt(run([bash, '../../tools/unix/version.sh', 'android_code']).trim())
|
||||||
|
def versionName = run([bash, '../../tools/unix/version.sh', 'android_name']).trim()
|
||||||
|
return new Tuple2(versionCode, versionName)
|
||||||
|
}
|
||||||
|
|
||||||
def getCommitMessage() {
|
def getCommitMessage() {
|
||||||
return run(['git', '--no-pager', 'show', '-s', '--format=%s%n%n%b', 'HEAD']).trim()
|
return run(['git', '--no-pager', 'show', '-s', '--format=%s%n%n%b', 'HEAD']).trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def osName = System.properties['os.name'].toLowerCase()
|
||||||
|
|
||||||
project.ext.appId = 'app.comaps'
|
project.ext.appId = 'app.comaps'
|
||||||
project.ext.appName = 'CoMaps'
|
project.ext.appName = 'CoMaps'
|
||||||
|
|
||||||
|
// I have Java 21 installed, but this doesn't work on MacOS.
|
||||||
java {
|
//java {
|
||||||
toolchain {
|
// toolchain {
|
||||||
languageVersion.set(JavaLanguageVersion.of(21))
|
// languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = 'app.organicmaps'
|
namespace 'app.organicmaps'
|
||||||
|
|
||||||
// TODO: it should not be here, but in sdk/build.gradle. But for some reason it should be specified here as well.
|
|
||||||
ndkVersion = '28.2.13676358'
|
|
||||||
|
|
||||||
dependenciesInfo {
|
|
||||||
// Disables dependency metadata when building APKs (for IzzyOnDroid/F-Droid)
|
|
||||||
includeInApk = false
|
|
||||||
// Disables dependency metadata when building Android App Bundles (for Google Play)
|
|
||||||
includeInBundle = false
|
|
||||||
}
|
|
||||||
|
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
dataBinding = true
|
dataBinding = true
|
||||||
buildConfig = true
|
buildConfig = true
|
||||||
}
|
}
|
||||||
|
|
||||||
// Users are complaining that the app should be re-downloaded from the Play Store after changing the language.
|
|
||||||
bundle {
|
|
||||||
language {
|
|
||||||
enableSplit = false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// All properties are read from gradle.properties file
|
// All properties are read from gradle.properties file
|
||||||
compileSdk = propCompileSdkVersion.toInteger()
|
compileSdk propCompileSdkVersion.toInteger()
|
||||||
|
|
||||||
|
ndkVersion '27.2.12479018'
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
versionCode = rootProject.ext.versionCode
|
// Default package name is taken from the manifest and should be app.comaps
|
||||||
versionName = rootProject.ext.versionName
|
def ver = getVersion()
|
||||||
|
versionCode = ver.V1
|
||||||
|
versionName = ver.V2
|
||||||
println('Version: ' + versionName)
|
println('Version: ' + versionName)
|
||||||
println('VersionCode: ' + versionCode)
|
println('VersionCode: ' + versionCode)
|
||||||
minSdk = propMinSdkVersion.toInteger()
|
minSdk propMinSdkVersion.toInteger()
|
||||||
targetSdk = propTargetSdkVersion.toInteger()
|
targetSdk propTargetSdkVersion.toInteger()
|
||||||
applicationId project.ext.appId
|
applicationId project.ext.appId
|
||||||
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
|
buildConfigField 'String', 'SUPPORT_MAIL', '"android@comaps.app"'
|
||||||
// Should be customized in flavors.
|
// Should be customized in flavors.
|
||||||
buildConfigField 'String', 'REVIEW_URL', '""'
|
buildConfigField 'String', 'REVIEW_URL', '""'
|
||||||
|
|
||||||
base.archivesName = appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode
|
externalNativeBuild {
|
||||||
|
def pchFlag = 'OFF'
|
||||||
|
if (project.hasProperty('pch')) pchFlag = 'ON'
|
||||||
|
|
||||||
ndk.debugSymbolLevel = 'full'
|
def njobs = ''
|
||||||
|
if (project.hasProperty('njobs')) njobs = project.getProperty('njobs')
|
||||||
|
|
||||||
|
def enableVulkanDiagnostics = 'OFF'
|
||||||
|
if (project.hasProperty('enableVulkanDiagnostics')) {
|
||||||
|
enableVulkanDiagnostics = project.getProperty('enableVulkanDiagnostics')
|
||||||
|
}
|
||||||
|
|
||||||
|
def enableTrace = 'OFF'
|
||||||
|
if (project.hasProperty('enableTrace')) {
|
||||||
|
enableTrace = project.getProperty('enableTrace')
|
||||||
|
}
|
||||||
|
|
||||||
|
cmake {
|
||||||
|
cppFlags '-fexceptions', '-frtti'
|
||||||
|
// There is no sense to enable sections without gcc's --gc-sections flag.
|
||||||
|
cFlags '-fno-function-sections', '-fno-data-sections',
|
||||||
|
'-Wno-extern-c-compat'
|
||||||
|
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=c++_static',
|
||||||
|
"-DOS=$osName", '-DSKIP_TESTS=ON', '-DSKIP_TOOLS=ON', "-DUSE_PCH=$pchFlag",
|
||||||
|
"-DNJOBS=$njobs", "-DENABLE_VULKAN_DIAGNOSTICS=$enableVulkanDiagnostics",
|
||||||
|
"-DENABLE_TRACE=$enableTrace"
|
||||||
|
targets 'organicmaps'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use, for example, -Parm32 gradle parameter to build only for armeabi-v7a.
|
||||||
|
ndk {
|
||||||
|
abiFilters = new HashSet<>()
|
||||||
|
if (project.hasProperty('arm32') || project.hasProperty('armeabi-v7a')) {
|
||||||
|
abiFilters.add('armeabi-v7a')
|
||||||
|
}
|
||||||
|
if (project.hasProperty('arm64') || project.hasProperty('arm64-v8a')) {
|
||||||
|
abiFilters.add('arm64-v8a')
|
||||||
|
}
|
||||||
|
if (project.hasProperty('x86')) {
|
||||||
|
abiFilters.add('x86')
|
||||||
|
}
|
||||||
|
if (project.hasProperty('x86_64') || project.hasProperty('x64')) {
|
||||||
|
abiFilters.add('x86_64')
|
||||||
|
}
|
||||||
|
if (abiFilters.isEmpty()) {
|
||||||
|
abiFilters.add('armeabi-v7a')
|
||||||
|
abiFilters.add('arm64-v8a')
|
||||||
|
// For the emulator, chromebooks and some Intel Atom devices.
|
||||||
|
abiFilters.add('x86_64')
|
||||||
|
}
|
||||||
|
println('Building for ' + abiFilters + ' archs.')
|
||||||
|
}
|
||||||
|
|
||||||
|
setProperty('archivesBaseName', appName.replaceAll('\\s','') + '-' + defaultConfig.versionCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
flavorDimensions += 'default'
|
flavorDimensions += 'default'
|
||||||
@@ -104,7 +169,6 @@ android {
|
|||||||
|
|
||||||
fdroid {
|
fdroid {
|
||||||
dimension 'default'
|
dimension 'default'
|
||||||
applicationIdSuffix '.fdroid'
|
|
||||||
versionName = android.defaultConfig.versionName + '-FDroid'
|
versionName = android.defaultConfig.versionName + '-FDroid'
|
||||||
buildConfigField 'String', 'SUPPORT_MAIL', '"fdroid@comaps.app"'
|
buildConfigField 'String', 'SUPPORT_MAIL', '"fdroid@comaps.app"'
|
||||||
}
|
}
|
||||||
@@ -128,21 +192,23 @@ android {
|
|||||||
splits.abi {
|
splits.abi {
|
||||||
boolean enabled = project.hasProperty('splitApk')
|
boolean enabled = project.hasProperty('splitApk')
|
||||||
println ('Create separate apks: ' + enabled)
|
println ('Create separate apks: ' + enabled)
|
||||||
enable = enabled
|
enable enabled
|
||||||
reset()
|
reset()
|
||||||
include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
include 'x86', 'armeabi-v7a', 'arm64-v8a', 'x86_64'
|
||||||
universalApk = true
|
universalApk true
|
||||||
}
|
}
|
||||||
|
|
||||||
lint {
|
lint {
|
||||||
disable 'MissingTranslation'
|
disable 'MissingTranslation'
|
||||||
// https://github.com/organicmaps/organicmaps/issues/3551
|
// https://github.com/organicmaps/organicmaps/issues/3551
|
||||||
disable 'MissingQuantity', 'UnusedQuantity'
|
disable 'MissingQuantity', 'UnusedQuantity'
|
||||||
|
// https://github.com/organicmaps/organicmaps/issues/3550
|
||||||
|
disable 'ByteOrderMark'
|
||||||
// https://github.com/organicmaps/organicmaps/issues/1077
|
// https://github.com/organicmaps/organicmaps/issues/1077
|
||||||
disable 'CustomSplashScreen'
|
disable 'CustomSplashScreen'
|
||||||
// https://github.com/organicmaps/organicmaps/issues/3610
|
// https://github.com/organicmaps/organicmaps/issues/3610
|
||||||
disable 'InsecureBaseConfiguration'
|
disable 'InsecureBaseConfiguration'
|
||||||
abortOnError = true
|
abortOnError true
|
||||||
}
|
}
|
||||||
|
|
||||||
gradle.projectsEvaluated {
|
gradle.projectsEvaluated {
|
||||||
@@ -201,58 +267,73 @@ android {
|
|||||||
debug {
|
debug {
|
||||||
applicationIdSuffix '.debug' // Allows to install debug and release builds together
|
applicationIdSuffix '.debug' // Allows to install debug and release builds together
|
||||||
versionNameSuffix '-debug'
|
versionNameSuffix '-debug'
|
||||||
|
jniDebuggable true // Enable jni debug build
|
||||||
zipAlignEnabled true
|
zipAlignEnabled true
|
||||||
signingConfig = signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
resValue 'string', 'app_name', 'CoMaps Debug'
|
resValue 'string', 'app_name', 'CoMaps Debug'
|
||||||
|
// Do not generate separate debug symbols for debug apps, because we don't distribute them.
|
||||||
|
ndk.debugSymbolLevel = 'none'
|
||||||
}
|
}
|
||||||
|
|
||||||
release {
|
release {
|
||||||
if (taskName.contains('release')) {
|
if (taskName.contains('release')) {
|
||||||
if (secureReleasePropertiesFileExists) {
|
if (secureReleasePropertiesFileExists) {
|
||||||
println('Using RELEASE signing keys from secure.properties.release')
|
println('Using RELEASE signing keys from secure.properties.release')
|
||||||
signingConfig = signingConfigs.release
|
signingConfig signingConfigs.release
|
||||||
} else {
|
} else {
|
||||||
println('NO RELEASE signing keys found')
|
println('NO RELEASE signing keys found')
|
||||||
println('Using DEBUG signing keys')
|
println('Using DEBUG signing keys')
|
||||||
signingConfig = signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
minifyEnabled true
|
minifyEnabled true
|
||||||
shrinkResources = true
|
shrinkResources true
|
||||||
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
||||||
// To learn more, go to the documentation section about R8 configuration files.
|
// To learn more, go to the documentation section about R8 configuration files.
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
resValue 'string', 'app_name', project.ext.appName
|
resValue 'string', 'app_name', project.ext.appName
|
||||||
|
// Full size symbols are too big for Google, 217mb aab vs 95mb.
|
||||||
|
ndk.debugSymbolLevel = 'symbol_table'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO(@pastk): rename to "test" everywhere in code
|
||||||
beta {
|
beta {
|
||||||
applicationIdSuffix '.test'
|
applicationIdSuffix '.test'
|
||||||
versionNameSuffix '-test'
|
versionNameSuffix '-test'
|
||||||
if (taskName.contains('beta')) {
|
if (taskName.contains('beta')) {
|
||||||
if (secureTestPropertiesFileExists) {
|
if (secureTestPropertiesFileExists) {
|
||||||
println('Using TEST signing keys from secure.properties.test')
|
println('Using TEST signing keys from secure.properties.test')
|
||||||
signingConfig = signingConfigs.test
|
signingConfig signingConfigs.test
|
||||||
} else {
|
} else {
|
||||||
println('NO TEST signing keys found')
|
println('NO TEST signing keys found')
|
||||||
println('Using DEBUG signing keys')
|
println('Using DEBUG signing keys')
|
||||||
signingConfig = signingConfigs.debug
|
signingConfig signingConfigs.debug
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
minifyEnabled true
|
minifyEnabled true
|
||||||
shrinkResources = true
|
shrinkResources true
|
||||||
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
// Includes the default ProGuard rules files that are packaged with the Android Gradle plugin.
|
||||||
// To learn more, go to the documentation section about R8 configuration files.
|
// To learn more, go to the documentation section about R8 configuration files.
|
||||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||||
matchingFallbacks = ['release'] // use dependencies of "release" build type
|
matchingFallbacks = ['release'] // use dependencies of "release" build type
|
||||||
resValue 'string', 'app_name', 'CoMaps Test'
|
resValue 'string', 'app_name', 'CoMaps Test'
|
||||||
|
// Full size symbols are too big for Google, 217mb aab vs 95mb.
|
||||||
|
ndk.debugSymbolLevel = 'symbol_table'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
externalNativeBuild {
|
||||||
|
cmake {
|
||||||
|
version '3.22.1+'
|
||||||
|
buildStagingDirectory './nativeOutputs'
|
||||||
|
path '../../CMakeLists.txt'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We don't compress these extensions in assets/ because our random FileReader can't read zip-compressed files from apk.
|
// We don't compress these extensions in assets/ because our random FileReader can't read zip-compressed files from apk.
|
||||||
// TODO: Load all minor files via separate call to ReadAsString which can correctly handle compressed files in zip containers.
|
// TODO: Load all minor files via separate call to ReadAsString which can correctly handle compressed files in zip containers.
|
||||||
androidResources {
|
androidResources {
|
||||||
ignoreAssetsPattern = '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
ignoreAssetsPattern '!.svn:!.git:!.DS_Store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~'
|
||||||
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
|
noCompress = ['txt', 'bin', 'html', 'png', 'json', 'mwm', 'ttf', 'sdf', 'ui', 'config', 'csv', 'spv', 'obj']
|
||||||
localeFilters += [
|
localeFilters += [
|
||||||
"af",
|
"af",
|
||||||
@@ -309,16 +390,14 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
compileOptions {
|
compileOptions {
|
||||||
coreLibraryDesugaringEnabled = true
|
coreLibraryDesugaringEnabled true
|
||||||
|
|
||||||
sourceCompatibility JavaVersion.VERSION_21
|
sourceCompatibility JavaVersion.VERSION_17
|
||||||
targetCompatibility JavaVersion.VERSION_21
|
targetCompatibility JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation project(':sdk')
|
|
||||||
|
|
||||||
coreLibraryDesugaring libs.android.tools.desugar
|
coreLibraryDesugaring libs.android.tools.desugar
|
||||||
|
|
||||||
// Google Play Location Services
|
// Google Play Location Services
|
||||||
@@ -355,7 +434,8 @@ dependencies {
|
|||||||
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
|
// Fix for app/organicmaps/util/FileUploadWorker.java:14: error: cannot access ListenableFuture
|
||||||
// https://github.com/organicmaps/organicmaps/issues/6106
|
// https://github.com/organicmaps/organicmaps/issues/6106
|
||||||
implementation libs.google.guava
|
implementation libs.google.guava
|
||||||
implementation libs.appdevnext.androidchart
|
implementation libs.devnullorthrow.mpandroidchart
|
||||||
|
implementation libs.jcip.annotations
|
||||||
|
|
||||||
// Test Dependencies
|
// Test Dependencies
|
||||||
androidTestImplementation libs.androidx.test.junit
|
androidTestImplementation libs.androidx.test.junit
|
||||||
@@ -363,6 +443,10 @@ dependencies {
|
|||||||
testImplementation libs.mockito.core
|
testImplementation libs.mockito.core
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.withType(JavaCompile) {
|
||||||
|
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
|
||||||
|
}
|
||||||
|
|
||||||
android.applicationVariants.all { variant ->
|
android.applicationVariants.all { variant ->
|
||||||
def authorityValue = variant.applicationId + ".provider"
|
def authorityValue = variant.applicationId + ".provider"
|
||||||
def authority = "\"" + authorityValue + "\""
|
def authority = "\"" + authorityValue + "\""
|
||||||
@@ -377,7 +461,6 @@ play {
|
|||||||
track.set('production')
|
track.set('production')
|
||||||
defaultToAppBundles.set(true)
|
defaultToAppBundles.set(true)
|
||||||
releaseStatus.set(ReleaseStatus.IN_PROGRESS)
|
releaseStatus.set(ReleaseStatus.IN_PROGRESS)
|
||||||
userFraction.set(0.2d) // Rollout to 20% of users
|
|
||||||
serviceAccountCredentials.set(file('google-play.json'))
|
serviceAccountCredentials.set(file('google-play.json'))
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -411,7 +494,3 @@ huaweiPublish {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.withType(JavaCompile).configureEach {
|
|
||||||
options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation'
|
|
||||||
}
|
|
||||||
|
|||||||
BIN
android/app/ic_launcher-playstore.png
Normal file
|
After Width: | Height: | Size: 34 KiB |
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@color/bg_app_icon_test"/>
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground_test"/>
|
|
||||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome"/>
|
|
||||||
</adaptive-icon>
|
|
||||||
BIN
android/app/src/beta/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.2 KiB |
BIN
android/app/src/beta/res/mipmap-hdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 7.1 KiB |
BIN
android/app/src/beta/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 3.2 KiB |
BIN
android/app/src/beta/res/mipmap-mdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 4.8 KiB |
BIN
android/app/src/beta/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
BIN
android/app/src/beta/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 10 KiB |
BIN
android/app/src/beta/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 8.6 KiB |
BIN
android/app/src/beta/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
BIN
android/app/src/beta/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 11 KiB |
BIN
android/app/src/beta/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 20 KiB |
@@ -1,6 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
|
||||||
<background android:drawable="@color/bg_app_icon_debug"/>
|
|
||||||
<foreground android:drawable="@drawable/ic_launcher_foreground_debug"/>
|
|
||||||
<monochrome android:drawable="@drawable/ic_launcher_foreground_monochrome"/>
|
|
||||||
</adaptive-icon>
|
|
||||||
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 8.4 KiB |
BIN
android/app/src/debug/res/mipmap-hdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 4.9 KiB |
BIN
android/app/src/debug/res/mipmap-mdpi/ic_launcher_foreground.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
BIN
android/app/src/debug/res/mipmap-xhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 36 KiB |
BIN
android/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 63 KiB |
BIN
android/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png
Normal file
|
After Width: | Height: | Size: 37 KiB |
|
After Width: | Height: | Size: 97 KiB |
@@ -1 +0,0 @@
|
|||||||
CoMaps - Mapas ensin conexón con privacidá
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Лесна навигация - Открийте повече от вашето пътуване - Подкрепен от общността
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - Хайкинг, Велосипед, Пътуване без Интернет
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
মানচিত্র নেভিগেশন - আপনার যাত্রা সম্পর্কে আরও জানুন - সম্প্রদায় কর্তৃক পরিচালিত
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
কোম্যাপস - অফলাইনে হাইকিং, সাইকেলিং ও ড্রাইভিং
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Navegació intuïtiva - Descobreix el teu camí - El poder de la comunitat
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - Camina, pedala o condueix privadament
|
|
||||||
@@ -6,27 +6,29 @@ Můžete se zde také připojit ke komunitě pomáhat s vytvářením nejlepší
|
|||||||
• Poskytujte zpětnou vazbu a nahlašujte problémy
|
• Poskytujte zpětnou vazbu a nahlašujte problémy
|
||||||
• Aktualizujte mapová data v aplikaci nebo na webu OpenStreetMap
|
• Aktualizujte mapová data v aplikaci nebo na webu OpenStreetMap
|
||||||
|
|
||||||
‣ <b>Zaměřené na offline použití</b>: Plánujte a navigujte své cesty do zahraničí bez nutnosti mobilních dat, hledejte body na vzdálených túrách apod. Všechny funkce aplikace jsou navrženy tak, aby fungovaly offline.
|
• <b>Zaměřené na offline použití</b>: Plánujte a navigujte své cesty do zahraničí bez nutnosti mobilních dat, hledejte body na vzdálených túrách apod. Všechny funkce aplikace jsou navrženy tak, aby fungovaly offline.
|
||||||
‣ <b>S ohledem na soukromí</b>: Aplikace je navržená s důrazem na soukromí – neidentifikuje lidi, nesleduje vás a nesbírá osobní údaje. Bez reklam.
|
• <b>S ohledem na soukromí</b>: Aplikace je navržená s důrazem na soukromí – neidentifikuje lidi, nesleduje vás a nesbírá osobní údaje. Bez reklam.
|
||||||
‣ <b>Jednoduché a vyladěné</b>: Základní, snadno použitelné funkce, které prostě fungují.
|
• <b>Jednoduché a vyladěné</b>: Základní, snadno použitelné funkce, které prostě fungují.
|
||||||
‣ <b>Šetří vaši baterii a místo</b>: Nevybíjí vaší baterii, jako ostatní navigační aplikace. Kompaktní mapy šetří cenné místo ve vašem telefonu.
|
• <b>Šetří vaši baterii a místo</b>: Nevybíjí vaší baterii, jako ostatní navigační aplikace. Kompaktní mapy šetří cenné místo ve vašem telefonu.
|
||||||
‣ <b>Bezplatné a vytvořené komunitou</b>: S vytvářením aplikace pomáhají lidé, jako jste vy, přidáváním míst do projektu OpenStreetMap, testováním a poskytováním zpětné vazby k funkcím a přispíváním svými vývojářskými schopnostmi a penězi.
|
• <b>Bezplatné a vytvořené komunitou</b>: S vytvářením aplikace pomáhají lidé, jako jste vy, přidáváním míst do projektu OpenStreetMap, testováním a poskytováním zpětné vazby k funkcím a přispíváním svými vývojářskými schopnostmi a penězi.
|
||||||
‣ <b>Otevřené a transparentní rozhodování a nakládání s financemi, neziskovost a plně otevřený zdrojový kód.</b>
|
• <b>Otevřené a transparentní rozhodování a nakládání s financemi, neziskovost a plně otevřený zdrojový kód.</b>
|
||||||
|
|
||||||
<b>Hlavní funkce</b>:
|
<b>Hlavní funkce</b>:
|
||||||
• Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google
|
<ul>
|
||||||
• Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.
|
<li>Stahovatelné podrobné mapy s místy, která nenajdete ani v Mapách Google</li>
|
||||||
• Pěší trasy a cyklostezky
|
<li>Outdoorový režim se zvýrazněnými turistickými trasami, tábořišti, vodními zdroji, vrcholy, vrstevnicemi atd.</li>
|
||||||
• Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího
|
<li>Pěší trasy a cyklostezky</li>
|
||||||
• Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu
|
<li>Body zájmu, jako jsou restaurace, čerpací stanice, hotely, obchody, vyhlídky a mnoho dalšího</li>
|
||||||
• Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení
|
<li>Hledání podle názvu nebo adresy nebo podle kategorie bodů zájmu</li>
|
||||||
• Uložení oblíbených míst jedním klepnutím
|
<li>Navigace s hlasovými pokyny pro chůzi, jízdu na kole nebo řízení</li>
|
||||||
• Offline články z Wikipedie
|
<li>Uložení oblíbených míst jedním klepnutím</li>
|
||||||
• Vrstva metra a navigace v něm
|
<li>Offline články z Wikipedie</li>
|
||||||
• Záznam tras
|
<li>Vrstva metra a navigace v něm</li>
|
||||||
• Export a import záložek a tras ve formátech KML, KMZ a GPX
|
<li>Záznam tras</li>
|
||||||
• Tmavý režim k použití během noci
|
<li>Export a import záložek a tras ve formátech KML, KMZ a GPX</li>
|
||||||
• Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru
|
<li>Tmavý režim k použití během noci</li>
|
||||||
|
<li>Zlepšování mapových dat pro všechny pomocí jednoduchého vestavěného editoru</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<b>Svoboda je tady</b>
|
<b>Svoboda je tady</b>
|
||||||
Objevujte své cesty, navigujte se světem se soukromím a komunitou na prvním místě!
|
Objevujte své cesty, navigujte se světem se soukromím a komunitou na prvním místě!
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
En fællesskabdrevet og åben source kortapp, baseret på kortdata fra OpenStreetMap og styrket i forpligtelsen til værdierne gennemsigtighed, privatlivets fred, og non-profit. CoMaps udspringer af Organic Maps, som selv udsprang af Maps.ME.
|
|
||||||
|
|
||||||
Læs mere om grundlaget for projektet og dets udviklingsretnign på <b><i>codeberg.org/comaps</i></b>.
|
|
||||||
Slut dig til fælleskabet og hjælp til med at bygge den bedste kortapp i verden.
|
|
||||||
• Brug appen og fortæl andre om den
|
|
||||||
• Giv feedback anmeld fejl
|
|
||||||
• Opdater kortdata i appen eller på OpenStreetMap-hjemmesiden.
|
|
||||||
|
|
||||||
‣ <b>Offlinefokuseret</b>: Planlæg din rute og find vej i udlandet uden brug af mobildata, søg og find afsidesliggende mål på en afsidesliggende vandretur, mm. Alle funktioner er designet til at fungere uden internetforbindelse.
|
|
||||||
‣ <b>Respekt for privatlivets fred</b>: Appen er designet med henblik på at respektere dit privatliv – den identificerer dig ikke, indeholder ingen sporingsmekanismer, og insamler ingen personlig information. Appen er reklamefri.
|
|
||||||
‣ <b>Enkel og elegant</b>: de essentielle funktioner er nemme at bruge, og de virker bare.
|
|
||||||
‣ <b>Sparer på batteriet og på lagerpladsen</b>: Dræner ikke dit batteri hurtigt, som andre kortapps. De kompakte kortfiler minimerer varigt lagerpladsforbrug.
|
|
||||||
‣ <b>Gratis og bygget i fællesskab</b>: Folk som dig har hjulpet med denne app ved at tilføje steder til OpenStreetMap, ved at teste appens funktioner og give feedback på dem og ved at bidrage til udviklingen af appen med deres tid og penge.
|
|
||||||
‣ <b>Åben og gennemsigtig beslutningstagningsproces og finanser, non-profit, og fuldt ud åben source.</b>
|
|
||||||
|
|
||||||
<b>Hovedfunktioner</b>
|
|
||||||
• Hent detaljerede kort, der indeholder steder som ikke findes i mange kommericelle kort.
|
|
||||||
• En frilufts-tilstand med markede vandrestier, teltpladser, kilder, bjerg- og bakketoppe, højdekonturlinjer, mm.
|
|
||||||
• Gangstier og cykelstier
|
|
||||||
• Steder, der kan besøges, som f.eks. restauranter, tankstationer, hoteller, butikker, seværdigheder og mange andre.
|
|
||||||
• Søg efter stednavn, adresse, eller type af sted.
|
|
||||||
• Gem dine yndlingssteder som bogmærker med et enkelt tryk.
|
|
||||||
• iCloud synkronisering af bogmærker og optagede spor.
|
|
||||||
• Offline artikler fra Wikipedia.
|
|
||||||
• Metro-lag med navigation.
|
|
||||||
• Optagelse af spor.
|
|
||||||
• Eksport og import af bogmærker og spor i formaterne KML, KMZ og GPX.
|
|
||||||
• Mørk tilstand til brug om natten.
|
|
||||||
• Mulighed for at forbedre kortet vha. en indbygget editor.
|
|
||||||
• CarPlay understøttes.
|
|
||||||
|
|
||||||
<b>Friheden er ankommet</b>
|
|
||||||
Opdag din rejse, find vej i verden med privatliv og fællesskab i førersædet!
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Nem kortnavigation - Oplev mere af din rejse - Drevet af fællesskabet
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - vandr, cykl og kør offline med privatliv
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
Eine von der Community betriebene, kostenlose Open-Source Karten-App, die auf OpenStreetMap Daten basiert. Transparent und nicht gewinnorientiert. CoMaps ist ein Fork/Abspaltung von Organic Maps, die wiederum ein Fork/Abspaltung von Maps.Me ist.
|
Eine von der Community betriebene, kostenlose Open-Source Karten-App, die auf OpenStreetMap Daten basiert. Transparent, datensparsam und nicht gewinnorientiert. CoMaps ist ein Fork/Abspaltung von Organic Maps, die wiederum ein Fork/Abspaltung von Maps.Me ist.
|
||||||
|
|
||||||
Lese mehr über die Gründe und Ziele des Projektes unter <b><i>codeberg.org/comaps</i></b>.
|
Lese mehr über die Gründe und Ziele des Projektes unter <b><i>codeberg.org/comaps</i></b>.
|
||||||
Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
||||||
@@ -14,6 +14,7 @@ Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
|||||||
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source</b>
|
‣ <b>Offen und transparent bei Entscheidungen und Finanzen, gemeinnützig und vollständig Open-Source</b>
|
||||||
|
|
||||||
<b>Hauptfunktionen</b>:
|
<b>Hauptfunktionen</b>:
|
||||||
|
<ul>
|
||||||
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
|
• Detaillierte, herunterladbare Karten mit Orten, die bei Google Maps oft fehlen
|
||||||
• Outdoor-Modus mit hervorgehobenen Wanderwegen, Campingplätzen, Wasserquellen, Gipfeln, Höhenlinien usw.
|
• Outdoor-Modus mit hervorgehobenen Wanderwegen, Campingplätzen, Wasserquellen, Gipfeln, Höhenlinien usw.
|
||||||
• Geh- und Radwege
|
• Geh- und Radwege
|
||||||
@@ -28,5 +29,5 @@ Werde Teil der Community und hilf mit, die beste Karten-App zu entwickeln
|
|||||||
• Dunkler Modus für die Nutzung bei Nacht
|
• Dunkler Modus für die Nutzung bei Nacht
|
||||||
• Kartenbearbeitung direkt in der App mit einem einfachen Editor
|
• Kartenbearbeitung direkt in der App mit einem einfachen Editor
|
||||||
|
|
||||||
<b>Entdecke die Unabhängigkeit</b>
|
<b>Freiheit beginnt hier</b>
|
||||||
Entdecke deine Reise – navigiere in der Welt mit Datenschutz!
|
Entdecke deine Reise – navigiere in der Welt mit Datenschutz!
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
• OpenStreetMap Daten vom 2. Juni
|
||||||
|
• Neue Einstellungsoption zum Ändern oder Ausblenden der "Über CoMaps" Schaltfläche ganz links
|
||||||
|
• Routen als GPS Track speichern
|
||||||
|
• Qingdao Metro, Gärtnereien, Leitplanken, Leitern, Studios, Tanzsäle, Feuerstellen und Stundenhotels hinzugefügt
|
||||||
|
• transparente Navigationsleiste im Light Mode
|
||||||
|
• Mastodon und Bluesky Kontaktoptionen für POIs und im OSM-Editor hinzugefügt
|
||||||
|
• Anzeige der Kompassgradzahl in der Richtungspfeilansicht
|
||||||
|
• Übersetzungen aktualisiert
|
||||||
@@ -14,19 +14,21 @@ Join the community there and help make the best maps app
|
|||||||
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
|
‣ <b>Open and Transparent Decision-making and Financials, Not-for-profit and Fully Open Source.</b>
|
||||||
|
|
||||||
<b>Main Features</b>:
|
<b>Main Features</b>:
|
||||||
• Downloadable detailed maps with places which are not available with Google Maps
|
<ul>
|
||||||
• Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc
|
<li>Downloadable detailed maps with places which are not available with Google Maps</li>
|
||||||
• Walking paths and cycleways
|
<li>Outdoor mode with highlighted hiking trails, campsites, water sources, peaks, contour lines, etc</li>
|
||||||
• Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more
|
<li>Walking paths and cycleways</li>
|
||||||
• Search by name or an address or by point of interest category
|
<li>Points of interest like restaurants, gas stations, hotels, shops, sightseeings and many more</li>
|
||||||
• Navigation with voice announcements for walking, cycling, or driving
|
<li>Search by name or an address or by point of interest category</li>
|
||||||
• Bookmark your favorite places with a single tap
|
<li>Navigation with voice announcements for walking, cycling, or driving</li>
|
||||||
• Offline Wikipedia articles
|
<li>Bookmark your favorite places with a single tap</li>
|
||||||
• Subway transit layer and directions
|
<li>Offline Wikipedia articles</li>
|
||||||
• Track recording
|
<li>Subway transit layer and directions</li>
|
||||||
• Export and import bookmarks and tracks in KML, KMZ, GPX formats
|
<li>Track recording</li>
|
||||||
• A dark mode to use during the night
|
<li>Export and import bookmarks and tracks in KML, KMZ, GPX formats</li>
|
||||||
• Improve map data for everyone using a basic built-in editor
|
<li>A dark mode to use during the night</li>
|
||||||
|
<li>Improve map data for everyone using a basic built-in editor</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<b>Freedom Is Here</b>
|
<b>Freedom Is Here</b>
|
||||||
Discover your journey, navigate the world with privacy and community at the forefront!
|
Discover your journey, navigate the world with privacy and community at the forefront!
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 249 KiB |
BIN
android/app/src/fdroid/play/listings/en-US/graphics/icon/1.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 747 KiB |
|
Before Width: | Height: | Size: 636 KiB |
|
After Width: | Height: | Size: 749 KiB |
|
Before Width: | Height: | Size: 407 KiB |
|
After Width: | Height: | Size: 730 KiB |
|
Before Width: | Height: | Size: 155 KiB |
|
After Width: | Height: | Size: 590 KiB |
|
Before Width: | Height: | Size: 454 KiB |
|
Before Width: | Height: | Size: 451 KiB |
|
Before Width: | Height: | Size: 357 KiB |
@@ -1,13 +1,8 @@
|
|||||||
• Fixed voice directions pronouncing weird symbols in the beginning
|
• OpenStreetMap data as of June 2
|
||||||
• OpenStreetMap data as of November 23
|
• add a setting to change the leftmost button or hide it
|
||||||
|
• save built routes as tracks
|
||||||
Changes in the previous release:
|
• add Qingdao metro, plant nurseries, highway guard rails, ladders, studios, dance venues, firepits, love hotels
|
||||||
• Added trees
|
• transparent system navigation bar in the light mode
|
||||||
• Made bus stop icons smaller and show up earlier
|
• add Mastodon and Bluesky contact options to POIs and OSM editor
|
||||||
• Reduce visibility of entrances
|
• display Azimuth angle in direction arrow view
|
||||||
• Added several other POI types
|
• update translations
|
||||||
• Show sand areas on the map
|
|
||||||
• Add business is vacant option to the OSM editor
|
|
||||||
• Improved road shields in Europe
|
|
||||||
• Avoid paved roads routing option
|
|
||||||
• Added icons to the settings page
|
|
||||||
|
|||||||
@@ -1,32 +0,0 @@
|
|||||||
Komunum-gvidata senpaga kaj malfermkoda mapapliko bazita sur OpenStreetMap-datumoj kaj fortigita per komitado al transparencio, privateco kaj ne-lucro. CoMaps estas forko/spin-off de Organic Maps, kiu turne estas forko de Maps.ME.
|
|
||||||
|
|
||||||
Legu plu pri la kialoj por la projekto kaj ĝia direkto ĉe <b><i>codeberg.org/comaps</i></b>.
|
|
||||||
Aliĝu al la komunumo tie kaj helpu fari la plej bonan mapaplikon
|
|
||||||
• Uzu la aplikon kaj disvastigu la vorton pri ĝi
|
|
||||||
• Donu rimarkojn kaj raportu problemojn
|
|
||||||
• Ĝisdatigu mapajn datumojn en la apliko aŭ sur la OpenStreetMap-retejo
|
|
||||||
|
|
||||||
‣ <b>Senkonekta-fokusa</b>: Planu kaj navigu vian vojaĝon eksterlande sen bezono de ĉelulara servico, serĉu vojpunktojn dum malproksima promenado, ktp. Ĉiuj funkcioj de la apliko estas dezajnitaj por funkcii senkonekte.
|
|
||||||
‣ <b>Rispektante Privatecon</b>: La apliko estas dezajnita kun privateco en menso — ne identigas homojn, ne sekvas, kaj ne kolektas personajn informojn. Sen reklamoj.
|
|
||||||
‣ <b>Simpla kaj Perfekta</b>: esencaj, facile uzeblaj funkcioj kiuj simple funkcias.
|
|
||||||
‣ <b>Konservas Vian Baterion kaj Spacon</b>: Ne elĉerpas vian baterion kiel aliaj navigaj aplikaĵoj. Kompaktaj mapoj konservas precian spacon sur via telefono.
|
|
||||||
‣ <b>Sena kaj Konstruita de la Komunumo</b>: Homoj kiel vi helpis konstrui la aplikon per aldonado de lokoj al OpenStreetMap, testado kaj donado de rimarkoj pri funkcioj kaj kontribuado de siaj programadaj kapabloj kaj mono.
|
|
||||||
‣ <b>Malferma kaj Transparenta Decidado kaj Financoj, Ne-lucra kaj Tute Malfermkoda.</b>
|
|
||||||
|
|
||||||
<b>Ĉefaj Funkcioj</b>:
|
|
||||||
• Elŝuteblaj detalegaj mapoj kun lokoj kiuj ne estas disponeblaj per Google Maps
|
|
||||||
• Eksteraj modo kun elstarigitaj promenaj vojoj, kampoj, akvofontoj, pintoj, konturlinioj, ktp
|
|
||||||
• Promenaj vojoj kaj biciklaj vojoj
|
|
||||||
• Interesaj punktoj kiel restoracioj, benzinstacioj, hoteloj, vendejoj, vidindaĵoj kaj multaj aliaj
|
|
||||||
• Serĉo laŭ nomo aŭ adreso aŭ laŭ kategorio de interesaj punktoj
|
|
||||||
• Navigado kun voĉaj anoncoj por promenado, biciklado aŭ veturado
|
|
||||||
• Marku viajn favorajn lokojn per unu tuŝo
|
|
||||||
• Senkonektaj Vikipedio-artikoloj
|
|
||||||
• Metroa transporta tavolo kaj indikoj
|
|
||||||
• Enregistraĵo de vojoj
|
|
||||||
• Eksporto kaj importo de markiloj kaj vojoj en KML, KMZ, GPX formatoj
|
|
||||||
• Malhela modo por uzi nokte
|
|
||||||
• Plibonigu mapajn datumojn por ĉiuj uzante bazan enkonstruitan redaktilon
|
|
||||||
|
|
||||||
<b>Libereco Estas Ĉi Tie</b>
|
|
||||||
Malkovru vian vojaĝon, navigu la mondon kun privateco kaj komunumo en la antaŭa plano!
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
Facila mapnaviĝado - Malkovru pli de via vojaĝo - Subtenata de la komunumo
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
CoMaps - Migru, Biciklu, Veturigu Eksterrete
|
|
||||||