Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
4 changes: 2 additions & 2 deletions .github/workflows/create-release-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,8 +96,8 @@ jobs:
echo "---"
echo ""
echo "このPRへのpushの度に、Xcode Cloudの「Upload Release Candidate TestFlight」workflowが"
echo "外部TestFlightにビルドを配信します。マージすると、タグ作成・GitHub Release publish・"
echo "メタデータ同期・Xcode CloudのUpload For AppStore起動が自動で走ります(doc/adr/0016)。"
echo "外部TestFlightにビルドを配信し、「Upload For AppStore」workflowがApp Store Connectへビルドを"
echo "アップロードします。マージするとタグ作成・GitHub Release publishだけが走ります(doc/adr/0027)。"
} > pr_body.md

- name: Create pull request
Expand Down
31 changes: 8 additions & 23 deletions .github/workflows/release-merged.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
name: Release Merged

# doc/adr/0016: リリースPR(release/*ブランチ)がmainにマージされたことをトリガーに、
# タグ作成 → GitHub Release publish → メタデータ同期 → Xcode Cloud起動 の順で実行する。
# 実行順序を保証するため、あえて1ジョブの直列ステップとして書く(並列ジョブにしない)。
# doc/adr/0027: リリースPR(release/*ブランチ)がmainにマージされたことをトリガーに、
# タグ作成 → GitHub Release publish だけを行う。
# メタデータ同期(sync-metadata.yml)とApp Storeへのビルドアップロードはここからは起動しない。
on:
pull_request:
types: [closed]

permissions:
contents: write
actions: write

jobs:
release:
Expand Down Expand Up @@ -46,31 +45,17 @@ jobs:

- name: Publish GitHub Release
run: |
# 同じバージョンのReleaseが既にあれば削除して作り直す(タグと同様に上書き扱いにする)。
# --cleanup-tagは付けない(直前でpushしたタグまで消えてしまうため)
if gh release view "$VERSION" > /dev/null 2>&1; then
gh release delete "$VERSION" --yes
fi
Comment on lines +50 to +52

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Handle immutable releases before force-pushing their tags

When release immutability is enabled and this job is rerun for a version whose published release already exists, the force-push on line 44 runs before this cleanup. gh release create --help documents that under immutable releases, “Git tags associated with a release cannot be modified or deleted,” so the push fails and these deletion lines are never reached, defeating the newly added release-recreation path. Handle the existing release before attempting to move its tag, or avoid force-updating the tag.

Useful? React with 👍 / 👎.

gh release create "$VERSION" \
--title "$VERSION" \
--generate-notes \
--latest \
--target main

- name: Trigger metadata sync workflow
run: gh workflow run sync-metadata.yml --ref main -f version="$VERSION"

- name: Trigger Xcode Cloud Upload For AppStore build
env:
ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }}
ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }}
ASC_SECRET_KEY: ${{ secrets.ASC_SECRET_KEY }}
XCODE_CLOUD_APPSTORE_WORKFLOW_ID: ${{ secrets.XCODE_CLOUD_APPSTORE_WORKFLOW_ID }}
run: |
KEY_PATH="$(mktemp)"
echo "$ASC_SECRET_KEY" | base64 -d > "$KEY_PATH"
if [ ! -s "$KEY_PATH" ]; then
echo "::error::ASC_SECRET_KEY のデコード結果が空でした。シークレットの設定値を確認してください"
exit 1
fi
ASC_API_KEY_PATH="$KEY_PATH" ./scripts/trigger-xcode-cloud-build.sh "$XCODE_CLOUD_APPSTORE_WORKFLOW_ID" main
rm -f "$KEY_PATH"

- name: Create summary

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Badge Update the release PR guidance after disabling automation

When a release PR is created through .github/workflows/create-release-pr.yml, its generated body still says that merging automatically runs metadata synchronization and the Xcode Cloud Upload For AppStore workflow (lines 98–100). This workflow now proceeds directly from publishing the GitHub Release to its summary, so an operator following the PR instructions can omit both newly manual steps and leave the App Store release incomplete. Update the generated PR body/checklist to describe the required manual steps and their order.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

ご指摘ありがとうございます。f0fd2616 で対応しました。create-release-pr.yml が生成するリリースPRの本文を「マージで自動実行されるのはタグ作成とGitHub Release publishだけ」に直し、マージ後に手動で行う手順(Sync Metadata → Xcode CloudのUpload For AppStore)を、順番付きのチェックリストとして追加しました。

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

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

追加対応: 3be03e2 でマージ後の手動手順を削除しました。Xcode Cloudの「Upload For AppStore」の開始条件を release/ ブランチへの変更に変えるため、マージ後に手動で実行する処理はなくなります(メタデータ同期も不要)。リリースPRの本文は、PRへのpushでTestFlight配信とApp Storeへのアップロードが走り、マージではタグ作成とGitHub Release publishだけが走る、という説明にしました。

if: always()
run: |
Expand Down
5 changes: 2 additions & 3 deletions .github/workflows/sync-metadata.yml
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
name: Sync Metadata

# doc/adr/0016: release-merged.yml からのGitHub Release publish後にキックされる。
# fastlane/metadata配下のテキストメタデータをApp Store Connectへ同期する
# doc/adr/0016: fastlane/metadata配下のテキストメタデータをApp Store Connectへ同期する
# (fastlane sync_metadataレーン、Fastfile参照)。ビルドのアップロードは行わない。
# versionはASC上のバージョン作成にも使うため必須。対象バージョンがASCに無ければ新規作成し、
# 既にあればメタデータの更新のみ行う(Fastfileのsync_metadataレーン参照)。
# 単独での再実行やスクリーンショット追加後の確認用に workflow_dispatch でも起動できる。
# release-merged.yml からは起動しない(doc/adr/0027)。必要なときに workflow_dispatch で手動実行する。
on:
workflow_dispatch:
inputs:
Expand Down
3 changes: 1 addition & 2 deletions ci_scripts/ci_post_xcodebuild.sh
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,7 @@ case "$CI_WORKFLOW" in
echo "=== Upload For AppStore workflow ==="

# doc/adr/0016: バージョンタグの作成はGitHub Actions側(release-merged.yml、
# リリースPRのmainマージ時)に一本化した。このworkflowはGitHub Actions側から
# APIでキックされる時点で既にタグが打たれている前提のため、ここでは何もしない。
# リリースPRのmainマージ時)に一本化したため、ここでは何もしない。
echo "Tag creation is handled by GitHub Actions (release-merged.yml). Nothing to do here."
echo "==========================="
;;
Expand Down
2 changes: 1 addition & 1 deletion doc/adr/0016-release-pipeline-automation.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## タイトル: リリースPR作成〜App Store提出までのパイプラインを自動化し、タグ作成をGitHub Actions側に一本化する

* **ステータス: 承認済**
* **ステータス: 承認済**(リリースPRマージ時のメタデータ同期・Xcode Cloud起動は [ADR-0027](0027-release-merged-tag-and-release-only.md) で廃止)
* 意思決定者: @stotic-dev
* 日付: 2026-09-05
* 技術的背景やその他関連チケット No: [#237](https://github.com/stotic-dev/homete_iOS/issues/237) / [#238](https://github.com/stotic-dev/homete_iOS/issues/238)
Expand Down
46 changes: 46 additions & 0 deletions doc/adr/0027-release-merged-tag-and-release-only.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
## タイトル: リリースPRマージ時の自動処理をタグ作成とGitHub Release公開だけに絞る

* **ステータス: 承認済**
* 意思決定者: @stotic-dev
* 日付: 2026-09-29
* 技術的背景やその他関連チケット No: [ADR-0016](0016-release-pipeline-automation.md) の一部を置き換える

## 文脈、背景や問題点の説明

[ADR-0016](0016-release-pipeline-automation.md) では、リリースPRのmainマージをトリガーに `release-merged.yml` が「タグ作成 → GitHub Release publish → メタデータ同期 → Xcode Cloud起動」を直列で実行する構成にした。

v1.0.0のリリースで、このうちXcode Cloud起動のステップが失敗した(`XCODE_CLOUD_APPSTORE_WORKFLOW_ID` のシークレットが登録されておらず、`scripts/trigger-xcode-cloud-build.sh` に空のワークフローIDが渡った)。一方で、Xcode Cloudの「Upload For AppStore」は開始条件が「すべてのタグ」になっており、`release-merged.yml` がpushしたタグで起動していた。つまりAPIでの起動ステップは不要で、マージ時にメタデータ同期とApp Storeへのビルドアップロードが自動で走ること自体も望んでいなかった。マージ時に自動で走らせたい処理は、タグ付けとGitHub Releaseの公開だけだった。

## 決定事項

* `release-merged.yml` が行う処理を「タグ作成・push」と「GitHub Release作成・publish」だけにする
* メタデータ同期(`sync-metadata.yml`)の起動と、Xcode Cloud「Upload For AppStore」の起動をワークフローから外す
* `sync-metadata.yml` 自体は残し、必要なときに `workflow_dispatch` で手動実行する
* 呼び出し元がなくなった `scripts/trigger-xcode-cloud-build.sh` を削除する
* 起動するワークフローがなくなったので、`release-merged.yml` の `actions: write` 権限を外す
* Xcode Cloud「Upload For AppStore」の開始条件を「すべてのタグ」から「`release/` ブランチへの変更」に変える(App Store Connect側の設定のため、リポジトリでは管理しない)
* タグのpushでは起動しなくなり、リリースPRへのpushの度にApp Store Connectへビルドがアップロードされる

## 考慮した選択肢

* **シークレットを登録してADR-0016の構成を維持する**: マージからビルドのアップロードまで自動化できる。ただし、`ciBuildRuns` を作成する部分は一度も動作確認できておらず、自動化したい範囲でもないため採用しない
* **タグ作成とGitHub Release公開だけに絞る**: 採用

## 決定結果

### 決定にあたり考慮したメリット

* 動作確認できていないAPI呼び出しや、未登録のシークレットが原因でリリースワークフローが失敗しなくなる
* リリースPRのマージがApp Store Connectへの反映を伴わなくなり、マージの影響範囲がタグとGitHub Releaseに限られる
* ワークフローが必要とするシークレット・権限が減る(ASC APIキー、`actions: write` が不要になる)

### 決定にあたり考慮したデメリット

* メタデータ同期は必要なときに手動で実行する必要がある
* 「Upload For AppStore」の開始条件はApp Store Connect側の設定で、リポジトリの記述と食い違っても気付きにくい

## 参考

* [ADR-0016](0016-release-pipeline-automation.md)
* `.github/workflows/release-merged.yml`
* `.github/workflows/sync-metadata.yml`
3 changes: 1 addition & 2 deletions fastlane/Fastfile
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,7 @@ platform :ios do
)
end

# 通常のリリースはGitHub Actions(release-merged.yml)がXcode Cloudの
# 「Upload For AppStore」workflowをキックする形に移行した(doc/adr/0016)。
# 通常のリリースはXcode Cloudの「Upload For AppStore」workflow(release/*ブランチへのpushで起動)で行う(doc/adr/0027)。
# このレーンはローカルから手動でビルド・アップロードする場合の代替手段として残す。
# タグ作成もGitHub Actions側(PRマージ時)で行うようになったため、ここでは打たない。
desc "指定されたipaでApp Storeリリースを行う(ローカル手動実行用のフォールバック)"
Expand Down
207 changes: 0 additions & 207 deletions scripts/trigger-xcode-cloud-build.sh

This file was deleted.

Loading