Update status.json #245
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build and Release | |
| on: | |
| push: | |
| branches: | |
| - main | |
| tags: | |
| - "v*" | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| - name: Setup Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: temurin | |
| java-version: 17 | |
| cache: gradle | |
| cache-dependency-path: | | |
| android/**/*.gradle* | |
| android/**/gradle-wrapper.properties | |
| - name: Set up Android SDK | |
| uses: android-actions/setup-android@v4 | |
| with: | |
| packages: platform-tools platforms;android-34 build-tools;34.0.0 | |
| - name: Write Android local.properties | |
| run: printf 'sdk.dir=%s\n' "$ANDROID_HOME" > android/local.properties | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build browser bundles | |
| run: npm run build | |
| - name: Build Android web bundle | |
| run: npm run build:android | |
| - name: Ensure Gradle wrapper files exist | |
| working-directory: android | |
| run: | | |
| if [ ! -f gradle/wrapper/gradle-wrapper.jar ]; then | |
| echo "Bootstrapping Gradle wrapper..." | |
| mkdir -p gradle/wrapper | |
| curl -sSL "https://github.com/gradle/gradle/raw/v8.7.0/gradle/wrapper/gradle-wrapper.jar" \ | |
| -o gradle/wrapper/gradle-wrapper.jar | |
| echo "distributionBase=GRADLE_USER_HOME" > gradle/wrapper/gradle-wrapper.properties | |
| echo "distributionPath=wrapper/dists" >> gradle/wrapper/gradle-wrapper.properties | |
| echo "distributionUrl=https\\://services.gradle.org/distributions/gradle-8.7-bin.zip" >> gradle/wrapper/gradle-wrapper.properties | |
| echo "networkTimeout=10000" >> gradle/wrapper/gradle-wrapper.properties | |
| echo "validateDistributionUrl=true" >> gradle/wrapper/gradle-wrapper.properties | |
| echo "zipStoreBase=GRADLE_USER_HOME" >> gradle/wrapper/gradle-wrapper.properties | |
| echo "zipStorePath=wrapper/dists" >> gradle/wrapper/gradle-wrapper.properties | |
| fi | |
| - name: Make Gradle wrapper executable | |
| working-directory: android | |
| run: chmod +x ./gradlew | |
| - name: Decode Keystore | |
| env: | |
| BDS_KEYSTORE: ${{ secrets.BDS_KEYSTORE }} | |
| run: | | |
| if [ -n "$BDS_KEYSTORE" ]; then | |
| echo "$BDS_KEYSTORE" | base64 --decode > android/ci-release.jks | |
| else | |
| echo "Warning: BDS_KEYSTORE secret is missing. Release build might fail or be unsigned." | |
| fi | |
| - name: Build Android APK | |
| working-directory: android | |
| run: ./gradlew --no-daemon assembleRelease | |
| env: | |
| BDS_KEYSTORE_PASSWORD: ${{ secrets.BDS_KEYSTORE_PASSWORD }} | |
| BDS_KEY_ALIAS: ${{ secrets.BDS_KEY_ALIAS }} | |
| BDS_KEY_PASSWORD: ${{ secrets.BDS_KEY_PASSWORD }} | |
| - name: Verify APK Signature | |
| run: | | |
| APK_PATH=$(find android/app/build/outputs/apk/release -name "*.apk" | head -n 1) | |
| if [ -n "$APK_PATH" ]; then | |
| $ANDROID_HOME/build-tools/34.0.0/apksigner verify --verbose "$APK_PATH" | |
| else | |
| echo "No release APK found to verify." | |
| exit 1 | |
| fi | |
| - name: Compute version and prepare artifact names | |
| id: prep | |
| run: | | |
| VERSION=$(node -p "require('./package.json').version") | |
| echo "version=$VERSION" >> "$GITHUB_OUTPUT" | |
| APK_SRC=$(find android/app/build/outputs/apk/release -name "*.apk" | head -n 1) | |
| if [ "${{ github.ref }}" = "refs/heads/main" ]; then | |
| mv better-deepseek-chrome.zip better-deepseek-chrome-latest.zip | |
| mv better-deepseek-firefox.zip better-deepseek-firefox-latest.zip | |
| cp "$APK_SRC" better-deepseek-android-latest-signed.apk | |
| echo "is_tag=false" >> "$GITHUB_OUTPUT" | |
| else | |
| mv better-deepseek-chrome.zip "better-deepseek-chrome-v${VERSION}.zip" | |
| mv better-deepseek-firefox.zip "better-deepseek-firefox-v${VERSION}.zip" | |
| cp "$APK_SRC" "better-deepseek-android-v${VERSION}-signed.apk" | |
| echo "is_tag=true" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Update Latest Release | |
| if: github.ref == 'refs/heads/main' | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: latest | |
| name: Latest Build | |
| body: | | |
| This release contains the latest automated build from the `main` branch. | |
| The Android APK is now **digitally signed**. You can install it directly without Play Protect warnings (though you may still need to allow "Unknown Sources" in your browser). | |
| files: | | |
| better-deepseek-chrome-latest.zip | |
| better-deepseek-firefox-latest.zip | |
| better-deepseek-android-latest-signed.apk | |
| prerelease: true | |
| make_latest: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Create Versioned Release | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| body: | | |
| This release includes browser extension bundles and a **signed** Android APK. | |
| files: | | |
| better-deepseek-chrome-v${{ steps.prep.outputs.version }}.zip | |
| better-deepseek-firefox-v${{ steps.prep.outputs.version }}.zip | |
| better-deepseek-android-v${{ steps.prep.outputs.version }}-signed.apk | |
| generate_release_notes: true | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |