name: Nightly build on: schedule: # 23:30 UTC, 0:30 or 1:30 CET/CEST - cron: "30 23 * * *" workflow_dispatch: jobs: prepare: name: Prepare build environment runs-on: self-hosted outputs: hasNewChanges: ${{ steps.nightly.outputs.hasNewChanges }} steps: - name: Checkout repository uses: actions/checkout@v2 with: fetch-depth: 0 clean: false - name: Set executable permissions to gradlew run: chmod +x ./gradlew - name: Setup Python uses: actions/setup-python@v2 - name: Install packages uses: BSFishy/pip-action@v1 with: packages: | python-dotenv pycryptodome mysql-connector-python requests - name: Bump nightly version id: nightly run: python $GITHUB_WORKSPACE/.github/utils/bump_nightly.py $GITHUB_WORKSPACE - name: Write signing passwords if: steps.nightly.outputs.hasNewChanges env: DB_HOST: ${{ secrets.DB_HOST }} DB_USER: ${{ secrets.DB_USER }} DB_PASS: ${{ secrets.DB_PASS }} DB_NAME: ${{ secrets.DB_NAME }} run: python $GITHUB_WORKSPACE/.github/utils/sign.py $GITHUB_WORKSPACE commit build: name: Build APK runs-on: self-hosted needs: - prepare if: ${{ needs.prepare.outputs.hasNewChanges == 'true' }} outputs: androidHome: ${{ env.ANDROID_HOME }} androidSdkRoot: ${{ env.ANDROID_SDK_ROOT }} steps: - name: Setup JDK 1.8 uses: actions/setup-java@v1 with: java-version: 1.8 - name: Setup Android SDK uses: android-actions/setup-android@v2 - name: Clean build artifacts run: | rm -rf app/release/* rm -rf app/build/outputs/apk/* rm -rf app/build/outputs/bundle/* - name: Assemble official release with Gradle run: ./gradlew assembleOfficialRelease sign: name: Sign APK runs-on: self-hosted needs: - build outputs: signedReleaseFile: ${{ steps.artifacts.outputs.signedReleaseFile }} signedReleaseFileRelative: ${{ steps.artifacts.outputs.signedReleaseFileRelative }} steps: - name: Sign build artifacts id: sign_app uses: r0adkll/sign-android-release@v1 with: releaseDirectory: app/release signingKeyBase64: ${{ secrets.KEY_STORE }} alias: ${{ secrets.KEY_ALIAS }} keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} keyPassword: ${{ secrets.KEY_ALIAS_PASSWORD }} env: ANDROID_HOME: ${{ needs.build.outputs.androidHome }} ANDROID_SDK_ROOT: ${{ needs.build.outputs.androidSdkRoot }} BUILD_TOOLS_VERSION: "30.0.2" - name: Rename signed artifacts id: artifacts run: python $GITHUB_WORKSPACE/.github/utils/rename_artifacts.py $GITHUB_WORKSPACE publish: name: Publish APK runs-on: self-hosted needs: - sign steps: - name: Setup Python uses: actions/setup-python@v2 - name: Extract changelogs id: changelog run: python $GITHUB_WORKSPACE/.github/utils/extract_changelogs.py $GITHUB_WORKSPACE - name: Upload APK to SFTP uses: easingthemes/ssh-deploy@v2.1.6 env: REMOTE_HOST: ${{ secrets.SSH_IP }} REMOTE_USER: ${{ secrets.SSH_USERNAME }} SSH_PRIVATE_KEY: ${{ secrets.SSH_KEY }} SOURCE: ${{ needs.sign.outputs.signedReleaseFileRelative }} TARGET: ${{ secrets.SSH_PATH_NIGHTLY }} - name: Save version metadata env: DB_HOST: ${{ secrets.DB_HOST }} DB_USER: ${{ secrets.DB_USER }} DB_PASS: ${{ secrets.DB_PASS }} DB_NAME: ${{ secrets.DB_NAME }} APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }} APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }} run: python $GITHUB_WORKSPACE/.github/utils/save_version.py $GITHUB_WORKSPACE - name: Distribute to App Distribution uses: wzieba/Firebase-Distribution-Github-Action@v1 with: appId: ${{ secrets.FIREBASE_APP_ID }} serviceCredentialsFile: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }} groups: ${{ secrets.FIREBASE_GROUPS_NIGHTLY }} file: ${{ needs.sign.outputs.signedReleaseFile }} releaseNotesFile: ${{ steps.changelog.outputs.commitLogPlainFile }} - name: Post Discord webhook env: APK_FILE: ${{ needs.sign.outputs.signedReleaseFile }} APK_SERVER_RELEASE: ${{ secrets.APK_SERVER_RELEASE }} APK_SERVER_NIGHTLY: ${{ secrets.APK_SERVER_NIGHTLY }} WEBHOOK_RELEASE: ${{ secrets.WEBHOOK_RELEASE }} WEBHOOK_TESTING: ${{ secrets.WEBHOOK_TESTING }} run: python $GITHUB_WORKSPACE/.github/utils/webhook_discord.py $GITHUB_WORKSPACE - name: Upload workflow artifact uses: actions/upload-artifact@v2 if: true with: name: ${{ steps.changelog.outputs.appVersionName }} path: | app/release/whatsnew*/ app/release/*.apk app/release/*.aab app/release/*.json app/release/*.txt