Skip to content

Instantly share code, notes, and snippets.

@cgradwohl
Created April 8, 2020 15:35
Show Gist options
  • Save cgradwohl/a2bad42d4dea155d087799728601ad2b to your computer and use it in GitHub Desktop.
Save cgradwohl/a2bad42d4dea155d087799728601ad2b to your computer and use it in GitHub Desktop.
first pipeline implementation
---
format_version: '8'
default_step_lib_source: https://github.com/bitrise-io/bitrise-steplib.git
project_type: react-native
trigger_map:
- push_branch: master
workflow: staging
workflows:
setup:
steps:
- activate-ssh-key@4.0.3:
run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}'
- git-clone@4.0.14: {}
- script@1.1.5:
title: Set Full Build
inputs:
- content: |-
#!/bin/bash
# fail if any commands fails
set -e
# debug log
set -x
if [[ "$GIT_CLONE_COMMIT_MESSAGE_SUBJECT" == *"[FULL BUILD]"* ]]
then
envman add --key RUN_ARCHIVE --value true
else
envman add --key RUN_ARCHIVE --value false
fi
- script@1.1.5:
title: Set Install Native Deps
inputs:
- content: |-
#!/bin/bash
# fail if any commands fails
set -e
# debug log
set -x
if [ "$RUN_ARCHIVE" = true ] || [ "$USE_DETOX" = true ]
then
envman add --key INSTALL_NATIVE_DEPS --value true
else
envman add --key INSTALL_NATIVE_DEPS --value false
fi
- script@1.1.5:
title: Set Build Description
inputs:
- content: |-
#!/bin/bash
# fail if any commands fails
set -e
# debug log
set -x
brew install jq
LAST_HASH=$(curl -X GET "https://api.bitrise.io/v0.1/apps/ab1dc0a175ba5d60/builds?sort_by=created_at&workflow=staging" -H "accept: application/json" -H "Authorization: $BITRISE_TOKEN" | jq -r '[.data[]|select((.status == 0) or (.status == 1))][0].commit_hash')
envman add --key LAST_COMMIT_HASH --value $LAST_HASH
- script@1.1.5:
run_if: '{{getenv "USE_DETOX" | ne "true"}}'
title: Remove detox (If USE_DETOX != true)
inputs:
- content: |
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
brew install jq
echo $(jq "del(.devDependencies.detox)" <<< cat $BITRISE_SOURCE_DIR/package.json) > $BITRISE_SOURCE_DIR/package.json
- script@1.1.5:
title: Install npm-cache
inputs:
- content: |-
#!/bin/bash
npm install -g npm-cache
- cache-pull: {}
- script@1.1.3:
title: npm-cache install
inputs:
- content: |-
#!/bin/bash
npm-cache install --cacheDirectory .
- cache-push:
inputs:
- cache_paths: "./npm"
- npm@1.0.2:
inputs:
- command: install
title: npm install
- script@1.1.5:
run_if: '{{getenv "USE_DETOX" | eq "true"}}'
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
brew tap wix/brew
brew install applesimutils
title: Install detox deps (If USE_DETOX == true)
- script@1.1.5:
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
echo "module.exports = $BITRISE_BUILD_NUMBER;" > dist.js
title: Set build number in dist.js
- npm:
title: Install CodePush CLI
inputs:
- command: install -g code-push-cli
setup_ios:
steps:
- file-downloader@1.0.1:
title: iOS Google Services Plist Downloader
inputs:
- destination: "$BITRISE_SOURCE_DIR/ios/GoogleService-Info.plist"
- source: "$BITRISEIO_IOS_GOOGLE_SERVICES_PLIST_URL"
- cocoapods-install:
run_if: '{{getenv "INSTALL_NATIVE_DEPS" | eq "true"}}'
- cache-push:
run_if: '{{getenv "INSTALL_NATIVE_DEPS" | eq "true"}}'
inputs:
- cache_paths: "./ios/Pods -> ./ios/Podfile.lock"
- script@1.1.5:
title: Patch Packages
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
# brew install gnu-sed
# gsed -i '36i -(dispatch_queue_t)methodQueue { return dispatch_get_main_queue(); }' node_modules/react-native-onesignal/ios/RCTOneSignal/RCTOneSignalEventEmitter.m
# gsed -i '6i #import <UIKit/UIKit.h>' node_modules/react-native-inappbrowser-reborn/ios/RNInAppBrowser.h
# gsed -i 's/__IPHONE_13_0/130000/g' node_modules/react-native-inappbrowser-reborn/ios/RNInAppBrowser.m
npx patch-package
test_ios:
steps:
- script@1.1.5:
run_if: '{{getenv "USE_DETOX" | eq "true"}}'
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
# write your script here
echo "Building and running detox"
npm run build:e2e
npm run ci:test:e2e
title: Run detox tests
archive_ios:
steps:
- script@1.1.6:
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
# Eventually to be replaced by an if statement depending on environment
KEY=$CODE_PUSH_KEY_STAGING
echo "Updating CodePush deploy key to: $KEY"
/usr/libexec/PlistBuddy -c "Set :CodePushDeploymentKey $KEY" ios/Sibly/Info.plist
title: Inject CodePush deployment key
- ios-auto-provision@1.4.1:
run_if: '{{getenv "RUN_ARCHIVE" | eq "true"}}'
inputs:
- team_id: LL8G5N933A
- distribution_type: "$IOS_EXPORT_METHOD"
- set-xcode-build-number@1.0.8:
run_if: '{{getenv "RUN_ARCHIVE" | eq "true"}}'
inputs:
- plist_path: "$BITRISE_SOURCE_DIR/ios/Sibly/Info.plist"
- xcode-archive@2.7.0:
run_if: '{{getenv "RUN_ARCHIVE" | eq "true"}}'
inputs:
- team_id: LL8G5N933A
- export_method: "$IOS_EXPORT_METHOD"
- compile_bitcode: 'no'
- upload_bitcode: 'no'
- configuration: Release
- script@1.1.6:
title: CodePush Release iOS
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
BUILD_DESCRIPTION=$(git log $LAST_COMMIT_HASH..$BITRISE_GIT_COMMIT --format=%B | sed '/^$/d')
if [ "$LAST_COMMIT_HASH" = "$BITRISE_GIT_COMMIT" ]; then
BUILD_DESCRIPTION=$(git log -1 --format=%B | sed '/^$/d')
fi
if [ -z "$BUILD_DESCRIPTION" ]; then
echo "No messages found to apply to build description";
BUILD_DESCRIPTION="- No build description found"
fi
if which appcenter > /dev/null; then
echo "AppCenter CLI already installed."
else
echo "AppCenter CLI is not installed. Installing..."
npm install -g appcenter-cli
fi
appcenter codepush release-react -a $CODE_PUSH_APP_ID --token $APPCENTER_ACCESS_TOKEN --quiet --output-dir ./build --deployment-name $ENVIRONMENT --description "\n$BUILD_DESCRIPTION"
- script@1.1.6:
title: Update Sentry bundle
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
npm install @sentry/cli
BUILD_DIR="codePush"
if [ -d "build/CodePush" ]; then
BUILD_DIR="CodePush"
fi
# DEPLOY_ENVIRONMENT="staging"
SENTRY_AUTH_TOKEN=$SENTRY_TOKEN SENTRY_PROPERTIES="ios/sentry.properties" $(npm bin)/sentry-cli react-native appcenter $CODE_PUSH_APP_ID ios "./build/$BUILD_DIR"
envs:
- opts:
is_expand: false
CODE_PUSH_KEY_STAGING: iLv4Pzi8NE7PhqM38m0br5sOjqn8xp36MtRGJ
- opts:
is_expand: false
CODE_PUSH_KEY_PRODUCTION: 7XwknkTUErxKmRQFODTZ7EOPjQBPuyaIM3gsT
- opts:
is_expand: false
CODE_PUSH_APP_ID: work-mtnm/Typhon-iOS
setup_android:
steps:
- file-downloader@1.0.1:
title: Android Keystore Downloader
inputs:
- destination: "$BITRISE_SOURCE_DIR/android/app/sibly.keystore"
- source: "$BITRISEIO_ANDROID_KEYSTORE_URL"
- file-downloader@1.0.1:
title: Android Google Services JSON Downloader
inputs:
- destination: "$BITRISE_SOURCE_DIR/android/app/google-services.json"
- source: "$BITRISEIO_ANDROID_GOOGLE_SERVICES_JSON_URL"
- install-missing-android-tools@2.3.5:
run_if: '{{getenv "INSTALL_NATIVE_DEPS" | eq "true"}}'
inputs:
- gradlew_path: "$PROJECT_LOCATION/gradlew"
- npm@1.0.2:
inputs:
- command: run android:jetify
title: Android jetify
- change-workdir@1.0.2:
inputs:
- path: "$ORIG_WORK_DIR/android"
- change-android-versioncode-and-versionname@1.1.1: {}
- change-workdir@1.0.2:
inputs:
- path: "$ORIG_WORK_DIR"
archive_android:
steps:
- script@1.1.6:
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
brew install xmlstarlet
# Eventually to be replaced by an if statement depending on environment
KEY=$CODE_PUSH_KEY_STAGING
echo "Updating CodePush deploy key to: $KEY"
xmlstarlet ed -L -u "/resources/string[@name=\"reactNativeCodePush_androidDeploymentKey\"]" -v $KEY android/app/src/main/res/values/strings.xml
xmlstarlet ed -L -u "/resources/string[@name=\"CodePushDeploymentKey\"]" -v $KEY android/app/src/main/res/values/strings.xml
title: Inject CodePush deployment key
- change-workdir@1.0.2:
run_if: '{{getenv "RUN_ARCHIVE" | eq "true"}}'
inputs:
- path: "$ORIG_WORK_DIR/android"
- gradle-runner@1.9.0:
run_if: '{{getenv "RUN_ARCHIVE" | eq "true"}}'
inputs:
- gradlew_path: "./gradlew"
- gradle_task: bundleRelease assembleRelease
title: Bundle & assemble Android release
- change-workdir@1.0.2:
run_if: '{{getenv "RUN_ARCHIVE" | eq "true"}}'
inputs:
- path: "$ORIG_WORK_DIR"
- cache-push:
inputs:
- cache_paths: |-
$HOME/.gradle
./android/.gradle
- ignore_check_on_paths: |-
$HOME/.gradle/caches/*.lock
./android/.gradle/*.lock
./android/.gradle/*.bin
- script@1.1.6:
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
BUILD_DESCRIPTION=$(git log $LAST_COMMIT_HASH..$BITRISE_GIT_COMMIT --format=%B | sed '/^$/d')
if [ "$LAST_COMMIT_HASH" = "$BITRISE_GIT_COMMIT" ]; then
BUILD_DESCRIPTION=$(git log -1 --format=%B | sed '/^$/d')
fi
if [ -z "$BUILD_DESCRIPTION" ]; then
echo "No messages found to apply to build description";
BUILD_DESCRIPTION="- No build description found"
fi
if which appcenter > /dev/null; then
echo "AppCenter CLI already installed."
else
echo "AppCenter CLI is not installed. Installing..."
npm install -g appcenter-cli
fi
appcenter codepush release-react -a $CODE_PUSH_APP_ID --token $APPCENTER_ACCESS_TOKEN --quiet --output-dir ./build --deployment-name $ENVIRONMENT --description "\n$BUILD_DESCRIPTION"
title: CodePush Release Android
- script@1.1.6:
title: Update Sentry bundle
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
npm install @sentry/cli
BUILD_DIR="codePush"
if [ -d "build/CodePush" ]; then
BUILD_DIR="CodePush"
fi
# DEPLOY_ENVIRONMENT="staging"
SENTRY_AUTH_TOKEN=$SENTRY_TOKEN SENTRY_PROPERTIES="android/sentry.properties" $(npm bin)/sentry-cli react-native appcenter $CODE_PUSH_APP_ID android "./build/$BUILD_DIR"
envs:
- opts:
is_expand: false
CODE_PUSH_KEY_STAGING: ZWKLUAdxJ78PuaoOxE4RUkAG8ia8865k-76DA
- opts:
is_expand: false
CODE_PUSH_KEY_PRODUCTION: NQcVxqrOrXtk7Y5qQKEG7pUXIiOo7Snc0qM9i
- opts:
is_expand: false
CODE_PUSH_APP_ID: work-mtnm/Typhon-Android
deploy:
steps:
- deploy-to-bitrise-io@1.6.0:
run_if: '{{getenv "RUN_ARCHIVE" | eq "true"}}'
staging:
before_run:
- setup
- setup_ios
- test_ios
- setup_android
after_run:
- archive_ios
- archive_android
- deploy
steps:
- script@1.1.3:
title: Set ENVIRONMENT
inputs:
- content: |-
#!/usr/bin/env bash
# fail if any commands fails
set -e
# debug log
set -x
envman add --key ENVIRONMENT --value "Staging"
envman add --key IOS_EXPORT_METHOD --value "ad-hoc"
app:
envs:
- opts:
is_expand: false
PROJECT_LOCATION: android
- opts:
is_expand: false
MODULE: app
- opts:
is_expand: false
VARIANT: debug
- opts:
is_expand: false
BITRISE_PROJECT_PATH: ios/Sibly.xcworkspace
- opts:
is_expand: false
BITRISE_SCHEME: Sibly
- opts:
is_expand: false
BITRISE_EXPORT_METHOD: development
- ORIG_WORK_DIR: "$BITRISE_SOURCE_DIR"
- opts:
is_expand: false
USE_DETOX: 'false'
- opts:
is_expand: false
SENTRY_ORG: siblyco
meta:
bitrise.io:
machine_type: standard
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment