Skip to content

beta @ f7d51f6cc4aa9b3f263bce429261a60380cbff8e #211

beta @ f7d51f6cc4aa9b3f263bce429261a60380cbff8e

beta @ f7d51f6cc4aa9b3f263bce429261a60380cbff8e #211

Workflow file for this run

name: Build All
run-name: ${{ inputs.release }} @ ${{ github.sha }}
concurrency:
group: delta
permissions:
contents: write
on:
workflow_dispatch:
inputs:
release:
description: Release type
default: beta
type: choice
options:
- beta
- promote
- patch
- minor
- major
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 }} >> $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 -v 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 }} \
-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
- name: Build APK FOSS Dynamic Clock
run: |
sed -i 's|<scale factor="1" />|<scale factor="1" />\n\t<dynamic-clock defaultHour="10" defaultMinute="10" defaultSecond="30" hourLayerIndex="0" minuteLayerIndex="1" secondLayerIndex="2" drawable="clock" />|' ${{ env.a1 }} ${{ env.a2 }}
sed -i 's|<category title="Alts" />|<category title="Alts" />\n\t<item drawable="clock_alt_2" />|' ${{ env.d1 }} ${{ env.d2 }}
sed -i 's|MinSdk = 21|MinSdk = 26|' build.gradle
mv -v app/src/main/res/drawable-nodpi/clock.png app/src/main/res/drawable-nodpi/clock_alt_2.png
cat << 'EOF' > app/src/main/res/drawable-nodpi/clock.xml
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/clock_dynamic_background"/>
<foreground>
<layer-list>
<item>
<rotate android:drawable="@drawable/clock_dynamic_hour" android:fromDegrees="300.0" android:toDegrees="5300.0" android:pivotX="50.0%" android:pivotY="50.0%"/>
</item>
<item>
<rotate android:drawable="@drawable/clock_dynamic_minute" android:fromDegrees="60.0" android:toDegrees="60060.0" android:pivotX="50.0%" android:pivotY="50.0%"/>
</item>
<item>
<rotate android:drawable="@drawable/clock_dynamic_second" android:fromDegrees="180.0" android:toDegrees="6180.0" android:pivotX="50.0%" android:pivotY="50.0%" android:level="300"/>
</item>
<item android:drawable="@drawable/clock_dynamic_top" />
</layer-list>
</foreground>
</adaptive-icon>
EOF
python ${{ env.sd }}/sort_appfilter.py -o
python ${{ env.sd }}/sort_drawable.py -o
cp -fv ${{ env.a1 }} ${{ env.a2 }}
cp -fv ${{ env.d1 }} ${{ env.d2 }}
bash gradlew assembleFossdc
git restore ${{ env.d1 }} ${{ env.d2 }}
- name: Move unsigned builds
run: |
find app/build/outputs -regextype posix-egrep -regex '.*-(release|unsigned).(aab|apk)$' | sudo xargs -I % mv -v % .
- 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 app-fossdc-release-unsigned-signed.apk delta-fossdc-${{ env.version }}.apk
mv -v app-foss-release-unsigned-signed.apk delta-foss-${{ env.version }}.apk
mv -v app-play-release-unsigned-signed.apk delta-gplay-${{ env.version }}.apk
mv -v app-play-release.aab delta-gplay-${{ env.version }}.aab
- name: Upload signed builds to Artifacts
uses: actions/upload-artifact@v5
with:
name: delta-${{ env.version }}
path: delta-*.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: 'delta-*.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 != 'beta' &&
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 != 'beta' &&
inputs.publish == true
- name: Upload AAB to Google Play beta channel
uses: r0adkll/upload-google-play@v1
with:
track: beta
status: completed
releaseFiles: delta-gplay-${{ env.version }}.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 != 'beta' &&
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 != 'beta' &&
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 != 'beta' &&
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 != 'beta' &&
inputs.publish == true