name: Release IPA on: push: tags: - 'v*' workflow_dispatch: inputs: tag: description: 'Release tag (e.g. v3.2.2). Leave empty to use MARKETING_VERSION.' required: false default: '' permissions: contents: write concurrency: group: release-${{ github.ref }} cancel-in-progress: false jobs: release: name: Build & publish release runs-on: macos-15 timeout-minutes: 45 steps: - name: Checkout uses: actions/checkout@v4 with: fetch-depth: 0 - name: Select Xcode run: | sudo xcode-select -s /Applications/Xcode.app/Contents/Developer xcodebuild -version - name: Resolve packages run: | xcodebuild -project "Pocket Poster.xcodeproj" \ -scheme "Pocket Poster" \ -resolvePackageDependencies - name: Build IPA run: | chmod +x ./ipabuild.sh ./ipabuild.sh - name: Prepare release files id: meta run: | set -euo pipefail APP_PLIST="build/DerivedDataApp/Build/Products/Release-iphoneos/Pocket Poster.app/Info.plist" VERSION=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleShortVersionString' "$APP_PLIST") BUILD=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleVersion' "$APP_PLIST") BUNDLE_ID=$(/usr/libexec/PlistBuddy -c 'Print :CFBundleIdentifier' "$APP_PLIST") if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ -n "${{ inputs.tag }}" ]; then TAG="${{ inputs.tag }}" elif [[ "${{ github.ref }}" == refs/tags/* ]]; then TAG="${GITHUB_REF_NAME}" else TAG="v${VERSION}" fi # ipabuild.sh emits Pocket_Poster.ipa (+ legacy name) test -f "build/Pocket_Poster.ipa" || cp "build/Pocket Poster.ipa" "build/Pocket_Poster.ipa" cp "build/Pocket_Poster.ipa" "build/Pocket_Poster_${VERSION}.ipa" { echo "version=$VERSION" echo "build=$BUILD" echo "bundle_id=$BUNDLE_ID" echo "tag=$TAG" } >> "$GITHUB_OUTPUT" cat > release_notes.md <