name: Main on: push: branches: [ master ] paths-ignore: - '.github/ISSUE_TEMPLATE/**' - '.github/workflows/issue.yml' - '.github/workflows/pull_request.yml' - '**.md' # Allows you to run this workflow manually from the Actions tab workflow_dispatch: jobs: build: name: Build on ${{ matrix.os }} runs-on: ${{ matrix.os }} permissions: contents: write strategy: fail-fast: false matrix: os: [ ubuntu-latest ] if: ${{ !startsWith(github.event.head_commit.message, '[skip ci]') }} steps: - name: Checkout uses: actions/checkout@v4 with: submodules: 'recursive' fetch-depth: 0 - name: Gradle wrapper validation uses: gradle/wrapper-validation-action@v3 - name: Set up JDK 21 uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' - name: Write key if: github.event_name != 'pull_request' && github.ref == 'refs/heads/master' run: | echo officialBuild=true >> local.properties echo storePassword='${{ secrets.KEY_STORE_PASSWORD }}' >> local.properties echo keyAlias='${{ secrets.ALIAS }}' >> local.properties echo keyPassword='${{ secrets.ALIAS_KEY_PASSWORD }}' >> local.properties echo fileDir=`pwd`/key.jks >> local.properties echo crowdinProjectId='${{ secrets.CROWDIN_PROJECT_ID }}' >> local.properties echo crowdinApiKey='${{ secrets.CROWDIN_LIST_MEMBERS_API_TOKEN }}' >> local.properties echo "${{ secrets.KEY_STORE }}" | base64 --decode > key.jks - name: Cache gradle uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle') }} restore-keys: ${{ runner.os }}-gradle- - name: Gradle prebuild run: | ./gradlew prebuild - name: Build all id: buildAll run: | ./gradlew assemble echo "releaseName=$(ls app/build/outputs/apk/release/*.apk | awk -F '(/|.apk)' '{print $6}')" >> $GITHUB_OUTPUT echo "debugName=$(ls app/build/outputs/apk/debug/*.apk | awk -F '(/|.apk)' '{print $6}')" >> $GITHUB_OUTPUT echo "releaseFile=$(ls app/build/outputs/apk/release/*.apk)" >> $GITHUB_OUTPUT echo "debugFile=$(ls app/build/outputs/apk/debug/*.apk)" >> $GITHUB_OUTPUT echo "ossNum=$(ls app/build/outputs/apk/debug/*.apk | awk -F '(/|.apk)' '{print $6}' | cut -f4 -d'-')" >> $GITHUB_OUTPUT - name: Upload release if: success() uses: actions/upload-artifact@v4 with: name: ${{ steps.buildAll.outputs.releaseName }} path: "app/build/outputs/apk/release/*.apk" - name: Upload debug if: success() uses: actions/upload-artifact@v4 with: name: ${{ steps.buildAll.outputs.debugName }} path: "app/build/outputs/apk/debug/*.apk" - name: Upload mappings uses: actions/upload-artifact@v4 with: name: mappings path: "app/build/outputs/mapping/release" - name: Upload to GitHub release uses: softprops/action-gh-release@v2 with: token: ${{ secrets.GITHUB_TOKEN }} name: oss-${{ steps.buildAll.outputs.ossNum }} body: ${{ github.event.head_commit.message }} files: | ${{ steps.buildAll.outputs.releaseFile }} ${{ steps.buildAll.outputs.debugFile }} tag_name: oss-${{ steps.buildAll.outputs.ossNum }} - name: Post to channel if: ${{ github.event_name != 'pull_request' && success() && github.ref == 'refs/heads/master' }} env: CHANNEL_ID: ${{ secrets.TELEGRAM_CHANNEL }} BOT_TOKEN: ${{ secrets.TELEGRAM_TOKEN }} COMMIT_URL: ${{ github.event.head_commit.url }} COMMIT_MESSAGE: ${{ github.event.head_commit.message }} run: | export release=${{ steps.buildAll.outputs.releaseFile }} export debug=${{ steps.buildAll.outputs.debugFile }} ESCAPED=`python3 -c 'import json,os,urllib.parse; msg = json.dumps(os.environ["COMMIT_MESSAGE"]); print(urllib.parse.quote(msg if len(msg) <= 1024 else json.dumps(os.environ["COMMIT_URL"])))'` curl -v "https://api.telegram.org/bot${BOT_TOKEN}/sendMediaGroup?chat_id=${CHANNEL_ID}&media=%5B%7B%22type%22:%22document%22,%20%22media%22:%22attach://release%22%7D,%7B%22type%22:%22document%22,%20%22media%22:%22attach://debug%22,%22caption%22:${ESCAPED}%7D%5D" -F release="@$release" -F debug="@$debug"