prod @ a835244ce82c929093525245f1394260958191f3 #201
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: Build All | |
| run-name: ${{ inputs.release_type }} @ ${{ github.sha }} | |
| concurrency: | |
| group: delta | |
| permissions: | |
| contents: write | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| release_type: | |
| description: Release type | |
| default: beta | |
| type: choice | |
| options: | |
| - beta | |
| - prod | |
| version_type: | |
| description: Version type | |
| default: minor | |
| type: choice | |
| options: | |
| - patch | |
| - minor | |
| - major | |
| build_foss: | |
| description: Build FOSS | |
| type: boolean | |
| default: true | |
| publish: | |
| description: Publish the app | |
| type: boolean | |
| default: true | |
| changelog: | |
| description: Changelog (b64 encoded) | |
| env: | |
| token: ${{ secrets.PA_TOKEN || github.token }} | |
| current_repo: ${{ github.repository }} | |
| organization: Delta-Icons | |
| website_repo: Delta-Icons/delta-icons.github.io | |
| package_name: website.leifs.delta | |
| jobs: | |
| build: | |
| name: Build | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v5 | |
| with: | |
| token: ${{ env.token }} | |
| fetch-depth: 0 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| with: | |
| add-job-summary: never | |
| - name: Setup Java | |
| uses: actions/setup-java@v5 | |
| with: | |
| cache: gradle | |
| distribution: temurin | |
| java-version: 18 | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| cache: pip | |
| python-version: '3.13' | |
| - name: Export vars | |
| run: | | |
| python -u resources/scripts/resolve_paths.py -p >> $GITHUB_ENV | |
| due_on=$(TZ=UTC date --iso-8601=seconds -d "$(date +%Y-%m-01) +1 month") >> $GITHUB_ENV | |
| - name: Install Python deps | |
| run: | | |
| pip install -r ${{ env.sd }}/requirements.txt | |
| - name: Install Linux deps | |
| uses: awalsh128/cache-apt-pkgs-action@latest | |
| with: | |
| packages: optipng | |
| version: 1.0 | |
| - name: Configure tools | |
| run: | | |
| git config user.name 'github-actions[bot]' | |
| git config user.email 'github-actions[bot]@users.noreply.github.com' | |
| cat << EOF >> $GITHUB_ENV | |
| coauthor='Co-authored-by: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>' | |
| EOF | |
| - name: Bump version | |
| run: | | |
| python \ | |
| -u ${{ env.sd }}/bump_version.py -e -w \ | |
| -r ${{ inputs.release_type }} \ | |
| -v ${{ inputs.version_type }} >> $GITHUB_ENV | |
| - name: Add icons | |
| run: | | |
| python -u ${{ env.sd }}/add_icons_wrapper.py | |
| - name: Set icons count | |
| run: | | |
| python ${{ env.sd }}/count_icons.py -w | |
| - name: Optimize images | |
| run: | | |
| latest_tag=$(git tag --sort version:refname | grep -v 'beta' | tail -n 1) | |
| changes=$(git diff --name-only $latest_tag -- "***.png") | |
| if [[ $latest_tag && $changes ]]; then | |
| echo "Latest tag is $latest_tag; optimizing images since this tag" | |
| optipng $changes || true | |
| else | |
| echo 'No release tag or changed files found, skip optimizing' | |
| fi | |
| - name: Sort XMLs | |
| run: | | |
| cd ${{ env.sd }} | |
| python sort_appfilter.py -o | |
| python sort_drawable.py -o | |
| cp -fv ${{ env.a1 }} ${{ env.a2 }} | |
| cp -fv ${{ env.d1 }} ${{ env.d2 }} | |
| - name: Create changelog | |
| run: | | |
| mkdir changelog | |
| changelog_txt=metadata/en-US/changelogs/${{ env.version_code }}.txt | |
| changelog_tmp=changelog/whatsnew-en-US | |
| changelog_xml=app/src/main/res/values/changelog.xml | |
| python ${{ env.sd }}/create_changelog.py -p -w \ | |
| -r ${{ inputs.release_type }} \ | |
| -d '${{ inputs.changelog }}' \ | |
| -t $changelog_txt \ | |
| -x $changelog_xml | |
| cp $changelog_txt $changelog_tmp | |
| echo "changelog=$changelog_tmp" >> $GITHUB_ENV | |
| - name: Commit pre-release changes | |
| run: | | |
| git add \ | |
| app/build.gradle \ | |
| app/src/ \ | |
| contribs/ \ | |
| metadata/ \ | |
| resources/vectors/ | |
| git commit -m 'Release: ${{ env.version }}' --author "${{ env.coauthor }}" | |
| - name: Build APK | |
| run: | | |
| bash gradlew assemblePlay | |
| - name: Build AAB | |
| run: | | |
| bash gradlew bundlePlay | |
| if: | | |
| inputs.publish == true | |
| - name: Build APK FOSS | |
| run: | | |
| bash gradlew assembleFoss | |
| if: | | |
| inputs.build_foss == true | |
| - name: Move unsigned builds | |
| run: | | |
| builds=$(find . -regextype posix-egrep -regex '.*-(release|unsigned).(aab|apk)$') | |
| if [ -z "${builds}" ]; then | |
| echo 'no builds found' | |
| exit 1 | |
| fi | |
| for build in ${builds[@]}; do | |
| mv -v $build . 2> /dev/null || true | |
| done | |
| - name: Sign builds | |
| uses: kevin-david/zipalign-sign-android-release@main | |
| with: | |
| releaseDirectory: . | |
| signingKeyBase64: ${{ secrets.KEYSTORE_BASE64 }} | |
| keyStorePassword: ${{ secrets.KEYSTORE_PASSWORD }} | |
| keyPassword: ${{ secrets.KEYSTORE_KEY_PASSWORD }} | |
| alias: ${{ secrets.KEYSTORE_KEY_ALIAS }} | |
| - name: Rename signed builds | |
| run: | | |
| rm -v *unsigned.apk | |
| mv -v *foss*.apk ${{ env.filename }}-foss.apk 2> /dev/null || true | |
| mv -v *play*.apk ${{ env.filename }}.apk 2> /dev/null || true | |
| mv -v *play*.aab ${{ env.filename }}.aab 2> /dev/null || true | |
| - name: Upload signed builds to Artifacts | |
| uses: actions/upload-artifact@v5 | |
| with: | |
| name: ${{ env.filename }} | |
| path: ${{ env.filename }}*.apk | |
| if-no-files-found: error | |
| retention-days: 30 | |
| - name: Push pre-release changes | |
| uses: ad-m/github-push-action@master | |
| with: | |
| github_token: ${{ env.token }} | |
| branch: ${{ github.ref }} | |
| if: | | |
| inputs.publish == true | |
| - name: Create a GitHub release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| prerelease: ${{ env.is_beta }} | |
| files: '${{ env.filename }}*.apk' | |
| name: ${{ env.version }} | |
| tag_name: ${{ env.version }} | |
| body_path: ${{ env.changelog }} | |
| if: | | |
| inputs.publish == true | |
| - name: Commit post-release changes | |
| run: | | |
| sed -i '7,/^$/c\\' ${{ env.d1 }} ${{ env.d2 }} | |
| git add ${{ env.d1 }} ${{ env.d2 }} | |
| git commit -m "Cleanup: ${{ env.version }}" --author "${{ env.coauthor }}" | |
| if: | | |
| inputs.release_type == 'prod' && | |
| inputs.publish == true | |
| - name: Push post-release changes | |
| uses: ad-m/github-push-action@master | |
| with: | |
| github_token: ${{ env.token }} | |
| branch: ${{ github.ref }} | |
| if: | | |
| inputs.release_type == 'prod' && | |
| inputs.publish == true | |
| - name: Upload AAB to Google Play beta channel | |
| uses: r0adkll/upload-google-play@v1 | |
| with: | |
| track: beta | |
| status: completed | |
| releaseFiles: ${{ env.filename }}.aab | |
| serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT }} | |
| packageName: ${{ env.package_name }} | |
| mappingFile: app/build/outputs/mapping/playRelease/mapping.txt | |
| whatsNewDirectory: changelog | |
| inAppUpdatePriority: 5 | |
| if: | | |
| github.repository_owner == env.organization && | |
| inputs.publish == true | |
| - name: Update requests | |
| uses: benc-uk/workflow-dispatch@v1 | |
| with: | |
| repo: ${{ github.repository }} | |
| workflow: update_requests.yml | |
| token: ${{ env.token }} | |
| if: | | |
| github.repository_owner == env.organization && | |
| inputs.publish == true | |
| - name: Promote Google Play beta to production | |
| uses: kevin-david/promote-play-release@v1.1.0 | |
| with: | |
| service-account-json-raw: ${{ secrets.SERVICE_ACCOUNT }} | |
| package-name: ${{ env.package_name }} | |
| inapp-update-priority: 5 | |
| user-fraction: 1.0 | |
| if: | | |
| github.repository_owner == env.organization && | |
| inputs.release_type == 'prod' && | |
| inputs.publish == true | |
| - name: Update website | |
| uses: benc-uk/workflow-dispatch@v1 | |
| with: | |
| token: ${{ env.token }} | |
| repo: ${{ env.website_repo }} | |
| workflow: deploy.yml | |
| if: | | |
| github.repository_owner == env.organization && | |
| inputs.release_type == 'prod' && | |
| inputs.publish == true | |
| - name: Close current milestone | |
| uses: oinume/create-scheduled-milestone-action@main | |
| continue-on-error: true | |
| with: | |
| title: ${{ env.version_name }} | |
| state: closed | |
| env: | |
| GITHUB_TOKEN: ${{ env.token }} | |
| if: | | |
| github.repository_owner == env.organization && | |
| inputs.release_type == 'prod' && | |
| inputs.publish == true | |
| - name: Open new milestone | |
| uses: oinume/create-scheduled-milestone-action@main | |
| continue-on-error: true | |
| with: | |
| title: ${{ env.version_next }} | |
| state: open | |
| due_on: '${{ env.due_on }}' | |
| env: | |
| GITHUB_TOKEN: ${{ env.token }} | |
| if: | | |
| github.repository_owner == env.organization && | |
| inputs.release_type == 'prod' && | |
| inputs.publish == true |