Skip to content

Manual backport of f3619c9 #6327

Manual backport of f3619c9

Manual backport of f3619c9 #6327

Workflow file for this run

---
name: 🍏 iOS build
on:
push:
branches:
- master
- release-**
pull_request:
release:
types: ['published']
jobs:
build:
runs-on: macos-12
env:
DEPLOYMENT_TARGET: '12.0'
QT_VERSION: '5.15.2'
BUILD_TYPE: 'Release'
TRIPLET: 'arm64-ios'
steps:
- name: 🐣 Checkout
uses: actions/checkout@v3
with:
submodules: recursive
- name: πŸ’ Install Qt
uses: jurplel/install-qt-action@v3
with:
version: 5.15.2
modules: 'qtcharts'
target: ios
cache: true
- name: 🌾 Prepare vars
id: vars
shell: bash
run: |
./scripts/ci/env_gh.sh
- uses: Apple-Actions/import-codesign-certs@v1
with:
p12-file-base64: ${{ env.CI_USE_IOS_DIST_CERT && secrets.APPSTORE_DISTRIBUTION_CERT_BASE64 || secrets.IOS_CERTIFICATES_FILE_BASE64_DEV }}
p12-password: ${{ env.CI_USE_IOS_DIST_CERT && secrets.APPSTORE_DISTRIBUTION_CERT_PASS || secrets.IOS_CERTIFICATES_PASSWORD_DEV }}
- uses: Apple-Actions/download-provisioning-profiles@v1
with:
bundle-id: ch.opengis.qfield
issuer-id: ${{ secrets.IOS_APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.IOS_APPSTORE_KEY_ID }}
api-private-key: ${{ secrets.IOS_APPSTORE_PRIVATE_KEY }}
- name: Prepare ios build env
run: |
brew install automake bison flex gnu-sed s3cmd gettext
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
- uses: maxim-lobanov/setup-xcode@v1.5.1
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 SYSTEM_QT=ON \
-D VCPKG_TARGET_TRIPLET="${{ env.TRIPLET }}" \
-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.CI_USE_IOS_DIST_CERT && secrets.IOS_CODE_SIGN_IDENTITY || secrets.IOS_CODE_SIGN_IDENTITY_DEV }}" \
-D QT_IOS_PROVISIONING_PROFILE_SPECIFIER="${{env.CI_USE_IOS_DIST_CERT && secrets.IOS_PROVISIONING_PROFILE_SPECIFIER || secrets.IOS_PROVISIONING_PROFILE_SPECIFIER_DEV }}" \
-D QT_IOS_EXPORT_METHOD="${{env.CI_USE_IOS_DIST_CERT && 'app-store' || 'development' }}" \
-D CMAKE_SYSTEM_NAME=iOS \
-D CMAKE_SYSTEM_PROCESSOR=aarch64 \
-D CMAKE_OSX_DEPLOYMENT_TARGET=${{ env.DEPLOYMENT_TARGET }} \
-D CMAKE_FIND_ROOT_PATH=${{ env.Qt5_DIR }} \
-D ENABLE_TESTS=OFF \
-D CMAKE_CXX_VISIBILITY_PRESET=hidden \
-D WITH_CCACHE=ON
- name: πŸ“‘ Upload Dep Build Logs
uses: actions/upload-artifact@v3
if: failure()
with:
name: build-logs-${{ env.TRIPLET }}
path: |
/Users/runner/builddir/**/*.log
# Not required, packaging does it all
# - name: πŸŒ‹ Build
# run: |
# cmake --build /Users/runner/builddir --config ${{ env.BUILD_TYPE }} # --target qfield
- name: Package
run: |
cmake --build /Users/runner/builddir --target bundle --config Release
- name: 🍺 Deploy
env:
PLIST_URL: https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.pList
IPA_URL: https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.ipa
run: |
mv /Users/runner/builddir/qfieldIpa/qfield.ipa qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.ipa
if [[ -n "${{ secrets.S3CFG }}" ]]
then
echo "${{ secrets.S3CFG }}" > ~/.s3cfg
envsubst < ${{ github.workspace }}/platform/ios/installation-template.html > qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.html
envsubst < ${{ github.workspace }}/platform/ios/installation-template.plist > qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.plist
s3cmd put --acl-public qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.html s3://qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.html
s3cmd modify --add-header=content-type:text/html s3://qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.html
s3cmd put --acl-public qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.pList s3://qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.pList
s3cmd modify --add-header=content-type:application/xml s3://qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.pList
s3cmd put --acl-public qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.ipa s3://qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.ipa
echo "Install the ipa from https://sos-ch-dk-2.exo.io/qfieldapks/ci-builds/qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.html"
rm ~/.s3cfg
fi
- name: πŸ“¦ Upload qfield Ipa
uses: actions/upload-artifact@v3
with:
name: qfield-${{ env.TRIPLET }}-${{ env.DEPLOYMENT_TARGET }}.ipa
path: qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.ipa
- name: πŸš€ Release to TestFlight
uses: Apple-Actions/upload-testflight-build@v1
if: ${{ env.CI_USE_IOS_DIST_CERT }}
with:
app-path: qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.ipa
issuer-id: ${{ secrets.IOS_APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.IOS_APPSTORE_KEY_ID }}
api-private-key: ${{ secrets.IOS_APPSTORE_PRIVATE_KEY }}
# Disabled: Is not able to resolve the id of the build at the moment
#
# - name: Enable public testers
# if:env.CI_USE_IOS_DIST_CERT
# run: |
# source ./scripts/version_number.sh
# source ./scripts/ci/generate-version-details.sh
# # Enable public testers
# pip install PyJWT cryptography
#
# # retry a couple of times, appstore needs some time
# for i in {1..100};
# do
# build_id=$(./scripts/ci/appstore_connect.py --key_id ${{ secrets.IOS_APPSTORE_KEY_ID }} --issuer_id ${{ secrets.IOS_APPSTORE_ISSUER_ID }} --private_key "${{ secrets.IOS_APPSTORE_PRIVATE_KEY }}" build_id_by_version ${APK_VERSION_CODE}) &&
# break ||
# sleep 15;
# done
# public_testers_id="7bca90ae-e44b-4d20-bf71-17a8dced5a01"
# ./scripts/ci/appstore_connect.py --key_id ${{ secrets.IOS_APPSTORE_KEY_ID }} --issuer_id ${{ secrets.IOS_APPSTORE_ISSUER_ID }} --private_key "${{ secrets.IOS_APPSTORE_PRIVATE_KEY }}" add_to_beta_group ${public_testers_id} ${build_id}
- 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: qfield-${{ env.CI_PACKAGE_FILE_SUFFIX }}.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 }}
run: |
curl -sL https://sentry.io/get-cli/ | bash
sentry-cli upload-dif -o opengisch -p qfield /Users/runner/builddir