mirror of
https://github.com/l5yth/potato-mesh.git
synced 2026-03-28 17:42:48 +01:00
* app: further harden refresh logic and prefer local first * address review comments * cover missing unit test vectors
145 lines
4.9 KiB
YAML
145 lines
4.9 KiB
YAML
# Copyright © 2025-26 l5yth & contributors
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
name: Mobile Release
|
|
|
|
on:
|
|
push:
|
|
tags:
|
|
- "*"
|
|
|
|
permissions:
|
|
contents: write
|
|
actions: write
|
|
|
|
jobs:
|
|
android-release:
|
|
name: Android Release
|
|
runs-on: ubuntu-latest
|
|
defaults:
|
|
run:
|
|
working-directory: ./app
|
|
env:
|
|
TAG_NAME: ${{ github.ref_name }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Configure Android local.properties
|
|
run: |
|
|
cat > android/local.properties <<'EOF'
|
|
sdk.dir=${ANDROID_SDK_ROOT}
|
|
flutter.sdk=${FLUTTER_ROOT}
|
|
EOF
|
|
- name: Set up Flutter
|
|
uses: subosito/flutter-action@v2
|
|
with:
|
|
channel: stable
|
|
cache: true
|
|
cache-key: ${{ runner.os }}-flutter-${{ hashFiles('app/pubspec.lock') }}
|
|
- name: Install dependencies
|
|
run: flutter pub get
|
|
- name: Build release APK
|
|
run: flutter build apk --release
|
|
- name: Prepare artifacts
|
|
run: |
|
|
set -euo pipefail
|
|
APK_DIR="build/app/outputs/flutter-apk"
|
|
mv "${APK_DIR}/app-release.apk" "${APK_DIR}/potatomesh-reader-android-${TAG_NAME}.apk"
|
|
(cd "${APK_DIR}" && sha256sum "potatomesh-reader-android-${TAG_NAME}.apk" > "potatomesh-reader-android-${TAG_NAME}.apk.sha256sum")
|
|
- name: Upload release artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: potatomesh-reader-android-${{ env.TAG_NAME }}
|
|
path: |
|
|
app/build/app/outputs/flutter-apk/potatomesh-reader-android-${{ env.TAG_NAME }}.apk
|
|
app/build/app/outputs/flutter-apk/potatomesh-reader-android-${{ env.TAG_NAME }}.apk.sha256sum
|
|
|
|
ios-release:
|
|
name: iOS Release
|
|
runs-on: macos-latest
|
|
defaults:
|
|
run:
|
|
working-directory: ./app
|
|
env:
|
|
TAG_NAME: ${{ github.ref_name }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Set up Flutter
|
|
uses: subosito/flutter-action@v2
|
|
with:
|
|
channel: stable
|
|
cache: true
|
|
cache-key: ${{ runner.os }}-flutter-${{ hashFiles('app/pubspec.lock') }}
|
|
- name: Install dependencies
|
|
run: flutter pub get
|
|
- name: Build release IPA (no codesign)
|
|
run: flutter build ipa --release --no-codesign
|
|
- name: Prepare artifacts
|
|
run: |
|
|
set -euo pipefail
|
|
IPA_DIR="build/ios/ipa"
|
|
IPA_FILE="$(ls "${IPA_DIR}"/*.ipa | head -n 1)"
|
|
mv "${IPA_FILE}" "${IPA_DIR}/potatomesh-reader-ios-${TAG_NAME}.ipa"
|
|
(cd "${IPA_DIR}" && shasum -a 256 "potatomesh-reader-ios-${TAG_NAME}.ipa" > "potatomesh-reader-ios-${TAG_NAME}.ipa.sha256sum")
|
|
- name: Upload release artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: potatomesh-reader-ios-${{ env.TAG_NAME }}
|
|
path: |
|
|
app/build/ios/ipa/potatomesh-reader-ios-${{ env.TAG_NAME }}.ipa
|
|
app/build/ios/ipa/potatomesh-reader-ios-${{ env.TAG_NAME }}.ipa.sha256sum
|
|
|
|
publish-release:
|
|
name: Publish Release
|
|
runs-on: ubuntu-latest
|
|
needs:
|
|
- android-release
|
|
- ios-release
|
|
env:
|
|
TAG_NAME: ${{ github.ref_name }}
|
|
PUBLISH_RELEASE: "false"
|
|
if: ${{ startsWith(github.ref, 'refs/tags/v') }}
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Check tag format
|
|
run: |
|
|
set -euo pipefail
|
|
if [[ "${TAG_NAME}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo "PUBLISH_RELEASE=true" >> "$GITHUB_ENV"
|
|
else
|
|
echo "Non point release tag (${TAG_NAME}); skipping publish."
|
|
fi
|
|
- name: Download Android artifacts
|
|
if: env.PUBLISH_RELEASE == 'true'
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: potatomesh-reader-android-${{ env.TAG_NAME }}
|
|
path: artifacts/android
|
|
- name: Download iOS artifacts
|
|
if: env.PUBLISH_RELEASE == 'true'
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: potatomesh-reader-ios-${{ env.TAG_NAME }}
|
|
path: artifacts/ios
|
|
- name: Attach assets to release
|
|
if: env.PUBLISH_RELEASE == 'true'
|
|
uses: softprops/action-gh-release@v2
|
|
with:
|
|
tag_name: ${{ github.ref_name }}
|
|
generate_release_notes: true
|
|
files: |
|
|
artifacts/android/potatomesh-reader-android-${{ env.TAG_NAME }}.apk
|
|
artifacts/android/potatomesh-reader-android-${{ env.TAG_NAME }}.apk.sha256sum
|
|
artifacts/ios/potatomesh-reader-ios-${{ env.TAG_NAME }}.ipa
|
|
artifacts/ios/potatomesh-reader-ios-${{ env.TAG_NAME }}.ipa.sha256sum
|