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: Set executable permissions to gradlew run: chmod +x ./gradlew - name: Bump nightly version if: ${{ inputs.nightly }} run: python $GITHUB_WORKSPACE/.github/utils/bump_nightly.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT - name: Write signing passwords 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 >> $GITHUB_OUTPUT - name: Clean build artifacts run: | rm -rf app/release/* rm -rf app/build/outputs/apk/* rm -rf app/build/outputs/bundle/* - name: Build APK with Gradle if: ${{ inputs.build-apk }} uses: gradle/gradle-build-action@v2 with: arguments: assembleOfficialRelease - name: Build AAB with Gradle if: ${{ inputs.build-aab }} uses: gradle/gradle-build-action@v2 with: arguments: bundlePlayRelease - name: Sign build artifacts 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: BUILD_TOOLS_VERSION: "34.0.0" - name: Rename signed artifacts id: artifacts run: python $GITHUB_WORKSPACE/.github/utils/rename_artifacts.py $GITHUB_WORKSPACE >> $GITHUB_OUTPUT - 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: ${{ steps.artifacts.outputs.signedReleaseFileRelative }} TARGET: ${{ inputs.nightly && secrets.SSH_PATH_NIGHTLY || secrets.SSH_PATH_RELEASE }} - 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