diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml new file mode 100644 index 0000000..a2d640e --- /dev/null +++ b/.github/workflows/android.yml @@ -0,0 +1,26 @@ +name: Android CI + +on: + push: + branches: ["master", "main"] + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "17" + + - name: Set up Android SDK + uses: android-actions/setup-android@v3 + + - name: Build debug APK + working-directory: android + run: ./gradlew assembleDebug --no-daemon diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..9a705e8 --- /dev/null +++ b/Makefile @@ -0,0 +1,53 @@ +SHELL := /bin/bash + +PROJECT_ROOT := $(CURDIR) +ANDROID_DIR := $(PROJECT_ROOT)/android +WEBSITE_DIR := $(PROJECT_ROOT)/website +DOWNLOADS_DIR := $(WEBSITE_DIR)/downloads +META_DIR := $(WEBSITE_DIR)/assets/meta +APK_PATH := $(ANDROID_DIR)/app/build/outputs/apk/debug/app-debug.apk +PUBLISHED_APK := $(DOWNLOADS_DIR)/app-debug.apk +VERSION_FILE := $(META_DIR)/version.json + +.PHONY: help client-version-bump client-build client-publish publish \ + server-start server-stop server-restart server-status server-rebuild + +help: + @echo "Targets:" + @echo " make client-build - bump version and build debug APK" + @echo " make client-publish - copy APK to website and refresh version metadata" + @echo " make publish - bump version, build APK, publish client, reload nginx" + @echo " make server-start - start nginx" + @echo " make server-stop - stop nginx" + @echo " make server-restart - restart nginx" + @echo " make server-status - show nginx status" + @echo " make server-rebuild - test nginx config and reload nginx" + +client-version-bump: + @$(PROJECT_ROOT)/scripts/bump_version.sh + +client-build: client-version-bump + cd $(ANDROID_DIR) && ./gradlew assembleDebug --no-daemon + +client-publish: + @mkdir -p $(DOWNLOADS_DIR) $(META_DIR) + cp $(APK_PATH) $(PUBLISHED_APK) + @$(PROJECT_ROOT)/scripts/update_site_metadata.sh + +publish: client-build client-publish server-rebuild + +server-start: + sudo systemctl start nginx + +server-stop: + sudo systemctl stop nginx + +server-restart: + sudo systemctl restart nginx + +server-status: + sudo systemctl status nginx --no-pager + +server-rebuild: + sudo /usr/sbin/nginx -t + sudo systemctl reload nginx diff --git a/scripts/bump_version.sh b/scripts/bump_version.sh new file mode 100755 index 0000000..f942e17 --- /dev/null +++ b/scripts/bump_version.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BUILD_FILE="$ROOT_DIR/android/app/build.gradle.kts" + +current_code="$(grep -E 'versionCode = [0-9]+' "$BUILD_FILE" | head -n1 | sed -E 's/.*versionCode = ([0-9]+)/\1/')" +current_name="$(grep -E 'versionName = "[0-9]+\.[0-9]+\.[0-9]+"' "$BUILD_FILE" | head -n1 | sed -E 's/.*versionName = "([0-9]+\.[0-9]+\.[0-9]+)"/\1/')" + +IFS='.' read -r major minor patch <<< "$current_name" +new_code=$((current_code + 1)) +new_patch=$((patch + 1)) +new_name="${major}.${minor}.${new_patch}" + +sed -i -E "s/versionCode = [0-9]+/versionCode = ${new_code}/" "$BUILD_FILE" +sed -i -E "s/versionName = \"[0-9]+\.[0-9]+\.[0-9]+\"/versionName = \"${new_name}\"/" "$BUILD_FILE" + +echo "Version bumped to ${new_name} (${new_code})" diff --git a/scripts/update_site_metadata.sh b/scripts/update_site_metadata.sh new file mode 100755 index 0000000..7659d42 --- /dev/null +++ b/scripts/update_site_metadata.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +set -euo pipefail + +ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +BUILD_FILE="$ROOT_DIR/android/app/build.gradle.kts" +META_DIR="$ROOT_DIR/website/assets/meta" +APK_FILE="$ROOT_DIR/website/downloads/app-debug.apk" +OUTPUT_FILE="$META_DIR/version.json" + +mkdir -p "$META_DIR" + +version_code="$(grep -E 'versionCode = [0-9]+' "$BUILD_FILE" | head -n1 | sed -E 's/.*versionCode = ([0-9]+)/\1/')" +version_name="$(grep -E 'versionName = "[0-9]+\.[0-9]+\.[0-9]+"' "$BUILD_FILE" | head -n1 | sed -E 's/.*versionName = "([0-9]+\.[0-9]+\.[0-9]+)"/\1/')" +build_date="$(date -u +"%Y-%m-%dT%H:%M:%SZ")" +apk_size="$(stat -c %s "$APK_FILE")" + +cat > "$OUTPUT_FILE" <