name: Build APK and Create GitHub Release on: workflow_dispatch: inputs: version: description: "Release version without leading v. Example: 1.0.0. Leave empty to read the top CHANGELOG heading." required: false type: string permissions: contents: write jobs: release: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Java 17 uses: actions/setup-java@v5 with: distribution: temurin java-version: "17" - name: Set up Android SDK uses: android-actions/setup-android@v4 - name: Set up Flutter uses: subosito/flutter-action@v2 with: channel: stable cache: true - name: Install required Android SDK packages shell: bash run: | set -euo pipefail sdkmanager \ "platform-tools" \ "platforms;android-35" \ "build-tools;34.0.0" \ "build-tools;35.0.0" - name: Get dependencies run: flutter pub get - name: Resolve version and tag id: meta shell: bash run: | set -euo pipefail INPUT_VERSION="${{ github.event.inputs.version }}" if [[ -n "${INPUT_VERSION}" ]]; then VERSION="${INPUT_VERSION#v}" else VERSION="$(python3 .github/scripts/get_version.py)" fi TAG="v${VERSION}" echo "version=${VERSION}" >> "$GITHUB_OUTPUT" echo "tag=${TAG}" >> "$GITHUB_OUTPUT" - name: Extract release notes from CHANGELOG.md shell: bash env: VERSION: ${{ steps.meta.outputs.version }} run: python3 .github/scripts/get_notes.py - name: Decode Android keystore shell: bash run: | set -euo pipefail mkdir -p android/app echo "${{ secrets.ANDROID_KEYSTORE_BASE64 }}" | base64 --decode > android/app/upload-keystore.jks chmod 600 android/app/upload-keystore.jks - name: Create Android key.properties shell: bash run: | set -euo pipefail cat > android/key.properties </dev/null 2>&1; then echo "Tag already exists on remote: ${TAG}" exit 1 fi git tag -a "${TAG}" -m "Release ${TAG}" git push origin "${TAG}" - name: Create GitHub Release uses: softprops/action-gh-release@v3 with: tag_name: ${{ steps.meta.outputs.tag }} name: FocusGram ${{ steps.meta.outputs.tag }} body_path: release_notes.md files: build/app/outputs/flutter-apk/focusgram-release.apk draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}