From e139f8bf995a1ee597d402b3da0fc5994c69e642 Mon Sep 17 00:00:00 2001 From: randogoth Date: Wed, 14 Oct 2026 09:12:51 +0300 Subject: [PATCH] fix: drop third-party actions, use nix store paths + Forgejo API --- .forgejo/workflows/release.yml | 62 ++++++++++++++++++++++------------ .github/workflows/release.yml | 62 ++++++++++++++++++++++------------ 2 files changed, 82 insertions(+), 42 deletions(-) diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index eeab3e9..387c53b 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -16,40 +16,60 @@ jobs: distribution: temurin java-version: "17" - - uses: subosito/flutter-action@v2 - with: - flutter-version: "stable" - cache: true + - name: Set up Flutter and Android SDK from nix store + run: | + FLUTTER=$(find /nix/store -maxdepth 2 -name "flutter-wrapped-*-sdk-links" -type d 2>/dev/null | sort -V | tail -1) + echo "${FLUTTER}/bin" >> $GITHUB_PATH + echo "FLUTTER_ROOT=$FLUTTER" >> $GITHUB_ENV - - name: Extract version code from pubspec + ANDROID_SDK=$(find /nix/store -maxdepth 3 -path "*/android-sdk-env/share/android-sdk" -type d 2>/dev/null | sort | tail -1) + echo "ANDROID_HOME=$ANDROID_SDK" >> $GITHUB_ENV + echo "ANDROID_SDK_ROOT=$ANDROID_SDK" >> $GITHUB_ENV + + echo "Flutter: $FLUTTER" + echo "Android SDK: $ANDROID_SDK" + + - name: Extract version run: | VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //') - VERSION_CODE=$(echo "$VERSION" | grep -oP '(?<=\+)\d+') - VERSION_NAME=$(echo "$VERSION" | grep -oP '^[^+]+') - echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV - echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV + echo "VERSION_CODE=$(echo "$VERSION" | grep -oP '(?<=\+)\d+')" >> $GITHUB_ENV + echo "VERSION_NAME=$(echo "$VERSION" | grep -oP '^[^+]+')" >> $GITHUB_ENV - name: Decode keystore run: | echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/kirakira-release.jks echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android/app/kirakira-release.jks" >> $GITHUB_ENV - - name: Build release APK (prod flavor) + - name: Build release APK env: STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} run: flutter build apk --release --flavor prod - - name: Rename APK - run: | - cp build/app/outputs/flutter-apk/app-prod-release.apk \ - "kirakira-${{ env.VERSION_NAME }}.apk" - - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - files: kirakira-*.apk - body_path: fastlane/metadata/android/en-US/changelogs/${{ env.VERSION_CODE }}.txt + - name: Create Forgejo Release and upload APK env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + FORGEJO_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + APK="kirakira-${{ env.VERSION_NAME }}.apk" + cp build/app/outputs/flutter-apk/app-prod-release.apk "$APK" + + BODY=$(python3 -c " + import json, sys + print(json.dumps(open('fastlane/metadata/android/en-US/changelogs/${{ env.VERSION_CODE }}.txt').read().strip())) + ") + + RELEASE_ID=$(curl -sf -X POST \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -H "Content-Type: application/json" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases" \ + -d "{\"tag_name\":\"$GITHUB_REF_NAME\",\"name\":\"$GITHUB_REF_NAME\",\"body\":$BODY}" \ + | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + + curl -sf -X POST \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -H "Content-Type: application/vnd.android.package-archive" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID/assets?name=$APK" \ + --data-binary @"$APK" + + echo "Release created: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/tag/$GITHUB_REF_NAME" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index eeab3e9..387c53b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,40 +16,60 @@ jobs: distribution: temurin java-version: "17" - - uses: subosito/flutter-action@v2 - with: - flutter-version: "stable" - cache: true + - name: Set up Flutter and Android SDK from nix store + run: | + FLUTTER=$(find /nix/store -maxdepth 2 -name "flutter-wrapped-*-sdk-links" -type d 2>/dev/null | sort -V | tail -1) + echo "${FLUTTER}/bin" >> $GITHUB_PATH + echo "FLUTTER_ROOT=$FLUTTER" >> $GITHUB_ENV - - name: Extract version code from pubspec + ANDROID_SDK=$(find /nix/store -maxdepth 3 -path "*/android-sdk-env/share/android-sdk" -type d 2>/dev/null | sort | tail -1) + echo "ANDROID_HOME=$ANDROID_SDK" >> $GITHUB_ENV + echo "ANDROID_SDK_ROOT=$ANDROID_SDK" >> $GITHUB_ENV + + echo "Flutter: $FLUTTER" + echo "Android SDK: $ANDROID_SDK" + + - name: Extract version run: | VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //') - VERSION_CODE=$(echo "$VERSION" | grep -oP '(?<=\+)\d+') - VERSION_NAME=$(echo "$VERSION" | grep -oP '^[^+]+') - echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV - echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV + echo "VERSION_CODE=$(echo "$VERSION" | grep -oP '(?<=\+)\d+')" >> $GITHUB_ENV + echo "VERSION_NAME=$(echo "$VERSION" | grep -oP '^[^+]+')" >> $GITHUB_ENV - name: Decode keystore run: | echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/kirakira-release.jks echo "KEYSTORE_PATH=$GITHUB_WORKSPACE/android/app/kirakira-release.jks" >> $GITHUB_ENV - - name: Build release APK (prod flavor) + - name: Build release APK env: STORE_PASSWORD: ${{ secrets.STORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} run: flutter build apk --release --flavor prod - - name: Rename APK - run: | - cp build/app/outputs/flutter-apk/app-prod-release.apk \ - "kirakira-${{ env.VERSION_NAME }}.apk" - - - name: Create GitHub Release - uses: softprops/action-gh-release@v2 - with: - files: kirakira-*.apk - body_path: fastlane/metadata/android/en-US/changelogs/${{ env.VERSION_CODE }}.txt + - name: Create Forgejo Release and upload APK env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + FORGEJO_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + APK="kirakira-${{ env.VERSION_NAME }}.apk" + cp build/app/outputs/flutter-apk/app-prod-release.apk "$APK" + + BODY=$(python3 -c " + import json, sys + print(json.dumps(open('fastlane/metadata/android/en-US/changelogs/${{ env.VERSION_CODE }}.txt').read().strip())) + ") + + RELEASE_ID=$(curl -sf -X POST \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -H "Content-Type: application/json" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases" \ + -d "{\"tag_name\":\"$GITHUB_REF_NAME\",\"name\":\"$GITHUB_REF_NAME\",\"body\":$BODY}" \ + | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + + curl -sf -X POST \ + -H "Authorization: token $FORGEJO_TOKEN" \ + -H "Content-Type: application/vnd.android.package-archive" \ + "$GITHUB_SERVER_URL/api/v1/repos/$GITHUB_REPOSITORY/releases/$RELEASE_ID/assets?name=$APK" \ + --data-binary @"$APK" + + echo "Release created: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/releases/tag/$GITHUB_REF_NAME"