Skip to content

Commit bde71a3

Browse files
committed
add action to build release apk with nix
1 parent 3ad52c3 commit bde71a3

2 files changed

Lines changed: 123 additions & 63 deletions

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: Build APKs for Android using Nix
2+
3+
on:
4+
workflow_dispatch:
5+
6+
jobs:
7+
build:
8+
runs-on: ubuntu-latest
9+
steps:
10+
- uses: actions/checkout@v5
11+
with:
12+
fetch-depth: 0
13+
submodules: 'recursive'
14+
15+
- uses: cachix/install-nix-action@v31
16+
17+
- name: Add required files
18+
run: |
19+
cat <<"EOF-FILE" >local.properties
20+
${{ secrets.LOCAL_PROPERTIES }}
21+
EOF-FILE
22+
23+
cat <<"EOF-FILE" >app/google-services.json
24+
${{ secrets.GOOGLE_SERVICES_JSON }}
25+
EOF-FILE
26+
27+
- name: Build Task
28+
run: nix --experimental-features "nix-command flakes" run .#buildRelease -L
29+
30+
- name: Upload Release APKs
31+
uses: actions/upload-artifact@v7
32+
with:
33+
name: Release APKs
34+
path: app/build/outputs/apk/release/*.apk
35+

flake.nix

Lines changed: 88 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,78 +1,103 @@
11
{
2-
description = "Native Telegram client for Android based on TDLib.";
2+
description = "Native Telegram client for Android based on TDLib.";
33

4-
inputs = {
5-
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
6-
flake-parts.url = "github:hercules-ci/flake-parts";
7-
systems.url = "github:nix-systems/default";
8-
};
4+
inputs = {
5+
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
6+
flake-parts.url = "github:hercules-ci/flake-parts";
7+
systems.url = "github:nix-systems/default";
8+
};
99

10-
outputs =
11-
inputs:
12-
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
13-
systems = import inputs.systems;
10+
outputs =
11+
inputs:
12+
inputs.flake-parts.lib.mkFlake { inherit inputs; } {
13+
systems = import inputs.systems;
1414

15-
perSystem =
16-
{ pkgs, system, ... }:
17-
let
18-
androidComposition =
19-
pkgs:
20-
(pkgs.androidenv.composeAndroidPackages {
21-
platformVersions = [
22-
"35"
23-
"36"
24-
];
15+
perSystem =
16+
{ pkgs, system, ... }:
17+
let
18+
actualBuildTools = "36.0.0";
19+
actualPlatform = "36";
20+
actualNdk = "28.2.13676358";
21+
androidComposition =
22+
pkgs:
23+
(pkgs.androidenv.composeAndroidPackages {
24+
platformVersions = [ actualPlatform ];
25+
buildToolsVersions = [ actualBuildTools ];
26+
ndkVersions = [ actualNdk ];
27+
cmakeVersions = [ "3.22.1" ];
28+
abiVersions = [
29+
"armeabi-v7a"
30+
"arm64-v8a"
31+
"x86_64"
32+
];
2533

26-
buildToolsVersions = [
27-
"35.0.0"
28-
];
34+
systemImageTypes = [ "google_apis_playstore" ];
35+
includeNDK = true;
36+
includeCmake = true;
37+
includeSources = true;
38+
includeExtras = [ "extras;google;auto" ];
39+
}).androidsdk;
40+
in
41+
{
42+
_module.args.pkgs = import inputs.nixpkgs {
43+
inherit system;
44+
config = {
45+
android_sdk.accept_license = true;
46+
allowUnfree = true;
47+
};
48+
};
2949

30-
cmakeVersions = [
31-
"3.22.1"
32-
];
50+
devShells.default = pkgs.mkShell {
51+
name = "monogram-sdk";
3352

34-
ndkVersions = [
35-
"27.0.12077973"
36-
];
53+
nativeBuildInputs = [
54+
(androidComposition pkgs)
55+
pkgs.glibc
56+
pkgs.jdk21
57+
pkgs.android-studio
58+
];
3759

38-
abiVersions = [
39-
"armeabi-v7a"
40-
"arm64-v8a"
41-
"x86_64"
42-
];
60+
JAVA_HOME = "${pkgs.jdk21}";
61+
ANDROID_HOME = "${androidComposition pkgs}/libexec/android-sdk";
62+
};
4363

44-
systemImageTypes = [ "google_apis_playstore" ];
45-
includeNDK = true;
46-
includeCmake = true;
47-
includeExtras = [ "extras;google;auto" ];
48-
}).androidsdk;
49-
in
50-
{
51-
_module.args.pkgs = import inputs.nixpkgs {
52-
inherit system;
53-
config = {
54-
android_sdk.accept_license = true;
55-
allowUnfree = true;
56-
};
57-
};
64+
apps = {
65+
buildRelease = {
66+
type = "app";
67+
program = "${pkgs.writeShellScriptBin "buildRelease" ''
68+
if ! ${pkgs.git}/bin/git submodule update --init --recursive; then
69+
echo "failed getting submodules"
70+
fi
5871
59-
devShells.default =
60-
(pkgs.buildFHSEnv {
61-
name = "monogram-sdk-env";
72+
if ! [ -f local.properties ] || ! [ -f app/google-services.json ]; then
73+
echo "Warning: local.properties and/or app/google-services.json aren't found,"
74+
echo "build will most likely fail"
75+
fi
6276
63-
targetPkgs = pkgs: [
64-
(androidComposition pkgs)
65-
pkgs.glibc
66-
pkgs.jdk21
67-
];
77+
export ANDROID_HOME="${androidComposition pkgs}/libexec/android-sdk/"
78+
export ANDROID_SDK_ROOT="${androidComposition pkgs}/libexec/android-sdk/"
79+
export ANDROID_NDK_HOME="$ANDROID_HOME/ndk/${actualNdk}/"
80+
export GRADLE_OPTS="-Dorg.gradle.project.android.aapt2FromMavenOverride=${androidComposition pkgs}/libexec/android-sdk/build-tools/${actualBuildTools}/aapt2"
81+
export JAVA_HOME="${pkgs.jdk21}"
6882
69-
profile = ''
70-
export JAVA_HOME="/usr/lib/openjdk"
71-
export ANDROID_HOME="/usr/libexec/android-sdk"
72-
'';
83+
cd presentation/src/main/cpp/
84+
if ! [ -d libvpx_build ]; then
85+
sed -e "s|#!/bin/bash|#!${pkgs.bash}/bin/bash|g" \
86+
-e "s|make clean|${pkgs.gnumake}/bin/make clean|g" \
87+
-e "s|make -j|${pkgs.gnumake}/bin/make -j|g" build.sh >new_build.sh
88+
chmod +x new_build.sh
89+
if ! ${pkgs.bash}/bin/bash new_build.sh; then
90+
echo "libvpx build failed"
91+
exit 1
92+
fi
93+
rm new_build.sh
94+
fi
7395
74-
runScript = "bash";
75-
}).env;
76-
};
96+
cd ../../../..
97+
./gradlew assembleRelease
98+
''}/bin/buildRelease";
99+
};
100+
};
77101
};
102+
};
78103
}

0 commit comments

Comments
 (0)