ci(ios): re-home the remaining iOS workflows, held on dispatch - #741
Merged
Merged
Conversation
GitHub reads workflows only from the repository root, so everything under hosts/ios/.github/workflows/ is inert. These seven are the ones that never trigger themselves: two are workflow_call, five are workflow_dispatch. Moving them changes no scheduled or pull request behaviour, so the mechanical work lands before the secrets and runners that the pull request checks need. Paths now resolve from the repository root. Composite action references become ./hosts/ios/.github/actions/..., which is also how the workflow_call references between these files start resolving at all, since a local uses: path is always read from the root regardless of where the calling file sits. Steps that drive the app rather than the repository run from hosts/ios: the fastlane invocations, the xcconfig edit, and the TestFlight build number lookup. Steps that take a path argument keep a root-relative one instead, so read-build-version reads a prefixed pbxproj default and a prefixed script path. The shared composite actions pick up the same treatment: bundler resolves hosts/ios/Gemfile, the SPM cache points at hosts/ios/source_packages, the generated secrets and GoogleService-Info.plist land under hosts/ios, and the built ipa is uploaded from there. None of this is exercised yet. No current job resolves these workflows, and the build itself needs the credentials tracked in #672, so this is verified by actionlint and by every local reference resolving, not by a run.
The last eight, which is every iOS workflow that triggers itself. Four run on pull_request and four on a schedule, so unlike the first batch they cannot be moved and left alone: at the repository root they would run, and the build credentials tracked in #672 are not all in place. Each live trigger is therefore commented out rather than deleted, with the note that restoring it is what puts the workflow live. The original filters are preserved exactly, including the pull_request types and branch lists and the cron expressions, so going live is a readable diff rather than a rewrite. pr.yml and release_branch_lifecycle.yml carried only pull_request, so they gain a workflow_dispatch trigger to stay valid. Paths get the same treatment as the first batch. Steps that drive the app run from hosts/ios, artifact and upload paths are prefixed, and the simulator release writes a root-relative archive path because the release step resolves it from the workspace. These files are linted for the first time by moving to the root, so the pre-existing findings are fixed here: six unquoted GITHUB_ENV and GITHUB_OUTPUT redirects, and a glob that could be read as options. Two things deliberately left for the follow-up that restores the triggers. The branch filters name develop and main from the source repository's branching model, which does not apply here. And no run has exercised any of this.
|
CI Status: 17 required jobs green, 13 passed and 4 skipped by path filter. All job results
Commit |
This was referenced Sep 14, 2026
TarikGul
marked this pull request as ready for review
September 14, 2026 12:39
pgherveou
approved these changes
Sep 14, 2026
valentinfernandez1
approved these changes
Sep 14, 2026
filvecchiato
approved these changes
Sep 14, 2026
This was referenced Sep 14, 2026
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #728, so that merges first. Together they finish the move: all
fifteen iOS workflows live at the repository root, none of them under
hosts/ios/.github/workflows/where GitHub never read them.These eight are the ones that trigger themselves, four on
pull_requestandfour on a schedule. So unlike the first batch they cannot simply be moved: at the
root they would run, and not every credential in #672 is in place.
Each live trigger is commented out rather than deleted:
The original filters are preserved exactly, the
pull_requesttypes and branchlists and the cron expressions, so restoring them is a readable diff rather than
a rewrite.
ios-pr.ymlandios-release-branch-lifecycle.ymlcarried onlypull_request, so they gainworkflow_dispatchto remain valid.Paths get the first batch's treatment. Steps that drive the app run from
hosts/ios, artifact and upload paths are prefixed, and the simulator releasewrites a root-relative archive path because the release step resolves it from the
workspace rather than the step's directory.
Moving to the root also means these files are linted for the first time, so the
pre-existing findings are fixed here rather than left to redden
mainonce#736 lands: six unquoted
GITHUB_ENVandGITHUB_OUTPUTredirects, and aglob that could be read as options.
Two things left for the follow-up that restores the triggers. The branch filters
name
developandmainfrom the source repository's branching model, whichdoes not apply here, so they need revisiting rather than restoring verbatim. And
nothing here has been exercised by a run, which needs the last two credentials.
Part of #680.