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