diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 02ae1e4..b77eedd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -382,13 +382,30 @@ jobs: name: framed path: fastlane/framed + # Kept, because the check below reads it. `tee` rather than a redirect so + # the step still shows what it is doing while it runs. - name: write ${{ matrix.app }}'s listing env: ASC_KEY_ID: ${{ secrets.ASC_KEY_ID }} ASC_ISSUER_ID: ${{ secrets.ASC_ISSUER_ID }} ASC_KEY_CONTENT: ${{ secrets.ASC_KEY_CONTENT }} ODR_VERSION: ${{ steps.version.outputs.version }} - run: bundle exec fastlane ios ${{ matrix.lane }} + run: | + set -o pipefail + bundle exec fastlane ios ${{ matrix.lane }} 2>&1 | tee listing.log + + # A picture that did not land is uploaded again, and if the delete of the + # failed one does not take, the store keeps both. That leaves a locale + # showing the same screenshot twice, which nothing else here would notice + # - deliver reports the run as a success. So the retry itself is the + # failure: the pictures are up either way, and this says to go and look. + - name: the screenshots went up once each + run: | + set -euo pipefail + if grep -q "Failed to upload all screenshots" listing.log; then + echo "::error::deliver retried the screenshot upload, which can leave duplicates in App Store Connect. Check ${{ matrix.app }}'s screenshots for every locale before submitting, and re-run this job to upload the set again." + exit 1 + fi record: needs: upload diff --git a/README.md b/README.md index 2aa2a9a..feeba2f 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,13 @@ It runs as five jobs: Both apps always go out together, and nothing chooses one: Pro and Lite are the same sources built as two targets, one of which links no ad sdk. +**If a `listing` job fails saying the screenshots did not go up once each**, the +set is up but a locale may hold a picture twice: deliver uploads what it thinks +did not land, and a delete that does not take leaves both. Look at the app's +screenshots in App Store Connect, and fix the set before submitting. Re-running +the job is worth a try - it clears the set before it uploads - but it has come +back doubled a second time, so check rather than assume. + **If one app's upload fails, press "Re-run failed jobs".** Only that upload runs again, against the `.ipa` already built and signed - build number included, since it is baked in at archive time - and `record` runs behind it once it lands.