Skip to content

Nightly Build

Nightly Build #85

Workflow file for this run

name: Nightly Build
on:
schedule:
- cron: '0 2 * * *' # Daily at 02:00 UTC
push:
branches: [ main ]
paths:
- 'app/**'
- 'gradle/**'
- '*.gradle*'
- 'gradle.properties'
workflow_dispatch:
permissions:
contents: write
env:
GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8"
jobs:
nightly:
name: Build Nightly APK
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' || vars.NIGHTLY_ENABLED == 'true'
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
cache: gradle
- name: Setup Android SDK
uses: android-actions/setup-android@v3
with:
api-level: 34
ndk-version: r26c
build-tools-version: 34.0.0
- name: Grant Gradle permission
run: chmod +x gradlew
- name: Run lint
run: ./gradlew lintDebug --no-daemon
- name: Run unit tests
run: ./gradlew testDebugUnitTest --no-daemon
- name: Build Debug APK
run: ./gradlew assembleDebug --no-daemon
- name: Rename APK
run: |
DATE=$(date -u +"%Y%m%d-%H%M")
SHORT_SHA=$(git rev-parse --short HEAD)
mv app/build/outputs/apk/debug/app-debug.apk shadow-nightly-${DATE}-${SHORT_SHA}.apk
echo "APK_NAME=shadow-nightly-${DATE}-${SHORT_SHA}.apk" >> $GITHUB_ENV
- name: Generate changelog
id: changelog
run: |
LAST_MSG=$(git log -1 --pretty=%s)
SHORT_SHA=$(git rev-parse --short HEAD)
DATE=$(date -u +"%Y-%m-%d %H:%M UTC")
echo "CHANGELOG<<EOF" >> $GITHUB_OUTPUT
echo "### Nightly Build" >> $GITHUB_OUTPUT
echo "- Commit: $SHORT_SHA" >> $GITHUB_OUTPUT
echo "- Message: $LAST_MSG" >> $GITHUB_OUTPUT
echo "- Built at: $DATE" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
- name: Create/Update Nightly Release
uses: softprops/action-gh-release@v2
with:
tag_name: nightly
name: Nightly Build
body: ${{ steps.changelog.outputs.CHANGELOG }}
prerelease: true
make_latest: false
files: ${{ env.APK_NAME }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: shadow-nightly
path: ${{ env.APK_NAME }}
retention-days: 7