name: "[reusable] Szkolny.eu Build" on: workflow_call: inputs: nightly: type: boolean default: false build-apk: type: boolean default: false build-aab: type: boolean default: false release-ssh: type: boolean default: false release-github: type: boolean default: false release-firebase: type: boolean default: false release-google-play: type: boolean default: false release-discord: type: boolean default: false secrets: APK_SERVER_NIGHTLY: APK_SERVER_RELEASE: DB_HOST: DB_NAME: DB_PASS: DB_USER: FIREBASE_APP_ID: FIREBASE_GROUPS_NIGHTLY: FIREBASE_GROUPS_RELEASE: FIREBASE_SERVICE_ACCOUNT_JSON: KEY_ALIAS_PASSWORD: KEY_ALIAS: KEY_STORE_PASSWORD: KEY_STORE: PLAY_RELEASE_TRACK: PLAY_SERVICE_ACCOUNT_JSON: SSH_IP: SSH_KEY: SSH_PATH_NIGHTLY: SSH_PATH_RELEASE: SSH_USERNAME: WEBHOOK_RELEASE: WEBHOOK_TESTING: permissions: contents: write jobs: build: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 with: fetch-depth: 0 clean: false - name: Setup JDK 17 uses: actions/setup-java@v3 with: distribution: "temurin" java-version: "17" - name: Setup Python uses: actions/setup-python@v4 - name: Install Python packages uses: BSFishy/pip-action@v1 with: packages: | python-dotenv pycryptodome mysql-connector-python requests - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 - name: Bump nightly version if: ${{ inputs.nightly }} run: python $GITHUB_WORKSPACE/.github/utils/bump_nightly.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT - name: Write signing passwords and keystore env: DB_HOST: ${{ secrets.DB_HOST }} DB_USER: ${{ secrets.DB_USER }} DB_PASS: ${{ secrets.DB_PASS }} DB_NAME: ${{ secrets.DB_NAME }} KEY_STORE: ${{ secrets.KEY_STORE }} run: | python $GITHUB_WORKSPACE/.github/utils/sign.py $GITHUB_WORKSPACE commit >> $GITHUB_OUTPUT echo $KEY_STORE | base64 --decode > keystore.jks - name: Clean build artifacts run: | rm -rf app/release/* rm -rf app/build/outputs/apk/* rm -rf app/build/outputs/bundle/* - name: Build app with Gradle if: ${{ inputs.build-apk || inputs.build-aab }} run: | chmod +x ./gradlew ./gradlew \ ${{ inputs.build-apk && 'assembleOfficialRelease' || '' }} \ ${{ inputs.build-aab && 'bundlePlayRelease' || '' }} \ -P android.injected.signing.store.file=${{ github.workspace }}/keystore.jks \ -P android.injected.signing.store.password=${{ secrets.KEY_STORE_PASSWORD }} \ -P android.injected.signing.key.alias=${{ secrets.KEY_ALIAS }} \ -P android.injected.signing.key.password=${{ secrets.KEY_ALIAS_PASSWORD }} - name: Upload release to server if: ${{ inputs.release-ssh }} 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: app/release/ TARGET: ${{ inputs.nightly && secrets.SSH_PATH_NIGHTLY || secrets.SSH_PATH_RELEASE }} - name: Find signed artifacts id: artifacts run: python $GITHUB_WORKSPACE/.github/utils/find_artifacts.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT - name: Extract release changelogs id: changelog run: python $GITHUB_WORKSPACE/.github/utils/extract_changelogs.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT - name: Save version to database id: save 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 >> $GITHUB_OUTPUT - name: Release on GitHub if: ${{ inputs.release-github }} uses: softprops/action-gh-release@v1 with: name: ${{ steps.changelog.outputs.changelogTitle }} body_path: ${{ steps.changelog.outputs.changelogMarkdownFile }} files: ${{ steps.artifacts.outputs.signedReleaseFile }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Distribute to App Distribution if: ${{ inputs.release-firebase }} uses: wzieba/Firebase-Distribution-Github-Action@v1 with: appId: ${{ secrets.FIREBASE_APP_ID }} serviceCredentialsFileContent: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }} file: ${{ steps.artifacts.outputs.signedReleaseFile }} groups: ${{ inputs.nightly && secrets.FIREBASE_GROUPS_NIGHTLY || secrets.FIREBASE_GROUPS_RELEASE }} releaseNotesFile: ${{ inputs.nightly && steps.changelog.outputs.commitLogPlainFile || steps.changelog.outputs.changelogPlainTitledFile }} - name: Publish AAB to Google Play if: ${{ inputs.release-google-play }} uses: r0adkll/upload-google-play@v1 with: serviceAccountJsonPlainText: ${{ secrets.PLAY_SERVICE_ACCOUNT_JSON }} packageName: pl.szczodrzynski.edziennik releaseFiles: ${{ steps.artifacts.outputs.signedReleaseFile }} releaseName: ${{ steps.changelog.outputs.appVersionName }} track: ${{ secrets.PLAY_RELEASE_TRACK }} whatsNewDirectory: ${{ steps.changelog.outputs.changelogDir }} status: completed - name: Post Discord webhook if: ${{ inputs.release-discord }} env: APK_FILE: ${{ steps.artifacts.outputs.signedReleaseFile }} DOWNLOAD_URL: ${{ steps.save.outputs.downloadUrl }} WEBHOOK_RELEASE: ${{ secrets.WEBHOOK_RELEASE }} WEBHOOK_TESTING: ${{ secrets.WEBHOOK_TESTING }} run: python $GITHUB_WORKSPACE/.github/utils/webhook_discord.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT - name: Upload workflow artifact uses: actions/upload-artifact@v2 if: always() with: name: ${{ steps.changelog.outputs.appVersionName }} path: | app/release/whatsnew*/ app/release/*.apk app/release/*.aab app/release/*.json app/release/*.txt