diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 73628202..355dbfa5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -6,8 +6,43 @@ on: - release jobs: - build: + build-ios: runs-on: macos-12 + steps: + - name: -- Step 0 -- Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: branch + - name: -- Step 1 -- Checkout code + uses: actions/checkout@v2 + - name: -- Step 2 -- Setup node + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: -- Step 3 -- Install node dependencies + run: yarn install + - name: -- Step 4 -- Install ruby dependencies + run: bundle install + - name: -- Step 5 -- Run fastlane + env: + DEVELOPER_DIR: /Applications/Xcode_13.4.1.app/Contents/Developer + ENVIRONMENT: ${{ steps.branch.outputs.branch }} + LC_ALL: en_US.UTF-8 + LANG: en_US.UTF-8 + SENTRY_ORGANIZATION: ${{ secrets.SENTRY_ORGANIZATION }} + SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + FASTLANE_USER: ${{ secrets.FASTLANE_USER }} + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} + MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }} + MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }} + APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} + APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} + APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} + run: yarn app:build ios + + build-android: + runs-on: ubuntu-latest steps: - name: -- Step 0 -- Extract branch name shell: bash @@ -24,36 +59,50 @@ jobs: with: distribution: 'zulu' java-version: '11' - - name: -- Step 4 -- Use Expo action - uses: expo/expo-github-action@v7 - with: - expo-version: latest - token: ${{ secrets.EXPO_TOKEN }} - - name: -- Step 5 -- Install node dependencies + - name: -- Step 4 -- Install node dependencies run: yarn install - - name: -- Step 6 -- Install ruby dependencies + - name: -- Step 5 -- Install ruby dependencies run: bundle install - - name: -- Step 7 -- Run fastlane + - name: -- Step 6 -- Run fastlane env: - DEVELOPER_DIR: /Applications/Xcode_13.3.1.app/Contents/Developer ENVIRONMENT: ${{ steps.branch.outputs.branch }} LC_ALL: en_US.UTF-8 LANG: en_US.UTF-8 - SENTRY_ORGANIZATION: ${{ secrets.SENTRY_ORGANIZATION }} - SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} - FASTLANE_USER: ${{ secrets.FASTLANE_USER }} - MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} - MATCH_GIT_URL: ${{ secrets.MATCH_GIT_URL }} - MATCH_GIT_BASIC_AUTHORIZATION: ${{ secrets.MATCH_GIT_BASIC_AUTHORIZATION }} - APP_STORE_CONNECT_API_KEY_KEY_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }} - APP_STORE_CONNECT_API_KEY_ISSUER_ID: ${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }} - APP_STORE_CONNECT_API_KEY_KEY: ${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }} ANDROID_KEYSTORE: ${{ secrets.ANDROID_KEYSTORE }} ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }} ANDROID_KEYSTORE_ALIAS: ${{ secrets.ANDROID_KEYSTORE_ALIAS }} ANDROID_KEYSTORE_KEY_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_KEY_PASSWORD }} SUPPLY_JSON_KEY_DATA: ${{ secrets.SUPPLY_JSON_KEY_DATA }} + run: yarn app:build android + + create-release: + runs-on: ubuntu-latest + needs: [build-ios, build-android] + steps: + - name: -- Step 0 -- Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: branch + - name: -- Step 1 -- Checkout code + uses: actions/checkout@v2 + - name: -- Step 2 -- Setup node + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: -- Step 3 -- Use Expo action + uses: expo/expo-github-action@v7 + with: + expo-version: latest + token: ${{ secrets.EXPO_TOKEN }} + - name: -- Step 4 -- Install node dependencies + run: yarn install + - name: -- Step 5 -- Install ruby dependencies + run: bundle install + - name: -- Step 6 -- Run fastlane + env: + ENVIRONMENT: ${{ steps.branch.outputs.branch }} + LC_ALL: en_US.UTF-8 + LANG: en_US.UTF-8 GH_PAT_GET_RELEASE: ${{ secrets.GH_PAT_GET_RELEASE }} FL_GITHUB_RELEASE_API_BEARER: ${{ secrets.GITHUB_TOKEN }} - run: yarn app:build + run: yarn app:build release diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 19201aec..fd746971 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -1,10 +1,5 @@ -fastlane_version "2.203.0" skip_docs -ensure_env_vars( - env_vars: ["ENVIRONMENT", "SENTRY_ORGANIZATION", "SENTRY_PROJECT", "SENTRY_AUTH_TOKEN"] -) - VERSIONS = read_json( json_path: "./package.json" )[:versions] ENVIRONMENT = ENV["ENVIRONMENT"] VERSION = "#{VERSIONS[:major]}.#{VERSIONS[:minor]}" @@ -218,15 +213,32 @@ private_lane :build_android do end end -lane :build do +lane :ios do + releaseExists = get_github_release(url: GITHUB_REPO, version: "v#{VERSION}", api_token: ENV['GH_PAT_GET_RELEASE']) + if releaseExists + puts("Release #{GITHUB_RELEASE} exists. Continue with building React Native only.") + else + puts("Release #{GITHUB_RELEASE} does not exist.") + cocoapods(clean_install: true, podfile: "./ios/Podfile") + build_ios + end + rocket +end + +lane :android do releaseExists = get_github_release(url: GITHUB_REPO, version: "v#{VERSION}", api_token: ENV['GH_PAT_GET_RELEASE']) if releaseExists puts("Release #{GITHUB_RELEASE} exists. Continue with building React Native only.") else puts("Release #{GITHUB_RELEASE} does not exist. Create new release as well as new native build.") - cocoapods(clean_install: true, podfile: "./ios/Podfile") - build_ios build_android + end + rocket +end + +lane :release do + releaseExists = get_github_release(url: GITHUB_REPO, version: "v#{VERSION}", api_token: ENV['GH_PAT_GET_RELEASE']) + if !releaseExists case ENVIRONMENT when "candidate" github_release(prerelease: true) diff --git a/package.json b/package.json index 53b9592a..aa1d3a1c 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "android": "react-native run-android", "iphone": "react-native run-ios", "ipad": "react-native run-ios --simulator 'iPad mini (6th generation)'", - "app:build": "bundle exec fastlane build", + "app:build": "bundle exec fastlane", "release": "scripts/release.sh", "clean": "react-native-clean-project", "postinstall": "patch-package"