Nightly Build #55
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |