diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index ffc10dc2e2..0000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,617 +0,0 @@ -version: 2.1 -orbs: - owasp: entur/owasp@0.0.10 - node: circleci/node@5.0.3 - -executors: - android: - parameters: - resource_class: - default: xlarge - type: string - environment: - NODE_OPTIONS: --max_old_space_size=12000 - NODE_ENV: production - BABEL_ENV: production - docker: - - image: cimg/android:2022.09.2-node - working_directory: ~/mattermost-mobile - resource_class: <> - - ios: - parameters: - resource_class: - default: medium - type: string - environment: - NODE_OPTIONS: --max_old_space_size=12000 - NODE_ENV: production - BABEL_ENV: production - macos: - xcode: "14.2.0" - working_directory: ~/mattermost-mobile - shell: /bin/bash --login -o pipefail - resource_class: <> - -commands: - checkout-private: - description: "Checkout the private repo with build env vars" - steps: - - add_ssh_keys: - fingerprints: - - "03:1c:a7:07:35:bc:57:e4:1d:6c:e1:2c:4b:be:09:6d" - - run: - name: Clone the mobile private repo - command: git clone git@github.com:mattermost/mattermost-mobile-private.git ~/mattermost-mobile-private - - fastlane-dependencies: - description: "Get Fastlane dependencies" - parameters: - for: - type: string - steps: - - restore_cache: - name: Restore Fastlane cache - key: v1-gems-<< parameters.for >>-{{ checksum "fastlane/Gemfile.lock" }}-{{ arch }} - - run: - working_directory: fastlane - name: Download Fastlane dependencies - command: bundle install --path vendor/bundle - - save_cache: - name: Save Fastlane cache - key: v1-gems-<< parameters.for >>-{{ checksum "fastlane/Gemfile.lock" }}-{{ arch }} - paths: - - fastlane/vendor/bundle - - gradle-dependencies: - description: "Get Gradle dependencies" - steps: - - restore_cache: - name: Restore Gradle cache - key: v1-gradle-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} - - run: - working_directory: android - name: Download Gradle dependencies - command: ./gradlew dependencies - - save_cache: - name: Save Gradle cache - paths: - - ~/.gradle - key: v1-gradle-{{ checksum "android/build.gradle" }}-{{ checksum "android/app/build.gradle" }} - - assets: - description: "Generate app assets" - steps: - - restore_cache: - name: Restore assets cache - key: v1-assets-{{ checksum "assets/base/config.json" }}-{{ arch }} - - run: - name: Generate assets - command: node ./scripts/generate-assets.js - - run: - name: Compass Icons - environment: - COMPASS_ICONS: "node_modules/@mattermost/compass-icons/font/compass-icons.ttf" - command: | - cp "$COMPASS_ICONS" "assets/fonts/" - cp "$COMPASS_ICONS" "android/app/src/main/assets/fonts" - - save_cache: - name: Save assets cache - key: v1-assets-{{ checksum "assets/base/config.json" }}-{{ arch }} - paths: - - dist - - npm-dependencies: - description: "Get JavaScript dependencies" - steps: - - node/install: - node-version: '18.7.0' - - restore_cache: - name: Restore npm cache - key: v2-npm-{{ checksum "package.json" }}-{{ arch }} - - run: - name: Getting JavaScript dependencies - command: | - NODE_ENV=development npm ci --ignore-scripts - node node_modules/\@sentry/cli/scripts/install.js - - save_cache: - name: Save npm cache - key: v2-npm-{{ checksum "package.json" }}-{{ arch }} - paths: - - node_modules - - run: - name: "Patch dependencies" - command: npx patch-package - - pods-dependencies: - description: "Get cocoapods dependencies" - steps: - - restore_cache: - name: Restore cocoapods specs and pods - key: v1-cocoapods-{{ checksum "ios/Podfile.lock" }}-{{ arch }} - - run: - name: iOS gems - command: npm run ios-gems - - run: - name: Getting cocoapods dependencies - command: npm run pod-install - - save_cache: - name: Save cocoapods specs and pods cache - key: v1-cocoapods-{{ checksum "ios/Podfile.lock" }}-{{ arch }} - paths: - - ios/Pods - - ~/.cocoapods - - build-android: - description: "Build the android app" - steps: - - checkout: - path: ~/mattermost-mobile - - checkout-private - - npm-dependencies - - assets - - fastlane-dependencies: - for: android - - gradle-dependencies - - run: - name: Append Keystore to build Android - command: | - cp ~/mattermost-mobile-private/android/${STORE_FILE} android/app/${STORE_FILE} - echo "" | tee -a android/gradle.properties > /dev/null - echo MATTERMOST_RELEASE_STORE_FILE=${STORE_FILE} | tee -a android/gradle.properties > /dev/null - echo ${STORE_ALIAS} | tee -a android/gradle.properties > /dev/null - echo ${STORE_PASSWORD} | tee -a android/gradle.properties > /dev/null - - run: - name: Jetify android libraries - command: ./node_modules/.bin/jetify - - run: - working_directory: fastlane - name: Run fastlane to build android - no_output_timeout: 30m - command: export TERM=xterm && bundle exec fastlane android build - - build-ios: - description: "Build the iOS app" - steps: - - checkout: - path: ~/mattermost-mobile - - npm-dependencies - - pods-dependencies - - assets - - fastlane-dependencies: - for: ios - - run: - working_directory: fastlane - name: Run fastlane to build iOS - no_output_timeout: 30m - command: | - HOMEBREW_NO_AUTO_UPDATE=1 brew install watchman - export TERM=xterm && bundle exec fastlane ios build - - deploy-to-store: - description: "Deploy build to store" - parameters: - task: - type: string - target: - type: string - file: - type: string - env: - type: string - steps: - - attach_workspace: - at: ~/ - - run: - name: <> - working_directory: fastlane - command: <> bundle exec fastlane <> deploy file:$HOME/mattermost-mobile/<> - - persist: - description: "Persist mattermost-mobile directory" - steps: - - persist_to_workspace: - root: ~/ - paths: - - mattermost-mobile* - - save: - description: "Save binaries artifacts" - parameters: - filename: - type: string - steps: - - run: - name: Copying artifacts - command: | - mkdir /tmp/artifacts; - cp ~/mattermost-mobile/<> /tmp/artifacts; - - store_artifacts: - path: /tmp/artifacts - -jobs: - test: - working_directory: ~/mattermost-mobile - docker: - - image: cimg/node:16.14.2 - steps: - - checkout: - path: ~/mattermost-mobile - - npm-dependencies - - assets - - run: - name: Check styles - command: npm run check - - run: - name: Running Tests - command: npm test - - run: - name: Check i18n - command: ./scripts/precommit/i18n.sh - - check-deps: - parameters: - cve_data_directory: - type: string - default: "~/.owasp/dependency-check-data" - working_directory: ~/mattermost-mobile - executor: owasp/default - environment: - version_url: "https://jeremylong.github.io/DependencyCheck/current.txt" - executable_url: "https://dl.bintray.com/jeremy-long/owasp/dependency-check-VERSION-release.zip" - steps: - - checkout - - restore_cache: - name: Restore npm cache - key: v2-npm-{{ checksum "package.json" }}-{{ arch }} - - run: - name: Checkout config - command: cd .. && git clone https://github.com/mattermost/security-automation-config - - run: - name: Install Go - command: sudo apt-get update && sudo apt-get install golang - - owasp/with_commandline: - steps: - # Taken from https://github.com/entur/owasp-orb/blob/master/src/%40orb.yml#L349-L361 - - owasp/generate_cache_keys: - cache_key: commmandline-default-cache-key-v7 - - owasp/restore_owasp_cache - - run: - name: Update OWASP Dependency-Check Database - command: | - if ! ~/.owasp/dependency-check/bin/dependency-check.sh --data << parameters.cve_data_directory >> --updateonly; then - # Update failed, probably due to a bad DB version; delete cached DB and try again - rm -rv ~/.owasp/dependency-check-data/*.db - ~/.owasp/dependency-check/bin/dependency-check.sh --data << parameters.cve_data_directory >> --updateonly - fi - - owasp/store_owasp_cache: - cve_data_directory: <> - - run: - name: Run OWASP Dependency-Check Analyzer - command: | - ~/.owasp/dependency-check/bin/dependency-check.sh \ - --data << parameters.cve_data_directory >> --format ALL --noupdate --enableExperimental \ - --propertyfile ../security-automation-config/dependency-check/dependencycheck.properties \ - --suppression ../security-automation-config/dependency-check/suppression.xml \ - --suppression ../security-automation-config/dependency-check/suppression.$CIRCLE_PROJECT_REPONAME.xml \ - --scan './**/*' || true - - owasp/collect_reports: - persist_to_workspace: false - - run: - name: Post results to Mattermost - command: go run ../security-automation-config/dependency-check/post_results.go - - build-android-beta: - executor: android - steps: - - build-android - - persist - - save: - filename: "*.apk" - - build-android-release: - executor: android - steps: - - build-android - - persist - - save: - filename: "*.apk" - - build-android-pr: - executor: android - environment: - BRANCH_TO_BUILD: ${CIRCLE_BRANCH} - steps: - - build-android - - save: - filename: "*.apk" - - build-android-unsigned: - executor: android - steps: - - checkout: - path: ~/mattermost-mobile - - npm-dependencies - - assets - - fastlane-dependencies: - for: android - - gradle-dependencies - - run: - name: Jetify Android libraries - command: ./node_modules/.bin/jetify - - run: - working_directory: fastlane - name: Run fastlane to build unsigned android - no_output_timeout: 30m - command: bundle exec fastlane android unsigned - - persist - - save: - filename: "*.apk" - - build-ios-beta: - executor: - name: ios - resource_class: large - steps: - - build-ios - - persist - - save: - filename: "*.ipa" - - build-ios-release: - executor: ios - steps: - - build-ios - - persist - - save: - filename: "*.ipa" - - build-ios-pr: - executor: ios - environment: - BRANCH_TO_BUILD: ${CIRCLE_BRANCH} - steps: - - build-ios - - save: - filename: "*.ipa" - - build-ios-unsigned: - executor: ios - steps: - - checkout: - path: ~/mattermost-mobile - - npm-dependencies - - pods-dependencies - - assets - - fastlane-dependencies: - for: ios - - run: - working_directory: fastlane - name: Run fastlane to build unsigned iOS - no_output_timeout: 30m - command: | - HOMEBREW_NO_AUTO_UPDATE=1 brew install watchman - bundle exec fastlane ios unsigned - - persist_to_workspace: - root: ~/ - paths: - - mattermost-mobile/*.ipa - - save: - filename: "*.ipa" - - build-ios-simulator: - executor: ios - steps: - - checkout: - path: ~/mattermost-mobile - - npm-dependencies - - pods-dependencies - - assets - - fastlane-dependencies: - for: ios - - run: - working_directory: fastlane - name: Run fastlane to build unsigned x86_64 iOS app for iPhone simulator - no_output_timeout: 30m - command: | - HOMEBREW_NO_AUTO_UPDATE=1 brew install watchman - bundle exec fastlane ios simulator - - persist_to_workspace: - root: ~/ - paths: - - mattermost-mobile/Mattermost-simulator-x86_64.app.zip - - save: - filename: "Mattermost-simulator-x86_64.app.zip" - - deploy-android-release: - executor: - name: android - resource_class: medium - steps: - - deploy-to-store: - task: "Deploy to Google Play" - target: android - file: "*.apk" - env: "SUPPLY_TRACK=beta" - - deploy-android-beta: - executor: - name: android - resource_class: medium - steps: - - deploy-to-store: - task: "Deploy to Google Play" - target: android - file: "*.apk" - env: "SUPPLY_TRACK=alpha" - - deploy-ios-release: - executor: ios - steps: - - deploy-to-store: - task: "Deploy to TestFlight" - target: ios - file: "*.ipa" - env: "" - - deploy-ios-beta: - executor: ios - steps: - - deploy-to-store: - task: "Deploy to TestFlight" - target: ios - file: "*.ipa" - env: "" - - github-release: - executor: - name: android - resource_class: medium - steps: - - attach_workspace: - at: ~/ - - run: - name: Create GitHub release - working_directory: fastlane - command: bundle exec fastlane github - -workflows: - version: 2 - build: - jobs: - - test - # - check-deps: - # context: sast-webhook - # requires: - # - test - - - build-android-release: - context: mattermost-mobile-android-release - requires: - - test - filters: - branches: - only: - - /^build-release-\d+$/ - - /^build-android-release-\d+$/ - - deploy-android-release: - context: mattermost-mobile-android-release - requires: - - build-android-release - filters: - branches: - only: - - /^build-release-\d+$/ - - /^build-android-release-\d+$/ - - - build-android-beta: - context: mattermost-mobile-android-beta - filters: - branches: - only: - - /^build-\d+$/ - - /^build-android-\d+$/ - - /^build-android-beta-\d+$/ - - deploy-android-beta: - context: mattermost-mobile-android-beta - requires: - - build-android-beta - filters: - branches: - only: - - /^build-\d+$/ - - /^build-android-\d+$/ - - /^build-android-beta-\d+$/ - - - build-ios-release: - context: mattermost-mobile-ios-release - requires: - - test - filters: - branches: - only: - - /^build-release-\d+$/ - - /^build-ios-release-\d+$/ - - deploy-ios-release: - context: mattermost-mobile-ios-release - requires: - - build-ios-release - filters: - branches: - only: - - /^build-release-\d+$/ - - /^build-ios-release-\d+$/ - - - build-ios-beta: - context: mattermost-mobile-ios-beta - filters: - branches: - only: - - /^build-\d+$/ - - /^build-ios-\d+$/ - - /^build-ios-beta-\d+$/ - - deploy-ios-beta: - context: mattermost-mobile-ios-beta - requires: - - build-ios-beta - filters: - branches: - only: - - /^build-\d+$/ - - /^build-ios-\d+$/ - - /^build-ios-beta-\d+$/ - - - build-android-pr: - context: mattermost-mobile-android-pr - requires: - - test - filters: - branches: - only: /^(build|android)-pr-.*/ - - build-ios-pr: - context: mattermost-mobile-ios-pr - requires: - - test - filters: - branches: - only: /^(build|ios)-pr-.*/ - - - build-android-unsigned: - context: mattermost-mobile-unsigned - requires: - - test - filters: - tags: - only: /^v(\d+\.)(\d+\.)(\d+)(.*)?$/ - branches: - only: unsigned - - build-ios-unsigned: - context: mattermost-mobile-unsigned - requires: - - test - filters: - tags: - only: /^v(\d+\.)(\d+\.)(\d+)(.*)?$/ - branches: - only: unsigned - - build-ios-simulator: - context: mattermost-mobile-unsigned - requires: - - test - filters: - branches: - only: - - /^build-\d+$/ - - /^build-release-\d+$/ - - /^build-ios-sim-\d+$/ - - - github-release: - context: mattermost-mobile-unsigned - requires: - - build-android-unsigned - - build-ios-unsigned - filters: - tags: - only: /^v(\d+\.)(\d+\.)(\d+)(.*)?$/ - branches: - only: unsigned diff --git a/.github/actions/prepare-android-build/action.yaml b/.github/actions/prepare-android-build/action.yaml new file mode 100644 index 0000000000..44dab693b7 --- /dev/null +++ b/.github/actions/prepare-android-build/action.yaml @@ -0,0 +1,49 @@ +name: prepare-android-build +description: Action to prepare environment for android build + +inputs: + sign: + description: Flag to enable android package signing + default: "true" + +runs: + using: composite + steps: + - name: ci/prepare-mobile-build + uses: ./.github/actions/prepare-mobile-build + + # Disable this since we are not caching anything for now + # - name: ci/install-gradle-dependencies + # shell: bash + # working-directory: android + # run: | + # echo "::group::install-gradle-dependencies" + # ./gradlew dependencies + # echo "::endgroup::" + + - name: ci/jetify-android-libraries + shell: bash + run: | + echo "::group::jetify-android-libraries" + ./node_modules/.bin/jetify + echo "::endgroup::" + + - name: ci/checkout-private-repo + if: ${{ inputs.sign == 'true' }} + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + with: + repository: mattermost/mattermost-mobile-private + token: ${{ env.MATTERMOST_BUILD_GH_TOKEN }} + path: ${{ github.workspace }}/mattermost-mobile-private + + - name: ci/append-keystore-to-android-build-for-signing + if: ${{ inputs.sign == 'true' }} + shell: bash + run: | + echo "::group::append-keystore-to-android-build-for-signing" + cp ${{ github.workspace }}/mattermost-mobile-private/android/${STORE_FILE} android/app/${STORE_FILE} + echo "" | tee -a android/gradle.properties > /dev/null + echo MATTERMOST_RELEASE_STORE_FILE=${STORE_FILE} | tee -a android/gradle.properties > /dev/null + echo ${STORE_ALIAS} | tee -a android/gradle.properties > /dev/null + echo ${STORE_PASSWORD} | tee -a android/gradle.properties > /dev/null + echo "::endgroup::" diff --git a/.github/actions/prepare-ios-build/action.yaml b/.github/actions/prepare-ios-build/action.yaml new file mode 100644 index 0000000000..9c4a1dbb77 --- /dev/null +++ b/.github/actions/prepare-ios-build/action.yaml @@ -0,0 +1,25 @@ +name: prepare-ios-build +description: Action to prepare environment for ios build + +runs: + using: composite + steps: + - name: ci/install-os-deps + env: + HOMEBREW_NO_AUTO_UPDATE: "1" + shell: bash + run: | + echo "::group::install-os-deps" + brew install watchman + echo "::endgroup::" + + - name: ci/prepare-mobile-build + uses: ./.github/actions/prepare-mobile-build + + - name: ci/install-pods-dependencies + shell: bash + run: | + echo "::group::install-pods-dependencies" + npm run ios-gems + npm run pod-install + echo "::endgroup::" diff --git a/.github/actions/prepare-mobile-build/action.yaml b/.github/actions/prepare-mobile-build/action.yaml new file mode 100644 index 0000000000..d45291dad6 --- /dev/null +++ b/.github/actions/prepare-mobile-build/action.yaml @@ -0,0 +1,20 @@ +name: prepare-mobile-build +description: Action to prepare environment for mobile build + +runs: + using: composite + steps: + - uses: ruby/setup-ruby@9669f3ee51dc3f4eda8447ab696b3ab19a90d14b # v1.144.0 + with: + ruby-version: "2.7.7" + + - name: ci/setup-fastlane-dependencies + shell: bash + run: | + echo "::group::setup-fastlane-dependencies" + bundle install + echo "::endgroup::" + working-directory: ./fastlane + + - name: ci/prepare-node-deps + uses: ./.github/actions/prepare-node-deps diff --git a/.github/actions/prepare-node-deps/action.yaml b/.github/actions/prepare-node-deps/action.yaml new file mode 100644 index 0000000000..22967d7d66 --- /dev/null +++ b/.github/actions/prepare-node-deps/action.yaml @@ -0,0 +1,46 @@ +name: deps +description: Common deps for mobile repo + +runs: + using: composite + steps: + - name: ci/setup-node + uses: actions/setup-node@64ed1c7eab4cce3362f8c340dee64e5eaeef8f7c # v3.6.0 + with: + node-version: "${{ env.NODE_VERSION }}" + cache: "npm" + cache-dependency-path: package-lock.json + + - name: ci/install-npm-dependencies + shell: bash + env: + NODE_ENV: development + run: | + echo "::group::install-npm-dependencies" + npm ci --ignore-scripts + node node_modules/\@sentry/cli/scripts/install.js + echo "::endgroup::" + + - name: ci/patch-npm-dependencies + shell: bash + run: | + echo "::group::patch-npm-dependencies" + npx patch-package + echo "::endgroup::" + + - name: ci/generate-assets + shell: bash + run: | + echo "::group::generate-assets" + node ./scripts/generate-assets.js + echo "::endgroup::" + + - name: ci/import-compass-icon + shell: bash + env: + COMPASS_ICONS: "node_modules/@mattermost/compass-icons/font/compass-icons.ttf" + run: | + echo "::group::import-compass-icon" + cp "$COMPASS_ICONS" "assets/fonts/" + cp "$COMPASS_ICONS" "android/app/src/main/assets/fonts" + echo "::endgroup::" diff --git a/.github/actions/test/action.yaml b/.github/actions/test/action.yaml new file mode 100644 index 0000000000..4ee3d61c3e --- /dev/null +++ b/.github/actions/test/action.yaml @@ -0,0 +1,27 @@ +name: test +description: Common tests for mobile repo + +runs: + using: composite + steps: + - name: ci/prepare-node-deps + uses: ./.github/actions/prepare-node-deps + + - name: ci/check-styles + shell: bash + run: | + echo "::group::check-styles" + npm run check + echo "::endgroup::" + - name: ci/run-tests + shell: bash + run: | + echo "::group::run-tests" + npm test + echo "::endgroup::" + - name: ci/check-i18n + shell: bash + run: | + echo "::group::check-i18n" + ./scripts/precommit/i18n.sh + echo "::endgroup::" diff --git a/.github/workflows/build-android-beta.yml b/.github/workflows/build-android-beta.yml new file mode 100644 index 0000000000..4aa661dff1 --- /dev/null +++ b/.github/workflows/build-android-beta.yml @@ -0,0 +1,61 @@ +--- +name: build-android-beta + +on: + push: + branches: + - build-beta-[0-9]+ + - build-android-[0-9]+ + - build-android-beta-[0-9]+ + +env: + NODE_VERSION: 18.7.0 + TERM: xterm + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - name: ci/test + uses: ./.github/actions/test + + build-and-deploy-android-beta: + runs-on: ubuntu-22.04 + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-android-build + uses: ./.github/actions/prepare-android-build + env: + STORE_FILE: "${{ secrets.MM_MOBILE_STORE_FILE }}" + STORE_ALIAS: "${{ secrets.MM_MOBILE_STORE_ALIAS }}" + STORE_PASSWORD: "${{ secrets.MM_MOBILE_STORE_PASSWORD }}" + MATTERMOST_BUILD_GH_TOKEN: "${{ secrets.MATTERMOST_BUILD_GH_TOKEN }}" + + - name: ci/build-and-deploy-android-beta + env: + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_BETA_MATTERMOST_WEBHOOK_URL }}" + SENTRY_AUTH_TOKEN: "${{ secrets.MM_MOBILE_SENTRY_AUTH_TOKEN }}" + SENTRY_DSN_ANDROID: ${{ secrets.MM_MOBILE_BETA_SENTRY_DSN_ANDROID }} + SUPPLY_JSON_KEY: ${{ github.workspace }}/mattermost-mobile-private/android/mattermost-credentials.json + run: | + echo "::group::Build" + bundle exec fastlane android build --env android.beta + echo "::endgroup::" + echo "::group::Deploy to Play Store" + bundle exec fastlane android deploy file:"${{ github.workspace }}/*.apk" --env android.beta + echo "::endgroup::" + working-directory: ./fastlane + + - name: ci/upload-android-beta-build + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: android-build-beta-${{ github.run_id }} + path: "*.apk" diff --git a/.github/workflows/build-android-release.yml b/.github/workflows/build-android-release.yml new file mode 100644 index 0000000000..0dbdf6dfa7 --- /dev/null +++ b/.github/workflows/build-android-release.yml @@ -0,0 +1,60 @@ +--- +name: build-android-release + +on: + push: + branches: + - build-release-[0-9]+ + - build-release-android-[0-9]+ + +env: + NODE_VERSION: 18.7.0 + TERM: xterm + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - name: ci/test + uses: ./.github/actions/test + + build-and-deploy-android-release: + runs-on: ubuntu-22.04 + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-android-build + uses: ./.github/actions/prepare-android-build + env: + STORE_FILE: "${{ secrets.MM_MOBILE_STORE_FILE }}" + STORE_ALIAS: "${{ secrets.MM_MOBILE_STORE_ALIAS }}" + STORE_PASSWORD: "${{ secrets.MM_MOBILE_STORE_PASSWORD }}" + MATTERMOST_BUILD_GH_TOKEN: "${{ secrets.MATTERMOST_BUILD_GH_TOKEN }}" + + - name: ci/build-and-deploy-android-release + env: + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_RELEASE_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_RELEASE_AWS_SECRET_ACCESS_KEY }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_RELEASE_MATTERMOST_WEBHOOK_URL }}" + SENTRY_AUTH_TOKEN: "${{ secrets.MM_MOBILE_SENTRY_AUTH_TOKEN }}" + SENTRY_DSN_ANDROID: ${{ secrets.MM_MOBILE_RELEASE_SENTRY_DSN_ANDROID }} + SUPPLY_JSON_KEY: ${{ github.workspace }}/mattermost-mobile-private/android/mattermost-credentials.json + run: | + echo "::group::Build" + bundle exec fastlane android build --env android.release + echo "::endgroup::" + echo "::group::Deploy to Play Store" + bundle exec fastlane android deploy file:"${{ github.workspace }}/*.apk" --env android.release + echo "::endgroup::" + working-directory: ./fastlane + + - name: ci/upload-android-release-build + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: android-build-release-${{ github.run_id }} + path: "*.apk" diff --git a/.github/workflows/build-ios-beta.yml b/.github/workflows/build-ios-beta.yml new file mode 100644 index 0000000000..6ba35bd566 --- /dev/null +++ b/.github/workflows/build-ios-beta.yml @@ -0,0 +1,99 @@ +--- +name: build-ios-beta + +on: + push: + branches: + - build-beta-[0-9]+ + - build-beta-ios-[0-9]+ + - build-beta-sim-[0-9]+ + +env: + NODE_VERSION: 18.7.0 + TERM: xterm + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - name: ci/test + uses: ./.github/actions/test + + build-ios-simulator: + runs-on: macos-12 + if: ${{ !contains(github.ref_name, 'beta-ios') }} + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-ios-build + uses: ./.github/actions/prepare-ios-build + + - name: ci/build-ios-simulator + env: + TAG: "${{ github.ref_name }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_BETA_MATTERMOST_WEBHOOK_URL }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane ios simulator --env ios.simulator + working-directory: ./fastlane + + - name: ci/upload-ios-pr-simulator + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: ios-build-simulator-${{ github.run_id }} + path: Mattermost-simulator-x86_64.app.zip + + build-and-deploy-ios-beta: + runs-on: macos-12 + if: ${{ !contains(github.ref_name, 'beta-sim') }} + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/output-ssh-private-key + shell: bash + run: | + SSH_KEY_PATH=~/.ssh/id_ed25519 + mkdir -p ~/.ssh + echo -e '${{ secrets.MM_MOBILE_PRIVATE_DEPLOY_KEY }}' > ${SSH_KEY_PATH} + chmod 0600 ${SSH_KEY_PATH} + ssh-keygen -y -f ${SSH_KEY_PATH} > ${SSH_KEY_PATH}.pub + + - name: ci/prepare-ios-build + uses: ./.github/actions/prepare-ios-build + + - name: ci/build-and-deploy-ios-beta + env: + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_BETA_MATTERMOST_WEBHOOK_URL }}" + FASTLANE_TEAM_ID: "${{ secrets.MM_MOBILE_FASTLANE_TEAM_ID }}" + IOS_API_ISSUER_ID: "${{ secrets.MM_MOBILE_IOS_API_ISSUER_ID }}" + IOS_API_KEY: "${{ secrets.MM_MOBILE_IOS_API_KEY }}" + IOS_API_KEY_ID: "${{ secrets.MM_MOBILE_IOS_API_KEY_ID }}" + MATCH_GIT_URL: "${{ secrets.MM_MOBILE_MATCH_GIT_URL }}" + MATCH_PASSWORD: "${{ secrets.MM_MOBILE_MATCH_PASSWORD }}" + SENTRY_AUTH_TOKEN: "${{ secrets.MM_MOBILE_SENTRY_AUTH_TOKEN }}" + SENTRY_DSN_IOS: "${{ secrets.MM_MOBILE_BETA_SENTRY_DSN_IOS }}" + run: | + echo "::group::Build" + bundle exec fastlane ios build --env ios.beta + echo "::endgroup::" + echo "::group::Deploy to TestFlight" + bundle exec fastlane ios deploy file:"${{ github.workspace }}/*.ipa" --env ios.beta + echo "::endgroup::" + working-directory: ./fastlane + + - name: ci/upload-ios-beta-build + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: ios-build-beta-${{ github.run_id }} + path: "*.ipa" diff --git a/.github/workflows/build-ios-release.yml b/.github/workflows/build-ios-release.yml new file mode 100644 index 0000000000..2616500e80 --- /dev/null +++ b/.github/workflows/build-ios-release.yml @@ -0,0 +1,99 @@ +--- +name: build-ios-release + +on: + push: + branches: + - build-release-[0-9]+ + - build-release-ios-[0-9]+ + - build-release-sim-[0-9]+ + +env: + NODE_VERSION: 18.7.0 + TERM: xterm + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - name: ci/test + uses: ./.github/actions/test + + build-and-deploy-ios-release: + runs-on: macos-12 + if: ${{ !contains(github.ref_name, 'release-sim') }} + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-ios-build + uses: ./.github/actions/prepare-ios-build + + - name: ci/output-ssh-private-key + shell: bash + run: | + SSH_KEY_PATH=~/.ssh/id_ed25519 + mkdir -p ~/.ssh + echo -e '${{ secrets.MM_MOBILE_PRIVATE_DEPLOY_KEY }}' > ${SSH_KEY_PATH} + chmod 0600 ${SSH_KEY_PATH} + ssh-keygen -y -f ${SSH_KEY_PATH} > ${SSH_KEY_PATH}.pub + + - name: ci/build-and-deploy-ios-release + env: + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_RELEASE_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_RELEASE_AWS_SECRET_ACCESS_KEY }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_RELEASE_MATTERMOST_WEBHOOK_URL }}" + FASTLANE_TEAM_ID: "${{ secrets.MM_MOBILE_FASTLANE_TEAM_ID }}" + IOS_API_ISSUER_ID: "${{ secrets.MM_MOBILE_IOS_API_ISSUER_ID }}" + IOS_API_KEY: "${{ secrets.MM_MOBILE_IOS_API_KEY }}" + IOS_API_KEY_ID: "${{ secrets.MM_MOBILE_IOS_API_KEY_ID }}" + MATCH_GIT_URL: "${{ secrets.MM_MOBILE_MATCH_GIT_URL }}" + MATCH_PASSWORD: "${{ secrets.MM_MOBILE_MATCH_PASSWORD }}" + SENTRY_AUTH_TOKEN: "${{ secrets.MM_MOBILE_SENTRY_AUTH_TOKEN }}" + SENTRY_DSN_IOS: ${{ secrets.MM_MOBILE_RELEASE_SENTRY_DSN_IOS }} + run: | + echo "::group::Build" + bundle exec fastlane ios build --env ios.release + echo "::endgroup::" + echo "::group::Deploy to TestFlight" + bundle exec fastlane ios deploy file:"${{ github.workspace }}/*.ipa" --env ios.release + echo "::endgroup::" + working-directory: ./fastlane + + - name: ci/upload-ios-release-build + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: ios-build-release-${{ github.run_id }} + path: "*.ipa" + + build-ios-simulator: + runs-on: macos-12 + if: ${{ !contains(github.ref_name , 'release-ios') }} + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-ios-build + uses: ./.github/actions/prepare-ios-build + + - name: ci/build-ios-simulator + env: + TAG: "${{ github.ref_name }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_BETA_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_BETA_AWS_SECRET_ACCESS_KEY }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_BETA_MATTERMOST_WEBHOOK_URL }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane ios simulator --env ios.simulator + working-directory: ./fastlane + + - name: ci/upload-ios-pr-simulator + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: ios-build-simulator-${{ github.run_id }} + path: Mattermost-simulator-x86_64.app.zip diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml new file mode 100644 index 0000000000..8f6997109b --- /dev/null +++ b/.github/workflows/build-pr.yml @@ -0,0 +1,95 @@ +--- +name: build-pr +on: + push: + branches: + - build-pr-* + - build-pr-android-* + - build-pr-ios-* + +env: + NODE_VERSION: 18.7.0 + TERM: xterm + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - name: ci/test + uses: ./.github/actions/test + + build-ios-pr: + runs-on: macos-12 + if: ${{ !contains(github.ref_name, 'android') }} + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-ios-build + uses: ./.github/actions/prepare-ios-build + + - name: ci/output-ssh-private-key + shell: bash + run: | + SSH_KEY_PATH=~/.ssh/id_ed25519 + mkdir -p ~/.ssh + echo -e '${{ secrets.MM_MOBILE_PRIVATE_DEPLOY_KEY }}' > ${SSH_KEY_PATH} + chmod 0600 ${SSH_KEY_PATH} + ssh-keygen -y -f ${SSH_KEY_PATH} > ${SSH_KEY_PATH}.pub + + - name: ci/build-ios-pr + env: + BRANCH_TO_BUILD: "${{ github.ref_name }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_PR_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_PR_AWS_SECRET_ACCESS_KEY }}" + FASTLANE_TEAM_ID: "${{ secrets.MM_MOBILE_FASTLANE_TEAM_ID }}" + IOS_API_ISSUER_ID: "${{ secrets.MM_MOBILE_IOS_API_ISSUER_ID }}" + IOS_API_KEY: "${{ secrets.MM_MOBILE_IOS_API_KEY }}" + IOS_API_KEY_ID: "${{ secrets.MM_MOBILE_IOS_API_KEY_ID }}" + MATCH_GIT_URL: "${{ secrets.MM_MOBILE_MATCH_GIT_URL }}" + MATCH_PASSWORD: "${{ secrets.MM_MOBILE_MATCH_PASSWORD }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_PR_MATTERMOST_WEBHOOK_URL }}" + run: bundle exec fastlane ios build --env ios.pr + working-directory: ./fastlane + + - name: ci/upload-ios-pr-build + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: ios-build-pr-${{ github.run_id }} + path: "*.ipa" + + build-android-pr: + runs-on: ubuntu-22.04 + if: ${{ !contains(github.ref_name, 'ios') }} + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-android-build + uses: ./.github/actions/prepare-android-build + env: + STORE_FILE: "${{ secrets.MM_MOBILE_STORE_FILE }}" + STORE_ALIAS: "${{ secrets.MM_MOBILE_STORE_ALIAS }}" + STORE_PASSWORD: "${{ secrets.MM_MOBILE_STORE_PASSWORD }}" + MATTERMOST_BUILD_GH_TOKEN: "${{ secrets.MATTERMOST_BUILD_GH_TOKEN }}" + + - name: ci/build-android-pr + env: + BRANCH_TO_BUILD: "${{ github.ref_name }}" + AWS_ACCESS_KEY_ID: "${{ secrets.MM_MOBILE_PR_AWS_ACCESS_KEY_ID }}" + AWS_SECRET_ACCESS_KEY: "${{ secrets.MM_MOBILE_PR_AWS_SECRET_ACCESS_KEY }}" + MATTERMOST_WEBHOOK_URL: "${{ secrets.MM_MOBILE_PR_MATTERMOST_WEBHOOK_URL }}" + run: bundle exec fastlane android build --env android.pr + working-directory: ./fastlane + + - name: ci/upload-android-pr-build + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: android-build-pr-${{ github.run_id }} + path: "*.apk" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000000..33892f949b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,17 @@ +--- +name: ci +on: + pull_request: + +env: + NODE_VERSION: 18.7.0 + TERM: xterm + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - name: ci/test + uses: ./.github/actions/test diff --git a/.github/workflows/github-release.yml b/.github/workflows/github-release.yml new file mode 100644 index 0000000000..5b9a04f571 --- /dev/null +++ b/.github/workflows/github-release.yml @@ -0,0 +1,98 @@ +--- +name: github-release +on: + push: + tags: + - v[0-9]+.[0-9]+.[0-9]+* + +jobs: + test: + runs-on: ubuntu-22.04 + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + - name: ci/test + uses: ./.github/actions/test + + build-ios-unsigned: + runs-on: macos-12 + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-ios-build + uses: ./.github/actions/prepare-ios-build + + - name: ci/output-ssh-private-key + shell: bash + run: | + SSH_KEY_PATH=~/.ssh/id_ed25519 + mkdir -p ~/.ssh + echo -e '${{ secrets.MM_MOBILE_PRIVATE_DEPLOY_KEY }}' > ${SSH_KEY_PATH} + chmod 0600 ${SSH_KEY_PATH} + ssh-keygen -y -f ${SSH_KEY_PATH} > ${SSH_KEY_PATH}.pub + + - name: ci/build-ios-unsigned + env: + TAG: "${{ github.ref_name }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane ios unsigned + + - name: ci/upload-ios-unsigned + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: ios-build-unsigned-${{ github.run_id }} + path: "*.ipa" + + build-android-unsigned: + runs-on: ubuntu-22.04 + needs: + - test + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - name: ci/prepare-android-build + uses: ./.github/actions/prepare-android-build + with: + sign: false + + - name: ci/build-android-beta + env: + TAG: "${{ github.ref_name }}" + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane android unsigned + + - name: ci/upload-android-unsigned-build + uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 + with: + name: android-build-unsigned-${{ github.run_id }} + path: "*.apk" + + release: + runs-on: ubuntu-22.04 + needs: + - build-ios-unsigned + - build-android-unsigned + steps: + - name: ci/checkout-repo + uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0 + + - uses: ruby/setup-ruby@9669f3ee51dc3f4eda8447ab696b3ab19a90d14b # v1.144.0 + with: + ruby-version: "2.7" + + - name: release/setup-fastlane-dependencies + run: bundle install + working-directory: ./fastlane + + - name: ci/download-artifacts + uses: actions/download-artifact@9bc31d5ccc31df68ecc42ccf4149144866c47d8a # v3.0.2 + + - name: release/create-github-release + env: + GITHUB_TOKEN: "${{ secrets.MM_MOBILE_GITHUB_TOKEN }}" + run: bundle exec fastlane github + working-directory: ./fastlane diff --git a/.gitignore b/.gitignore index 578a65aacf..600fc0dfad 100644 --- a/.gitignore +++ b/.gitignore @@ -103,6 +103,7 @@ detox/detox_pixel_* # Bundle artifact *.jsbundle +.bundle #editor-settings .vscode diff --git a/fastlane/.env.android.beta b/fastlane/.env.android.beta new file mode 100644 index 0000000000..abfb186309 --- /dev/null +++ b/fastlane/.env.android.beta @@ -0,0 +1,18 @@ +## You invoke this with --env android.beta on the fastlane command +APP_NAME="Mattermost Beta" +APP_SCHEME=mattermost +AWS_BUCKET_NAME=releases.mattermost.com +AWS_FOLDER_NAME=mattermost-mobile-beta +AWS_REGION=us-east-1 +BETA_BUILD=true +BUILD_FOR_RELEASE=true +MAIN_APP_IDENTIFIER=com.mattermost.rnbeta +REPLACE_ASSETS=false +SENTRY_ENABLED=true +SENTRY_ORG=mattermost-mr +SENTRY_PROJECT_ANDROID=mattermost-mobile-test +SEPARATE_APKS=true +SHOW_ONBOARDING=true +SUPPLY_TRACK=alpha +SUPPLY_PACKAGE_NAME=com.mattermost.rnbeta +SUPPLY_VALIDATE_ONLY=false \ No newline at end of file diff --git a/fastlane/.env.android.pr b/fastlane/.env.android.pr new file mode 100644 index 0000000000..a4730d5a78 --- /dev/null +++ b/fastlane/.env.android.pr @@ -0,0 +1,12 @@ +## You invoke this with --env android.pr on the fastlane command +APP_NAME="Mattermost Beta" +APP_SCHEME=mattermost +AWS_BUCKET_NAME=pr-builds.mattermost.com +AWS_FOLDER_NAME=mattermost-mobile +AWS_REGION=us-east-1 +BETA_BUILD=true +BUILD_FOR_RELEASE=true +BUILD_PR=true +MAIN_APP_IDENTIFIER=com.mattermost.rnbeta +REPLACE_ASSETS=false +SHOW_ONBOARDING=true \ No newline at end of file diff --git a/fastlane/.env.android.release b/fastlane/.env.android.release new file mode 100644 index 0000000000..1fd349e496 --- /dev/null +++ b/fastlane/.env.android.release @@ -0,0 +1,19 @@ +## You invoke this with --env android.release on the fastlane command +APP_NAME=Mattermost +APP_SCHEME=mattermost +AWS_BUCKET_NAME=releases.mattermost.com +AWS_FOLDER_NAME=mattermost-mobile +AWS_REGION=us-east-1 +BETA_BUILD=false +BUILD_FOR_RELEASE=true +MAIN_APP_IDENTIFIER=com.mattermost.rn +REPLACE_ASSETS=true +SENTRY_ENABLED=true +SENTRY_ORG=mattermost-mr +SENTRY_PROJECT_ANDROID=mattermost-mobile-android +SEPARATE_APKS=true +SHOW_ONBOARDING=true +SHOW_REVIEW=true +SUPPLY_PACKAGE_NAME=com.mattermost.rn +SUPPLY_TRACK=beta +SUPPLY_VALIDATE_ONLY=false \ No newline at end of file diff --git a/fastlane/.env.default b/fastlane/.env.default new file mode 100644 index 0000000000..7c393bc965 --- /dev/null +++ b/fastlane/.env.default @@ -0,0 +1,4 @@ +## This is loaded by default for all fastlane executions +BABEL_ENV="production" +NODE_ENV="production" +NODE_OPTIONS="--max_old_space_size=12000" \ No newline at end of file diff --git a/fastlane/.env.ios.beta b/fastlane/.env.ios.beta new file mode 100644 index 0000000000..b42f4c4b65 --- /dev/null +++ b/fastlane/.env.ios.beta @@ -0,0 +1,26 @@ +## You invoke this with --env ios.beta on the fastlane command +APP_NAME="Mattermost Beta" +APP_SCHEME=mattermost +AWS_BUCKET_NAME=releases.mattermost.com +AWS_FOLDER_NAME=mattermost-mobile-beta +AWS_REGION=us-east-1 +BETA_BUILD=true +BUILD_FOR_RELEASE=true +EXTENSION_APP_IDENTIFIER=com.mattermost.rnbeta.MattermostShare +IOS_APP_GROUP=group.com.mattermost.rnbeta +IOS_BUILD_EXPORT_METHOD=app-store +IOS_ICLOUD_CONTAINER=iCloud.com.mattermost.rnbeta +MAIN_APP_IDENTIFIER=com.mattermost.rnbeta +MATCH_APP_IDENTIFIER=com.mattermost.rnbeta.NotificationService,com.mattermost.rnbeta.MattermostShare,com.mattermost.rnbeta +MATCH_READONLY=true +MATCH_SHALLOW_CLONE=true +MATCH_SKIP_DOCS=true +MATCH_TYPE=appstore +NOTIFICATION_SERVICE_IDENTIFIER=com.mattermost.rnbeta.NotificationService +PILOT_SKIP_WAITING_FOR_BUILD_PROCESSING=true +REPLACE_ASSETS=false +SENTRY_ENABLED=true +SENTRY_ORG=mattermost-mr +SENTRY_PROJECT_IOS=mattermost-ios-test +SHOW_ONBOARDING=true +SYNC_PROVISIONING_PROFILES=true \ No newline at end of file diff --git a/fastlane/.env.ios.pr b/fastlane/.env.ios.pr new file mode 100644 index 0000000000..1a2af10dab --- /dev/null +++ b/fastlane/.env.ios.pr @@ -0,0 +1,24 @@ +## You invoke this with --env ios.pr on the fastlane command +APP_NAME="Mattermost Beta" +APP_SCHEME=mattermost +AWS_BUCKET_NAME=pr-builds.mattermost.com +AWS_FOLDER_NAME=mattermost-mobile +AWS_REGION=us-east-1 +BETA_BUILD=true +BUILD_FOR_RELEASE=true +BUILD_PR=true +EXTENSION_APP_IDENTIFIER=com.mattermost.rnbeta.MattermostShare +IOS_APP_GROUP=group.com.mattermost.rnbeta +IOS_BUILD_EXPORT_METHOD=ad-hoc +IOS_ICLOUD_CONTAINER=iCloud.com.mattermost.rnbeta +MAIN_APP_IDENTIFIER=com.mattermost.rnbeta +MATCH_APP_IDENTIFIER=com.mattermost.rnbeta.NotificationService,com.mattermost.rnbeta.MattermostShare,com.mattermost.rnbeta +MATCH_READONLY=true +MATCH_SHALLOW_CLONE=true +MATCH_SKIP_DOCS=true +MATCH_TYPE=adhoc +NOTIFICATION_SERVICE_IDENTIFIER=com.mattermost.rnbeta.NotificationService +PILOT_SKIP_WAITING_FOR_BUILD_PROCESSING=true +REPLACE_ASSETS=false +SHOW_ONBOARDING=true +SYNC_PROVISIONING_PROFILES=true \ No newline at end of file diff --git a/fastlane/.env.ios.release b/fastlane/.env.ios.release new file mode 100644 index 0000000000..f57cdf53d4 --- /dev/null +++ b/fastlane/.env.ios.release @@ -0,0 +1,26 @@ +## You invoke this with --env ios.release on the fastlane command +APP_NAME=Mattermost +APP_SCHEME=mattermost +AWS_BUCKET_NAME=releases.mattermost.com +AWS_FOLDER_NAME=mattermost-mobile +AWS_REGION=us-east-1 +BUILD_FOR_RELEASE=true +EXTENSION_APP_IDENTIFIER=com.mattermost.rn.MattermostShare +IOS_APP_GROUP=group.com.mattermost +IOS_BUILD_EXPORT_METHOD=app-store +IOS_ICLOUD_CONTAINER=iCloud.com.mattermost.rn +MAIN_APP_IDENTIFIER=com.mattermost.rn +MATCH_APP_IDENTIFIER=com.mattermost.rn.NotificationService,com.mattermost.rn.MattermostShare,com.mattermost.rn +MATCH_READONLY=true +MATCH_SHALLOW_CLONE=true +MATCH_SKIP_DOCS=true +MATCH_TYPE=appstore +NOTIFICATION_SERVICE_IDENTIFIER=com.mattermost.rn.NotificationService +PILOT_SKIP_WAITING_FOR_BUILD_PROCESSING=true +REPLACE_ASSETS=true +SENTRY_ENABLED=true +SENTRY_ORG=mattermost-mr +SENTRY_PROJECT_IOS=mattermost-mobile-ios +SHOW_ONBOARDING=true +SHOW_REVIEW=true +SYNC_PROVISIONING_PROFILES=true \ No newline at end of file diff --git a/fastlane/.env.ios.simulator b/fastlane/.env.ios.simulator new file mode 100644 index 0000000000..d39f555f6c --- /dev/null +++ b/fastlane/.env.ios.simulator @@ -0,0 +1,4 @@ +## You invoke this with --env ios.simulator on the fastlane command +AWS_BUCKET_NAME=releases.mattermost.com +AWS_FOLDER_NAME=mattermost-mobile-beta +AWS_REGION=us-east-1 diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 0bb22f5498..313a9734cb 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -14,11 +14,11 @@ before_all do ENV['SPACESHIP_SKIP_2FA_UPGRADE'] = '1' is_build_pr = ENV['BUILD_PR'] == 'true' - if is_build_pr && ENV['CIRCLECI'] == 'true' - ENV['BRANCH_TO_BUILD'] = ENV['CIRCLE_BRANCH'] + if is_build_pr && ENV['CI'] == 'true' + ENV['BRANCH_TO_BUILD'] = ENV['GITHUB_REF_NAME'] end - if ENV['CIRCLECI'] != 'true' + if ENV['CI'] != 'true' # Raises an error is git is not clean if ENV['COMMIT_CHANGES_TO_GIT'] == 'true' ensure_git_status_clean @@ -46,9 +46,9 @@ before_all do end after_all do |lane| - if ENV['CIRCLECI'] != 'true' + if ENV['CI'] != 'true' if ENV['RESET_GIT_BRANCH'] == 'true' - branch = ENV['BRANCH_TO_BUILD'] || 'master' + branch = ENV['BRANCH_TO_BUILD'] || 'main' package_id = ENV['MAIN_APP_IDENTIFIER'] || 'com.mattermost.rnbeta' beta_dir = '../android/app/src/main/java/com/mattermost/rnbeta' release_dir = "../android/app/src/main/java/#{package_id.gsub '.', '/'}" @@ -68,7 +68,7 @@ after_all do |lane| sh "git branch -D #{local_branch}" UI.success("Deleted working branch \"#{local_branch}\"") if lane.to_s == 'build_pr' - sh 'git checkout master' + sh 'git checkout main' ## Remove the branch for the PR sh "git branch -D #{branch}" UI.success("Deleted PR branch \"#{branch}\"") @@ -320,7 +320,7 @@ end desc 'Create GitHub release' lane :github do - tag = ENV['CIRCLE_TAG'] || ENV['TAG'] + tag = ENV['GITHUB_REF_NAME'] || ENV['TAG'] if tag version = android_get_version_name(gradle_file: './android/app/build.gradle') @@ -350,8 +350,8 @@ end platform :ios do before_all do - if ENV['CIRCLECI'] == 'true' - setup_circle_ci + if ENV['CI'] == 'true' + setup_ci end end diff --git a/fastlane/Gemfile b/fastlane/Gemfile index 1e864103e2..1d2e309ddf 100644 --- a/fastlane/Gemfile +++ b/fastlane/Gemfile @@ -2,6 +2,8 @@ source "https://rubygems.org" gem "fastlane" gem "nokogiri" +gem "slack-notifier", "2.3.2" +gem "dotenv" plugins_path = File.join(File.dirname(__FILE__), '.', 'Pluginfile') eval(File.read(plugins_path), binding) if File.exist?(plugins_path) diff --git a/fastlane/Gemfile.lock b/fastlane/Gemfile.lock index 6782c3b83a..a9d041e9fa 100644 --- a/fastlane/Gemfile.lock +++ b/fastlane/Gemfile.lock @@ -222,6 +222,7 @@ PLATFORMS ruby DEPENDENCIES + dotenv fastlane fastlane-plugin-android_change_package_identifier fastlane-plugin-android_change_string_app_name