feat: add TestFlight deploy workflow

This commit is contained in:
CMK 2022-11-04 12:20:27 +08:00
parent 505ca804b3
commit e2f505fa67
6 changed files with 138 additions and 2 deletions

65
.github/scripts/build-release.sh vendored Executable file
View File

@ -0,0 +1,65 @@
#!/usr/bin/env bash
set -xeu
set -o pipefail
function finish() {
ditto -c -k --sequesterRsrc --keepParent "${RESULT_BUNDLE_PATH}" "${RESULT_BUNDLE_PATH}.zip"
rm -rf "${RESULT_BUNDLE_PATH}"
}
trap finish EXIT
SDK="${SDK:-iphoneos}"
WORKSPACE="${WORKSPACE:-Mastodon.xcworkspace}"
SCHEME="${SCHEME:-Mastodon}"
CONFIGURATION=${CONFIGURATION:-Release}
BUILD_DIR=${BUILD_DIR:-.build}
ARTIFACT_PATH=${RESULT_PATH:-${BUILD_DIR}/Artifacts}
RESULT_BUNDLE_PATH="${ARTIFACT_PATH}/${SCHEME}.xcresult"
ARCHIVE_PATH=${ARCHIVE_PATH:-${BUILD_DIR}/Archives/${SCHEME}.xcarchive}
DERIVED_DATA_PATH=${DERIVED_DATA_PATH:-${BUILD_DIR}/DerivedData}
CURRENT_PROJECT_VERSION=${BUILD_NUMBER:-0}
EXPORT_OPTIONS_FILE=".github/support/ExportOptions.plist"
WORK_DIR=$(pwd)
API_PRIVATE_KEYS_PATH="${WORK_DIR}/${BUILD_DIR}/private_keys"
API_KEY_FILE="${API_PRIVATE_KEYS_PATH}/api_key.p8"
rm -rf "${RESULT_BUNDLE_PATH}"
rm -rf "${API_PRIVATE_KEYS_PATH}"
mkdir -p "${API_PRIVATE_KEYS_PATH}"
echo -n "${ENV_API_PRIVATE_KEY}" | base64 --decode > "${API_KEY_FILE}"
xcrun xcodebuild clean \
-workspace "${WORKSPACE}" \
-scheme "${SCHEME}" \
-configuration "${CONFIGURATION}"
xcrun xcodebuild archive \
-workspace "${WORKSPACE}" \
-scheme "${SCHEME}" \
-configuration "${CONFIGURATION}" \
-destination generic/platform=iOS \
-sdk "${SDK}" \
-parallelizeTargets \
-showBuildTimingSummary \
-derivedDataPath "${DERIVED_DATA_PATH}" \
-archivePath "${ARCHIVE_PATH}" \
-resultBundlePath "${RESULT_BUNDLE_PATH}" \
-allowProvisioningUpdates \
-authenticationKeyPath "${API_KEY_FILE}" \
-authenticationKeyID "${ENV_API_KEY_ID}" \
-authenticationKeyIssuerID "${ENV_ISSUER_ID}"
xcrun xcodebuild \
-exportArchive \
-archivePath "${ARCHIVE_PATH}" \
-exportOptionsPlist "${EXPORT_OPTIONS_FILE}" \
-exportPath "${ARTIFACT_PATH}/${SCHEME}.ipa" \
-allowProvisioningUpdates
# Zip up the Xcode Archive into Artifacts folder.
ditto -c -k --sequesterRsrc --keepParent "${ARCHIVE_PATH}" "${ARTIFACT_PATH}/${SCHEME}.xcarchive.zip"

View File

@ -1,7 +1,7 @@
#!/bin/bash
# workaround https://github.com/CocoaPods/CocoaPods/issues/11355
sed -i '' $'1s/^/source "https:\\/\\/github.com\\/CocoaPods\\/Specs.git"\\\n\\\n/' Podfile
# sed -i '' $'1s/^/source "https:\\/\\/github.com\\/CocoaPods\\/Specs.git"\\\n\\\n/' Podfile
# Install Ruby Bundler
gem install bundler:2.3.11

8
.github/support/ExportOptions.plist vendored Normal file
View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>method</key>
<string>app-store</string>
</dict>
</plist>

56
.github/workflows/develop-build.yml vendored Normal file
View File

@ -0,0 +1,56 @@
name: Build for Develop TestFlight
on:
push:
branches:
- develop
- ci-test
jobs:
build:
name: Build
runs-on: macOS-12
steps:
- name: checkout
uses: actions/checkout@v2
- name: setup
env:
NotificationEndpointDebug: ${{ secrets.NotificationEndpointDebug }}
NotificationEndpointRelease: ${{ secrets.NotificationEndpointRelease }}
run: exec ./.github/scripts/setup.sh
- name: Import Code-Signing Certificates
uses: Apple-Actions/import-codesign-certs@v1 # https://github.com/Apple-Actions/import-codesign-certs
with:
keychain: build-p12
p12-file-base64: ${{ secrets.BUILD_CERTIFICATE_BASE64 }}
p12-password: ${{ secrets.P12_PASSWORD }}
- name: Download Provisioning Profiles
uses: Apple-Actions/download-provisioning-profiles@v1 # https://github.com/Apple-Actions/download-provisioning-profiles
with:
bundle-id: org.joinmastodon.app
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_PRIVATE_KEY }}
- name: build
env:
ENV_ISSUER_ID: ${{ secrets.APPSTORE_ISSUER_ID }}
ENV_API_KEY_ID: ${{ secrets.APPSTORE_KEY_ID }}
ENV_API_PRIVATE_KEY: ${{ secrets.APP_STORE_CONNECT_KEY_BASE64 }}
run: exec ./.github/scripts/build-release.sh
- name: Upload TestFlight Build
uses: Apple-Actions/upload-testflight-build@master
with:
app-path: .build/Artifacts/Mastodon.ipa/Mastodon.ipa
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
api-key-id: ${{ secrets.APPSTORE_KEY_ID }}
api-private-key: ${{ secrets.APPSTORE_PRIVATE_KEY }}
- name: Clean up keychain and provisioning profile
if: ${{ always() }}
run: |
security delete-keychain build-p12.keychain-db

View File

@ -1,3 +1,4 @@
source 'https://cdn.cocoapods.org/'
platform :ios, '14.0'
target 'Mastodon' do
@ -35,5 +36,11 @@ post_install do |installer|
target.build_configurations.each do |config|
config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
end
# https://github.com/CocoaPods/CocoaPods/issues/11402#issuecomment-1201464693
if target.respond_to?(:product_type) and target.product_type == "com.apple.product-type.bundle"
target.build_configurations.each do |config|
config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
end
end
end
end

View File

@ -37,6 +37,6 @@ SPEC CHECKSUMS:
"UITextField+Shake": 298ac5a0f239d731bdab999b19b628c956ca0ac3
XLPagerTabStrip: 61c57fd61f611ee5f01ff1495ad6fbee8bf496c5
PODFILE CHECKSUM: 50ec5b2c4aa189024cc5ab41039f983dc5609040
PODFILE CHECKSUM: 8b15fb6d4e801b7a7e7761a2e2fe40a89b1da4ff
COCOAPODS: 1.11.3