mirror of
https://github.com/status-im/status-mobile.git
synced 2025-01-14 10:46:21 +00:00
Jakub Sokołowski
aca703a011
Changes: - Adds a new `nix-gc` Makefile target for removing old packages - Moves all `nix/*.sh` files to `nix/scripts/*.sh` to make things more tidy - Renames `TARGET_OS` into `TARGET` and makes it effective only with `nix/scripts/shell.sh` - Renames `target-os` Nix argument to just `target` and makes it effective only with `shell.nix` - Drops `IN_CI_ENVIRONMENT` env variable which was useless - Drops use of `target-os` argument outside of `shell.nix` (with few exceptions, but just in naming) - `nix/platform.nix` has been made obsolete and removed - Moves the definition of all major targets to `nix/targets.nix` - Moves the definition of all major shells to `nix/shells.nix` - Makes `default.nix` and `shell.nix` just thin wrappers around `nix/default.nix` - `nix/nixpkgs-bootstrap.nix` has been moved to `nix/pkgs.nix` - All package and tool overrides have been moved to `nix/pkgs.nix` - Explicit passing of contents of `pkgs` has been removed in favor of `callPackage` doing it for us - `nix/bootstrapped-shell.nix` has been moved to `nix/tools/mkShell.nix` - A new `mergeSh` tool has been added to `pkgs` from `nix/tools/mergeSh.nix` - This tool is used to merge shells created using `mkShell` - `mobile/targets/jsbundle.nix` has been moved to `mobile/android/jsbundle/default.nix` - Moves `status-go` version sanitization to `nix/status-go/utils.nix` - Renames version to rawVersion and versionName to cleanVersion in status-go derivation - Ports nix/mobile/ios/install-pods-and-status-go.sh to Nix sub-shells - Moves adjustment of `inotify/max_user_watches` out into `scripts/inotify_fix.sh` - Makes iOS builds use the Nix version of Fastlane Signed-off-by: Jakub Sokołowski <jakub@status.im>
101 lines
3.0 KiB
Groovy
101 lines
3.0 KiB
Groovy
import groovy.json.JsonBuilder
|
|
|
|
/* Libraries -----------------------------------------------------------------*/
|
|
|
|
ci = load 'ci/jenkins.groovy'
|
|
nix = load 'ci/nix.groovy'
|
|
utils = load 'ci/utils.groovy'
|
|
|
|
/* Small Helpers -------------------------------------------------------------*/
|
|
|
|
def pkgUrl(build) {
|
|
return utils.getEnv(build, 'PKG_URL')
|
|
}
|
|
|
|
def updateBucketJSON(urls, fileName) {
|
|
/* latest.json has slightly different key names */
|
|
def content = [
|
|
DIAWI: urls.Diawi,
|
|
APK: urls.Apk, IOS: urls.iOS,
|
|
APP: urls.App, MAC: urls.Mac,
|
|
WIN: urls.Win, SHA: urls.SHA
|
|
]
|
|
def filePath = "${pwd()}/pkg/${fileName}"
|
|
/* it might not exist */
|
|
sh 'mkdir -p pkg'
|
|
def contentJson = new JsonBuilder(content).toPrettyString()
|
|
println "${fileName}:\n${contentJson}"
|
|
new File(filePath).write(contentJson)
|
|
return uploadArtifact(filePath)
|
|
}
|
|
|
|
def prep(type = 'nightly') {
|
|
/* build/downloads all nix deps in advance */
|
|
nix.prepEnv()
|
|
/* rebase unless this is a release build */
|
|
utils.doGitRebase()
|
|
/* ensure that we start from a known state */
|
|
sh 'make clean'
|
|
/* Disable git hooks in CI, it's not useful, takes time and creates weird errors at times
|
|
(e.g. bin/sh: 2: /etc/ssl/certs/ca-certificates.crt: Permission denied) */
|
|
sh 'make disable-githooks'
|
|
|
|
/* pick right .env and update from params */
|
|
utils.updateEnv(type)
|
|
|
|
if (['android', 'ios'].contains(env.TARGET)) {
|
|
/* Run at start to void mismatched numbers */
|
|
utils.genBuildNumber()
|
|
}
|
|
|
|
nix.shell('watchman watch-del-all', attr: 'shells.watchman')
|
|
|
|
if (env.TARGET == 'ios') {
|
|
/* install ruby dependencies */
|
|
nix.shell(
|
|
'bundle install --gemfile=fastlane/Gemfile --quiet',
|
|
attr: 'shells.fastlane')
|
|
}
|
|
|
|
if (['macos', 'linux', 'windows'].contains(env.TARGET)) {
|
|
/* node deps, pods, and status-go download */
|
|
nix.shell('scripts/prepare-for-desktop-platform.sh', pure: false)
|
|
}
|
|
/* run script in the nix shell so that node_modules gets instantiated before attempting the copies */
|
|
nix.shell('scripts/copy-translations.sh chmod', attr: "shells.${env.TARGET}")
|
|
}
|
|
|
|
def uploadArtifact(path) {
|
|
/* defaults for upload */
|
|
def domain = 'ams3.digitaloceanspaces.com'
|
|
def bucket = 'status-im'
|
|
/* There's so many PR builds we need a separate bucket */
|
|
if (utils.getBuildType() == 'pr') {
|
|
bucket = 'status-im-prs'
|
|
}
|
|
/* WARNING: s3cmd can't guess APK MIME content-type */
|
|
def customOpts = ''
|
|
if (path.endsWith('apk')) {
|
|
customOpts += "--mime-type='application/vnd.android.package-archive'"
|
|
}
|
|
/* We also need credentials for the upload */
|
|
withCredentials([usernamePassword(
|
|
credentialsId: 'digital-ocean-access-keys',
|
|
usernameVariable: 'DO_ACCESS_KEY',
|
|
passwordVariable: 'DO_SECRET_KEY'
|
|
)]) {
|
|
sh("""
|
|
s3cmd ${customOpts} \\
|
|
--acl-public \\
|
|
--host="${domain}" \\
|
|
--host-bucket="%(bucket)s.${domain}" \\
|
|
--access_key=${DO_ACCESS_KEY} \\
|
|
--secret_key=${DO_SECRET_KEY} \\
|
|
put ${path} s3://${bucket}/
|
|
""")
|
|
}
|
|
return "https://${bucket}.${domain}/${utils.getFilename(path)}"
|
|
}
|
|
|
|
return this
|