beta @ feaa47d015e22e529fd190e7812893127dccc5b2 #111
This file contains 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 }} | |
permissions: | |
contents: write | |
concurrency: | |
group: delta | |
on: | |
workflow_dispatch: | |
inputs: | |
release_type: | |
description: Release type | |
default: beta | |
type: choice | |
options: | |
- beta | |
- prod | |
build_foss: | |
description: Build FOSS | |
type: boolean | |
default: true | |
publish: | |
description: Publish the app | |
type: boolean | |
default: true | |
changelog_1: | |
description: Changelog line 1 | |
changelog_2: | |
description: Changelog line 2 | |
changelog_3: | |
description: Changelog line 3 | |
changelog_4: | |
description: Changelog line 4 | |
jobs: | |
build: | |
name: Build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
token: ${{ secrets.PA_TOKEN }} | |
fetch-depth: 0 | |
- name: Export variables | |
run: bash .github/scripts/variables.sh >> $GITHUB_ENV | |
- name: Setup Java | |
uses: actions/setup-java@v4 | |
with: | |
distribution: temurin | |
java-version: 18 | |
- name: Install deps and configure tools | |
run: | | |
echo "LICENSE_KEY=${{ secrets.LICENSE_KEY }}" > local.properties | |
git config user.email "github-actions[bot]@users.noreply.github.com" | |
git config user.name "github-actions[bot]" | |
sudo apt-get update | |
sudo apt-get install -y optipng | |
sudo pip install -r ${{ env.sd }}/requirements.txt | |
- name: Bump version | |
run: | | |
cd ${{ env.sd }} | |
python -u bump_version.py -t ${{ inputs.release_type }} >> $GITHUB_ENV | |
- name: Add new icons | |
run: | | |
cd ${{ env.sd }} | |
python -u add_icons_wrapper.py | |
- name: Create a changelog and set custom icons count | |
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 | |
drawable_xml=app/src/main/res/xml/drawable.xml | |
drawable_lines=$(grep '<item' $drawable_xml | sort) | |
summary=$(echo "$drawable_lines" | wc -l) | |
amount_all=$(echo "$drawable_lines" | uniq | wc -l) | |
amount_new=$(( $summary - $amount_all )) | |
candybar_play=app/src/play/java/website/leifs/delta/applications/CandyBar.java | |
candybar_foss=app/src/foss/java/website/leifs/delta/applications/CandyBar.java | |
sed -i "s|setCustomIconsCount\(.*\);|setCustomIconsCount\($amount_all\);|" $candybar_play | |
sed -i "s|setCustomIconsCount\(.*\);|setCustomIconsCount\($amount_all\);|" $candybar_foss | |
changelog_1='${{ inputs.changelog_1 }}' | |
changelog_2='${{ inputs.changelog_2 }}' | |
changelog_3='${{ inputs.changelog_3 }}' | |
changelog_4='${{ inputs.changelog_4 }}' | |
echo "- $amount_new new icons, $amount_all in total" > $changelog_txt | |
cat << EOF > $changelog_xml | |
<?xml version="1.0" encoding="utf-8"?> | |
<resources> | |
<string name="changelog_date"></string> | |
<string-array name="changelog"> | |
<item><![CDATA[<font color=#ff837d>$amount_new</font> new icons, <font color=#ff837d>$amount_all</font> in total]]></item> | |
EOF | |
if [[ '${{ inputs.release_type }}' == 'prod' ]]; then | |
echo "- Fixed icons not applying properly" >> $changelog_txt | |
echo " <item>Fixed icons not applying properly</item>" >> $changelog_xml | |
for n in $(seq 1 4); do | |
changelog="changelog_${n}" | |
if [ ! -z "${!changelog}" ]; then | |
echo "- ${!changelog}" >> $changelog_txt | |
echo " <item>${!changelog}</item>" >> $changelog_xml | |
fi | |
done | |
fi | |
if [[ '${{ inputs.release_type }}' == 'beta' ]]; then | |
message="Full changelog will be published upon release!" | |
echo "- $message" >> $changelog_txt | |
echo " <item>$message</item>" >> $changelog_xml | |
fi | |
cat << EOF >> $changelog_xml | |
</string-array> | |
</resources> | |
EOF | |
cp $changelog_txt $changelog_tmp | |
cat $changelog_xml | |
echo "changelog=$changelog_tmp" >> $GITHUB_ENV | |
- name: Optimize PNGs | |
continue-on-error: true | |
run: | | |
latest_tag=$(git tag --sort version:refname | grep -v "beta" | tail -n 1) | |
echo "Latest tag is $latest_tag" | |
if [[ $latest_tag ]]; then | |
echo "Optimizing PNGs since last release" | |
optipng $(git diff --name-only $latest_tag -- "***.png") | |
else | |
echo 'No release found, skip optimizing' | |
fi | |
- name: Sort appfilter and drawable | |
run: | | |
cd ${{ env.sd }} | |
python sort_appfilter.py ${{ env.a1 }} | |
python sort_drawable.py ${{ env.d1 }} | |
echo ${{ env.a1 }} ${{ env.a2 }} | xargs -n 1 cp -fv new_appfilter.xml | |
echo ${{ env.d1 }} ${{ env.d2 }} | xargs -n 1 cp -fv new_drawable.xml | |
- name: Commit changes | |
run: | | |
git add \ | |
app/build.gradle \ | |
app/src/main/* \ | |
app/src/foss/* \ | |
app/src/play/* \ | |
metadata/ \ | |
contribs/ | |
git commit \ | |
-m "New release: ${{ env.version }}" \ | |
--author "Co-authored-by: ${{ github.actor }} <${{ github.actor }}@users.noreply.github.com>" | |
- name: Build APK | |
run: bash gradlew assemblePlay | |
- name: Build AAB | |
if: | | |
inputs.publish == true | |
run: bash gradlew bundlePlay | |
- name: Build APK FOSS | |
if: | | |
inputs.build_foss == true | |
run: bash gradlew assembleFoss | |
- name: Move unsigned builds | |
run: | | |
mv -v app/build/outputs/apk/play/release/*.apk delta-play.apk | |
if [[ ${{ inputs.build_foss }} == true ]]; then | |
mv -v app/build/outputs/apk/foss/release/*.apk delta-foss.apk | |
fi | |
if [[ ${{ inputs.publish }} == true ]]; then | |
mv -v app/build/outputs/bundle/playRelease/*.aab delta-play.aab | |
fi | |
- name: Sign builds | |
uses: kevin-david/[email protected] | |
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: | | |
mv -v delta-play-signed.apk ${{ env.filename }}.apk | |
if [[ ${{ inputs.build_foss }} == true ]]; then | |
mv -v delta-foss-signed.apk ${{ env.filename }}-foss.apk | |
fi | |
if [[ ${{ inputs.publish }} == true ]]; then | |
mv -v delta-play.aab ${{ env.filename }}.aab | |
fi | |
- name: Upload APK to Artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.filename }} | |
path: ${{ env.filename }}.apk | |
retention-days: 90 | |
- name: Upload APK FOSS to Artifacts | |
uses: actions/upload-artifact@v4 | |
if: | | |
inputs.build_foss == true | |
with: | |
name: ${{ env.filename }}-foss | |
path: ${{ env.filename }}-foss.apk | |
retention-days: 90 | |
- name: Upload AAB to Google Play beta channel | |
uses: r0adkll/upload-google-play@v1 | |
if: | | |
inputs.publish == true | |
with: | |
track: beta | |
status: completed | |
releaseFiles: ${{ env.filename }}.aab | |
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT }} | |
packageName: ${{ vars.PACKAGE_NAME }} | |
mappingFile: app/build/outputs/mapping/playRelease/mapping.txt | |
whatsNewDirectory: changelog | |
inAppUpdatePriority: 5 | |
- name: Promote beta to prod channel | |
uses: kevin-david/[email protected] | |
if: | | |
inputs.release_type == 'prod' && | |
inputs.publish == true | |
with: | |
service-account-json-raw: ${{ secrets.SERVICE_ACCOUNT }} | |
package-name: ${{ vars.PACKAGE_NAME }} | |
inapp-update-priority: 5 | |
user-fraction: 1.0 | |
- name: Push changes | |
uses: ad-m/github-push-action@master | |
if: | | |
inputs.publish == true | |
with: | |
github_token: ${{ secrets.PA_TOKEN }} | |
branch: ${{ github.ref }} | |
- name: Create a GitHub release | |
uses: softprops/action-gh-release@v2 | |
if: | | |
inputs.publish == true | |
with: | |
prerelease: ${{ env.is_beta }} | |
files: '${{ env.filename }}*.apk' | |
name: ${{ env.version }} | |
tag_name: ${{ env.version }} | |
body_path: ${{ env.changelog }} | |
- name: Clear category 'New' | |
if: | | |
inputs.release_type == 'prod' && | |
inputs.publish == true | |
run: | | |
cd ${{ env.sd }} | |
sed -i '7,/^$/c\\' new_drawable.xml | |
echo ${{ env.d1 }} ${{ env.d2 }} | xargs -n 1 cp -fv new_drawable.xml | |
- name: Post-release cleanup | |
uses: stefanzweifel/git-auto-commit-action@v5 | |
if: | | |
inputs.release_type == 'prod' && | |
inputs.publish == true | |
with: | |
commit_message: 'Post-release cleanup' | |
file_pattern: 'app/src/main/*' | |
- name: Update the website | |
if: | | |
github.repository_owner == 'Delta-Icons' && | |
inputs.release_type == 'prod' && | |
inputs.publish == true | |
uses: benc-uk/workflow-dispatch@v1 | |
with: | |
workflow: deploy.yml | |
repo: ${{ github.repository_owner }}/delta-icons.github.io | |
token: ${{ secrets.PA_TOKEN }} |