mirror of
https://github.com/status-im/status-mobile.git
synced 2025-02-24 06:18:13 +00:00
nix: Use nix/build.sh for release-android make target
Signed-off-by: Jakub Sokołowski <jakub@status.im>
This commit is contained in:
parent
808aa793e5
commit
acf6278383
3
.gitignore
vendored
3
.gitignore
vendored
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
# Xcode
|
# Xcode
|
||||||
#
|
#
|
||||||
|
result/
|
||||||
build/
|
build/
|
||||||
*.pbxuser
|
*.pbxuser
|
||||||
!default.pbxuser
|
!default.pbxuser
|
||||||
@ -170,4 +171,4 @@ status-modules/resources
|
|||||||
|
|
||||||
## coverage
|
## coverage
|
||||||
/.nyc_output
|
/.nyc_output
|
||||||
/coverage-report
|
/coverage-report
|
||||||
|
72
Makefile
72
Makefile
@ -30,9 +30,15 @@ HOST_OS := $(shell uname | tr '[:upper:]' '[:lower:]')
|
|||||||
# Defines which variables will be kept for Nix pure shell, use semicolon as divider
|
# Defines which variables will be kept for Nix pure shell, use semicolon as divider
|
||||||
export _NIX_KEEP ?= BUILD_ENV
|
export _NIX_KEEP ?= BUILD_ENV
|
||||||
export NIX_CONF_DIR = $(PWD)/nix
|
export NIX_CONF_DIR = $(PWD)/nix
|
||||||
|
# We don't want to use /run/user/$UID because it runs out of space too easilly
|
||||||
|
export TMPDIR = /tmp
|
||||||
|
|
||||||
export REACT_SERVER_PORT ?= 5001 # any value different from default 5000 will work; this has to be specified for both the Node.JS server process and the Qt process
|
export REACT_SERVER_PORT ?= 5001 # any value different from default 5000 will work; this has to be specified for both the Node.JS server process and the Qt process
|
||||||
|
|
||||||
|
#----------------
|
||||||
|
# Nix targets
|
||||||
|
#----------------
|
||||||
|
|
||||||
# WARNING: This has to be located right before the targets
|
# WARNING: This has to be located right before the targets
|
||||||
ifdef IN_NIX_SHELL
|
ifdef IN_NIX_SHELL
|
||||||
SHELL := env bash
|
SHELL := env bash
|
||||||
@ -47,6 +53,29 @@ else
|
|||||||
@echo "${YELLOW}Nix shell is already active$(RESET)"
|
@echo "${YELLOW}Nix shell is already active$(RESET)"
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
nix-clean: ##@nix Remove all status-react build artifacts from /nix/store
|
||||||
|
nix/clean.sh
|
||||||
|
|
||||||
|
nix-purge: SHELL := /bin/sh
|
||||||
|
nix-purge: ##@nix Completely remove the complete Nix setup
|
||||||
|
sudo rm -rf /nix ~/.nix-profile ~/.nix-defexpr ~/.nix-channels ~/.cache/nix ~/.status .nix-gcroots
|
||||||
|
|
||||||
|
nix-add-gcroots: SHELL := /bin/sh
|
||||||
|
nix-add-gcroots: ##@nix Add Nix GC roots to avoid status-react expressions being garbage collected
|
||||||
|
scripts/add-nix-gcroots.sh
|
||||||
|
|
||||||
|
nix-update-npm: SHELL := /bin/sh
|
||||||
|
nix-update-npm: ##@nix Update node2nix expressions based on current package.json
|
||||||
|
nix/desktop/realm-node/generate-nix.sh
|
||||||
|
|
||||||
|
nix-update-gradle: SHELL := /bin/sh
|
||||||
|
nix-update-gradle: ##@nix Update maven nix expressions based on current gradle setup
|
||||||
|
nix/mobile/android/maven-and-npm-deps/maven/generate-nix.sh
|
||||||
|
|
||||||
|
nix-update-lein: SHELL := /bin/sh
|
||||||
|
nix-update-lein: ##@nix Update maven nix expressions based on current lein setup
|
||||||
|
nix/tools/lein/generate-nix.sh nix/lein
|
||||||
|
|
||||||
#----------------
|
#----------------
|
||||||
# General targets
|
# General targets
|
||||||
#----------------
|
#----------------
|
||||||
@ -72,40 +101,22 @@ disable-githooks: ##@prepare Disables lein githooks
|
|||||||
-e 's|:pre-commit|;; :pre-commit|' project.clj; \
|
-e 's|:pre-commit|;; :pre-commit|' project.clj; \
|
||||||
rm project.clj~
|
rm project.clj~
|
||||||
|
|
||||||
#----------------
|
|
||||||
# Nix targets
|
|
||||||
#----------------
|
|
||||||
|
|
||||||
nix-clean: SHELL := /bin/sh
|
|
||||||
nix-clean: ##@nix Remove complete nix setup
|
|
||||||
sudo rm -rf /nix ~/.nix-profile ~/.nix-defexpr ~/.nix-channels ~/.cache/nix ~/.status .nix-gcroots
|
|
||||||
|
|
||||||
nix-add-gcroots: SHELL := /bin/sh
|
|
||||||
nix-add-gcroots: ##@nix Add Nix GC roots to avoid status-react expressions being garbage collected
|
|
||||||
scripts/add-nix-gcroots.sh
|
|
||||||
|
|
||||||
nix-update-npm: SHELL := /bin/sh
|
|
||||||
nix-update-npm: ##@nix Update node2nix expressions based on current package.json
|
|
||||||
nix/desktop/realm-node/generate-nix.sh
|
|
||||||
|
|
||||||
nix-update-gradle: SHELL := /bin/sh
|
|
||||||
nix-update-gradle: ##@nix Update maven nix expressions based on current gradle setup
|
|
||||||
nix/mobile/android/maven-and-npm-deps/maven/generate-nix.sh
|
|
||||||
|
|
||||||
nix-update-lein: SHELL := /bin/sh
|
|
||||||
nix-update-lein: ##@nix Update maven nix expressions based on current lein setup
|
|
||||||
nix/tools/lein/generate-nix.sh nix/lein
|
|
||||||
|
|
||||||
#----------------
|
#----------------
|
||||||
# Release builds
|
# Release builds
|
||||||
#----------------
|
#----------------
|
||||||
release: release-android release-ios ##@build build release for Android and iOS
|
release: release-android release-ios ##@build build release for Android and iOS
|
||||||
|
|
||||||
release-android: SHELL := /bin/sh
|
|
||||||
release-android: export TARGET_OS ?= android
|
release-android: export TARGET_OS ?= android
|
||||||
release-android: export BUILD_ENV ?= prod
|
release-android: export BUILD_ENV ?= prod
|
||||||
|
release-android: export BUILD_TYPE ?= nightly
|
||||||
|
release-android: export NDK_ABI_FILTERS ?= armeabi-v7a;arm64-v8a;x86
|
||||||
|
release-android: export STORE_FILE ?= ~/.gradle/status-im.keystore
|
||||||
release-android: ##@build build release for Android
|
release-android: ##@build build release for Android
|
||||||
scripts/release-$(TARGET_OS).sh
|
nix/build.sh targets.mobile.$(TARGET_OS).release \
|
||||||
|
--arg env '{NDK_ABI_FILTERS="$(NDK_ABI_FILTERS)";}' \
|
||||||
|
--argstr build-type $(BUILD_TYPE) \
|
||||||
|
--argstr keystore-file $(STORE_FILE) \
|
||||||
|
--option extra-sandbox-paths $(STORE_FILE)
|
||||||
|
|
||||||
release-ios: export TARGET_OS ?= ios
|
release-ios: export TARGET_OS ?= ios
|
||||||
release-ios: export BUILD_ENV ?= prod
|
release-ios: export BUILD_ENV ?= prod
|
||||||
@ -139,9 +150,9 @@ jsbundle-android: export TARGET_OS ?= android
|
|||||||
jsbundle-android: export BUILD_ENV ?= prod
|
jsbundle-android: export BUILD_ENV ?= prod
|
||||||
jsbundle-android: ##@jsbundle Compile JavaScript and Clojure into index.android.js
|
jsbundle-android: ##@jsbundle Compile JavaScript and Clojure into index.android.js
|
||||||
# Call nix-build to build the 'targets.mobile.jsbundle' attribute and copy the index.android.js file to the project root
|
# Call nix-build to build the 'targets.mobile.jsbundle' attribute and copy the index.android.js file to the project root
|
||||||
@git clean -dxf -f ./index.$(TARGET_OS).js && \
|
@git clean -dxf ./index.$(TARGET_OS).js
|
||||||
_NIX_RESULT_PATH=$(shell . ~/.nix-profile/etc/profile.d/nix.sh && nix-build --argstr target-os $(TARGET_OS) --pure --no-out-link --show-trace -A targets.mobile.jsbundle) && \
|
nix/build.sh targets.mobile.jsbundle && \
|
||||||
[ -n "$${_NIX_RESULT_PATH}" ] && cp -av $${_NIX_RESULT_PATH}/* .
|
mv result/index.$(TARGET_OS).js ./
|
||||||
|
|
||||||
prod-build-ios: jsbundle-ios ##@legacy temporary legacy alias for jsbundle-ios
|
prod-build-ios: jsbundle-ios ##@legacy temporary legacy alias for jsbundle-ios
|
||||||
@echo "${YELLOW}This a deprecated target name, use jsbundle-ios.$(RESET)"
|
@echo "${YELLOW}This a deprecated target name, use jsbundle-ios.$(RESET)"
|
||||||
@ -238,14 +249,17 @@ coverage: ##@test Run tests once in NodeJS generating coverage
|
|||||||
# Other
|
# Other
|
||||||
#--------------
|
#--------------
|
||||||
react-native-desktop: export TARGET_OS ?= $(HOST_OS)
|
react-native-desktop: export TARGET_OS ?= $(HOST_OS)
|
||||||
|
react-native-desktop: export _NIX_PURE ?= true
|
||||||
react-native-desktop: ##@other Start react native packager
|
react-native-desktop: ##@other Start react native packager
|
||||||
@scripts/start-react-native.sh
|
@scripts/start-react-native.sh
|
||||||
|
|
||||||
react-native-android: export TARGET_OS ?= android
|
react-native-android: export TARGET_OS ?= android
|
||||||
|
react-native-android: export _NIX_PURE ?= true
|
||||||
react-native-android: ##@other Start react native packager for Android client
|
react-native-android: ##@other Start react native packager for Android client
|
||||||
@scripts/start-react-native.sh
|
@scripts/start-react-native.sh
|
||||||
|
|
||||||
react-native-ios: export TARGET_OS ?= ios
|
react-native-ios: export TARGET_OS ?= ios
|
||||||
|
react-native-ios: export _NIX_PURE ?= true
|
||||||
react-native-ios: ##@other Start react native packager for Android client
|
react-native-ios: ##@other Start react native packager for Android client
|
||||||
@scripts/start-react-native.sh
|
@scripts/start-react-native.sh
|
||||||
|
|
||||||
|
@ -26,6 +26,7 @@ pipeline {
|
|||||||
LC_ALL = "en_US.UTF-8"
|
LC_ALL = "en_US.UTF-8"
|
||||||
LANGUAGE = "en_US.UTF-8"
|
LANGUAGE = "en_US.UTF-8"
|
||||||
TARGET_OS = 'android'
|
TARGET_OS = 'android'
|
||||||
|
BUILD_ENV = 'prod'
|
||||||
NIX_CONF_DIR = "${env.WORKSPACE}/nix"
|
NIX_CONF_DIR = "${env.WORKSPACE}/nix"
|
||||||
FASTLANE_DISABLE_COLORS = 1
|
FASTLANE_DISABLE_COLORS = 1
|
||||||
REALM_DISABLE_ANALYTICS = 1
|
REALM_DISABLE_ANALYTICS = 1
|
||||||
@ -83,7 +84,9 @@ pipeline {
|
|||||||
stage('Build') { stages {
|
stage('Build') { stages {
|
||||||
stage('JSBundle') {
|
stage('JSBundle') {
|
||||||
steps {
|
steps {
|
||||||
script { cmn.nix.build(attr: 'targets.mobile.jsbundle') }
|
script {
|
||||||
|
cmn.nix.shell('make jsbundle-android', pure: false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
stage('Bundle') {
|
stage('Bundle') {
|
||||||
|
@ -12,7 +12,7 @@ pipeline {
|
|||||||
options {
|
options {
|
||||||
timestamps()
|
timestamps()
|
||||||
/* Prevent Jenkins jobs from running forever */
|
/* Prevent Jenkins jobs from running forever */
|
||||||
timeout(time: 25, unit: 'MINUTES')
|
timeout(time: 30, unit: 'MINUTES')
|
||||||
/* Limit builds retained */
|
/* Limit builds retained */
|
||||||
buildDiscarder(logRotator(
|
buildDiscarder(logRotator(
|
||||||
numToKeepStr: '10',
|
numToKeepStr: '10',
|
||||||
|
@ -23,73 +23,81 @@ pipeline {
|
|||||||
}
|
}
|
||||||
|
|
||||||
stages {
|
stages {
|
||||||
|
stage('Prep') {
|
||||||
|
steps { script {
|
||||||
|
nix = load('ci/nix.groovy')
|
||||||
|
} }
|
||||||
|
}
|
||||||
stage('Setup') {
|
stage('Setup') {
|
||||||
steps {
|
steps { script {
|
||||||
sh 'scripts/setup'
|
sh 'scripts/setup'
|
||||||
sh '''
|
nix.shell('nix-env -i openssh', pure: false)
|
||||||
. ~/.nix-profile/etc/profile.d/nix.sh && \
|
} }
|
||||||
nix-env -i openssh
|
|
||||||
'''
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
stage('Build status-go') {
|
stage('Build status-go') {
|
||||||
steps { script {
|
steps { script {
|
||||||
['android', 'desktop', 'ios'].each { os ->
|
['android', 'desktop', 'ios'].each { os ->
|
||||||
sh """
|
nix.build(
|
||||||
. ~/.nix-profile/etc/profile.d/nix.sh && \
|
attr: "targets.status-go.${os}.buildInputs",
|
||||||
nix-build --argstr target-os all -A targets.status-go.${os}.buildInputs
|
args: ['target-os': 'all'],
|
||||||
"""
|
link: false
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} }
|
} }
|
||||||
}
|
}
|
||||||
stage('Build jsbundle-android') {
|
stage('Build jsbundle') {
|
||||||
steps {
|
steps { script {
|
||||||
// Run a Nix build to build/fetch everything that is necessary to produce a jsbundle for TARGET_OS=android (e.g. maven and node repos)
|
/* build/fetch things required to produce a js-bundle for android
|
||||||
sh '''
|
* (e.g. maven and node repos) */
|
||||||
args="--argstr target-os android --show-trace -A targets.mobile.jsbundle"
|
nix.build(
|
||||||
|
attr: 'targets.mobile.jsbundle',
|
||||||
. ~/.nix-profile/etc/profile.d/nix.sh && \
|
args: ['target-os': 'android'],
|
||||||
nix-build --pure --no-out-link $args
|
pure: false,
|
||||||
|
link: false
|
||||||
prodBuildDrv=$(nix-instantiate --quiet $args) && \
|
)
|
||||||
prodBuildSrcPath=$(nix-store -q --binding src $prodBuildDrv) && \
|
} }
|
||||||
prodBuildOutPath=$(nix-store -q --outputs $prodBuildDrv) && \
|
}
|
||||||
nix-store --delete $prodBuildDrv $prodBuildSrcPath $prodBuildOutPath
|
stage('Build android deps') {
|
||||||
'''
|
steps { script {
|
||||||
}
|
/* build/fetch things required to build jsbundle and android */
|
||||||
|
nix.build(
|
||||||
|
attr: 'targets.mobile.android.buildInputs',
|
||||||
|
args: ['target-os': 'android'],
|
||||||
|
pure: false,
|
||||||
|
link: false
|
||||||
|
)
|
||||||
|
} }
|
||||||
}
|
}
|
||||||
stage('Build nix shell deps') {
|
stage('Build nix shell deps') {
|
||||||
steps {
|
steps { script {
|
||||||
// Run a Nix build to build/fetch everything that is necessary to instantiate shell.nix for TARGET_OS=all
|
/* build/fetch things required to instantiate shell.nix for TARGET_OS=all */
|
||||||
sh '''
|
nix.shell("nix-build ${args.join(' ')}", pure: false)
|
||||||
. ~/.nix-profile/etc/profile.d/nix.sh && \
|
nix.build(
|
||||||
nix-shell --argstr target-os all --pure --show-trace shell.nix
|
attr: 'shell',
|
||||||
'''
|
args: ['target-os': 'all'],
|
||||||
}
|
link: false
|
||||||
|
)
|
||||||
|
} }
|
||||||
}
|
}
|
||||||
stage('Upload') {
|
stage('Upload') {
|
||||||
steps {
|
steps { script {
|
||||||
sshagent(credentials: ['nix-cache-ssh']) {
|
sshagent(credentials: ['nix-cache-ssh']) {
|
||||||
sh """
|
nix.shell("""
|
||||||
. ~/.nix-profile/etc/profile.d/nix.sh && \
|
find /nix/store/ -mindepth 1 -maxdepth 1 \
|
||||||
find /nix/store/ -mindepth 1 -maxdepth 1 \
|
-not -name '.links' -and -not -name '*.lock' \
|
||||||
-not -name '.links' -and -not -name '*.lock' \
|
-and -not -name '*-status-react-*' \
|
||||||
-and -not -name '*-status-react-jsbundle-source' \
|
| xargs nix-copy-closure -v --to ${NIX_CACHE_USER}@${NIX_CACHE_HOST}
|
||||||
-and -not -name '*-status-react-release-android-source' \
|
""",
|
||||||
-and -not -name '*-jsbundle-*' \
|
pure: false
|
||||||
-and -not -name '*-release-android' | \
|
)
|
||||||
xargs nix-copy-closure -v --to ${NIX_CACHE_USER}@${NIX_CACHE_HOST}
|
|
||||||
"""
|
|
||||||
}
|
}
|
||||||
}
|
} }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
post {
|
post {
|
||||||
always {
|
always { script {
|
||||||
sh '''
|
nix.shell('nix-store --optimize', pure: false)
|
||||||
. ~/.nix-profile/etc/profile.d/nix.sh && \
|
nix.shell('nix/clean.sh', pure: false)
|
||||||
nix-store --optimize
|
} }
|
||||||
'''
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,7 @@ def bundle() {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/* because nix-build was run in `android` dir that's where `result` is */
|
||||||
def outApk = "android/result/app.apk"
|
def outApk = "android/result/app.apk"
|
||||||
def pkg = utils.pkgFilename(btype, 'apk')
|
def pkg = utils.pkgFilename(btype, 'apk')
|
||||||
/* rename for upload */
|
/* rename for upload */
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
def shell(Map opts = [:], String cmd) {
|
def shell(Map opts = [:], String cmd) {
|
||||||
def defaults = [
|
def defaults = [
|
||||||
pure: true,
|
pure: true,
|
||||||
args: ['target-os': env.TARGET_OS],
|
args: ['target-os': env.TARGET_OS ? env.TARGET_OS : 'none'],
|
||||||
keep: ['LOCALE_ARCHIVE_2_27', 'IN_CI_ENVIRONMENT'],
|
keep: ['LOCALE_ARCHIVE_2_27', 'IN_CI_ENVIRONMENT'],
|
||||||
]
|
]
|
||||||
/* merge defaults with received opts */
|
/* merge defaults with received opts */
|
||||||
@ -18,34 +18,40 @@ def shell(Map opts = [:], String cmd) {
|
|||||||
if (env.TARGET_OS in ['windows', 'ios']) {
|
if (env.TARGET_OS in ['windows', 'ios']) {
|
||||||
opts.pure = false
|
opts.pure = false
|
||||||
}
|
}
|
||||||
sh """
|
def stdOut = sh(
|
||||||
set +x
|
script: """
|
||||||
. ~/.nix-profile/etc/profile.d/nix.sh
|
set +x
|
||||||
set -x
|
. ~/.nix-profile/etc/profile.d/nix.sh
|
||||||
IN_CI_ENVIRONMENT=1 \\
|
set -x
|
||||||
nix-shell --run \'${cmd}\' ${_getNixCommandArgs(opts, true)}
|
IN_CI_ENVIRONMENT=1 \\
|
||||||
"""
|
nix-shell --run \'${cmd}\' ${_getNixCommandArgs(opts, true)}
|
||||||
|
""",
|
||||||
|
returnStdout: true
|
||||||
|
)
|
||||||
|
return stdOut.trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Arguments:
|
* Arguments:
|
||||||
* - pure - Use --pure mode with Nix for more deterministic behaviour
|
* - pure - Use --pure mode with Nix for more deterministic behaviour
|
||||||
|
* - link - Bu default build creates a `result` directory, you can turn that off
|
||||||
* - keep - List of env variables to pass through to Nix build
|
* - keep - List of env variables to pass through to Nix build
|
||||||
* - args - Map of arguments to provide to --argstr
|
* - args - Map of arguments to provide to --argstr
|
||||||
* - attr - Name of attribute to use with --attr flag
|
* - attr - Name of attribute to use with --attr flag
|
||||||
* - safeEnv - Name of env variables to pass securely through to Nix build (they won't get captured in Nix derivation file)
|
|
||||||
* - sbox - List of host file paths to pass to the Nix expression
|
* - sbox - List of host file paths to pass to the Nix expression
|
||||||
|
* - safeEnv - Name of env variables to pass securely through to Nix build (they won't get captured in Nix derivation file)
|
||||||
**/
|
**/
|
||||||
def build(Map opts = [:]) {
|
def build(Map opts = [:]) {
|
||||||
env.IN_CI_ENVIRONMENT = '1'
|
env.IN_CI_ENVIRONMENT = '1'
|
||||||
|
|
||||||
def defaults = [
|
def defaults = [
|
||||||
pure: true,
|
pure: true,
|
||||||
|
link: true,
|
||||||
args: ['target-os': env.TARGET_OS],
|
args: ['target-os': env.TARGET_OS],
|
||||||
keep: ['IN_CI_ENVIRONMENT'],
|
keep: ['IN_CI_ENVIRONMENT'],
|
||||||
safeEnv: [],
|
|
||||||
attr: null,
|
attr: null,
|
||||||
sbox: []
|
sbox: [],
|
||||||
|
safeEnv: [],
|
||||||
]
|
]
|
||||||
/* merge defaults with received opts */
|
/* merge defaults with received opts */
|
||||||
opts = defaults + opts
|
opts = defaults + opts
|
||||||
@ -61,7 +67,7 @@ def build(Map opts = [:]) {
|
|||||||
set -x
|
set -x
|
||||||
nix-build ${_getNixCommandArgs(opts, false)}
|
nix-build ${_getNixCommandArgs(opts, false)}
|
||||||
"""
|
"""
|
||||||
).trim()
|
).trim()
|
||||||
}
|
}
|
||||||
|
|
||||||
private makeNixBuildEnvFile(Map opts = [:]) {
|
private makeNixBuildEnvFile(Map opts = [:]) {
|
||||||
@ -115,6 +121,7 @@ private def _getNixCommandArgs(Map opts = [:], boolean isShell) {
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
opts.pure ? "--pure" : "",
|
opts.pure ? "--pure" : "",
|
||||||
|
opts.link ? "" : "--no-out-link",
|
||||||
keepFlags.join(" "),
|
keepFlags.join(" "),
|
||||||
argsFlags.join(" "),
|
argsFlags.join(" "),
|
||||||
extraSandboxPathsFlag,
|
extraSandboxPathsFlag,
|
||||||
|
@ -256,7 +256,7 @@ platform :ios do
|
|||||||
|
|
||||||
desc "`fastlane ios saucelabs` - upload .app to sauce labs"
|
desc "`fastlane ios saucelabs` - upload .app to sauce labs"
|
||||||
desc "also notifies in a GitHub comments"
|
desc "also notifies in a GitHub comments"
|
||||||
desc "expects to have an .apk prepared: `android/result/app.apk`"
|
desc "expects to have an .apk prepared: `result/app.apk`"
|
||||||
desc "expects to have a saucelabs access key as SAUCE_ACCESS_KEY env variable"
|
desc "expects to have a saucelabs access key as SAUCE_ACCESS_KEY env variable"
|
||||||
desc "expects to have a saucelabs username token as SAUCE_USERNAME env variable"
|
desc "expects to have a saucelabs username token as SAUCE_USERNAME env variable"
|
||||||
desc "expects to have a saucelabs destination name as SAUCE_LABS_NAME env variable"
|
desc "expects to have a saucelabs destination name as SAUCE_LABS_NAME env variable"
|
||||||
@ -276,7 +276,7 @@ end
|
|||||||
|
|
||||||
platform :android do
|
platform :android do
|
||||||
# Optional env variables
|
# Optional env variables
|
||||||
APK_PATH = ENV["APK_PATH"] || "android/result/app.apk"
|
APK_PATH = ENV["APK_PATH"] || "result/app.apk"
|
||||||
|
|
||||||
desc "Deploy a new internal build to Google Play"
|
desc "Deploy a new internal build to Google Play"
|
||||||
desc "expects GOOGLE_PLAY_JSON_KEY environment variable"
|
desc "expects GOOGLE_PLAY_JSON_KEY environment variable"
|
||||||
@ -311,7 +311,7 @@ platform :android do
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc "`fastlane android upload_diawi` - upload .apk to diawi"
|
desc "`fastlane android upload_diawi` - upload .apk to diawi"
|
||||||
desc "expects to have an .apk prepared: `android/result/app.apk`"
|
desc "expects to have an .apk prepared: `result/app.apk`"
|
||||||
desc "expects to have a diawi token as DIAWI_TOKEN env variable"
|
desc "expects to have a diawi token as DIAWI_TOKEN env variable"
|
||||||
desc "expects to have a github token as GITHUB_TOKEN env variable"
|
desc "expects to have a github token as GITHUB_TOKEN env variable"
|
||||||
desc "will fails if file isn't there"
|
desc "will fails if file isn't there"
|
||||||
@ -322,7 +322,7 @@ platform :android do
|
|||||||
end
|
end
|
||||||
|
|
||||||
desc "`fastlane android saucelabs` - upload .apk to sauce labs"
|
desc "`fastlane android saucelabs` - upload .apk to sauce labs"
|
||||||
desc "expects to have an .apk prepared: `android/result/app.apk`"
|
desc "expects to have an .apk prepared: `result/app.apk`"
|
||||||
desc "expects to have a saucelabs access key as SAUCE_ACCESS_KEY env variable"
|
desc "expects to have a saucelabs access key as SAUCE_ACCESS_KEY env variable"
|
||||||
desc "expects to have a saucelabs username token as SAUCE_USERNAME env variable"
|
desc "expects to have a saucelabs username token as SAUCE_USERNAME env variable"
|
||||||
desc "expects to have a saucelabs destination name as SAUCE_LABS_NAME env variable"
|
desc "expects to have a saucelabs destination name as SAUCE_LABS_NAME env variable"
|
||||||
|
50
nix/build.sh
Executable file
50
nix/build.sh
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# cleanup for artifacts created during builds
|
||||||
|
function cleanup() {
|
||||||
|
# clear trapped signals
|
||||||
|
trap - EXIT ERR INT QUIT
|
||||||
|
# do the actual cleanup
|
||||||
|
./nix/clean.sh ${nixOpts[@]}
|
||||||
|
}
|
||||||
|
|
||||||
|
trap cleanup EXIT ERR INT QUIT
|
||||||
|
|
||||||
|
# build output will end up under /nix, we have to extract it
|
||||||
|
function extractResults() {
|
||||||
|
local nixResultPath="$1"
|
||||||
|
echo "Saving build result: ${nixResultPath}"
|
||||||
|
mkdir -p result
|
||||||
|
cp -vfr ${nixResultPath}/* result/
|
||||||
|
chmod u+w -R result/
|
||||||
|
}
|
||||||
|
|
||||||
|
targetAttr="${1}"
|
||||||
|
shift
|
||||||
|
|
||||||
|
if [[ -z "${targetAttr}" ]]; then
|
||||||
|
echo "First argument is madatory and has to specify the Nix attribute!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Some defaults flags, --pure could be optional in the future
|
||||||
|
nixOpts=(
|
||||||
|
"--pure"
|
||||||
|
"--fallback"
|
||||||
|
"--no-out-link"
|
||||||
|
"--show-trace"
|
||||||
|
"--argstr target-os ${TARGET_OS}"
|
||||||
|
"--attr ${targetAttr}"
|
||||||
|
"${@}"
|
||||||
|
"default.nix"
|
||||||
|
)
|
||||||
|
|
||||||
|
# Run the actual build
|
||||||
|
echo "Running: nix-build ${nixOpts[@]}"
|
||||||
|
nixResultPath=$(nix-build ${nixOpts[@]})
|
||||||
|
|
||||||
|
extractResults "${nixResultPath}"
|
||||||
|
|
||||||
|
echo "SUCCESS"
|
60
nix/clean.sh
Executable file
60
nix/clean.sh
Executable file
@ -0,0 +1,60 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
function getSources() {
|
||||||
|
nix-store --query --binding src "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function getOutputs() {
|
||||||
|
nix-store --query --outputs "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function getDrvFiles() {
|
||||||
|
nix-store --query --deriver "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function getReferrers() {
|
||||||
|
nix-store --query --referrers "${1}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# list of store entries to delete
|
||||||
|
declare -a toDelete
|
||||||
|
|
||||||
|
echo "Cleanup of /nix/store after build..."
|
||||||
|
|
||||||
|
# regular expression that should match all status-react build artifacts
|
||||||
|
searchRegex='.*-status-react-(shell|source|build).*'
|
||||||
|
|
||||||
|
# search for matching entries in the store
|
||||||
|
drvPaths=$(
|
||||||
|
find /nix/store -maxdepth 1 -type d -regextype egrep -regex "${searchRegex}"
|
||||||
|
)
|
||||||
|
|
||||||
|
# for each entry find the source and derivation
|
||||||
|
for path in ${drvPaths}; do
|
||||||
|
toDelete+=("${path}")
|
||||||
|
if [[ "${path}" =~ .*.chroot ]]; then
|
||||||
|
echo " ! Chroot: ${path}"
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
echo " ? Checking: ${path}"
|
||||||
|
drv=$(getDrvFiles "${path}")
|
||||||
|
# if drv is unknown-deriver then path is a source
|
||||||
|
if [[ "${drv}" == "unknown-deriver" ]]; then
|
||||||
|
drv=$(getReferrers "${path}")
|
||||||
|
src="${path}"
|
||||||
|
elif [[ -f "${drv}" ]]; then
|
||||||
|
src=$(getSources "${drv}")
|
||||||
|
fi
|
||||||
|
echo " - Derivation: ${drv}"
|
||||||
|
echo " - Source: ${src}"
|
||||||
|
|
||||||
|
toDelete+=("${drv}" "${src}")
|
||||||
|
done
|
||||||
|
|
||||||
|
# remove dupicates
|
||||||
|
cleanToDelete=$(echo "${toDelete[@]}" | sort | uniq)
|
||||||
|
|
||||||
|
echo "Deleting..."
|
||||||
|
nix-store --ignore-liveness --delete ${cleanToDelete[@]}
|
@ -36,7 +36,7 @@ let
|
|||||||
let path = ./../../../..; # Import the root /android and /mobile_files folders clean of any build artifacts
|
let path = ./../../../..; # Import the root /android and /mobile_files folders clean of any build artifacts
|
||||||
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
||||||
inherit path;
|
inherit path;
|
||||||
name = "status-react-gradle-install-source";
|
name = "status-react-source-gradle-install";
|
||||||
filter =
|
filter =
|
||||||
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
||||||
mkFilter {
|
mkFilter {
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
{ stdenv, stdenvNoCC, lib, target-os, callPackage,
|
{ stdenv, stdenvNoCC, lib, target-os, callPackage,
|
||||||
mkFilter, bash, file, gnumake, watchman, gradle, androidEnvShellHook, mavenAndNpmDeps, nodejs, openjdk, jsbundle, status-go, zlib }:
|
mkFilter, bash, file, gnumake, watchman, gradle,
|
||||||
|
androidEnvShellHook, mavenAndNpmDeps,
|
||||||
|
nodejs, openjdk, jsbundle, status-go, zlib }:
|
||||||
|
|
||||||
{ build-number ? "9999",
|
{ build-number ? "9999",
|
||||||
build-type ? "nightly", # Build type (e.g. nightly, release, e2e). Default is to use .env.nightly file
|
build-type ? "nightly", # Build type (e.g. nightly, release, e2e). Default is to use .env.nightly file
|
||||||
@ -10,7 +12,8 @@
|
|||||||
}:
|
}:
|
||||||
|
|
||||||
let
|
let
|
||||||
name = "release-${target-os}";
|
baseName = "release-${target-os}";
|
||||||
|
name = "status-react-build-${baseName}";
|
||||||
gradleHome = "$NIX_BUILD_TOP/.gradle";
|
gradleHome = "$NIX_BUILD_TOP/.gradle";
|
||||||
localMavenRepo = "${mavenAndNpmDeps.deriv}/.m2/repository";
|
localMavenRepo = "${mavenAndNpmDeps.deriv}/.m2/repository";
|
||||||
sourceProjectDir = "${mavenAndNpmDeps.deriv}/project";
|
sourceProjectDir = "${mavenAndNpmDeps.deriv}/project";
|
||||||
@ -27,7 +30,7 @@ in stdenv.mkDerivation {
|
|||||||
let path = ./../../../..;
|
let path = ./../../../..;
|
||||||
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
||||||
inherit path;
|
inherit path;
|
||||||
name = "status-react-${name}-source";
|
name = "status-react-source-${baseName}";
|
||||||
filter =
|
filter =
|
||||||
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
||||||
mkFilter {
|
mkFilter {
|
||||||
|
@ -16,7 +16,7 @@ let
|
|||||||
let path = ./../../..;
|
let path = ./../../..;
|
||||||
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
||||||
inherit path;
|
inherit path;
|
||||||
name = "status-react-npm-deps-source";
|
name = "status-react-source-npm-deps";
|
||||||
filter =
|
filter =
|
||||||
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
||||||
mkFilter {
|
mkFilter {
|
||||||
|
14
nix/shell.sh
14
nix/shell.sh
@ -5,10 +5,11 @@
|
|||||||
# The following environment variables modify the script behavior:
|
# The following environment variables modify the script behavior:
|
||||||
# - TARGET_OS: This attribute is passed as `target-os` to Nix, limiting the scope
|
# - TARGET_OS: This attribute is passed as `target-os` to Nix, limiting the scope
|
||||||
# of the Nix expressions.
|
# of the Nix expressions.
|
||||||
# - _NIX_ATTR: This attribute can be used to specify an attribute set
|
# - _NIX_ATTR: Used to specify an attribute set from inside the expression in `default.nix`.
|
||||||
# from inside the expression in `default.nix`, allowing drilling down into a specific attribute.
|
# This allows for drilling down into a specific attribute in Nix expressions.
|
||||||
|
# - _NIX_PURE: This variable allows for making the shell pure with the use of --pure.
|
||||||
|
# Take note that this makes Nix tools like `nix-build` unavailable in the shell.
|
||||||
# - _NIX_KEEP: This variable allows specifying which env vars to keep for Nix pure shell.
|
# - _NIX_KEEP: This variable allows specifying which env vars to keep for Nix pure shell.
|
||||||
#
|
|
||||||
|
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
YELLOW='\033[1;33m'
|
YELLOW='\033[1;33m'
|
||||||
@ -58,20 +59,21 @@ if [ -n "${_NIX_ATTR}" ]; then
|
|||||||
entryPoint="default.nix"
|
entryPoint="default.nix"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# this happens if `make shell` is run already in a Nix shell
|
# ENTER_NIX_SHELL is the fake command used when `make shell` is run.
|
||||||
|
# It is just a special string, not a variable, and a marker to not use `--run`.
|
||||||
if [[ $@ == "ENTER_NIX_SHELL" ]]; then
|
if [[ $@ == "ENTER_NIX_SHELL" ]]; then
|
||||||
echo -e "${GREEN}Configuring ${_NIX_ATTR:-default} Nix shell for target '${TARGET_OS}'...${NC}"
|
echo -e "${GREEN}Configuring ${_NIX_ATTR:-default} Nix shell for target '${TARGET_OS}'...${NC}"
|
||||||
exec nix-shell ${shellArgs[@]} ${entryPoint}
|
exec nix-shell ${shellArgs[@]} ${entryPoint}
|
||||||
else
|
else
|
||||||
# Not all builds are ready to be run in a pure environment
|
# Not all builds are ready to be run in a pure environment
|
||||||
if [[ "${TARGET_OS}" =~ (android|macos|linux) ]]; then
|
if [[ -n "${_NIX_PURE}" ]]; then
|
||||||
shellArgs+=("--pure")
|
shellArgs+=("--pure")
|
||||||
pureDesc='pure '
|
pureDesc='pure '
|
||||||
fi
|
fi
|
||||||
# This variable allows specifying which env vars to keep for Nix pure shell
|
# This variable allows specifying which env vars to keep for Nix pure shell
|
||||||
# The separator is a semicolon
|
# The separator is a semicolon
|
||||||
if [[ -n "${_NIX_KEEP}" ]]; then
|
if [[ -n "${_NIX_KEEP}" ]]; then
|
||||||
nixShelArgs+=("--keep ${_NIX_KEEP//;/ --keep }")
|
shellArgs+=("--keep ${_NIX_KEEP//;/ --keep }")
|
||||||
fi
|
fi
|
||||||
echo -e "${GREEN}Configuring ${pureDesc}${_NIX_ATTR:-default} Nix shell for target '${TARGET_OS}'...${NC}"
|
echo -e "${GREEN}Configuring ${pureDesc}${_NIX_ATTR:-default} Nix shell for target '${TARGET_OS}'...${NC}"
|
||||||
exec nix-shell ${shellArgs[@]} --run "$@" ${entryPoint}
|
exec nix-shell ${shellArgs[@]} --run "$@" ${entryPoint}
|
||||||
|
@ -11,12 +11,12 @@ let
|
|||||||
leinProjectDepsLocalRepo = localMavenRepoBuilder "lein-project-deps" lein-project-deps;
|
leinProjectDepsLocalRepo = localMavenRepoBuilder "lein-project-deps" lein-project-deps;
|
||||||
|
|
||||||
in stdenv.mkDerivation {
|
in stdenv.mkDerivation {
|
||||||
name = "jsbundle-${target-os}";
|
name = "status-react-build-jsbundle-${target-os}";
|
||||||
src =
|
src =
|
||||||
let path = ./../..;
|
let path = ./../..;
|
||||||
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
in builtins.path { # We use builtins.path so that we can name the resulting derivation, otherwise the name would be taken from the checkout directory, which is outside of our control
|
||||||
inherit path;
|
inherit path;
|
||||||
name = "status-react-jsbundle-source";
|
name = "status-react-source-jsbundle";
|
||||||
filter =
|
filter =
|
||||||
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
# Keep this filter as restrictive as possible in order to avoid unnecessary rebuilds and limit closure size
|
||||||
mkFilter {
|
mkFilter {
|
||||||
|
@ -47,7 +47,7 @@ nixOpts="--option extra-sandbox-paths ${STORE_FILE} \
|
|||||||
--argstr build-type ${BUILD_TYPE} \
|
--argstr build-type ${BUILD_TYPE} \
|
||||||
--argstr keystore-file ${STORE_FILE} \
|
--argstr keystore-file ${STORE_FILE} \
|
||||||
--show-trace \
|
--show-trace \
|
||||||
$exportedEnvFlag \
|
${exportedEnvFlag} \
|
||||||
-A targets.mobile.${TARGET_OS}.release"
|
-A targets.mobile.${TARGET_OS}.release"
|
||||||
|
|
||||||
# Run the build
|
# Run the build
|
||||||
|
Loading…
x
Reference in New Issue
Block a user