ios-release #116
This file contains hidden or 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: ios-release | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release: | |
| type: choice | |
| default: full | |
| options: | |
| - full | |
| - pre | |
| description: Whether to make a release, choose full release (uses platform/ios/VERSION) or pre-release | |
| pre_release_version: | |
| type: string | |
| default: '' | |
| description: Version (only for pre-releases) | |
| jobs: | |
| ios-build-dynamic: | |
| runs-on: macos-14 | |
| defaults: | |
| run: | |
| working-directory: platform/ios | |
| shell: bash | |
| steps: | |
| - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 | |
| with: | |
| submodules: recursive | |
| - name: Build XCFramework (Dynamic) | |
| run: | | |
| bazel build --compilation_mode=opt --features=dead_strip,thin_lto --objc_enable_binary_stripping \ | |
| --apple_generate_dsym --output_groups=+dsyms --//:renderer=metal //platform/ios:MapLibre.dynamic --embed_label=maplibre_ios_"$(cat VERSION)" | |
| echo xcframework="$(bazel info execution_root)"/"$(bazel cquery --output=files --compilation_mode=opt --//:renderer=metal //platform/ios:MapLibre.dynamic)" >> "$GITHUB_ENV" | |
| - name: Create .zip with debug symbols | |
| working-directory: ./bazel-bin/platform/ios/MapLibre.dynamic_dsyms | |
| run: | | |
| zip MapLibre_ios_device.framework.dSYM.zip MapLibre_ios_device.framework.dSYM/Contents/Resources/DWARF/MapLibre_ios_device MapLibre_ios_device.framework.dSYM/Contents/Info.plist | |
| echo debug_symbols_ios="$(realpath MapLibre_ios_device.framework.dSYM.zip)" >> "$GITHUB_ENV" | |
| - name: Copy debug symbols to root | |
| working-directory: . | |
| run: cp ${{ env.debug_symbols_ios }} . | |
| - name: Add license to XCFramework zip | |
| run: | | |
| cp ${{ env.xcframework }} MapLibre.dynamic.xcframework.zip | |
| chmod +w MapLibre.dynamic.xcframework.zip | |
| zip MapLibre.dynamic.xcframework.zip LICENSE.md # add license to zip | |
| working-directory: . | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 | |
| with: | |
| name: xcframework | |
| path: | | |
| MapLibre.dynamic.xcframework.zip | |
| MapLibre_ios_device.framework.dSYM.zip | |
| ios-build-static: | |
| runs-on: macos-14 | |
| defaults: | |
| run: | |
| working-directory: platform/ios | |
| shell: bash | |
| steps: | |
| - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 | |
| with: | |
| submodules: recursive | |
| - name: Build XCFramework (Static) | |
| # for now, just build it TODO: make a static framework release | |
| run: | | |
| bazel build //platform/ios:MapLibre.static --//:renderer=metal --compilation_mode="opt" --copt -g --copt="-Oz" --strip never --output_groups=+dsyms --apple_generate_dsym | |
| echo xcframework_static="$(bazel info execution_root)"/"$(bazel cquery --output=files --compilation_mode=opt --//:renderer=metal //platform/ios:MapLibre.static)" >> "$GITHUB_ENV" | |
| - name: Add license to XCFramework zip | |
| run: | | |
| cp ${{ env.xcframework_static }} MapLibre.static.xcframework.zip | |
| chmod +w MapLibre.static.xcframework.zip | |
| zip MapLibre.static.xcframework.zip LICENSE.md # add license to zip | |
| working-directory: . | |
| - name: Upload artifact | |
| uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0 | |
| with: | |
| name: xcframework-static | |
| path: | | |
| MapLibre.static.xcframework.zip | |
| ios-release: | |
| permissions: | |
| id-token: write # needed for AWS | |
| contents: write # allow making a release | |
| actions: write # for triggering ios-release-cocoapods.yml | |
| issues: write # for notify-release-on-prs.ts | |
| runs-on: ubuntu-latest | |
| needs: | |
| - ios-build-dynamic | |
| - ios-build-static | |
| defaults: | |
| run: | |
| working-directory: platform/ios | |
| shell: bash | |
| steps: | |
| - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v4 | |
| with: | |
| submodules: recursive | |
| - uses: actions/download-artifact@v8 | |
| - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v4 | |
| with: | |
| node-version-file: ".nvmrc" | |
| - name: Get version (release) | |
| if: github.event.inputs.release == 'full' | |
| run: | | |
| echo version="$(head VERSION)" >> "$GITHUB_ENV" | |
| echo changelog_version_heading="## $(head VERSION)" >> "$GITHUB_ENV" | |
| - name: Get version (pre-release) | |
| if: github.event.inputs.release == 'pre' | |
| run: | | |
| version="${{ github.event.inputs.pre_release_version }}" | |
| if [[ -z "$version" ]]; then | |
| version="$(head VERSION)"-pre${{ github.sha }} | |
| fi | |
| if [[ "$version" != *"pre"* ]]; then | |
| echo "::error::Pre-release version must include 'pre' (Current version: $version)" | |
| exit 1 | |
| fi | |
| echo version="$version" >> "$GITHUB_ENV" | |
| echo changelog_version_heading="## main" >> "$GITHUB_ENV" | |
| - name: Create tag if it does not exist | |
| working-directory: . | |
| run: .github/scripts/ensure-tag.sh ios-v${{ env.version }} ${{ github.sha }} | |
| - name: Extract changelog for version | |
| run: | | |
| awk '/^##/ { p = 0 }; p == 1 { print }; $0 == "${{ env.changelog_version_heading }}" { p = 1 };' CHANGELOG.md > changelog_for_version.md | |
| cat changelog_for_version.md | |
| - name: Configure AWS Credentials | |
| uses: aws-actions/configure-aws-credentials@8df5847569e6427dd6c4fb1cf565c83acfa8afa7 # v4 | |
| with: | |
| aws-region: us-west-2 | |
| role-to-assume: ${{ vars.OIDC_AWS_ROLE_TO_ASSUME }} | |
| role-session-name: ${{ github.run_id }} | |
| - name: Upload changelog to S3 | |
| run: aws s3 cp changelog_for_version.md s3://maplibre-native/changelogs/ios-${{ env.version }}.md | |
| - name: Release (GitHub) - Create Draft | |
| id: github_release | |
| uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 | |
| with: | |
| name: ios-v${{ env.version }} | |
| files: | | |
| xcframework/MapLibre.dynamic.xcframework.zip | |
| xcframework/MapLibre_ios_device.framework.dSYM.zip | |
| xcframework-static/MapLibre.static.xcframework.zip | |
| tag_name: ios-v${{ env.version }} | |
| prerelease: ${{ github.event.inputs.release == 'pre' }} | |
| body_path: platform/ios/changelog_for_version.md | |
| fail_on_unmatched_files: true | |
| draft: true | |
| # needed to trigger workflow for Swift Package Index release | |
| - name: Generate token | |
| uses: actions/create-github-app-token@f8d387b68d61c58ab83c6c016672934102569859 # v3.0.0 | |
| id: generate_token | |
| with: | |
| app-id: ${{ secrets.MAPLIBRE_NATIVE_BOT_APP_ID }} | |
| private-key: ${{ secrets.MAPLIBRE_NATIVE_BOT_PRIVATE_KEY }} | |
| owner: ${{ github.repository_owner }} | |
| - name: Release (Swift Package Index) | |
| run: | | |
| echo "::add-mask::${{ steps.generate_token.outputs.token }}" | |
| release_workflow_id=81221759 # id of release.yml | |
| curl -L \ | |
| -X POST \ | |
| -H "Accept: application/vnd.github+json" \ | |
| -H "Authorization: token ${{ steps.generate_token.outputs.token }}" \ | |
| -H "X-GitHub-Api-Version: 2022-11-28" \ | |
| https://api.github.com/repos/maplibre/maplibre-gl-native-distribution/actions/workflows/$release_workflow_id/dispatches \ | |
| -d '{"ref":"main","inputs":{ | |
| "changelog_url": "https://maplibre-native.s3.eu-central-1.amazonaws.com/changelogs/ios-${{ env.version }}.md", | |
| "version":"${{ env.version }}", | |
| "download_url": "https://github.com/maplibre/maplibre-native/releases/download/ios-v${{ env.version }}/MapLibre.dynamic.xcframework.zip"}}' | |
| - run: npm install | |
| working-directory: . | |
| - name: Release (CocoaPods) | |
| shell: bash -leo pipefail {0} # so pod is found | |
| run: gh workflow run ios-release-cocoapods.yml --field version=${{ env.version }} | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Publish release (remove draft) | |
| uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2.6.1 | |
| with: | |
| tag_name: ios-v${{ env.version }} | |
| name: ios-v${{ env.version }} | |
| draft: false | |
| - name: Write release notifications | |
| if: github.repository_owner == 'maplibre' | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: node .github/scripts/notify-release-on-prs.ts --tag ios-v${{ env.version }} | |
| working-directory: . |