Add build automation and CI publishing workflow
Some checks failed
Android CI / build (push) Has been cancelled
Some checks failed
Android CI / build (push) Has been cancelled
This commit is contained in:
26
.github/workflows/android.yml
vendored
Normal file
26
.github/workflows/android.yml
vendored
Normal file
@@ -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
|
||||
53
Makefile
Normal file
53
Makefile
Normal file
@@ -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
|
||||
18
scripts/bump_version.sh
Executable file
18
scripts/bump_version.sh
Executable file
@@ -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})"
|
||||
27
scripts/update_site_metadata.sh
Executable file
27
scripts/update_site_metadata.sh
Executable file
@@ -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" <<EOF
|
||||
{
|
||||
"versionName": "$version_name",
|
||||
"versionCode": $version_code,
|
||||
"buildDateUtc": "$build_date",
|
||||
"apkPath": "downloads/app-debug.apk",
|
||||
"apkSizeBytes": $apk_size
|
||||
}
|
||||
EOF
|
||||
|
||||
echo "Site metadata updated: $version_name ($version_code)"
|
||||
Reference in New Issue
Block a user