style: reposition clear all filters button to home screen header next to search input #297
Workflow file for this run
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: Android Build Validation | |
| on: | |
| workflow_dispatch: | |
| push: | |
| branches: [ main ] | |
| paths: | |
| - 'frontend/android/**' | |
| - 'frontend/package.json' | |
| - 'frontend/yarn.lock' | |
| - '.github/workflows/android-build-validation.yml' | |
| pull_request: | |
| branches: [ main ] | |
| paths: | |
| - 'frontend/android/**' | |
| - 'frontend/package.json' | |
| - 'frontend/yarn.lock' | |
| - '.github/workflows/android-build-validation.yml' | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| permissions: | |
| contents: read | |
| jobs: | |
| build-android: | |
| name: Build Android Debug | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 35 | |
| defaults: | |
| run: | |
| working-directory: ./frontend | |
| env: | |
| CI: true | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v6 | |
| - name: Setup Node & Cache Dependencies | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: 20 | |
| cache: 'yarn' | |
| cache-dependency-path: frontend/yarn.lock | |
| - name: Cache Gradle Wrapper | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.gradle/wrapper | |
| key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('frontend/android/gradle/wrapper/gradle-wrapper.properties') }} | |
| - name: Cache Gradle Dependencies | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/.gradle/caches | |
| key: ${{ runner.os }}-gradle-caches-${{ hashFiles('frontend/android/**/*.gradle*', 'frontend/android/**/gradle-wrapper.properties') }} | |
| restore-keys: | | |
| ${{ runner.os }}-gradle-caches- | |
| - name: Setup Java | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: '17' | |
| - name: Install JS Dependencies | |
| run: yarn install --frozen-lockfile | |
| - name: Grant Gradle Execute Permission | |
| working-directory: ./frontend/android | |
| run: chmod +x gradlew | |
| - name: Inject google-services.json | |
| env: | |
| GOOGLE_SERVICES_JSON: ${{ secrets.GOOGLE_SERVICES_JSON }} | |
| run: | | |
| node -e " | |
| const fs = require('fs'); | |
| let content = process.env.GOOGLE_SERVICES_JSON; | |
| if (!content || content.trim().length === 0) { | |
| console.error('GOOGLE_SERVICES_JSON is empty!'); | |
| process.exit(1); | |
| } | |
| let parsed; | |
| try { | |
| parsed = JSON.parse(content); | |
| } catch (e1) { | |
| try { | |
| const decoded = Buffer.from(content, 'base64').toString('utf8'); | |
| parsed = JSON.parse(decoded); | |
| } catch (e2) { | |
| console.error('CRITICAL ERROR: GOOGLE_SERVICES_JSON secret is corrupted.'); | |
| console.error('It is neither valid raw JSON nor valid Base64-encoded JSON.'); | |
| console.error('Raw JSON Error:', e1.message); | |
| console.error('Base64 JSON Error:', e2.message); | |
| console.error('Please re-copy your google-services.json file and update your GitHub Secret!'); | |
| process.exit(1); | |
| } | |
| } | |
| fs.writeFileSync('android/app/google-services.json', JSON.stringify(parsed, null, 2)); | |
| " | |
| - name: Compile Android Debug Build | |
| working-directory: ./frontend/android | |
| run: ./gradlew assembleDebug --console=plain | |
| - name: Upload APK Artifact (On Failure) | |
| if: failure() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: android-build-logs | |
| path: | | |
| ~/.gradle/daemon/**/daemon-*.out.log | |
| frontend/android/app/build/reports | |
| if-no-files-found: ignore | |
| retention-days: 7 |