Skip to content

Commit

Permalink
Nightly alpha builds (duckduckgo#1996)
Browse files Browse the repository at this point in the history
  • Loading branch information
graeme authored Sep 20, 2023
1 parent 4cefc6c commit af47959
Show file tree
Hide file tree
Showing 7 changed files with 267 additions and 20 deletions.
113 changes: 113 additions & 0 deletions .github/workflows/alpha.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: Make TestFlight Alpha Build

on:
workflow_dispatch:
inputs:
destination:
description: "TestFlight Group"
required: true
default: "Latest Alpha Group"
type: string
workflow_call:
inputs:
destination:
description: "TestFlight Group"
required: true
default: "Latest Alpha Group"
type: string
secrets:
SSH_PRIVATE_KEY_FASTLANE_MATCH:
required: true
APPLE_API_KEY_BASE64:
required: true
APPLE_API_KEY_ID:
required: true
APPLE_API_KEY_ISSUER:
required: true
MATCH_PASSWORD:
required: true
ASANA_ACCESS_TOKEN:
required: true

jobs:
make-alpha:
runs-on: macos-13
name: Make TestFlight Alpha Build

env:
destination: ${{ github.event.inputs.destination || inputs.destination }}

steps:

- name: Assert develop branch
run: |
case "${{ github.ref }}" in
*develop/*) ;;
*) echo "👎 Not develop branch"; exit 1 ;;
esac
- name: Register SSH keys for access to certificates
uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }}

- name: Check out the code
uses: actions/checkout@v3
with:
submodules: recursive

- name: Set cache key hash
run: |
has_only_tags=$(jq '[ .object.pins[].state | has("version") ] | all' DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved)
if [[ "$has_only_tags" == "true" ]]; then
echo "cache_key_hash=${{ hashFiles('DuckDuckGo.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved') }}" >> $GITHUB_ENV
else
echo "Package.resolved contains dependencies specified by branch or commit, skipping cache."
fi
- name: Cache SPM
if: env.cache_key_hash
uses: actions/cache@v3
with:
path: DerivedData/SourcePackages
key: ${{ runner.os }}-spm-${{ env.cache_key_hash }}
restore-keys: |
${{ runner.os }}-spm-
- name: Select Xcode
run: sudo xcode-select -s /Applications/Xcode_$(<.xcode-version).app/Contents/Developer

- name: Prepare fastlane
run: bundle install

- name: Archive and upload the app
env:
APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
run: |
app_version="$(cut -d ' ' -f 3 < Configuration/Version.xcconfig)"
bundle exec fastlane increment_build_number_for_version version:$app_version app_identifier:"com.duckduckgo.mobile.ios.alpha"
bundle exec fastlane release_alpha groups:"${{ env.destination }}"
build_version="$(xcodebuild -configuration Alpha -showBuildSettings | grep CURRENT_PROJECT_VERSION | tr -d 'CURRENT_PROJECT_VERSION =')"
echo "dsyms_path=${{ github.workspace }}/DuckDuckGo-Alpha.app.dSYM.zip" >> $GITHUB_ENV
echo "app_version=${app_version}" >> $GITHUB_ENV
echo "build_version=${build_version}" >> $GITHUB_ENV
- name: Upload dSYMs artifact
uses: actions/upload-artifact@v3
with:
name: DuckDuckGo-Alpha-dSYM-${{ env.app_version }}
path: ${{ env.dsyms_path }}

- name: Upload debug symbols to Asana
env:
ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }}
run: |
asana_dsyms_path="${{ github.workspace }}/DuckDuckGo-Alpha-${{ env.app_version }}(${{ env.build_version }})-dSYM.zip"
mv -f "${{ env.dsyms_path }}" "$asana_dsyms_path"
curl -s "https://app.asana.com/api/1.0/tasks/1205344386326139/attachments" \
-H "Authorization: Bearer ${{ secrets.ASANA_ACCESS_TOKEN }}" \
--form "file=@${asana_dsyms_path};type=application/zip"
14 changes: 13 additions & 1 deletion .github/workflows/nightly.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Nightly Integration Tests
name: Nightly Test and Deploy

on:
schedule:
Expand Down Expand Up @@ -94,3 +94,15 @@ jobs:
with:
report_paths: unittests.xml

deploy-alpha:
name: Deploy Nightly Alpha Build
uses: ./.github/workflows/alpha.yml
with:
destination: "Nightly Alpha Group"
secrets:
APPLE_API_KEY_BASE64: ${{ secrets.APPLE_API_KEY_BASE64 }}
APPLE_API_KEY_ID: ${{ secrets.APPLE_API_KEY_ID }}
APPLE_API_KEY_ISSUER: ${{ secrets.APPLE_API_KEY_ISSUER }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
SSH_PRIVATE_KEY_FASTLANE_MATCH: ${{ secrets.SSH_PRIVATE_KEY_FASTLANE_MATCH }}
ASANA_ACCESS_TOKEN: ${{ secrets.ASANA_ACCESS_TOKEN }}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "84E341911E2F7EFB00BDBA6F"
BuildableName = "DuckDuckGo.app"
BlueprintName = "DuckDuckGo"
ReferencedContainer = "container:DuckDuckGo.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES"
shouldAutocreateTestPlan = "YES">
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "84E341911E2F7EFB00BDBA6F"
BuildableName = "DuckDuckGo.app"
BlueprintName = "DuckDuckGo"
ReferencedContainer = "container:DuckDuckGo.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Alpha"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "84E341911E2F7EFB00BDBA6F"
BuildableName = "DuckDuckGo.app"
BlueprintName = "DuckDuckGo"
ReferencedContainer = "container:DuckDuckGo.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Alpha">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Alpha"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
23 changes: 23 additions & 0 deletions alphaExportOptions.plist
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?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>teamID</key>
<string>HKE973VLUW</string>
<key>method</key>
<string>app-store</string>
<key>provisioningProfiles</key>
<dict>
<key>com.duckduckgo.mobile.ios.alpha</key>
<string>match AppStore com.duckduckgo.mobile.ios.alpha</string>
<key>com.duckduckgo.mobile.ios.alpha.ShareExtension</key>
<string>match AppStore com.duckduckgo.mobile.ios.alpha.ShareExtension</string>
<key>com.duckduckgo.mobile.ios.alpha.OpenAction2</key>
<string>match AppStore com.duckduckgo.mobile.ios.alpha.OpenAction2</string>
<key>com.duckduckgo.mobile.ios.alpha.Widgets</key>
<string>match AppStore com.duckduckgo.mobile.ios.alpha.Widgets</string>
<key>com.duckduckgo.mobile.ios.alpha.NetworkExtension</key>
<string>match AppStore com.duckduckgo.mobile.ios.alpha.NetworkExtension</string>
</dict>
</dict>
</plist>
38 changes: 31 additions & 7 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ lane :sync_signing_adhoc do |options|
do_sync_signing(options)
end

desc 'Fetches and updates certificates and provisioning profiles for Alpha distribution'
lane :sync_signing_alpha do |options|
do_sync_signing(options)
end
Expand Down Expand Up @@ -88,11 +89,6 @@ lane :adhoc do |options|
end
end

desc 'Makes Alpha release build and uploads it to App Store Connect (TestFlight)'
lane :alpha do |options|
# TODO
end

desc 'Makes App Store release build and uploads it to App Store Connect'
lane :release_appstore do |options|
build_release(options)
Expand Down Expand Up @@ -132,13 +128,29 @@ lane :release_testflight do
)
end

desc 'Makes Alpha release build and uploads it to TestFlight'
lane :release_alpha do |options|
build_alpha(options)

upload_to_testflight(
api_key: get_api_key,
groups: options[:groups],
skip_waiting_for_build_processing: true
)
end

desc 'Increment build number based on version in App Store Connect'
lane :increment_build_number_for_version do |options|
app_identifier = "com.duckduckgo.mobile.ios"
if options[:app_identifier]
app_identifier = options[:app_identifier]
end
increment_build_number({
build_number:
latest_testflight_build_number(
api_key: get_api_key,
version: options[:version],
app_identifier: "com.duckduckgo.mobile.ios",
app_identifier: app_identifier,
initial_build_number: -1,
username: get_username(options)) + 1,
skip_info_plist: "true"
Expand Down Expand Up @@ -172,6 +184,18 @@ private_lane :build_release do |options|
)
end

private_lane :build_alpha do |options|
sync_signing_alpha(options)

build_app(
export_method: "app-store",
configuration: "Alpha",
scheme: "DuckDuckGo-Alpha",
export_options: "alphaExportOptions.plist",
derived_data_path: "DerivedData"
)
end

private_lane :get_api_key do
has_api_key = [
"APPLE_API_KEY_ID",
Expand Down Expand Up @@ -209,7 +233,7 @@ private_lane :do_sync_signing do |options|
sync_code_signing(
api_key: get_api_key,
username: get_username(options),
readonly: is_ci && !is_adhoc
readonly: is_ci && !is_adhoc
)
end

Expand Down
4 changes: 1 addition & 3 deletions fastlane/Matchfile
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@ for_lane :adhoc do
end

for_lane :sync_signing_alpha do
type "appstore"
app_identifier ["com.duckduckgo.mobile.ios.alpha", "com.duckduckgo.mobile.ios.alpha.ShareExtension", "com.duckduckgo.mobile.ios.alpha.OpenAction2", "com.duckduckgo.mobile.ios.alpha.Widgets", "com.duckduckgo.mobile.ios.alpha.NetworkExtension"]
end

for_lane :alpha do
type "appstore"
for_lane :release_alpha do
app_identifier ["com.duckduckgo.mobile.ios.alpha", "com.duckduckgo.mobile.ios.alpha.ShareExtension", "com.duckduckgo.mobile.ios.alpha.OpenAction2", "com.duckduckgo.mobile.ios.alpha.Widgets", "com.duckduckgo.mobile.ios.alpha.NetworkExtension"]
end
18 changes: 9 additions & 9 deletions fastlane/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ Fetches and updates certificates and provisioning profiles for Ad-Hoc distributi
[bundle exec] fastlane sync_signing_alpha
```


Fetches and updates certificates and provisioning profiles for Alpha distribution

### adhoc

Expand All @@ -45,14 +45,6 @@ Fetches and updates certificates and provisioning profiles for Ad-Hoc distributi

Makes Ad-Hoc build with a specified name in a given directory

### alpha

```sh
[bundle exec] fastlane alpha
```

Makes Alpha release build and uploads it to App Store Connect (TestFlight)

### release_appstore

```sh
Expand All @@ -77,6 +69,14 @@ Updates App Store metadata

Makes App Store release build and uploads it to TestFlight

### release_alpha

```sh
[bundle exec] fastlane release_alpha
```

Makes Alpha release build and uploads it to TestFlight

### increment_build_number_for_version

```sh
Expand Down

0 comments on commit af47959

Please sign in to comment.