Skip to content

Nightly Build

Nightly Build #55

Workflow file for this run

name: Nightly Build
on:
schedule:
- cron: '30 19 * * *' # 1:00 AM IST (UTC+5:30)
workflow_dispatch:
jobs:
check:
runs-on: ubuntu-latest
outputs:
should_build: ${{ steps.check.outputs.should_build }}
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Check for relevant commits
id: check
run: |
if [ "${{ github.event_name }}" == "workflow_dispatch" ]; then
echo "Manual trigger — skipping commit check"
echo "should_build=true" >> $GITHUB_OUTPUT
else
CHANGED=$(git log --since="24 hours ago" --oneline -- \
app/src/ \
app/build.gradle.kts \
gradle/ \
build.gradle.kts \
settings.gradle.kts \
| wc -l)
echo "Relevant commits in last 24h: $CHANGED"
if [ "$CHANGED" -gt 0 ]; then
echo "should_build=true" >> $GITHUB_OUTPUT
else
echo "No relevant commits. Skipping nightly build."
echo "should_build=false" >> $GITHUB_OUTPUT
fi
fi
build:
needs: check
if: needs.check.outputs.should_build == 'true'
runs-on: ubuntu-latest
permissions:
contents: write
actions: write
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Set release info
id: info
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
DATE=$(TZ=Asia/Kolkata date +%Y-%m-%d)
echo "date=${DATE}" >> $GITHUB_OUTPUT
if gh release view nightly > /dev/null 2>&1; then
echo "Comparing commits since last nightly"
COMMITS=$(git log nightly..HEAD --oneline --no-merges -- \
app/src/ app/build.gradle.kts gradle/ build.gradle.kts settings.gradle.kts)
else
echo "No previous nightly found, using last 15 commits"
COMMITS=$(git log -15 --oneline --no-merges -- \
app/src/ app/build.gradle.kts gradle/ build.gradle.kts settings.gradle.kts)
fi
DELIMITER="EOF_$(date +%s)"
echo "commits<<$DELIMITER" >> $GITHUB_OUTPUT
echo "$COMMITS" >> $GITHUB_OUTPUT
echo "$DELIMITER" >> $GITHUB_OUTPUT
- name: Decode keystore
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > keystore.jks
cat > key.properties <<EOF
storeFile=../keystore.jks
storePassword=${{ secrets.STORE_PASSWORD }}
keyAlias=${{ secrets.KEY_ALIAS }}
keyPassword=${{ secrets.KEY_PASSWORD }}
EOF
- name: Build nightly APKs
run: |
chmod +x gradlew
./gradlew assembleNightly
- name: Clean up keystore
if: always()
run: rm -f keystore.jks key.properties
- name: Rename APKs
run: |
DATE="${{ steps.info.outputs.date }}"
for APK in app/build/outputs/apk/nightly/*.apk; do
ABI=$(basename "$APK" | grep -oP '(arm64-v8a|armeabi-v7a)')
cp "$APK" "AFinity-nightly-${DATE}-${ABI}.apk"
done
- name: Delete existing nightly release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if gh release view nightly > /dev/null 2>&1; then
echo "Deleting existing nightly release..."
gh release delete nightly --yes --cleanup-tag
else
echo "No existing nightly release found"
fi
- name: Publish pre-release
uses: softprops/action-gh-release@v2
with:
tag_name: nightly
name: Nightly ${{ steps.info.outputs.date }}
prerelease: true
body: |
**Automated nightly build** — ${{ steps.info.outputs.date }} (IST)
### Changes
```
${{ steps.info.outputs.commits }}
```
> [!CAUTION]
> ⚠️ Nightly builds may be unstable. Expect Bugs. Installs alongside the beta release.
files: AFinity-nightly-${{ steps.info.outputs.date }}-*.apk
- name: Notify Discord
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
gh workflow run discord-release-notification.yml \
--ref master \
-f release_tag=nightly