Skip to content

Commit

Permalink
nix: refactor android sdk package
Browse files Browse the repository at this point in the history
Signed-off-by: Jakub Sokołowski <jakub@status.im>
  • Loading branch information
jakubgs committed Apr 24, 2020
1 parent 548fe04 commit 68b9b18
Show file tree
Hide file tree
Showing 18 changed files with 163 additions and 135 deletions.
61 changes: 0 additions & 61 deletions nix/mobile/android/android-env.nix

This file was deleted.

18 changes: 7 additions & 11 deletions nix/mobile/android/default.nix
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
{ config, lib, callPackage, mkShell, mergeSh, androidenv, flock, lsof, openjdk, gradle_5,
status-go, localMavenRepoBuilder, projectNodePackage }:
{ config, lib, callPackage, mkShell, mergeSh, flock, lsof, openjdk, gradle_5,
status-go, localMavenRepoBuilder, projectNodePackage, androidPkgs, androidShell }:

let
gradle = gradle_5; # Currently 5.6.4
androidEnv = callPackage ./android-env.nix { };
leinProjectDeps = import ../../lein/lein-project-deps.nix { };

# Import a jsbundle compiled out of clojure codebase
Expand All @@ -22,12 +21,10 @@ let
# TARGETS
release = callPackage ./targets/release-android.nix {
inherit config gradle mavenAndNpmDeps jsbundle status-go watchmanFactory;
androidEnvShellHook = androidEnv.shell.shellHook;
};

generate-maven-and-npm-deps-shell = callPackage ./maven-and-npm-deps/maven/shell.nix {
inherit gradle projectNodePackage status-go;
androidEnvShellHook = androidEnv.shell.shellHook;
};

buildInputs = [
Expand All @@ -39,24 +36,23 @@ let
in {
# TARGETS
inherit release jsbundle generate-maven-and-npm-deps-shell buildInputs;
inherit (androidEnv) androidComposition;

shell = mergeSh
(mkShell {
inherit buildInputs;
inputsFrom = [ release gradle ];
shellHook = ''
export ANDROID_SDK_ROOT="${androidPkgs}"
export ANDROID_NDK_ROOT="${androidPkgs}/ndk-bundle"
# check if node modules changed and if so install them
$STATUS_REACT_HOME/nix/mobile/reset-node_modules.sh \
"${mavenAndNpmDeps.drv}/project"
'';
})
(lib.catAttrs "shell" [ status-go mavenAndNpmDeps androidEnv ]);
(lib.catAttrs "shell" [ status-go mavenAndNpmDeps androidShell ]);

env = {
shell = mkShell {
buildInputs = [ androidEnv.drv ];
inherit (androidEnv.shell) shellHook;
};
shell = androidShell;
};
}
19 changes: 6 additions & 13 deletions nix/mobile/android/maven-and-npm-deps/maven/shell.nix
Original file line number Diff line number Diff line change
@@ -1,20 +1,13 @@
{ mkShell, curl, flock, git, gradle, jq, maven, nodejs,
projectNodePackage, androidEnvShellHook, status-go }:
{ mergeSh, mkShell, curl, flock, git, gradle, jq, maven, nodejs,
projectNodePackage, androidShell, status-go }:

mkShell {
mergeSh (mkShell {
buildInputs = [
curl
flock # used in reset-node_modules.sh
git
gradle
jq
maven
nodejs
curl flock # used in reset-node_modules.sh
git gradle jq maven nodejs
projectNodePackage
];
shellHook = ''
${androidEnvShellHook}
${status-go.shell.shellHook}
$STATUS_REACT_HOME/nix/mobile/reset-node_modules.sh "${projectNodePackage}"
'';
}
}) [ status-go.shell androidShell ]
14 changes: 14 additions & 0 deletions nix/mobile/android/sdk/default.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
#
# This Nix expression centralizes the configuration
# for the Android development environment.
#

{ callPackage }:

let
pkgs = callPackage ./pkgs.nix { };
shell = callPackage ./shell.nix { };
licensedPkgs = callPackage ./licensed.nix { };
in {
inherit pkgs licensedPkgs shell;
}
26 changes: 26 additions & 0 deletions nix/mobile/android/sdk/licensed.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
{ config, stdenv, callPackage }:

let
androidPkgs = callPackage ./pkgs.nix { };
in
# Licensed Android Environment as a separate derivation
stdenv.mkDerivation rec {
name = "licensed-android-sdk";
version = "licensed";
phases = [ "installPhase" "licensePhase" ];
installPhase = ''
mkdir -p $out/libexec/android-sdk
ln -s "${androidPkgs.androidsdk}/bin" $out/bin
for d in ${androidPkgs.androidsdk}/libexec/android-sdk/*; do
ln -s $d $out/$(basename $d)
done
'';
licensePhase = stdenv.lib.optionalString config.android_sdk.accept_license ''
mkdir -p $out/licenses
echo -e "\n601085b94cd77f0b54ff86406957099ebe79c4d6" > "$out/licenses/android-googletv-license"
echo -e "\n24333f8a63b6825ea9c5514f83c2829b004d1fee" > "$out/licenses/android-sdk-license"
echo -e "\n84831b9409646a918e30573bab4c9c91346d8abd" > "$out/licenses/android-sdk-preview-license"
echo -e "\nd975f751698a77b662f1254ddbeed3901e976f5a" > "$out/licenses/intel-android-extra-license"
echo -e "\n33b6a2b64607f11b759f320ef9dff4ae5c47d97a" > "$out/licenses/google-gdk-license"
'';
}
28 changes: 28 additions & 0 deletions nix/mobile/android/sdk/pkgs.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#
# This Nix expression centralizes the configuration
# for the Android development environment.
#

{ stdenv, config, callPackage, androidenv, openjdk, mkShell }:

androidenv.composeAndroidPackages {
toolsVersion = "26.1.1";
platformToolsVersion = "29.0.6";
buildToolsVersions = [ "29.0.2" ];
includeEmulator = false;
platformVersions = [ "29" ];
includeSources = false;
includeDocs = false;
includeSystemImages = false;
systemImageTypes = [ "default" ];
lldbVersions = [ "3.1.4508709" ];
cmakeVersions = [ "3.10.2" ];
includeNDK = true;
ndkVersion = "21.0.6113669";
useGoogleAPIs = false;
useGoogleTVAddOns = false;
includeExtras = [
"extras;android;m2repository"
"extras;google;m2repository"
];
}
21 changes: 21 additions & 0 deletions nix/mobile/android/sdk/shell.nix
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{ mkShell, callPackage, openjdk }:

let
licensedPkgs = callPackage ./licensed.nix { };
in
mkShell {
shellHook = ''
export JAVA_HOME="${openjdk}"
export ANDROID_HOME="${licensedPkgs}"
export ANDROID_SDK_ROOT="${licensedPkgs}"
export ANDROID_NDK_ROOT="${licensedPkgs}/ndk-bundle"
export PATH="$ANDROID_HOME/bin:$PATH"
export PATH="$ANDROID_NDK_ROOT:$PATH"
export PATH="$ANDROID_SDK_ROOT/tools:$PATH"
export PATH="$ANDROID_SDK_ROOT/tools/bin:$PATH"
export PATH="$ANDROID_SDK_ROOT/platform-tools:$PATH"
export PATH="$ANDROID_SDK_ROOT/build-tools:$PATH"
'';
}
6 changes: 4 additions & 2 deletions nix/mobile/android/targets/release-android.nix
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{ stdenv, lib, config, callPackage,
mkFilter, bash, file, gnumake, watchmanFactory, gradle,
androidEnvShellHook, mavenAndNpmDeps,
androidPkgs, mavenAndNpmDeps,
nodejs, openjdk, jsbundle, status-go, unzip, zlib }:

{ secrets-file ? "", # Path to the file containing secret environment variables
Expand Down Expand Up @@ -111,13 +111,15 @@ in stdenv.mkDerivation {
adhocEnvVars = optionalString stdenv.isLinux "LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${makeLibraryPath [ zlib ]}";
capitalizedBuildType = toUpper (substring 0 1 buildType) + substring 1 (-1) buildType;
in ''
export ANDROID_SDK_ROOT="${androidPkgs}"
export ANDROID_NDK_ROOT="${androidPkgs}/ndk-bundle"
export STATUS_REACT_HOME=$PWD
export HOME=$sourceRoot
${exportEnvVars}
${if secrets-file != "" then "source ${secrets-file}" else ""}
${androidEnvShellHook}
${concatStrings (catAttrs "shellHook" [ mavenAndNpmDeps.shell status-go.shell ])}
# fix permissions so gradle can create directories
Expand Down
33 changes: 15 additions & 18 deletions nix/mobile/default.nix
Original file line number Diff line number Diff line change
@@ -1,41 +1,38 @@
{ config, lib, stdenvNoCC, callPackage, status-go,
localMavenRepoBuilder, composeXcodeWrapper, mkShell, mergeSh }:
{ config, lib, stdenvNoCC, callPackage, mkShell,
status-go, mergeSh, xcodeWrapper }:

let
inherit (lib) catAttrs concatStrings optional unique;

xcodewrapperArgs = {
version = "11.4.1";
};
xcodeWrapper = composeXcodeWrapper xcodewrapperArgs;
projectNodePackage = callPackage ./node-package.nix { };

localMavenRepoBuilder = callPackage ../tools/maven/maven-repo-builder.nix { };

fastlane = callPackage ./fastlane { };
androidPlatform = callPackage ./android {

android = callPackage ./android {
inherit localMavenRepoBuilder projectNodePackage;
status-go = status-go.android;
};
iosPlatform = callPackage ./ios {

ios = callPackage ./ios {
inherit xcodeWrapper projectNodePackage fastlane;
status-go = status-go.ios;
};

selectedSources = [
fastlane
status-go.android
status-go.ios
androidPlatform
iosPlatform
fastlane
android
ios
];

projectNodePackage = callPackage ./node-package.nix { inherit (lib) importJSON; };

in {
buildInputs = unique (catAttrs "buildInputs" selectedSources);

shell = mergeSh (mkShell {}) (catAttrs "shell" selectedSources);

# CHILD DERIVATIONS
android = androidPlatform;
ios = iosPlatform;

# TARGETS
inherit fastlane xcodeWrapper;
inherit android ios fastlane;
}
4 changes: 2 additions & 2 deletions nix/mobile/node-package.nix
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{ importJSON, fetchFromGitHub, pkgs, nodejs, yarn }:
{ lib, fetchFromGitHub, pkgs, nodejs, yarn }:

let
yarn2nix = import (fetchFromGitHub {
Expand All @@ -10,7 +10,7 @@ let
}) { inherit pkgs nodejs yarn; };
yarnLock = ../../mobile/js_files/yarn.lock;
packageJSON = ../../mobile/js_files/package.json;
packageJSONContent = importJSON packageJSON;
packageJSONContent = lib.importJSON packageJSON;

# Create a yarn package for our project that contains all the dependecies, so that we have a
# known good node_modules folder that we can use later on
Expand Down
16 changes: 12 additions & 4 deletions nix/pkgs.nix
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,24 @@ let
permittedInsecurePackages = [ "openssl-1.0.2u" ];
# Override some package versions
packageOverrides = pkgs: rec {
inherit (pkgs) callPackage stdenv stdenvNoCC xcodeenv;

# utilities
mkFilter = import ./tools/mkFilter.nix { inherit (pkgs.stdenv) lib; };
mkShell = import ./tools/mkShell.nix { inherit pkgs; stdenv = pkgs.stdenvNoCC; };
mergeSh = import ./tools/mergeSh.nix { inherit (pkgs.stdenv) lib; };
mkFilter = import ./tools/mkFilter.nix { inherit (stdenv) lib; };
mkShell = import ./tools/mkShell.nix { inherit pkgs; stdenv = stdenvNoCC; };
mergeSh = import ./tools/mergeSh.nix { inherit (stdenv) lib; };

# android environement
androidEnvCustom = callPackage ./mobile/android/sdk { };
androidPkgs = androidEnvCustom.licensedPkgs;
androidShell = androidEnvCustom.shell;

# custom packages
xcodeWrapper = xcodeenv.composeXcodeWrapper { version = "11.4.1"; };
openjdk = pkgs.openjdk8_headless;
nodejs = pkgs.nodejs-12_x;
yarn = pkgs.yarn.override { inherit nodejs; };
go = pkgs.callPackage ./patched-go { baseGo = pkgs.go_1_14; };
go = callPackage ./patched-go { baseGo = pkgs.go_1_14; };

# custom builders
buildGoPackage = pkgs.buildGo114Package.override { inherit go; };
Expand Down
4 changes: 3 additions & 1 deletion nix/scripts/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,9 @@ function cleanup() {
fi
}

trap cleanup EXIT ERR INT QUIT
if [[ -z "${_NIX_NO_CLEAN}" ]]; then
trap cleanup EXIT ERR INT QUIT
fi

# build output will end up under /nix, we have to extract it
function extractResults() {
Expand Down
File renamed without changes.
Loading

0 comments on commit 68b9b18

Please sign in to comment.