Skip to content

feat: enhance browser functionality and stability #12

feat: enhance browser functionality and stability

feat: enhance browser functionality and stability #12

Workflow file for this run

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 }}"