docs: add comprehensive privacy policy (#8) #8
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: Release | |
| on: | |
| push: | |
| branches: | |
| - main | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| release: | |
| name: Release - Test, Build & Publish | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 60 | |
| steps: | |
| # Generate GitHub App token for authentication | |
| - name: Generate GitHub App Token | |
| id: generate-token | |
| uses: actions/create-github-app-token@v1 | |
| with: | |
| app-id: ${{ secrets.APP_ID }} | |
| private-key: ${{ secrets.APP_PRIVATE_KEY }} | |
| # Setup | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| token: ${{ steps.generate-token.outputs.token }} | |
| - name: Set up Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: '22' | |
| - name: Install semantic-release | |
| run: | | |
| npm install -g \ | |
| semantic-release@latest \ | |
| @semantic-release/git@latest \ | |
| @semantic-release/changelog@latest \ | |
| @semantic-release/exec@latest \ | |
| conventional-changelog-conventionalcommits@latest | |
| - name: Set up Java | |
| uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'temurin' | |
| java-version: '21' | |
| cache: 'gradle' | |
| - name: Set up Flutter | |
| uses: subosito/flutter-action@v2 | |
| with: | |
| flutter-version: '3.35.4' | |
| channel: 'stable' | |
| cache: true | |
| # Dependencies & Code Generation | |
| - name: Install dependencies | |
| run: flutter pub get | |
| - name: Generate Drift code | |
| run: dart run build_runner build --delete-conflicting-outputs | |
| - name: Generate app icons | |
| run: dart run flutter_launcher_icons | |
| # Configure Android signing | |
| - name: Decode keystore | |
| run: | | |
| echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > android/app/upload-keystore.jks | |
| shell: bash | |
| - name: Create key.properties | |
| run: | | |
| cat > android/key.properties << EOF | |
| storePassword=${{ secrets.KEYSTORE_PASSWORD }} | |
| keyPassword=${{ secrets.KEY_PASSWORD }} | |
| keyAlias=${{ secrets.KEY_ALIAS }} | |
| storeFile=upload-keystore.jks | |
| EOF | |
| shell: bash | |
| # Semantic Release (analyzes commits, builds artifacts, creates release with assets) | |
| - name: Run semantic-release | |
| env: | |
| GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} | |
| run: npx semantic-release | |
| # Upload to Google Play Store | |
| - name: Upload to Google Play Store | |
| if: success() | |
| uses: r0adkll/upload-google-play@v1 | |
| with: | |
| serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_SERVICE_ACCOUNT_JSON }} | |
| packageName: com.michieldean.foster_squirrel | |
| releaseFiles: build/app/outputs/bundle/release/*.aab | |
| track: production | |
| status: completed | |
| whatsNewDirectory: distribution/whatsnew | |
| mappingFile: android/build/app/outputs/mapping/release/mapping.txt |