Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
version: 2
updates:
- package-ecosystem: gradle
directory: /
schedule:
interval: monthly
120 changes: 120 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: CI

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
build:

runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-build
cancel-in-progress: true

steps:
- uses: actions/checkout@v4

- name: set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Build with Gradle
run: ./gradlew build

check-ktfmt:

runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-ktfmt
cancel-in-progress: true

steps:
- uses: actions/checkout@v4

- name: set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Verify Kotlin formatting
run: ./gradlew ktfmtCheck

test:

runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-test
cancel-in-progress: true

steps:
- uses: actions/checkout@v4

- name: set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'temurin'
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Run unit tests
run: ./gradlew test

connected-check:

runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-android-connected-check
cancel-in-progress: true

steps:
- uses: actions/checkout@v4

- name: set up JDK 21
uses: actions/setup-java@v4
with:
java-version: "21"
distribution: "temurin"
cache: gradle

- name: Grant execute permission for gradlew
run: chmod +x gradlew

- name: Enable KVM group perms
run: |
echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
sudo udevadm control --reload-rules
sudo udevadm trigger --name-match=kvm

- name: Run Connected Checks
uses: reactivecircus/android-emulator-runner@v2
with:
api-level: 30
avd-name: ubuntu-latest-x86_64-aosp-atd-30
arch: x86_64
target: aosp_atd
script: ./gradlew connectedCheck

- name: Upload Artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: connected-reports
path: |
**/build/reports
82 changes: 82 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# This workflow will build a package using Gradle and then publish it to Maven Central when a release is published.

name: Publish

on:
workflow_dispatch:
inputs:
bump_version_scheme:
type: choice
description: "Release"
required: true
default: "patch"
options:
- "patch"
- "minor"
- "major"

jobs:
version_bump:
runs-on: ubuntu-latest
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
permissions:
# Give the default GITHUB_TOKEN write permission to commit and push the
# added or changed files to the repository.
contents: write

steps:
- name: Check out repo
uses: actions/checkout@v4
with:
token: ${{ secrets.PAT }}

- name: Configure Git
run: |
git config user.name github-actions
git config user.email github-actions@github.com

- name: Bump version
id: version
run: ./scripts/version_bump.sh ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' && 'patch' || inputs.bump_version_scheme }}

- name: Commit version update
run: |
git add build.gradle.kts
git commit -m "Update version to ${{ steps.version.outputs.version }}"
git push

- uses: softprops/action-gh-release@v1
id: release
with:
generate_release_notes: true
tag_name: ${{ steps.version.outputs.version }}

publish:
runs-on: ubuntu-latest
needs: version_bump

steps:
- name: Check out repo
uses: actions/checkout@v4
with:
ref: main
fetch-depth: 0

- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: "21"
distribution: "temurin"
cache: gradle

- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3.1.0

- name: Publish to Maven Central
run: ./gradlew publishAndReleaseToMavenCentral --no-configuration-cache
env:
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.MAVEN_GPG_PRIVATE_KEY }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.MAVEN_GPG_PASSPHRASE }}
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@ import org.maplibre.compose.location.LocationProvider
import org.maplibre.compose.location.LocationPuck
import org.maplibre.compose.location.LocationTrackingEffect
import org.maplibre.compose.location.rememberUserLocationState
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.MapOptions
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.RenderOptions
import org.maplibre.compose.style.BaseStyle
import org.maplibre.spatialk.geojson.Position
Expand Down Expand Up @@ -75,7 +75,8 @@ class CameraExampleScreen(carContext: CarContext) : ComposableScreen(carContext,
}
}

if (mode is CameraMode.TrackingUserLocation || mode is CameraMode.TrackingUserLocationWithBearing) {
if (mode is CameraMode.TrackingUserLocation ||
mode is CameraMode.TrackingUserLocationWithBearing) {
LocationTrackingEffect(userLocation) {
cam.updateFromLocation(
updateBearing =
Expand All @@ -90,8 +91,7 @@ class CameraExampleScreen(carContext: CarContext) : ComposableScreen(carContext,
cameraState = cam,
options =
MapOptions(
renderOptions =
RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
renderOptions = RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
) {
LocationPuck(idPrefix = "puck", locationState = userLocation, cameraState = cam)
}
Expand All @@ -100,15 +100,17 @@ class CameraExampleScreen(carContext: CarContext) : ComposableScreen(carContext,
override fun onGetTemplate(): Template {
return MapWithContentTemplate.Builder()
.setContentTemplate(
MessageTemplate.Builder("Camera is currently ${cameraMode.value::class.simpleName}").build())
MessageTemplate.Builder("Camera is currently ${cameraMode.value::class.simpleName}")
.build())
.setActionStrip(
ActionStrip.Builder()
.addAction(
Action.Builder()
.setTitle("Symbols")
.setOnClickListener {
Log.d(TAG, "Navigating to SymbolExampleScreen")
screenManager.push(SymbolExampleScreen(carContext) { screenManager.pop() })
screenManager.push(
SymbolExampleScreen(carContext) { screenManager.pop() })
}
.build())
.build())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ import org.maplibre.compose.expressions.value.SymbolAnchor
import org.maplibre.compose.layers.CircleLayer
import org.maplibre.compose.layers.LineLayer
import org.maplibre.compose.layers.SymbolLayer
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.MapOptions
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.RenderOptions
import org.maplibre.compose.sources.GeoJsonData
import org.maplibre.compose.sources.rememberGeoJsonSource
Expand Down Expand Up @@ -59,8 +59,7 @@ class SymbolExampleScreen(carContext: CarContext, private val onNavigateBack: ()
cameraState = cam,
options =
MapOptions(
renderOptions =
RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
renderOptions = RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
onMapClick = { pos, _ ->
Log.d(TAG, "Tapped at $pos")
ClickResult.Pass
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,15 @@ import kotlin.time.TimeSource
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import org.maplibre.compose.camera.CameraPosition
import org.maplibre.compose.camera.rememberCameraState
import org.maplibre.compose.location.BearingUpdate
import org.maplibre.compose.location.Location
import org.maplibre.compose.location.LocationProvider
import org.maplibre.compose.location.LocationPuck
import org.maplibre.compose.location.LocationTrackingEffect
import org.maplibre.compose.location.rememberUserLocationState
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.MapOptions
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.RenderOptions
import org.maplibre.compose.style.BaseStyle
import org.maplibre.spatialk.geojson.Position
Expand Down Expand Up @@ -73,7 +72,8 @@ class CameraExampleScreen(carContext: CarContext) :
}
}

if (mode is CameraMode.TrackingUserLocation || mode is CameraMode.TrackingUserLocationWithBearing) {
if (mode is CameraMode.TrackingUserLocation ||
mode is CameraMode.TrackingUserLocationWithBearing) {
LocationTrackingEffect(userLocation) {
cam.updateFromLocation(
updateBearing =
Expand All @@ -88,8 +88,7 @@ class CameraExampleScreen(carContext: CarContext) :
cameraState = cam,
options =
MapOptions(
renderOptions =
RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
renderOptions = RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
) {
LocationPuck(idPrefix = "puck", locationState = userLocation, cameraState = cam)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import org.maplibre.compose.expressions.value.SymbolAnchor
import org.maplibre.compose.layers.CircleLayer
import org.maplibre.compose.layers.LineLayer
import org.maplibre.compose.layers.SymbolLayer
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.MapOptions
import org.maplibre.compose.map.MaplibreMap
import org.maplibre.compose.map.RenderOptions
import org.maplibre.compose.sources.GeoJsonData
import org.maplibre.compose.sources.rememberGeoJsonSource
Expand Down Expand Up @@ -58,8 +58,7 @@ class SymbolExampleScreen(carContext: CarContext, private val onNavigateBack: ()
cameraState = cam,
options =
MapOptions(
renderOptions =
RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
renderOptions = RenderOptions(renderMode = RenderOptions.RenderMode.TextureView)),
onMapClick = { pos, _ ->
Log.d(TAG, "Tapped at $pos")
ClickResult.Pass
Expand Down
8 changes: 6 additions & 2 deletions scripts/version_bump.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,9 @@ echo "Bumping version from $last_version to $next_version"
# Update the version in build.gradle.kts
sed -i "s/version = \"$last_version\"/version = \"$next_version\"/" build.gradle.kts

# Output the tag to stdout
echo ::set-output name=version::$next_version
# Expose the new version to later workflow steps (falls back to stdout locally)
if [ -n "$GITHUB_OUTPUT" ]; then
echo "version=$next_version" >> "$GITHUB_OUTPUT"
else
echo "version=$next_version"
fi
Loading