Files
Sudo-Ivan dc7448d41e
Some checks failed
CI / test-backend (push) Successful in 4s
CI / build-frontend (push) Successful in 47s
Tests / test (push) Successful in 1m51s
CI / lint (push) Failing after 4m55s
chore(Taskfile): remove redundant command to clean assets before building frontend
2026-01-03 10:53:25 -06:00

386 lines
14 KiB
YAML

version: "3"
vars:
PYTHON:
sh: echo "${PYTHON:-python}"
NPM:
sh: echo "${NPM:-pnpm}"
LEGACY_ELECTRON_VERSION:
sh: echo "${LEGACY_ELECTRON_VERSION:-30.0.8}"
DOCKER_COMPOSE_CMD:
sh: echo "${DOCKER_COMPOSE_CMD:-docker compose}"
DOCKER_COMPOSE_FILE:
sh: echo "${DOCKER_COMPOSE_FILE:-docker-compose.yml}"
DOCKER_IMAGE:
sh: echo "${DOCKER_IMAGE:-reticulum-meshchatx:local}"
DOCKER_BUILDER:
sh: echo "${DOCKER_BUILDER:-meshchatx-builder}"
DOCKER_PLATFORMS:
sh: echo "${DOCKER_PLATFORMS:-linux/amd64}"
DOCKER_BUILD_FLAGS:
sh: echo "${DOCKER_BUILD_FLAGS:---load}"
DOCKER_BUILD_ARGS:
sh: echo "${DOCKER_BUILD_ARGS:-}"
DOCKER_CONTEXT:
sh: echo "${DOCKER_CONTEXT:-.}"
DOCKERFILE:
sh: echo "${DOCKERFILE:-Dockerfile}"
DOCKER_BUILD_IMAGE:
sh: echo "${DOCKER_BUILD_IMAGE:-reticulum-meshchatx-build:local}"
DOCKER_BUILD_FILE:
sh: echo "${DOCKER_BUILD_FILE:-Dockerfile.build}"
ANDROID_DIR:
sh: echo "${ANDROID_DIR:-android}"
PYTHON_SRC_DIR:
sh: echo "${PYTHON_SRC_DIR:-${ANDROID_DIR}/app/src/main/python}"
JNI_LIBS_DIR:
sh: echo "${JNI_LIBS_DIR:-${ANDROID_DIR}/app/src/main/jniLibs}"
RETICULUM_RNS_SRC:
sh: echo "${RETICULUM_RNS_SRC:-./misc/RNS}"
RETICULUM_LXMF_SRC:
sh: echo "${RETICULUM_LXMF_SRC:-./misc/LXMF}"
RETICULUM_LXST_SRC:
sh: echo "${RETICULUM_LXST_SRC:-./misc/LXST}"
SIDEBAND_CODEC2_WHL:
sh: echo "${SIDEBAND_CODEC2_WHL:-./misc/pycodec2-3.0.1-cp311-cp311-linux_aarch64.whl}"
SIDEBAND_LIB_ARM64:
sh: echo "${SIDEBAND_LIB_ARM64:-./misc/libcodec2-arm64-v8a.so}"
SIDEBAND_LIB_ARMEABI:
sh: echo "${SIDEBAND_LIB_ARMEABI:-./misc/libcodec2-armeabi-v7a.so}"
tasks:
default:
desc: Show available tasks
cmds:
- task --list
setup-python-env:
desc: Setup Python environment using Poetry
cmds:
- poetry install
- poetry run pip install ruff
lint-python:
desc: Lint Python code using ruff
cmds:
- poetry run ruff check . --exclude tests
- poetry run ruff format --check . --exclude tests
lint-frontend:
desc: Lint frontend code
cmds:
- "{{.NPM}} run lint"
lint:
desc: Run all linters (frontend and Python)
deps: [lint-frontend, lint-python]
format-python:
desc: Format Python code using ruff
cmds:
- poetry run ruff format ./ --exclude tests
- poetry run ruff check --fix ./ --exclude tests
format-frontend:
desc: Format frontend code using Prettier and ESLint
cmds:
- "{{.NPM}} run format"
- "{{.NPM}} run lint:fix"
format:
desc: Format all code (Python and frontend)
deps: [format-python, format-frontend]
test-python:
desc: Run Python tests using pytest
cmds:
- poetry run pytest tests/backend --cov=meshchatx/src/backend
test-python-cov:
desc: Run Python tests with detailed coverage report
cmds:
- poetry run pytest tests/backend --cov=meshchatx/src/backend --cov-report=term-missing
test-frontend:
desc: Run frontend tests using vitest
cmds:
- "{{.NPM}} run test"
test:
desc: Run all tests
deps: [test-python, test-frontend]
test:cov:
desc: Run all tests with coverage reports
deps: [test-python-cov, test-frontend]
compile:
desc: Compile Python code to check for syntax errors
cmds:
- "{{.PYTHON}} -m compileall meshchatx/"
install:
desc: Install all dependencies (installs node modules and python deps)
deps: [node_modules, python]
node_modules:
desc: Install Node.js dependencies
cmds:
- "{{.NPM}} install"
python:
desc: Install Python dependencies using Poetry
cmds:
- "{{.PYTHON}} -m poetry install"
run:
desc: Run the application
deps: [install]
cmds:
- "{{.PYTHON}} -m poetry run meshchat"
dev:
desc: Run the application in development mode
deps: [build-frontend]
cmds:
- task: run
build:
desc: Build the application (frontend and backend)
deps: [install]
cmds:
- "{{.NPM}} run build"
build-frontend:
desc: Build only the frontend
deps: [node_modules]
cmds:
- "{{.NPM}} run build-frontend"
wheel:
desc: Build Python wheel package
deps: [install]
cmds:
- "{{.PYTHON}} -m poetry build -f wheel"
- "{{.PYTHON}} scripts/move_wheels.py"
build-appimage:
desc: Build Linux AppImage
deps: [build]
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run dist -- --linux AppImage"
build-exe:
desc: Build Windows portable executable
deps: [build]
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run dist -- --win portable"
build-electron-linux:
desc: Build Linux Electron app with prebuilt backend
deps: [build-frontend]
cmds:
- "{{.NPM}} run dist:linux"
build-electron-windows:
desc: Build Windows Electron apps (portable and installer)
deps: [build-frontend]
cmds:
- "{{.NPM}} run dist:windows"
build-electron-all:
desc: Build all Electron apps (Linux and Windows)
deps: [build-frontend]
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run build-backend"
- "{{.NPM}} run dist -- --linux AppImage deb --win portable nsis"
dist:
desc: Build distribution (defaults to AppImage)
cmds:
- task: build-appimage
electron-legacy:
desc: Install legacy Electron version
cmds:
- "{{.NPM}} install --no-save electron@{{.LEGACY_ELECTRON_VERSION}}"
build-appimage-legacy:
desc: Build Linux AppImage with legacy Electron version
deps: [build, electron-legacy]
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run dist -- --linux AppImage"
- "./scripts/rename_legacy_artifacts.sh"
build-exe-legacy:
desc: Build Windows portable executable with legacy Electron version
deps: [build, electron-legacy]
cmds:
- "{{.NPM}} run electron-postinstall"
- "{{.NPM}} run dist -- --win portable"
- "./scripts/rename_legacy_artifacts.sh"
clean:
desc: Clean build artifacts and dependencies
cmds:
- rm -rf node_modules
- rm -rf build
- rm -rf dist
- rm -rf python-dist
- rm -rf meshchatx/public
- rm -rf build-dir
- task: android-clean
build-docker:
desc: Build Docker image using buildx
cmds:
- |
if ! docker buildx inspect {{.DOCKER_BUILDER}} >/dev/null 2>&1; then
docker buildx create --name {{.DOCKER_BUILDER}} --use >/dev/null
else
docker buildx use {{.DOCKER_BUILDER}}
fi
- |
docker buildx build --builder {{.DOCKER_BUILDER}} --platform {{.DOCKER_PLATFORMS}} \
{{.DOCKER_BUILD_FLAGS}} \
-t {{.DOCKER_IMAGE}} \
{{.DOCKER_BUILD_ARGS}} \
-f {{.DOCKERFILE}} \
{{.DOCKER_CONTEXT}}
run-docker:
desc: Run Docker container using docker-compose
cmds:
- 'MESHCHAT_IMAGE="{{.DOCKER_IMAGE}}" {{.DOCKER_COMPOSE_CMD}} -f {{.DOCKER_COMPOSE_FILE}} up --remove-orphans --pull never reticulum-meshchatx'
docker-build-env:
desc: Build the Docker image for containerized builds
cmds:
- docker build -t {{.DOCKER_BUILD_IMAGE}} -f {{.DOCKER_BUILD_FILE}} .
docker-build-artifacts:
desc: Build whls and electron artifacts inside a container and export them
cmds:
- docker rm -f meshchat-build-temp || true
- docker run --name meshchat-build-temp {{.DOCKER_BUILD_IMAGE}}
- mkdir -p dist python-dist
- docker cp meshchat-build-temp:/app/dist/. ./dist/
- docker cp meshchat-build-temp:/app/python-dist/. ./python-dist/
- docker rm meshchat-build-temp
android-init:
desc: Initialize Gradle wrapper for Android project
cmds:
- |
if [ ! -f "{{.ANDROID_DIR}}/gradle/wrapper/gradle-wrapper.jar" ]; then
echo "Downloading Gradle wrapper jar..."
mkdir -p "{{.ANDROID_DIR}}/gradle/wrapper"
curl -L -o "{{.ANDROID_DIR}}/gradle/wrapper/gradle-wrapper.jar" \
https://raw.githubusercontent.com/gradle/gradle/v8.12.1/gradle/wrapper/gradle-wrapper.jar || \
echo "Failed to download. Please run: cd {{.ANDROID_DIR}} && gradle wrapper --gradle-version 8.12.1"
else
echo "Gradle wrapper already initialized."
fi
android-prepare:
desc: Prepare Android build (copy meshchatx package and assets)
deps: [build-frontend, android-init]
cmds:
- |
echo "Copying meshchatx package and dependencies to Android project..."
mkdir -p "{{.PYTHON_SRC_DIR}}"
# Remove old copies to ensure fresh build
rm -rf "{{.PYTHON_SRC_DIR}}/meshchatx"
rm -rf "{{.PYTHON_SRC_DIR}}/RNS"
rm -rf "{{.PYTHON_SRC_DIR}}/LXMF"
rm -rf "{{.PYTHON_SRC_DIR}}/LXST"
# Copy MeshChatX
cp -r meshchatx "{{.PYTHON_SRC_DIR}}/"
# Vendor RNS, LXMF, and LXST from ./misc/ and ./src/
cp -r ./misc/RNS "{{.PYTHON_SRC_DIR}}/"
cp -r ./misc/LXMF "{{.PYTHON_SRC_DIR}}/"
cp -r ./misc/LXST "{{.PYTHON_SRC_DIR}}/"
cp -r ./src/RNS "{{.PYTHON_SRC_DIR}}/" || true
cp -r ./src/LXMF "{{.PYTHON_SRC_DIR}}/" || true
cp -r ./src/LXST "{{.PYTHON_SRC_DIR}}/" || true
# Copy pycodec2 wheel from ./misc
cp "./misc/pycodec2-3.0.1-cp311-cp311-linux_aarch64.whl" "{{.PYTHON_SRC_DIR}}/" || true
# Copy native libraries from ./misc
mkdir -p "{{.JNI_LIBS_DIR}}/arm64-v8a"
mkdir -p "{{.JNI_LIBS_DIR}}/armeabi-v7a"
cp "./misc/libcodec2-arm64-v8a.so" "{{.JNI_LIBS_DIR}}/arm64-v8a/" || true
cp "./misc/libcodec2-armeabi-v7a.so" "{{.JNI_LIBS_DIR}}/armeabi-v7a/" || true
# Cleanup vendored packages (remove utilities/tests etc if needed, similar to Sideband)
rm -rf "{{.PYTHON_SRC_DIR}}/RNS/Utilities/RNS"
rm -rf "{{.PYTHON_SRC_DIR}}/LXMF/Utilities/LXMF"
rm -rf "{{.PYTHON_SRC_DIR}}/LXST/Utilities/LXST"
- |
echo "Android build prepared. Don't forget to:"
echo "1. Add Chaquopy license to {{.ANDROID_DIR}}/local.properties"
echo "2. Open {{.ANDROID_DIR}}/ in Android Studio or run: task android-build"
android-build:
desc: Build Android APK (requires Android SDK and Chaquopy license)
deps: [android-prepare]
cmds:
- cd "{{.ANDROID_DIR}}" && ./gradlew assembleDebug
android-build-release:
desc: Build Android APK (release, requires signing config)
deps: [android-prepare]
cmds:
- cd "{{.ANDROID_DIR}}" && ./gradlew assembleRelease
android-clean:
desc: Clean Android build artifacts
cmds:
- cd "{{.ANDROID_DIR}}" && ./gradlew clean
- rm -rf "{{.PYTHON_SRC_DIR}}/meshchatx"
flatpak-check-sdk:
desc: Check if required Flatpak SDK is installed
cmds:
- |
if ! flatpak info org.freedesktop.Sdk//24.08 >/dev/null 2>&1; then
echo "Flatpak SDK 24.08 is not installed."
echo "Install it with: flatpak install org.freedesktop.Sdk//24.08"
exit 1
fi
if ! flatpak info org.freedesktop.Platform//24.08 >/dev/null 2>&1; then
echo "Flatpak Platform runtime 24.08 is not installed."
echo "Install it with: flatpak install org.freedesktop.Platform//24.08"
exit 1
fi
if ! flatpak info org.freedesktop.Sdk.Extension.node20//24.08 >/dev/null 2>&1; then
echo "Flatpak Node.js 20 extension is not installed."
echo "Install it with: flatpak install org.freedesktop.Sdk.Extension.node20//24.08"
exit 1
fi
echo "Required Flatpak SDK, Platform runtime, and Node.js extension are installed."
build-flatpak:
desc: Build Flatpak package
deps: [flatpak-check-sdk]
cmds:
- flatpak-builder --force-clean build-dir flatpak.json
install-flatpak:
desc: Install Flatpak package locally
deps: [build-flatpak]
cmds:
- flatpak-builder --install --user --force-clean build-dir flatpak.json
run-flatpak:
desc: Run Flatpak application
cmds:
- flatpak run com.sudoivan.reticulummeshchatx