Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Nightly alpha builds #1996

Merged
merged 29 commits into from
Sep 20, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8717ece
Add a DuckDuckGo-Alpha scheme
graeme Sep 8, 2023
9dcc941
Create alphaExportOptions.plist
graeme Sep 8, 2023
11abc9a
Adds build_alpha to Fastfile
graeme Sep 8, 2023
2bd566a
Update Matchfile to have correct lane modifier
graeme Sep 8, 2023
865031e
Add the alpha GHA workflow
graeme Sep 8, 2023
d86299e
Pass version and app_identifier to increment_build_number
graeme Sep 8, 2023
a7c3b2d
Get API key for fetching version
graeme Sep 11, 2023
c8e1360
Skip waiting for build processing
graeme Sep 12, 2023
e83a6c7
Add deploy-alpha step to nightly.yml
graeme Sep 12, 2023
2c075fb
Update README
graeme Sep 12, 2023
45a0960
Fix dSym paths
graeme Sep 12, 2023
63e149d
Fix build version reading
graeme Sep 12, 2023
648cb27
Fix asana task
graeme Sep 12, 2023
1bcd657
Fix workflow dispatch
graeme Sep 13, 2023
cf6ffc1
Remove unneeded condition
graeme Sep 13, 2023
73cc79c
Make code merge-ready (won't trigger build)
graeme Sep 13, 2023
19597fd
Handle nightly workflow_call properly
graeme Sep 18, 2023
2e6c937
Pass secrets from nightly
graeme Sep 19, 2023
e9603b6
Schedule nighty on push just for testing
graeme Sep 19, 2023
b9e25bb
Comment out branch assert
graeme Sep 19, 2023
22cca85
Update nightly name
graeme Sep 19, 2023
50caa67
Remove pull trigger etc added for testing
graeme Sep 19, 2023
32de4fa
Fix inputs for nightly job
graeme Sep 20, 2023
fbdf91c
Revert "Remove pull trigger etc added for testing"
graeme Sep 20, 2023
26b6ce7
Use env for destination
graeme Sep 20, 2023
66bff49
But like... do it properly this time
graeme Sep 20, 2023
2a721cd
Save my VS Code changes...
graeme Sep 20, 2023
7b1bbba
Revert "Revert "Remove pull trigger etc added for testing""
graeme Sep 20, 2023
d5ff780
Merge remote-tracking branch 'origin/develop' into graeme/ios-nightly…
graeme Sep 20, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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/[email protected]
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
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does this work? :) I think alpha.yml would need a workflow_call trigger set up in order to be called from another workflow. Currently it only has workflow_dispatch which is not quite the same (this one is used for running workflows manually).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah okay, good to know! Will update that.

Related: wasn’t sure how to test nightly workflows from a branch...

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed! (I think)

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