From 4b37f40733f1486a03e307a589eeccd656682870 Mon Sep 17 00:00:00 2001 From: Matthias Kuhn Date: Wed, 3 Jan 2024 03:01:39 +0100 Subject: [PATCH] Add ios qt6 workflow --- .github/workflows/ios_qt6.yml | 164 ++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 .github/workflows/ios_qt6.yml diff --git a/.github/workflows/ios_qt6.yml b/.github/workflows/ios_qt6.yml new file mode 100644 index 0000000000..93db6e99d2 --- /dev/null +++ b/.github/workflows/ios_qt6.yml @@ -0,0 +1,164 @@ +--- +name: 🍏 iOS (Qt6) build + +on: + push: + branches: + - master + - release-** + - qt6_ios_vcpkg + pull_request: + release: + types: ['published'] + +jobs: + build: + name: build (ios vcpkg) + runs-on: macos-12 + env: + DEPLOYMENT_TARGET: '14.0' + BUILD_TYPE: 'Release' + TRIPLET: 'arm64-ios' + + steps: + - name: 🐣 Checkout + uses: actions/checkout@v4 + with: + submodules: recursive + + - name: 🌾 Prepare variables + id: vars + run: | + ./scripts/ci/env_gh.sh + + - name: ⛓️ Setup SSH + uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_KEY_DEPLOYMENT_CERTIFICATES }} + + - name: 💎 Setup ruby + uses: ruby/setup-ruby@v1 + with: + ruby-version: '3.2' # Not needed with a .ruby-version file + bundler-cache: true # runs 'bundle install' and caches installed gems automatically + + - name: 🔏 Setup code signing + env: + MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }} + run: | + bundle exec fastlane ios setup_signing type:${{ env.IOS_SIGN_TYPE }} app_identifier:${{ env.IOS_APP_IDENTIFIER }} # --verbose + + + - name: 🍹 Prepare ios build env + run: | + brew install automake bison flex gnu-sed s3cmd gettext autoconf-archive nasm + echo $(brew --prefix bison)/bin >> $GITHUB_PATH + echo $(brew --prefix flex)/bin >> $GITHUB_PATH + echo $(brew --prefix s3cmd)/bin >> $GITHUB_PATH + echo $(brew --prefix gettext)/bin >> $GITHUB_PATH + echo $(brew --prefix autoconf-archive)/bin >> $GITHUB_PATH + + - name: 🍭 Setup XCode + uses: maxim-lobanov/setup-xcode@v1.6.0 + with: + xcode-version: latest-stable + + - name: 🍮 ccache + uses: hendrikmuhs/ccache-action@v1.2 + with: + key: ccache-ios + max-size: 200M + + - name: 🌱 Install dependencies and generate project files + run: | + source ./scripts/version_number.sh + source ./scripts/ci/generate-version-details.sh + mkdir -p build + cmake -S "${{ github.workspace }}" \ + -B "/Users/runner/builddir" \ + -G "Xcode" \ + -D CMAKE_BUILD_TYPE=${{ env.BUILD_TYPE }} \ + -D VCPKG_TARGET_TRIPLET="${{ env.TRIPLET }}" \ + -D BUILD_WITH_QT6=ON \ + -D WITH_VCPKG=ON \ + -D WITH_SPIX=OFF \ + -D WITH_BLUETOOTH=OFF \ + -D WITH_SERIALPORT=OFF \ + -D APP_VERSION="${APP_VERSION}" \ + -D APK_VERSION_CODE="${APK_VERSION_CODE}" \ + -D APP_VERSION_STR="${APP_VERSION_STR}" \ + -D APP_PACKAGE_NAME="${APP_PACKAGE_NAME}" \ + -D APP_NAME="${APP_NAME}" \ + -D NUGET_USERNAME=opengisch \ + -D NUGET_TOKEN=${{ secrets.GITHUB_TOKEN }} \ + -D SENTRY_DSN=${{ secrets.SENTRY_DSN }} \ + -D SENTRY_ENV="${APP_ENV}" \ + -D ENABLE_BITCODE=OFF \ + -D ENABLE_ARC=ON \ + -D QT_IOS_TEAM_ID="${{ secrets.IOS_TEAM_ID }}" \ + -D QT_IOS_CODE_SIGN_IDENTITY="${{ env.IOS_CODE_SIGN_IDENTITY }}" \ + -D QT_IOS_PROVISIONING_PROFILE_SPECIFIER="${{ env.IOS_PROVISIONING_PROFILE_SPECIFIER }}" \ + -D QT_IOS_EXPORT_METHOD="${{ env.IOS_EXPORT_METHOD }}" \ + -D IOS_APP_IDENTIFIER="${{ env.IOS_APP_IDENTIFIER }}" \ + -D CMAKE_SYSTEM_NAME=iOS \ + -D CMAKE_SYSTEM_PROCESSOR=aarch64 \ + -D CMAKE_OSX_DEPLOYMENT_TARGET=${{ env.DEPLOYMENT_TARGET }} \ + -D ENABLE_TESTS=OFF \ + -D CMAKE_CXX_VISIBILITY_PRESET=hidden \ + -D WITH_CCACHE=ON + + - name: 📑 Upload Dep Build Logs + uses: actions/upload-artifact@v4 + if: failure() + with: + name: build-logs-${{ env.TRIPLET }} + path: | + /Users/runner/builddir/**/*.log + + - name: 📦 Package + run: | + cmake --build /Users/runner/builddir --target bundle --config Release + + - name: 🍺 Deploy + env: + S3_BUCKET: qfieldapks + S3_REGION: ch-dk-2 + S3_ACCESS_KEY: ${{ secrets.S3_ACCESS_KEY}} + S3_SECRET_ACCESS_KEY: ${{ secrets.S3_SECRET_ACCESS_KEY}} + run: | + bundle exec fastlane ios upload_s3 ipa:/Users/runner/builddir/qfieldIpa/QField.ipa + + - name: 📤 Upload qfield Ipa + uses: actions/upload-artifact@v4 + with: + name: qfield-${{ env.TRIPLET }}-${{ env.DEPLOYMENT_TARGET }}.ipa + path: /Users/runner/builddir/qfieldIpa/QField.ipa + + - name: 🚀 Release to TestFlight + if: ${{ env.CI_TAG }} + env: + issuer_id: ${{ secrets.IOS_APPSTORE_ISSUER_ID }} + api_key_id: ${{ secrets.IOS_APPSTORE_KEY_ID }} + api_private_key: ${{ secrets.IOS_APPSTORE_PRIVATE_KEY }} + run: | + bundle exec fastlane ios upload_testflight ipa:/Users/runner/builddir/qfieldIpa/QField.ipa + + - name: 🚀 Upload Release Asset + if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/v') + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: /Users/runner/builddir/qfieldIpa/QField.ipa + asset_name: qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}-${{ env.TRIPLET }}-${{ env.DEPLOYMENT_TARGET }}.ipa + asset_content_type: application/zip + + - name: 📮 Upload debug symbols + # if: release or labeled PR + env: + SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} + SENTRY_ORG_SLUG: opengisch + SENTRY_PROJECT_SLUG: qfield + run: | + bundle exec fastlane run sentry_upload_dif path:/Users/runner/builddir