Skip to content

BAOSP Nightly Bundle #12

BAOSP Nightly Bundle

BAOSP Nightly Bundle #12

Workflow file for this run

name: BAOSP Nightly Bundle
on:
# Runs every night at midnight UTC
schedule:
- cron: '0 0 * * *'
# Also runnable manually any time
workflow_dispatch:
permissions:
contents: write
jobs:
# ──────────────────────────────────────────────
# Job 1: Build baosp-screenreader APK
# ──────────────────────────────────────────────
build-screenreader:
name: Build Screen Reader (baosp-screenreader)
runs-on: ubuntu-22.04
steps:
- name: Checkout baosp-screenreader — latest main
uses: actions/checkout@v4
with:
repository: tech-master33/baosp-screenreader
ref: main
fetch-depth: 0
path: baosp-screenreader
- name: Print commit being built
run: |
cd baosp-screenreader
echo "baosp-screenreader commit:"
git log -1 --format="%H %s (%ci)"
echo "ANDRDSCREN_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
echo "ANDRDSCREN_MSG=$(git log -1 --format='%s')" >> $GITHUB_ENV
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Grant Gradle execute permission
run: chmod +x baosp-screenreader/gradlew
- name: Build APK
working-directory: baosp-screenreader
run: ./gradlew clean assembleDebug --no-daemon --stacktrace
- name: Rename APK with version info
run: |
APK=$(find baosp-screenreader/app/build/outputs/apk/debug -name "*.apk" | head -1)
mkdir -p /tmp/bundle
cp "$APK" "/tmp/bundle/baosp-screenreader-${{ env.ANDRDSCREN_SHA }}.apk"
echo "Screen reader APK ready: $(ls -lh /tmp/bundle/baosp-screenreader-*.apk)"
- name: Upload screen reader APK
uses: actions/upload-artifact@v4
with:
name: bundle-screenreader
path: /tmp/bundle/baosp-screenreader-*.apk
retention-days: 3
if-no-files-found: error
# ──────────────────────────────────────────────
# Job 2: Build baosp-tts TTS engine APK
# ──────────────────────────────────────────────
build-baosp-tts:
name: Build TTS Engine (baosp-tts)
runs-on: ubuntu-22.04
steps:
- name: Checkout baosp-tts — latest main
uses: actions/checkout@v4
with:
repository: tech-master33/baosp-tts
ref: main
fetch-depth: 0
path: baosp-tts
- name: Print commit being built
run: |
cd baosp-tts
echo "baosp-tts commit:"
git log -1 --format="%H %s (%ci)"
echo "AOTTS_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
echo "AOTTS_MSG=$(git log -1 --format='%s')" >> $GITHUB_ENV
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Install Android NDK and CMake
run: |
echo "y" | sdkmanager "ndk;23.1.7779620" "cmake;3.22.1"
echo "NDK_HOME=$ANDROID_SDK_ROOT/ndk/23.1.7779620" >> $GITHUB_ENV
- name: Download SVOX Pico native source
working-directory: baosp-tts
run: |
mkdir -p src/main/cpp/pico
git clone --depth=1 \
https://android.googlesource.com/platform/external/svox \
/tmp/svox_src
cp -r /tmp/svox_src/pico/* src/main/cpp/pico/
- name: Download SVOX Pico language data
working-directory: baosp-tts
run: |
mkdir -p src/main/assets/lang
SVOX_LANG="https://android.googlesource.com/platform/external/svox/+archive/refs/heads/master/pico/lang.tar.gz"
curl -L "$SVOX_LANG" -o /tmp/pico_lang.tar.gz 2>/dev/null || true
if [ -f /tmp/pico_lang.tar.gz ] && [ -s /tmp/pico_lang.tar.gz ]; then
tar -xzf /tmp/pico_lang.tar.gz -C src/main/assets/lang/ 2>/dev/null || true
fi
if [ -z "$(ls -A src/main/assets/lang/*.bin 2>/dev/null)" ]; then
git clone --depth=1 --filter=blob:none --sparse \
https://android.googlesource.com/platform/external/svox /tmp/svox_lang || true
if [ -d /tmp/svox_lang ]; then
git -C /tmp/svox_lang sparse-checkout set pico/lang
git -C /tmp/svox_lang checkout || true
find /tmp/svox_lang/pico/lang -name "*.bin" \
-exec cp {} src/main/assets/lang/ \; 2>/dev/null || true
fi
fi
echo "Language files:"; ls -lh src/main/assets/lang/
- name: Grant Gradle execute permission
run: chmod +x baosp-tts/gradlew
- name: Build APK
working-directory: baosp-tts
run: |
./gradlew clean assembleDebug \
-Pandroid.ndkVersion=23.1.7779620 \
--no-daemon --stacktrace
- name: Rename APK with version info
run: |
APK=$(find baosp-tts/build/outputs/apk/debug -name "*.apk" | head -1)
mkdir -p /tmp/bundle
cp "$APK" "/tmp/bundle/baosp-tts-${{ env.AOTTS_SHA }}.apk"
echo "TTS APK ready: $(ls -lh /tmp/bundle/baosp-tts-*.apk)"
- name: Upload baosp-tts APK
uses: actions/upload-artifact@v4
with:
name: bundle-baosp-tts
path: /tmp/bundle/baosp-tts-*.apk
retention-days: 3
if-no-files-found: error
# ──────────────────────────────────────────────
# Job 3: Build baosp-clock APK
# ──────────────────────────────────────────────
build-baosp-clock:
name: Build Clock (baosp-clock)
runs-on: ubuntu-22.04
steps:
- name: Checkout baosp-clock — latest master
uses: actions/checkout@v4
with:
repository: tech-master33/baosp-clock
ref: master
fetch-depth: 0
path: baosp-clock
- name: Print commit being built
run: |
cd baosp-clock
echo "baosp-clock commit:"
git log -1 --format="%H %s (%ci)"
echo "CLOCK_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Grant Gradle execute permission
run: chmod +x baosp-clock/gradlew
- name: Build APK
working-directory: baosp-clock
run: ./gradlew clean assembleDebug --no-daemon --stacktrace
- name: Rename APK with version info
run: |
APK=$(find baosp-clock/app/build/outputs/apk/debug -name "*.apk" | head -1)
mkdir -p /tmp/bundle
cp "$APK" "/tmp/bundle/baosp-clock-${{ env.CLOCK_SHA }}.apk"
echo "Clock APK ready: $(ls -lh /tmp/bundle/baosp-clock-*.apk)"
- name: Upload baosp-clock APK
uses: actions/upload-artifact@v4
with:
name: bundle-baosp-clock
path: /tmp/bundle/baosp-clock-*.apk
retention-days: 3
if-no-files-found: error
# ──────────────────────────────────────────────
# Job 4: Build baosp-calc APK
# ──────────────────────────────────────────────
build-baosp-calc:
name: Build Calculator (baosp-calc)
runs-on: ubuntu-22.04
steps:
- name: Checkout baosp-calc — latest master
uses: actions/checkout@v4
with:
repository: tech-master33/baosp-calc
ref: master
fetch-depth: 0
path: baosp-calc
- name: Print commit being built
run: |
cd baosp-calc
echo "baosp-calc commit:"
git log -1 --format="%H %s (%ci)"
echo "CALC_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Grant Gradle execute permission
run: chmod +x baosp-calc/gradlew
- name: Build APK
working-directory: baosp-calc
run: ./gradlew clean assembleDebug --no-daemon --stacktrace
- name: Rename APK with version info
run: |
APK=$(find baosp-calc/app/build/outputs/apk/debug -name "*.apk" | head -1)
mkdir -p /tmp/bundle
cp "$APK" "/tmp/bundle/baosp-calc-${{ env.CALC_SHA }}.apk"
echo "Calc APK ready: $(ls -lh /tmp/bundle/baosp-calc-*.apk)"
- name: Upload baosp-calc APK
uses: actions/upload-artifact@v4
with:
name: bundle-baosp-calc
path: /tmp/bundle/baosp-calc-*.apk
retention-days: 3
if-no-files-found: error
# ──────────────────────────────────────────────
# Job 5: Build baosp-panel APK
# ──────────────────────────────────────────────
build-baosp-panel:
name: Build Panel (baosp-panel)
runs-on: ubuntu-22.04
steps:
- name: Checkout baosp-panel — latest master
uses: actions/checkout@v4
with:
repository: tech-master33/baosp-panel
ref: master
fetch-depth: 0
path: baosp-panel
- name: Print commit being built
run: |
cd baosp-panel
echo "baosp-panel commit:"
git log -1 --format="%H %s (%ci)"
echo "PANEL_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Grant Gradle execute permission
run: chmod +x baosp-panel/gradlew
- name: Build APK
working-directory: baosp-panel
run: ./gradlew clean assembleDebug --no-daemon --stacktrace
- name: Rename APK with version info
run: |
APK=$(find baosp-panel/app/build/outputs/apk/debug -name "*.apk" | head -1)
mkdir -p /tmp/bundle
cp "$APK" "/tmp/bundle/baosp-panel-${{ env.PANEL_SHA }}.apk"
echo "Panel APK ready: $(ls -lh /tmp/bundle/baosp-panel-*.apk)"
- name: Upload baosp-panel APK
uses: actions/upload-artifact@v4
with:
name: bundle-baosp-panel
path: /tmp/bundle/baosp-panel-*.apk
retention-days: 3
if-no-files-found: error
# ──────────────────────────────────────────────
# Job 6: Build baosp-braille APK
# ──────────────────────────────────────────────
build-baosp-braille:
name: Build Braille Driver (baosp-braille)
runs-on: ubuntu-22.04
steps:
- name: Checkout baosp-braille — latest main
uses: actions/checkout@v4
with:
repository: tech-master33/baosp-braille
ref: main
fetch-depth: 0
path: baosp-braille
- name: Print commit being built
run: |
cd baosp-braille
echo "baosp-braille commit:"
git log -1 --format="%H %s (%ci)"
echo "BRAILLE_SHA=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Set up Android SDK
uses: android-actions/setup-android@v3
- name: Grant Gradle execute permission
run: chmod +x baosp-braille/gradlew
- name: Build APK
working-directory: baosp-braille
run: ./gradlew clean assembleDebug --no-daemon --stacktrace
- name: Rename APK with version info
run: |
APK=$(find baosp-braille/app/build/outputs/apk/debug -name "*.apk" | head -1)
mkdir -p /tmp/bundle
cp "$APK" "/tmp/bundle/baosp-braille-${{ env.BRAILLE_SHA }}.apk"
echo "Braille APK ready: $(ls -lh /tmp/bundle/baosp-braille-*.apk)"
- name: Upload baosp-braille APK
uses: actions/upload-artifact@v4
with:
name: bundle-baosp-braille
path: /tmp/bundle/baosp-braille-*.apk
retention-days: 3
if-no-files-found: error
# ──────────────────────────────────────────────
# Job 7: Publish combined nightly release
# Waits for all 6 builds, then creates/updates a
# single "nightly" release in the baosp repo
# with all APKs attached.
# ──────────────────────────────────────────────
publish-nightly:
name: Publish Nightly Bundle Release
runs-on: ubuntu-22.04
needs: [build-screenreader, build-baosp-tts, build-baosp-clock, build-baosp-calc, build-baosp-panel, build-baosp-braille]
steps:
- name: Download all APKs
uses: actions/download-artifact@v4
with:
pattern: bundle-*
path: /tmp/release
merge-multiple: true
- name: List release files
run: ls -lh /tmp/release/
- name: Get today's date
run: echo "TODAY=$(date -u '+%Y-%m-%d')" >> $GITHUB_ENV
- name: Delete existing nightly release (if any)
run: |
RELEASE_ID=$(curl -s \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/tech-master33/baosp/releases/tags/nightly" \
| tr ',' '\n' | grep '"id"' | head -1 | sed 's/[^0-9]//g')
if [ -n "$RELEASE_ID" ]; then
curl -s -X DELETE \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/tech-master33/baosp/releases/$RELEASE_ID"
echo "Deleted old nightly release (ID $RELEASE_ID)"
fi
curl -s -X DELETE \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/tech-master33/baosp/git/refs/tags/nightly" || true
- name: Collect recent commits from all repos
run: |
for repo in baosp-screenreader baosp-tts baosp-clock baosp-calc baosp-panel; do
LOG=$(curl -s \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/tech-master33/$repo/commits?per_page=5" \
| tr '{' '\n' | grep '"sha"\|"message"' | paste - - \
| sed 's/.*"sha": *"//;s/".*//' \
| head -5 || echo "- no commits")
echo "### $repo" >> /tmp/new_entry.md
echo "$LOG" >> /tmp/new_entry.md
echo "" >> /tmp/new_entry.md
done
- name: Update CHANGELOG.md in baosp repo
run: |
RESPONSE=$(curl -s \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/tech-master33/baosp/contents/CHANGELOG.md")
CURRENT_SHA=$(echo "$RESPONSE" | tr ',' '\n' | grep '"sha"' | head -1 \
| sed 's/.*"sha": *"//;s/".*//')
CURRENT_B64=$(echo "$RESPONSE" | tr ',' '\n' | grep '"content"' \
| sed 's/.*"content": *"//;s/","encoding".*//' | tr -d '\\n')
DATE=$(date -u '+%Y-%m-%d')
NEW_HEADER="## $DATE"
NEW_ENTRY="$NEW_HEADER\n$(cat /tmp/new_entry.md)\n---\n"
DECODED=$(echo "$CURRENT_B64" | base64 -d 2>/dev/null || echo "")
MARKER="<!-- CHANGELOG_ENTRIES -->"
if echo "$DECODED" | grep -q "$MARKER"; then
UPDATED=$(echo "$DECODED" | sed "s|$MARKER|$MARKER\n\n$NEW_HEADER\n|")
else
UPDATED="$NEW_ENTRY\n$DECODED"
fi
ENCODED=$(printf '%s' "$UPDATED" | base64 -w 0)
curl -s -X PUT \
-H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \
-H "Accept: application/vnd.github+json" \
"https://api.github.com/repos/tech-master33/baosp/contents/CHANGELOG.md" \
-d "{\"message\":\"changelog: nightly $DATE\",\"sha\":\"$CURRENT_SHA\",\"content\":\"$ENCODED\"}" \
| tr ',' '\n' | grep '"html_url"' | head -1 || echo "CHANGELOG update skipped"
- name: Create nightly release with all APKs
uses: softprops/action-gh-release@v2
with:
tag_name: nightly
name: "BAOSP Nightly — ${{ env.TODAY }}"
prerelease: true
body: |
## BAOSP Nightly Bundle — ${{ env.TODAY }}
Updated automatically every night with the latest builds of all BAOSP apps.
Full commit history: [CHANGELOG.md](https://github.com/tech-master33/baosp/blob/main/CHANGELOG.md)
### What's included
| File | Description |
|------|-------------|
| `baosp-screenreader-*.apk` | Screen reader — enable in Accessibility settings |
| `baosp-tts-*.apk` | TTS engine with SVOX Pico voice data |
| `aoler-*.apk` | Accessible home screen launcher |
| `baosp-clock-*.apk` | Clock, alarm, timer, stopwatch |
| `baosp-calc-*.apk` | Calculator with voice announcements |
| `baosp-panel-*.apk` | Quick-access panel for speech rate, flashlight, volume |
| `baosp-braille-*.apk` | Bluetooth Braille display driver |
### How to install on your Android device
1. Download all APKs from the files below
2. Transfer them to your device (email, cloud drive, USB)
3. Install each APK — allow "unknown sources" if prompted
4. **Enable screen reader:** Settings → Accessibility → Downloaded services → baosp-screenreader → turn on
5. **Set TTS engine:** Settings → Language & input → Text-to-speech output → select BAOSP TTS
6. **Set launcher:** Press Home → select aoler → Always
7. **Braille display:** pair via Bluetooth, then enable BAOSP Braille in Accessibility settings
8. **Other apps:** open from app drawer after install
---
*Built automatically from the latest commit on each repo's master/main branch.*
files: |
/tmp/release/*.apk
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}