mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: support building apk on github action (#4117)
This commit is contained in:
99
.github/workflows/build_android_apk.yaml
vendored
Normal file
99
.github/workflows/build_android_apk.yaml
vendored
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
name: Build AppFlowy Release APK
|
||||||
|
|
||||||
|
on: workflow_dispatch
|
||||||
|
|
||||||
|
env:
|
||||||
|
FLUTTER_VERSION: "3.13.9"
|
||||||
|
RUST_TOOLCHAIN: "1.70"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest]
|
||||||
|
include:
|
||||||
|
- os: ubuntu-latest
|
||||||
|
target: aarch64-linux-android
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# the following step is required to avoid running out of space
|
||||||
|
- name: Maximize build space
|
||||||
|
if: matrix.os == 'ubuntu-latest'
|
||||||
|
run: |
|
||||||
|
sudo rm -rf /usr/share/dotnet
|
||||||
|
sudo rm -rf /opt/ghc
|
||||||
|
sudo rm -rf "/usr/local/share/boost"
|
||||||
|
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
|
||||||
|
|
||||||
|
- name: Checkout source code
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
- name: Install Rust toolchain
|
||||||
|
id: rust_toolchain
|
||||||
|
uses: actions-rs/toolchain@v1
|
||||||
|
with:
|
||||||
|
toolchain: ${{ env.RUST_TOOLCHAIN }}
|
||||||
|
target: ${{ matrix.target }}
|
||||||
|
override: true
|
||||||
|
profile: minimal
|
||||||
|
|
||||||
|
- name: Install flutter
|
||||||
|
id: flutter
|
||||||
|
uses: subosito/flutter-action@v2
|
||||||
|
with:
|
||||||
|
channel: "stable"
|
||||||
|
flutter-version: ${{ env.FLUTTER_VERSION }}
|
||||||
|
cache: true
|
||||||
|
|
||||||
|
- uses: nttld/setup-ndk@v1
|
||||||
|
id: setup-ndk
|
||||||
|
with:
|
||||||
|
ndk-version: "r24"
|
||||||
|
add-to-path: true
|
||||||
|
|
||||||
|
- uses: Swatinem/rust-cache@v2
|
||||||
|
with:
|
||||||
|
prefix-key: ${{ matrix.os }}
|
||||||
|
workspaces: |
|
||||||
|
frontend/rust-lib
|
||||||
|
|
||||||
|
- uses: davidB/rust-cargo-make@v1
|
||||||
|
with:
|
||||||
|
version: "0.36.6"
|
||||||
|
|
||||||
|
- name: Install prerequisites
|
||||||
|
working-directory: frontend
|
||||||
|
run: |
|
||||||
|
rustup target install aarch64-linux-android
|
||||||
|
rustup target install x86_64-linux-android
|
||||||
|
cargo install --force duckscript_cli
|
||||||
|
cargo install cargo-ndk
|
||||||
|
if [ "$RUNNER_OS" == "Linux" ]; then
|
||||||
|
sudo wget -qO /etc/apt/trusted.gpg.d/dart_linux_signing_key.asc https://dl-ssl.google.com/linux/linux_signing_key.pub
|
||||||
|
sudo wget -qO /etc/apt/sources.list.d/dart_stable.list https://storage.googleapis.com/download.dartlang.org/linux/debian/dart_stable.list
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get install -y dart curl build-essential libssl-dev clang cmake ninja-build pkg-config libgtk-3-dev
|
||||||
|
sudo apt-get install keybinder-3.0 libnotify-dev
|
||||||
|
sudo apt-get install gcc-multilib
|
||||||
|
elif [ "$RUNNER_OS" == "Windows" ]; then
|
||||||
|
vcpkg integrate install
|
||||||
|
elif [ "$RUNNER_OS" == "macOS" ]; then
|
||||||
|
echo 'do nothing'
|
||||||
|
fi
|
||||||
|
cargo make appflowy-flutter-deps-tools
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
- name: Build AppFlowy
|
||||||
|
working-directory: frontend
|
||||||
|
env:
|
||||||
|
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
|
||||||
|
run: |
|
||||||
|
cargo make --profile production-android appflowy-android
|
||||||
|
|
||||||
|
- name: Upload APK
|
||||||
|
uses: actions/upload-artifact@v2
|
||||||
|
with:
|
||||||
|
name: app-arm64-v8a-release.apk
|
||||||
|
path: frontend/appflowy_flutter/build/app/outputs/flutter-apk/
|
@ -201,6 +201,7 @@ TARGET_OS = "android"
|
|||||||
CRATE_TYPE = "cdylib"
|
CRATE_TYPE = "cdylib"
|
||||||
FLUTTER_OUTPUT_DIR = "Debug"
|
FLUTTER_OUTPUT_DIR = "Debug"
|
||||||
LIB_EXT = "so"
|
LIB_EXT = "so"
|
||||||
|
PRODUCT_EXT = "apk"
|
||||||
FLUTTER_DESKTOP_FEATURES = "dart,rev-sqlite,openssl_vendored"
|
FLUTTER_DESKTOP_FEATURES = "dart,rev-sqlite,openssl_vendored"
|
||||||
|
|
||||||
[env.production-android]
|
[env.production-android]
|
||||||
@ -208,6 +209,7 @@ BUILD_FLAG = "release"
|
|||||||
TARGET_OS = "android"
|
TARGET_OS = "android"
|
||||||
CRATE_TYPE = "cdylib"
|
CRATE_TYPE = "cdylib"
|
||||||
FLUTTER_OUTPUT_DIR = "Release"
|
FLUTTER_OUTPUT_DIR = "Release"
|
||||||
|
PRODUCT_EXT = "apk"
|
||||||
LIB_EXT = "so"
|
LIB_EXT = "so"
|
||||||
|
|
||||||
[tasks.echo_env]
|
[tasks.echo_env]
|
||||||
|
@ -2,6 +2,9 @@ cmake_minimum_required(VERSION 3.10.0)
|
|||||||
|
|
||||||
project(AppFlowy)
|
project(AppFlowy)
|
||||||
|
|
||||||
|
message(CONFIGURE_LOG "NDK PATH: ${ANDROID_NDK}")
|
||||||
|
message(CONFIGURE_LOG "Copying libc++_shared.so")
|
||||||
|
|
||||||
# arm64-v8a
|
# arm64-v8a
|
||||||
file(COPY
|
file(COPY
|
||||||
${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so
|
${ANDROID_NDK}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so
|
||||||
|
@ -58,7 +58,7 @@ run_task = { name = [
|
|||||||
"code_generation",
|
"code_generation",
|
||||||
"set-app-version",
|
"set-app-version",
|
||||||
"flutter-build-android",
|
"flutter-build-android",
|
||||||
"copy-to-product-mobile",
|
"copy-to-product-android",
|
||||||
] }
|
] }
|
||||||
script_runner = "@shell"
|
script_runner = "@shell"
|
||||||
|
|
||||||
@ -139,6 +139,23 @@ script = [
|
|||||||
]
|
]
|
||||||
script_runner = "@shell"
|
script_runner = "@shell"
|
||||||
|
|
||||||
|
[tasks.copy-to-product-android]
|
||||||
|
script = [
|
||||||
|
"""
|
||||||
|
product_path=${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/appflowy_flutter/product/${APP_VERSION}
|
||||||
|
output_path=${product_path}/${TARGET_OS}/${FLUTTER_OUTPUT_DIR}
|
||||||
|
if [ -d "${output_path}" ]; then
|
||||||
|
rm -rf ${output_path}/
|
||||||
|
fi
|
||||||
|
mkdir -p ${output_path}
|
||||||
|
|
||||||
|
product=${PRODUCT_NAME}-arm64-v8a-release.${PRODUCT_EXT}
|
||||||
|
cp -R ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/appflowy_flutter/build/app/outputs/flutter-apk/app-arm64-v8a-release.apk \
|
||||||
|
${output_path}/${product}
|
||||||
|
""",
|
||||||
|
]
|
||||||
|
script_runner = "@shell"
|
||||||
|
|
||||||
[tasks.copy-to-product-macos]
|
[tasks.copy-to-product-macos]
|
||||||
script = [
|
script = [
|
||||||
"""
|
"""
|
||||||
@ -149,7 +166,7 @@ script = [
|
|||||||
fi
|
fi
|
||||||
mkdir -p ${output_path}
|
mkdir -p ${output_path}
|
||||||
|
|
||||||
product=${PRODUCT_NAME}.${PRODUCT_EXT}
|
product=${PRODUCT_NAME}-arm64-v8a-release.${PRODUCT_EXT}
|
||||||
cp -R ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/appflowy_flutter/build/${TARGET_OS}/Build/Products/${FLUTTER_OUTPUT_DIR}/${product} \
|
cp -R ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/appflowy_flutter/build/${TARGET_OS}/Build/Products/${FLUTTER_OUTPUT_DIR}/${product} \
|
||||||
${output_path}/${product}
|
${output_path}/${product}
|
||||||
""",
|
""",
|
||||||
|
@ -95,7 +95,7 @@ script = [
|
|||||||
lib = set lib${LIB_NAME}.${LIB_EXT}
|
lib = set lib${LIB_NAME}.${LIB_EXT}
|
||||||
|
|
||||||
echo "💻 💻 💻 Copying ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/jniLibs/ to ${dart_ffi_dir}/"
|
echo "💻 💻 💻 Copying ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/jniLibs/ to ${dart_ffi_dir}/"
|
||||||
rm -r ${dart_ffi_dir}/jniLibs/
|
rm -r ${dart_ffi_dir}/jniLibs
|
||||||
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/jniLibs/ \
|
cp ${CARGO_MAKE_WORKSPACE_WORKING_DIRECTORY}/rust-lib/jniLibs/ \
|
||||||
${dart_ffi_dir}/
|
${dart_ffi_dir}/
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user