mirror of
https://github.com/we-promise/sure.git
synced 2026-04-07 22:34:47 +00:00
Add steps to the mobile-release workflow that checkout the gh-pages branch and update its README.md with direct download links to the latest Flutter mobile clients (Android APK, debug APK, iOS unsigned build). Uses HTML comment markers for idempotent updates on subsequent releases. https://claude.ai/code/session_01GuUjjmMzxvdSwfvhrjvJr1 Co-authored-by: Claude <noreply@anthropic.com>
195 lines
7.3 KiB
YAML
195 lines
7.3 KiB
YAML
name: Mobile Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'mobile-v*'
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
jobs:
|
|
build:
|
|
name: Build Mobile Apps
|
|
uses: ./.github/workflows/flutter-build.yml
|
|
secrets: inherit
|
|
|
|
release:
|
|
name: Create Mobile GitHub Release
|
|
needs: [build]
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
|
|
permissions:
|
|
contents: write
|
|
|
|
steps:
|
|
- name: Extract version from tag
|
|
id: version
|
|
run: |
|
|
# Strip 'mobile-' prefix to get the version part (e.g., 'mobile-v1.0.0' -> 'v1.0.0')
|
|
VERSION="${GITHUB_REF_NAME#mobile-}"
|
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
|
echo "Extracted version: $VERSION"
|
|
|
|
- name: Download Android APK artifact
|
|
uses: actions/download-artifact@v4.3.0
|
|
with:
|
|
name: app-release-apk
|
|
path: ${{ runner.temp }}/mobile-artifacts
|
|
|
|
- name: Download iOS build artifact
|
|
uses: actions/download-artifact@v4.3.0
|
|
with:
|
|
name: ios-build-unsigned
|
|
path: ${{ runner.temp }}/ios-build
|
|
|
|
- name: Prepare release assets
|
|
run: |
|
|
set -euo pipefail
|
|
mkdir -p ${{ runner.temp }}/release-assets
|
|
|
|
echo "=== Downloaded artifacts ==="
|
|
echo "Mobile artifacts:"
|
|
ls -laR "${{ runner.temp }}/mobile-artifacts" || echo "No mobile-artifacts directory"
|
|
echo "iOS build:"
|
|
ls -laR "${{ runner.temp }}/ios-build" || echo "No ios-build directory"
|
|
echo "==========================="
|
|
|
|
# Copy debug APK if it exists
|
|
if [ -f "${{ runner.temp }}/mobile-artifacts/app-debug.apk" ]; then
|
|
cp "${{ runner.temp }}/mobile-artifacts/app-debug.apk" \
|
|
"${{ runner.temp }}/release-assets/sure-${{ steps.version.outputs.version }}-debug.apk"
|
|
echo "✓ Debug APK prepared"
|
|
fi
|
|
|
|
# Copy release APK if it exists
|
|
if [ -f "${{ runner.temp }}/mobile-artifacts/app-release.apk" ]; then
|
|
cp "${{ runner.temp }}/mobile-artifacts/app-release.apk" \
|
|
"${{ runner.temp }}/release-assets/sure-${{ steps.version.outputs.version }}.apk"
|
|
echo "✓ Release APK prepared"
|
|
fi
|
|
|
|
# Create iOS app archive (zip the .app bundle)
|
|
if [ -d "${{ runner.temp }}/ios-build/ios/iphoneos/Runner.app" ]; then
|
|
cd "${{ runner.temp }}/ios-build/ios/iphoneos"
|
|
zip -r "${{ runner.temp }}/release-assets/sure-${{ steps.version.outputs.version }}-ios-unsigned.zip" Runner.app
|
|
echo "✓ iOS build archive prepared"
|
|
fi
|
|
|
|
# Copy iOS build info
|
|
if [ -f "${{ runner.temp }}/ios-build/ios-build-info.txt" ]; then
|
|
cp "${{ runner.temp }}/ios-build/ios-build-info.txt" "${{ runner.temp }}/release-assets/"
|
|
fi
|
|
|
|
echo "Release assets:"
|
|
ls -la "${{ runner.temp }}/release-assets/"
|
|
|
|
# Fail early if no assets were produced
|
|
if [ -z "$(ls -A "${{ runner.temp }}/release-assets/")" ]; then
|
|
echo "::error::No release assets were produced"
|
|
exit 1
|
|
fi
|
|
|
|
- name: Create GitHub Release
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ github.ref_name }}
|
|
name: "${{ steps.version.outputs.version }} (Mobile)"
|
|
draft: false
|
|
prerelease: ${{ contains(github.ref_name, 'alpha') || contains(github.ref_name, 'beta') || contains(github.ref_name, 'rc') }}
|
|
generate_release_notes: false
|
|
files: |
|
|
${{ runner.temp }}/release-assets/*
|
|
body: |
|
|
## Mobile-Only Release: ${{ steps.version.outputs.version }}
|
|
|
|
This is a mobile-only release. It does not include server-side changes.
|
|
|
|
### Downloads
|
|
|
|
- **Android APK**: Debug build for testing on Android devices
|
|
- **iOS Build**: Unsigned iOS build (requires code signing for installation)
|
|
|
|
> **Note**: These are builds intended for testing purposes. For production use, please build from source with proper signing credentials.
|
|
|
|
- name: Checkout gh-pages branch
|
|
uses: actions/checkout@v4
|
|
with:
|
|
ref: gh-pages
|
|
path: gh-pages
|
|
|
|
- name: Update README with latest mobile release links
|
|
run: |
|
|
set -euo pipefail
|
|
VERSION="${{ steps.version.outputs.version }}"
|
|
TAG="${{ github.ref_name }}"
|
|
REPO="${{ github.repository }}"
|
|
|
|
# Build download links based on which assets were produced
|
|
LINKS=""
|
|
if [ -f "${{ runner.temp }}/release-assets/sure-${VERSION}.apk" ]; then
|
|
LINKS="${LINKS}- **Android APK**: [sure-${VERSION}.apk](https://github.com/${REPO}/releases/download/${TAG}/sure-${VERSION}.apk)\n"
|
|
fi
|
|
if [ -f "${{ runner.temp }}/release-assets/sure-${VERSION}-debug.apk" ]; then
|
|
LINKS="${LINKS}- **Android Debug APK**: [sure-${VERSION}-debug.apk](https://github.com/${REPO}/releases/download/${TAG}/sure-${VERSION}-debug.apk)\n"
|
|
fi
|
|
if [ -f "${{ runner.temp }}/release-assets/sure-${VERSION}-ios-unsigned.zip" ]; then
|
|
LINKS="${LINKS}- **iOS Build (unsigned)**: [sure-${VERSION}-ios-unsigned.zip](https://github.com/${REPO}/releases/download/${TAG}/sure-${VERSION}-ios-unsigned.zip)\n"
|
|
fi
|
|
|
|
# Build the mobile downloads section
|
|
SECTION="$(cat <<BLOCK
|
|
<!-- MOBILE_DOWNLOADS_START -->
|
|
## Latest Mobile Release: ${VERSION}
|
|
|
|
**Release page**: [${TAG}](https://github.com/${REPO}/releases/tag/${TAG})
|
|
|
|
### Direct Downloads
|
|
|
|
$(echo -e "$LINKS")
|
|
|
|
> **Note**: These are builds intended for testing purposes. For production use, please build from source with proper signing credentials.
|
|
<!-- MOBILE_DOWNLOADS_END -->
|
|
BLOCK
|
|
)"
|
|
|
|
# Strip leading whitespace from heredoc indentation
|
|
SECTION="$(echo "$SECTION" | sed 's/^ //')"
|
|
|
|
README="gh-pages/README.md"
|
|
|
|
if [ ! -f "$README" ]; then
|
|
# No README yet — create one
|
|
printf "# Sure\n\n%s\n" "$SECTION" > "$README"
|
|
elif grep -q '<!-- MOBILE_DOWNLOADS_START -->' "$README"; then
|
|
# Replace existing mobile section between markers
|
|
awk '
|
|
/<!-- MOBILE_DOWNLOADS_START -->/ { skip=1; next }
|
|
/<!-- MOBILE_DOWNLOADS_END -->/ { skip=0; next }
|
|
!skip { print }
|
|
' "$README" > "${README}.tmp"
|
|
|
|
# Re-insert the updated section at the end
|
|
printf "%s\n\n%s\n" "$(cat "${README}.tmp")" "$SECTION" > "$README"
|
|
rm "${README}.tmp"
|
|
else
|
|
# Append mobile section to existing README
|
|
printf "\n%s\n" "$SECTION" >> "$README"
|
|
fi
|
|
|
|
echo "Updated README.md:"
|
|
cat "$README"
|
|
|
|
- name: Push updated README to gh-pages
|
|
run: |
|
|
cd gh-pages
|
|
git config user.name "${{ github.actor }}"
|
|
git config user.email "${{ github.actor }}@users.noreply.github.com"
|
|
git add README.md
|
|
if git diff --cached --quiet; then
|
|
echo "No README changes to push."
|
|
exit 0
|
|
fi
|
|
git commit -m "Update mobile download links for ${{ steps.version.outputs.version }}"
|
|
git push |