Fix/deployment #711
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI/CD | |
# JavaScript CI and iOS, Android, and Codepush deployment | |
on: | |
push: | |
branches: [develop, master] | |
pull_request: | |
branches: [develop, master] | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
env: | |
ENVFILE: ${{ (github.ref == 'refs/heads/master' || github.base_ref == 'refs/heads/master') && '.env.production' || '.env.staging' }} | |
permissions: | |
id-token: write | |
contents: read | |
jobs: | |
split-tests: | |
runs-on: ubuntu-latest | |
outputs: | |
test-chunks: ${{ steps['set-test-chunks'].outputs['test-chunks'] }} | |
test-chunk-ids: ${{ steps['set-test-chunk-ids'].outputs['test-chunk-ids'] }} | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- id: set-test-chunks | |
name: Set Chunks | |
run: echo "::set-output name=test-chunks::$(yarn --silent test --listTests --json | jq -cM '[_nwise(length / 4 | floor)]')" | |
- id: set-test-chunk-ids | |
name: Set Chunk IDs | |
run: echo "::set-output name=test-chunk-ids::$(echo $CHUNKS | jq -cM 'to_entries | map(.key)')" | |
env: | |
CHUNKS: ${{ steps['set-test-chunks'].outputs['test-chunks'] }} | |
test: | |
runs-on: ubuntu-latest | |
name: test (chunk ${{ matrix.chunk }}) | |
needs: | |
- split-tests | |
strategy: | |
matrix: | |
chunk: ${{ fromJson(needs.split-tests.outputs['test-chunk-ids']) }} | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
fetch-depth: 2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Run GraphQL Codegen | |
run: | | |
yarn gql:codegen | |
yarn gql:schema | |
- name: π§ͺ Test (chunk ${{ matrix.chunk }}) | |
run: echo $CHUNKS | jq '.[${{ matrix.chunk }}] | .[] | @text' | xargs yarn test:coverage --ci | |
env: | |
CHUNKS: ${{ needs.split-tests.outputs['test-chunks'] }} | |
- name: Codecov | |
run: bash <(curl -s https://codecov.io/bash) | |
eslint: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Run GraphQL Codegen | |
run: | | |
yarn gql:codegen | |
yarn gql:schema | |
- name: π¨ ESLint | |
run: yarn lint | |
typescript: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Run GraphQL Codegen | |
run: | | |
yarn gql:codegen | |
yarn gql:schema | |
- name: β TypeScript lint | |
run: yarn lint:ts | |
prettier: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Prettier Check | |
run: yarn prettier:check | |
onesky-upload: | |
runs-on: ubuntu-latest | |
needs: [test, eslint, typescript, prettier] | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ secrets.AWS_IAM_ONESKY_ROLE_ARN }} | |
aws-region: us-east-1 | |
- name: Import OneSky Keys | |
uses: dkershner6/aws-ssm-getparameters-action@v1 | |
with: | |
parameterPairs: | | |
/shared/onesky/PUBLIC_KEY = ONESKY_API_KEY, | |
/shared/onesky/SECRET_KEY = ONESKY_SECRET_KEY | |
- name: β πΌ OneSky Upload | |
run: yarn onesky:upload | |
ios-codepush: | |
runs-on: ubuntu-latest | |
needs: [test, eslint, typescript, prettier] | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Run GraphQL Codegen | |
run: | | |
yarn gql:codegen | |
yarn gql:schema | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ secrets.AWS_IAM_ONESKY_ROLE_ARN }} | |
aws-region: us-east-1 | |
- name: Import OneSky Keys | |
uses: dkershner6/aws-ssm-getparameters-action@v1 | |
with: | |
parameterPairs: | | |
/shared/onesky/PUBLIC_KEY = ONESKY_API_KEY, | |
/shared/onesky/SECRET_KEY = ONESKY_SECRET_KEY | |
- name: β OneSky Download | |
run: yarn onesky:download | |
- name: ποΈππ Build and Codepush iOS | |
env: | |
APPCENTER_TOKEN: ${{ secrets.APPCENTER_TOKEN }} | |
# Codepush can't figure out how to parse MARKETING_VERSION https://github.com/microsoft/react-native-code-push/issues/1665 https://stackoverflow.com/a/58769925/665224 | |
run: yarn codepush-ios-staging --token "$APPCENTER_TOKEN" --sourcemap-output sourcemap.ios.js --extra-bundler-option="--sourcemap-sources-root" --extra-bundler-option="./" --description "#${{ github.run_id }} ${{ github.sha }} | ${{ github.event.head_commit.message }}" -t `sed -n '/MARKETING_VERSION/{s/MARKETING_VERSION = //;s/;//;s/^[[:space:]]*//;p;q;}' ./ios/MissionHub.xcodeproj/project.pbxproj` | |
- name: πΌππΊοΈ Upload iOS sourcemaps to Rollbar | |
env: | |
ROLLBAR_POST_SERVER_ITEM_TOKEN: ${{ secrets.ROLLBAR_POST_SERVER_ITEM_TOKEN }} | |
run: | | |
curl https://api.rollbar.com/api/1/sourcemap \ | |
-F access_token=$ROLLBAR_POST_SERVER_ITEM_TOKEN \ | |
-F version=${{ github.sha }}.ios \ | |
-F minified_url=http://reactnativehost/main.jsbundle \ | |
-F [email protected] | |
android-codepush: | |
runs-on: ubuntu-latest | |
needs: [test, eslint, typescript, prettier] | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Run GraphQL Codegen | |
run: | | |
yarn gql:codegen | |
yarn gql:schema | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ secrets.AWS_IAM_ONESKY_ROLE_ARN }} | |
aws-region: us-east-1 | |
- name: Import OneSky Keys | |
uses: dkershner6/aws-ssm-getparameters-action@v1 | |
with: | |
parameterPairs: | | |
/shared/onesky/PUBLIC_KEY = ONESKY_API_KEY, | |
/shared/onesky/SECRET_KEY = ONESKY_SECRET_KEY | |
- name: β OneSky Download | |
run: yarn onesky:download | |
- name: ποΈππ€ Build and Codepush Android | |
env: | |
APPCENTER_TOKEN: ${{ secrets.APPCENTER_TOKEN }} | |
run: yarn codepush-android-staging --token "$APPCENTER_TOKEN" --sourcemap-output sourcemap.android.js --extra-bundler-option="--sourcemap-sources-root" --extra-bundler-option="./" --description "#${{ github.run_id }} ${{ github.sha }} | ${{ github.event.head_commit.message }}" | |
- name: πΌπ€πΊοΈ Upload Android sourcemaps to Rollbar | |
env: | |
ROLLBAR_POST_SERVER_ITEM_TOKEN: ${{ secrets.ROLLBAR_POST_SERVER_ITEM_TOKEN }} | |
run: | | |
curl https://api.rollbar.com/api/1/sourcemap \ | |
-F access_token=$ROLLBAR_POST_SERVER_ITEM_TOKEN \ | |
-F version=${{ github.sha }}.android \ | |
-F minified_url=http://reactnativehost/main.jsbundle \ | |
-F [email protected] | |
ios-deploy: | |
runs-on: macos-latest | |
# needs: [test, eslint, typescript, prettier] | |
# if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
steps: | |
- uses: actions/checkout@v2 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Run GraphQL Codegen | |
run: | | |
yarn gql:codegen | |
yarn gql:schema | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ secrets.AWS_IAM_ONESKY_ROLE_ARN }} | |
aws-region: us-east-1 | |
- name: Import OneSky Keys | |
uses: dkershner6/aws-ssm-getparameters-action@v1 | |
with: | |
parameterPairs: | | |
/shared/onesky/PUBLIC_KEY = ONESKY_API_KEY, | |
/shared/onesky/SECRET_KEY = ONESKY_SECRET_KEY | |
- name: β OneSky Download | |
run: yarn onesky:download | |
- name: π Setup Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- name: β Add Commit SHA to ENVFILE | |
run: echo "COMMIT_SHA=$GITHUB_SHA" >> ./.env.production | |
- name: π Configure GitHub login | |
run: echo -e "machine github.com\n login $CI_USER_TOKEN" >> ~/.netrc | |
env: | |
CI_USER_TOKEN: ${{ secrets.CI_USER_TOKEN}} | |
- name: Import App Store Connect API Key | |
env: | |
APP_STORE_CONNECT_API_JSON_PAYLOAD: ${{ secrets.APP_STORE_CONNECT_API_JSON_PAYLOAD }} | |
run: echo $APP_STORE_CONNECT_API_JSON_PAYLOAD > ios/fastlane/AppleAppStoreApi.json | |
- name: Increment Xcode Project Build Number | |
uses: maierj/[email protected] | |
with: | |
lane: ios cru_shared_lane_increment_xcode_project_build_number | |
subdirectory: ios | |
- name: ποΈππ Build and push to Testflight | |
uses: maierj/[email protected] | |
with: | |
lane: ios cru_shared_lane_build_and_deploy_for_testflight_release is_running_in_ci:true | |
subdirectory: ios | |
env: | |
MATCH_GIT_BASIC_AUTHORIZATION_PAT: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION_PAT }} | |
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} | |
- name: Archive Fastlane Gym Logs | |
if: always() | |
uses: actions/upload-artifact@v3 | |
with: | |
name: fastlane-gym-logs | |
path: '/Users/runner/Library/Logs/gym/MissionHub-MissionHub.log' | |
android-deploy: | |
runs-on: ubuntu-latest | |
needs: [test, eslint, typescript, prettier] | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
# Used for computing the Android versionCode https://github.com/CruGlobal/missionhub-react-native/blob/4c37730c21baeea3a304702b1bbbbce3d11f320d/android/app/build.gradle#L145 | |
fetch-depth: 0 | |
- uses: actions/setup-node@v2 | |
with: | |
node-version: 14 | |
- uses: egordm/gha-yarn-node-cache@v1 | |
- name: π¦ Install Dependencies | |
run: yarn | |
- name: π Run GraphQL Codegen | |
run: | | |
yarn gql:codegen | |
yarn gql:schema | |
- name: Configure AWS credentials | |
uses: aws-actions/configure-aws-credentials@v2 | |
with: | |
role-to-assume: ${{ secrets.AWS_IAM_ONESKY_ROLE_ARN }} | |
aws-region: us-east-1 | |
- name: Import OneSky Keys | |
uses: dkershner6/aws-ssm-getparameters-action@v1 | |
with: | |
parameterPairs: | | |
/shared/onesky/PUBLIC_KEY = ONESKY_API_KEY, | |
/shared/onesky/SECRET_KEY = ONESKY_SECRET_KEY | |
- name: β OneSky Download | |
run: yarn onesky:download | |
- name: β Set up JDK 11 | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'temurin' | |
java-version: 11 | |
- name: Setup Android SDK | |
uses: android-actions/setup-android@v2 | |
- name: π Setup Ruby | |
uses: ruby/setup-ruby@v1 | |
with: | |
bundler-cache: true | |
- name: β Add Commit SHA to ENVFILE | |
run: echo "COMMIT_SHA=$GITHUB_SHA" >> ./.env.production | |
- name: π Import GooglePlayAPI.json | |
env: | |
GOOGLE_PLAY_API_KEY: ${{ secrets.GOOGLE_PLAY_API_KEY }} | |
run: echo $GOOGLE_PLAY_API_KEY > ./android/fastlane/GooglePlayAPI.json | |
- name: ποΈππ€ Build and push to Android Beta | |
uses: maierj/[email protected] | |
with: | |
lane: android beta | |
subdirectory: android | |
env: | |
TRAVIS_BRANCH: ${{ github.ref }} | |
TRAVIS_TAG: ${{ github.ref }} | |
TRAVIS_COMMIT_MESSAGE: ${{ github.event.head_commit.message }} | |
TRAVIS_BUILD_NUMBER: ${{ github.run_id }} | |
GOOGLE_PLAY_UPLOAD_KEY_PASSWORD: ${{ secrets.GOOGLE_PLAY_UPLOAD_KEY_PASSWORD }} | |
SLACK_URL: ${{ secrets.SLACK_URL }} |