feat(browser): add tab reset utility and refine media playback #14
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" ] | |
| tags: | |
| - 'v*' | |
| workflow_dispatch: | |
| inputs: | |
| tag_name: | |
| description: 'Tag name (e.g. v1.0.8)' | |
| required: false | |
| default: '' | |
| permissions: | |
| contents: write | |
| env: | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true | |
| jobs: | |
| release: | |
| name: Build & Publish Release | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Compute and Increment Version | |
| id: version_step | |
| run: | | |
| RUN_NUM="${{ github.run_number }}" | |
| CALC_CODE=$((100 + RUN_NUM)) | |
| if [[ "${{ github.ref }}" == refs/tags/v* ]]; then | |
| TAG="${{ github.ref_name }}" | |
| VER="${TAG#v}" | |
| elif [ -n "${{ inputs.tag_name }}" ]; then | |
| TAG="${{ inputs.tag_name }}" | |
| VER="${TAG#v}" | |
| else | |
| VER="1.0.${CALC_CODE}" | |
| TAG="v${VER}" | |
| fi | |
| echo "APP_VERSION_CODE=${CALC_CODE}" >> $GITHUB_ENV | |
| echo "APP_VERSION_NAME=${VER}" >> $GITHUB_ENV | |
| echo "tag=${TAG}" >> $GITHUB_OUTPUT | |
| echo "version=${VER}" >> $GITHUB_OUTPUT | |
| echo "version_code=${CALC_CODE}" >> $GITHUB_OUTPUT | |
| echo "Target Tag: ${TAG} (Version Name: ${VER}, Version Code: ${CALC_CODE})" | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v5 | |
| with: | |
| java-version: '21' | |
| distribution: 'microsoft' | |
| cache: gradle | |
| - name: Setup Android Release Keystore | |
| run: | | |
| if [ ! -f release.keystore ]; then | |
| echo "Generating consistent release.keystore for signing..." | |
| keytool -genkeypair -v -keystore release.keystore -alias feather_release_key -keyalg RSA -keysize 2048 -validity 10000 -storepass feather123 -keypass feather123 -dname "CN=Feather Browser, OU=Mobile Applications, O=Feather Privacy Browser, L=San Francisco, ST=California, C=US" | |
| fi | |
| if [ ! -f debug.keystore ]; then | |
| cp release.keystore debug.keystore || true | |
| fi | |
| - name: Grant execute permission for gradlew | |
| run: chmod +x gradlew | |
| - name: Build Release APK | |
| run: ./gradlew assembleRelease --no-daemon -Dkotlin.compiler.execution.strategy=daemon --stacktrace | |
| - name: Prepare Release Assets | |
| id: prepare_asset | |
| run: | | |
| TAG="${{ steps.version_step.outputs.tag }}" | |
| VER="${{ steps.version_step.outputs.version }}" | |
| mkdir -p release-assets | |
| APK_NAME="Feather-Browser-${TAG}.apk" | |
| cp app/build/outputs/apk/release/app-release.apk "release-assets/${APK_NAME}" | |
| cp app/build/outputs/apk/release/app-release.apk "release-assets/Feather-Browser-Release.apk" | |
| cd release-assets | |
| sha256sum "${APK_NAME}" > "${APK_NAME}.sha256" | |
| sha256sum "Feather-Browser-Release.apk" > "Feather-Browser-Release.apk.sha256" | |
| echo "apk_name=${APK_NAME}" >> $GITHUB_OUTPUT | |
| - name: Upload APK as Workflow Artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ steps.prepare_asset.outputs.apk_name }} | |
| path: release-assets/* | |
| retention-days: 90 | |
| - name: Publish GitHub Release | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| run: | | |
| TAG="${{ steps.version_step.outputs.tag }}" | |
| VER="${{ steps.version_step.outputs.version }}" | |
| echo "Publishing release for ${TAG}..." | |
| # Delete existing release & tag on GitHub if re-running or updating | |
| gh release delete "${TAG}" --yes --cleanup-tag 2>/dev/null || true | |
| # Create release and upload all assets with GitHub CLI | |
| gh release create "${TAG}" release-assets/* \ | |
| --title "Feather Browser ${TAG}" \ | |
| --generate-notes \ | |
| --latest \ | |
| --target "${{ github.sha }}" | |