Skip to content

Instantly share code, notes, and snippets.

@JonnyBurger
Created April 28, 2019 20:02
Show Gist options
  • Save JonnyBurger/294c6027a0dc56199e749916d9f9ad08 to your computer and use it in GitHub Desktop.
Save JonnyBurger/294c6027a0dc56199e749916d9f9ad08 to your computer and use it in GitHub Desktop.
My CircleCI setup for React Native apps
version: 2
defaults: &defaults
working_directory: ~/project
jobs:
ios:
<<: *defaults
macos:
xcode: '10.1.0'
steps:
- checkout
- run:
name: Install dependencies
command: npm install --ignore-engines
- run:
name: Install bundle
command: bundle install
- run:
name: Build app
command: bundle exec fastlane ios ci
android:
<<: *defaults
docker:
- image: sarathc/circle-android-fastlane:api-25-0.0.1
steps:
- checkout
- run:
name: Install node
command: sudo curl https://nodejs.org/dist/v10.0.0/node-v10.0.0-linux-x64.tar.gz | sudo tar xzvf - --exclude CHANGELOG.md --exclude LICENSE --exclude README.md --strip-components 1 -C /usr/local/
- run:
name: Upgrade NPM
command: sudo npm install -g npm
- run:
name: Install dependencies
command: npm ci --ignore-engines
- run:
name: Set gradle.properties
command: |
mkdir -p ~/.gradle
echo "MYAPP_RELEASE_STORE_FILE=$MYAPP_RELEASE_STORE_FILE" >> ~/.gradle/gradle.properties
echo "MYAPP_RELEASE_KEY_ALIAS=$MYAPP_RELEASE_KEY_ALIAS" >> ~/.gradle/gradle.properties
echo "MYAPP_RELEASE_STORE_PASSWORD=$MYAPP_RELEASE_STORE_PASSWORD" >> ~/.gradle/gradle.properties
echo "MYAPP_RELEASE_KEY_PASSWORD=$MYAPP_RELEASE_KEY_PASSWORD" >> ~/.gradle/gradle.properties
- run:
name: Put keystore
command: echo "$KEYSTORE" | base64 -d > android/app/anysticker.keystore
- run:
name: Set supplyfile
command: echo "$SUPPLYFILE" | base64 -d > android/supplyfile.json
- run: yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses || echo "okay okay"
- run:
name: Bundle android
command: npm run bundle-android
- run:
name: Install bundle
command: bundle install
- run:
name: Build app
command: bundle exec fastlane android ci
- store_artifacts:
path: android/app/build/outputs/apk/release/app-release.apk
workflows:
version: 2
build:
jobs:
- hold-ios:
type: approval
- hold-android:
type: approval
- ios:
requires:
- hold-ios
- android:
requires:
- hold-android
fastlane_version '2.105.2'
before_all do
ensure_git_branch
git_pull
end
platform :ios do
desc 'Fetch certificates and provisioning profiles'
lane :certificates do
match(
app_identifier: 'jonnyburger.anysticker',
type: 'appstore',
username: "[email protected]",
git_url: "https://github.com/JonnyBurger/fake-repository-with-ios-certificates",
team_id: "ABCDEFFHIJK",
skip_docs: true
)
end
desc 'Build the iOS application.'
private_lane :build do
certificates
increment_build_number(
xcodeproj: './ios/anysticker.xcodeproj',
build_number: latest_testflight_build_number(
username: '[email protected]',
team_name: "Jonathan Burger",
app_identifier: 'jonnyburger.anysticker'
).to_i + 1
)
gym(
scheme: 'anysticker',
project: './ios/anysticker.xcodeproj',
configuration: "Release",
export_method: "app-store"
)
end
desc 'Ship to Testflight.'
lane :beta do
build
pilot(username: '[email protected]', team_name: "Jonathan Burger", skip_waiting_for_build_processing: true)
end
desc 'Build on CircleCI'
lane :ci do
setup_circle_ci
beta
end
end
platform :android do
desc 'Ship to Playstore Beta.'
lane :ci do
gradle(task: 'clean', project_dir: 'android/')
gradle(task: 'assemble', build_type: 'Release', project_dir: 'android/', properties: {
versionCode: [google_play_track_version_codes(
track: 'release',
json_key: 'android/supplyfile.json',
package_name: 'jonnyburger.anysticker',
).max || 0, google_play_track_version_codes(
track: 'beta',
json_key: 'android/supplyfile.json',
package_name: 'jonnyburger.anysticker',
).max || 0].max + 1
})
supply(track: 'beta', track_promote_to: 'beta', json_key: 'android/supplyfile.json', package_name: 'jonnyburger.anysticker')
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment