Skip to content

attempting fixes yet again --publish #1272

attempting fixes yet again --publish

attempting fixes yet again --publish #1272

Workflow file for this run

name: Build For Android
on:
push:
branches: ["main"]
workflow_dispatch:
inputs:
publish:
description: 'Publish engine'
required: true
default: 'no'
type: choice
options:
- 'no'
- 'yes'
runanyway:
description: 'Override --norun Flag'
required: true
default: 'no'
type: choice
options:
- 'no'
- 'yes'
jobs:
build:
if: (!endsWith(github.event.head_commit.message, '--norun') || inputs.runanyway == 'yes')
runs-on: ubuntu-latest
environment: android
env:
ANDROID_HOME: /usr/local/lib/android/sdk
CARGO_TERM_COLOR: always
steps:
# Setup Build Environment
- name: 🎉 The job was automatically triggered by a ${{ github.event_name }} event.
run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- name: 🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!
run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- name: 🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}.
run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
with:
lfs: true
submodules: recursive
- name: 💡 The ${{ github.repository }} repository has been cloned to the runner.
run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
# Setup Java
- name: Setup Java
uses: actions/setup-java@v4
with:
distribution: 'graalvm'
java-version: '23'
# Setup Gradle Build Action (For Caching Builds) - ./app/.cxx|./app/build|./.gradle
- name: Setup Gradle Build Action (For Caching Builds)
uses: gradle/actions/setup-gradle@v3
# Install Dependencies
- name: Install and Cache APT Packages
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: unzip
version: 1.0
execute_install_scripts: true
# Install Rust
- name: Make Tools Directory
run: mkdir -p ${{ github.workspace }}/tools
- name: Download Rust Installer
run: curl --proto '=https' --tlsv1.2 --silent --show-error --fail --location https://sh.rustup.rs > ${{ github.workspace }}/tools/rust.sh
- name: Make Rust Installer Executable
run: chmod +x ${{ github.workspace }}/tools/rust.sh
- name: Install Rust
run: ${{ github.workspace }}/tools/rust.sh -y
- name: Load Cargo Environment
run: source "$HOME/.cargo/env"
# Install Rust Stable Toolchains
- name: Set Rust To The Stable Toolchains
run: $HOME/.cargo/bin/rustup default stable
# Setup Rust Build Caching
- uses: Swatinem/rust-cache@v2
with:
shared-key: "android-rust"
# Add Build Targets
- name: Add armv7 Android Build Target
run: $HOME/.cargo/bin/rustup target add armv7-linux-androideabi
- name: Add aarch64 Android Build Target
run: $HOME/.cargo/bin/rustup target add aarch64-linux-android
- name: Add i686 Android Build Target
run: $HOME/.cargo/bin/rustup target add i686-linux-android
- name: Add x86_64 Android Build Target
run: $HOME/.cargo/bin/rustup target add x86_64-linux-android
# Install Git Pre-Commit Hooks to Enforce Hooks
- name: Install Git Pre-Commit Hooks to Enforce Hooks
run: pip install pre-commit
# Check Pre-Commit Version
- name: Check Pre-Commit Version
run: pre-commit --version
# Install Pre-Commit Hooks
- name: Install Pre-Commit Hooks
run: pre-commit install
# Check Files with Pre-Commit Hooks
- name: Check Files with Pre-Commit Hooks
run: pre-commit run --all-files
# Install Cargo-NDK
- name: Install Cargo-NDK
run: cargo install cargo-ndk
# Workaround Cargo Gradle Plugin Bug
- name: Workaround Cargo Gradle Plugin Bug
run: touch ${{ github.workspace }}/android/local.properties
# Ignore Modifying android/app/build.gradle
- name: Ignore Modifying ${{ github.workspace }}/android/app/build.gradle
run: |
cd ${{ github.workspace }}
git update-index --skip-worktree ${{ github.workspace }}/android/app/build.gradle
# Extract Keystore
- name: Extract Keystore
run: echo "${{ secrets.ANDROID_RELEASE_KEY }}" | base64 -d > /home/runner/work/release.keystore
# Build Engine As APK
- name: Build Engine APK (FAT)
working-directory: ${{ github.workspace }}/android
env:
ANDROID_RELEASE_KEY_PATH: /home/runner/work/release.keystore
ANDROID_RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }}
ANDROID_RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }}
run: |
# Sets the build timestamp to the current commit to make builds reproducible
export SOURCE_DATE_EPOCH="`git --no-pager log -1 --format="%at"`"
${{ github.workspace }}/android/gradlew assembleRelease
mkdir -p ${{ github.workspace }}/upload/android
cp -a ${{ github.workspace }}/android/app/build/outputs/apk/release/app-release.apk ${{ github.workspace }}/upload/android/catgirl-engine-fat.apk
#cp -a ${{ github.workspace }}/android/app/build/outputs/bundle/release/app-release.aab ${{ github.workspace }}/upload/android
# Build Engine As APK
- name: Build Engine APK (arm64)
working-directory: ${{ github.workspace }}/android
env:
ANDROID_RELEASE_KEY_PATH: /home/runner/work/release.keystore
ANDROID_RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }}
ANDROID_RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }}
run: |
# Sets the build timestamp to the current commit to make builds reproducible
export SOURCE_DATE_EPOCH="`git --no-pager log -1 --format="%at"`"
# export CARGO_NDK_ANDROID_TARGET="arm64-v8a"
sed -i "s/targets = [\"[a-z_0-9, ]*\"]/targets = [\"arm64\"]/" ${{ github.workspace }}/android/app/build.gradle
rm -rf ${{ github.workspace }}/android/app/src/main/jniLibs
${{ github.workspace }}/android/gradlew clean
${{ github.workspace }}/android/gradlew assembleRelease
mkdir -p ${{ github.workspace }}/upload/android
cp -a ${{ github.workspace }}/android/app/build/outputs/apk/release/app-release.apk ${{ github.workspace }}/upload/android/catgirl-engine-arm64.apk
# Build Engine As APK
- name: Build Engine APK (armeabi-v7a)
working-directory: ${{ github.workspace }}/android
env:
ANDROID_RELEASE_KEY_PATH: /home/runner/work/release.keystore
ANDROID_RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }}
ANDROID_RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }}
run: |
# Sets the build timestamp to the current commit to make builds reproducible
export SOURCE_DATE_EPOCH="`git --no-pager log -1 --format="%at"`"
# export CARGO_NDK_ANDROID_TARGET="armeabi-v7a"
sed -i "s/targets = [\"[a-z_0-9, ]*\"]/targets = [\"arm\"]/" ${{ github.workspace }}/android/app/build.gradle
rm -rf ${{ github.workspace }}/android/app/src/main/jniLibs
${{ github.workspace }}/android/gradlew clean
${{ github.workspace }}/android/gradlew assembleRelease
mkdir -p ${{ github.workspace }}/upload/android
cp -a ${{ github.workspace }}/android/app/build/outputs/apk/release/app-release.apk ${{ github.workspace }}/upload/android/catgirl-engine-armeabi-v7a.apk
# Build Engine As APK
- name: Build Engine APK (x86)
working-directory: ${{ github.workspace }}/android
env:
ANDROID_RELEASE_KEY_PATH: /home/runner/work/release.keystore
ANDROID_RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }}
ANDROID_RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }}
run: |
# Sets the build timestamp to the current commit to make builds reproducible
export SOURCE_DATE_EPOCH="`git --no-pager log -1 --format="%at"`"
# export CARGO_NDK_ANDROID_TARGET="x86"
sed -i "s/targets = [\"[a-z_0-9, ]*\"]/targets = [\"x86\"]/" ${{ github.workspace }}/android/app/build.gradle
rm -rf ${{ github.workspace }}/android/app/src/main/jniLibs
${{ github.workspace }}/android/gradlew clean
${{ github.workspace }}/android/gradlew assembleRelease
mkdir -p ${{ github.workspace }}/upload/android
cp -a ${{ github.workspace }}/android/app/build/outputs/apk/release/app-release.apk ${{ github.workspace }}/upload/android/catgirl-engine-x86.apk
# Build Engine As APK
- name: Build Engine APK (x86_64)
working-directory: ${{ github.workspace }}/android
env:
ANDROID_RELEASE_KEY_PATH: /home/runner/work/release.keystore
ANDROID_RELEASE_STORE_PASSWORD: ${{ secrets.ANDROID_RELEASE_STORE_PASSWORD }}
ANDROID_RELEASE_KEY_PASSWORD: ${{ secrets.ANDROID_RELEASE_KEY_PASSWORD }}
run: |
# Sets the build timestamp to the current commit to make builds reproducible
export SOURCE_DATE_EPOCH="`git --no-pager log -1 --format="%at"`"
# export CARGO_NDK_ANDROID_TARGET="x86_64"
sed -i "s/targets = [\"[a-z_0-9, ]*\"]/targets = [\"x86_64\"]/" ${{ github.workspace }}/android/app/build.gradle
rm -rf ${{ github.workspace }}/android/app/src/main/jniLibs
${{ github.workspace }}/android/gradlew clean
${{ github.workspace }}/android/gradlew assembleRelease
mkdir -p ${{ github.workspace }}/upload/android
cp -a ${{ github.workspace }}/android/app/build/outputs/apk/release/app-release.apk ${{ github.workspace }}/upload/android/catgirl-engine-x86_64.apk
# Remove Keystore
- name: Remove Keystore
run: rm -rf /home/runner/work/release.keystore
# Display Export Directory
- name: Display Git Staging
run: |
cd ${{ github.workspace }}
git status -v -s -b
# Display APK Directory
- name: Display APK Directory (Release)
run: ls -liallh ${{ github.workspace }}/android/app/build/outputs/apk/release
# Prepare Artifact Uploads
- name: Prepare Artifact Uploads (Client/Server)
run: |
mkdir -p ${{ github.workspace }}/upload/android
cp -a ${{ github.workspace }}/target/binding ${{ github.workspace }}/upload/android
# Extract/Import GPG Signing Key
- name: Extract GPG Signing Key
run: |
echo "${{ secrets.GPG_SIGNING_KEY }}" > $HOME/signing.gpg
gpg --import $HOME/signing.gpg
rm -rf $HOME/signing.gpg
# Sign Files
- name: Sign Files (Client/Server)
run: |
cd ${{ github.workspace }}/upload/android
find . -type f -not -name "checksums.sha512" -exec shasum -a 512 {} \; > checksums.sha512
gpg --sign checksums.sha512
# Remove GPG Signing Key
- name: Remove GPG Signing Key
run: rm -rf $HOME/.gnupg
# Compress Files
- name: Compress Files (Client/Server)
run: |
export XZ_OPT=-e9
cd ${{ github.workspace }}/upload/android
tar cvJf ${{ github.workspace }}/upload/CatgirlEngine-Android.tar.xz .
# Upload Engine
- name: Upload Engine (Release)
uses: actions/upload-artifact@v4
with:
name: CatgirlEngine-Android
path: ${{ github.workspace }}/upload/CatgirlEngine-Android.tar.xz
# List Environment
- name: List Environment
run: env
- name: List All Installed Packages
run: |
apt list --installed | wc -l
apt list --installed
- name: List All Files
run: find ${{ github.workspace }}
# Display Build Status
- name: 🍏 This job's status is ${{ job.status }}.
run: echo "🍏 This job's status is ${{ job.status }}."
deploy:
if: ${{ success() && (endsWith(github.event.head_commit.message, '--publish') || inputs.publish == 'yes') }}
needs: [Build]
runs-on: ubuntu-latest
permissions:
# See https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
# See https://docs.github.com/en/rest/overview/permissions-required-for-fine-grained-personal-access-tokens
contents: write
environment: itch.io
steps:
# Setup Build Environment
- name: 🎉 The job was automatically triggered by a ${{ github.event_name }} event.
run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
- name: 🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!
run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
- name: 🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}.
run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
- name: Check out repository code
uses: actions/checkout@v4
with:
lfs: true
submodules: recursive
- name: 💡 The ${{ github.repository }} repository has been cloned to the runner.
run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
# Download APK
- name: Download APK (Release)
uses: actions/download-artifact@v4
with:
name: CatgirlEngine-Android
path: ${{ github.workspace }}/artifacts
# Compress Files
- name: Extract Files (Client/Server)
run: |
mkdir -p ${{ github.workspace }}/artifacts/android
cd ${{ github.workspace }}/artifacts
tar xvf ${{ github.workspace }}/artifacts/CatgirlEngine-Android.tar.xz -C android
# Create Tag and Github Release
- name: 👩‍💻 Create Tag and Github Release
env:
GH_TOKEN: ${{ github.token }}
run: |
# TODO: Consider checking for -alpha and -beta to filter onto other packages
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export VERSION_STRING="Catgirl Engine v$VERSION"
export BODY="Autogenerated Release From Github Actions..."
export DRAFT="false"
export PRERELEASE="false"
export LATEST="true"
export GENERATE_RELEASE_NOTES="true"
export BRANCH=`git branch --show-current --format="%s" | tr -d '\n'`
# export COMMIT=`git log -1 --oneline | cut -d' ' -f1 | tr -d '\n'`
gh api --method POST \
-H "Accept: application/vnd.github+json" \
-H "X-GitHub-Api-Version: 2022-11-28" \
/repos/${{ github.repository }}/releases \
-f tag_name="v$VERSION" \
-f target_commitish="$BRANCH" \
-f name="$VERSION_STRING" \
-f body="$BODY" \
-f make_latest="$LATEST" \
-F draft="$DRAFT" \
-F prerelease="$PRERELEASE" \
-F generate_release_notes="$GENERATE_RELEASE_NOTES" || echo "Already Exists"
# Publish to Github Release
- name: 👩‍💻 Publish to Github Release (Tar)
env:
GH_TOKEN: ${{ github.token }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export ARTIFACT_PATH="${{ github.workspace }}/artifacts/CatgirlEngine-Android.tar.xz"
export DISPLAY_LABEL="Android (Tar)"
gh release upload v$VERSION "$ARTIFACT_PATH"#"$DISPLAY_LABEL" -R ${{ github.repository }}
# Publish to Github Release
- name: 👩‍💻 Publish to Github Release (FAT)
env:
GH_TOKEN: ${{ github.token }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export ARTIFACT_PATH="${{ github.workspace }}/artifacts/android/catgirl-engine-fat.apk"
export DISPLAY_LABEL="Android (FAT)"
gh release upload v$VERSION "$ARTIFACT_PATH"#"$DISPLAY_LABEL" -R ${{ github.repository }}
# Publish to Github Release
- name: 👩‍💻 Publish to Github Release (arm64)
env:
GH_TOKEN: ${{ github.token }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export ARTIFACT_PATH="${{ github.workspace }}/artifacts/android/catgirl-engine-arm64.apk"
export DISPLAY_LABEL="Android (arm64)"
gh release upload v$VERSION "$ARTIFACT_PATH"#"$DISPLAY_LABEL" -R ${{ github.repository }}
# Publish to Github Release
- name: 👩‍💻 Publish to Github Release (armeabi-v7a)
env:
GH_TOKEN: ${{ github.token }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export ARTIFACT_PATH="${{ github.workspace }}/artifacts/android/catgirl-engine-armeabi-v7a.apk"
export DISPLAY_LABEL="Android (armeabi-v7a)"
gh release upload v$VERSION "$ARTIFACT_PATH"#"$DISPLAY_LABEL" -R ${{ github.repository }}
# Publish to Github Release
- name: 👩‍💻 Publish to Github Release (x86)
env:
GH_TOKEN: ${{ github.token }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export ARTIFACT_PATH="${{ github.workspace }}/artifacts/android/catgirl-engine-x86.apk"
export DISPLAY_LABEL="Android (x86)"
gh release upload v$VERSION "$ARTIFACT_PATH"#"$DISPLAY_LABEL" -R ${{ github.repository }}
# Publish to Github Release
- name: 👩‍💻 Publish to Github Release (x86_64)
env:
GH_TOKEN: ${{ github.token }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
export ARTIFACT_PATH="${{ github.workspace }}/artifacts/android/catgirl-engine-x86_64.apk"
export DISPLAY_LABEL="Android (x86_64)"
gh release upload v$VERSION "$ARTIFACT_PATH"#"$DISPLAY_LABEL" -R ${{ github.repository }}
# Install Butler (For Uploading to Itch.io)
- name: Install Butler (Upload to Itch.io)
id: download-butler
continue-on-error: true
run: |
# https://itch.io/docs/butler/pushing.html#channel-names
# Setup For Installation
mkdir -p ${{ github.workspace }}/tools/butler
# Install Butler
curl --proto '=https' --tlsv1.2 --silent --show-error --fail --location https://broth.itch.zone/butler/linux-amd64/LATEST/archive/default > ${{ github.workspace }}/tools/butler-linux-amd64.zip
unzip -o ${{ github.workspace }}/tools/butler-linux-amd64.zip -d ${{ github.workspace }}/tools/butler
# Fallback to deal with DDOS attack on Itch.io at the time of writing
- name: Install Butler (Fallback)
if: steps.download-butler.outcome == 'failure'
run: |
# Setup For Installation
mkdir -p ${{ github.workspace }}/tools/butler
# Install Butler
curl --proto '=https' --tlsv1.2 --silent --show-error --fail --location https://github.com/lexi-the-cute/butler/releases/download/v15.23.0/butler-linux-amd64.zip > ${{ github.workspace }}/tools/butler-linux-amd64.zip
unzip -o ${{ github.workspace }}/tools/butler-linux-amd64.zip -d ${{ github.workspace }}/tools/butler
# Publish to Itch.io
- name: 🎮 Publish to Itch.io
env:
BUTLER_API_KEY: ${{ secrets.ITCH_IO_API_KEY }}
run: |
export VERSION=`cat ${{ github.workspace }}/Cargo.toml | grep '^version' | head -n1 | cut -d'"' -f2 | tr -d '\n'`
# Upload App
${{ github.workspace }}/tools/butler/butler push ${{ github.workspace }}/artifacts/android/catgirl-engine-fat.apk foxgirl-labs/catgirl-engine:android --userversion $VERSION
# ${{ github.workspace }}/tools/butler/butler push ${{ github.workspace }}/artifacts/android/catgirl-engine-arm64.apk foxgirl-labs/catgirl-engine:android-arm64 --userversion $VERSION
# ${{ github.workspace }}/tools/butler/butler push ${{ github.workspace }}/artifacts/android/catgirl-engine-armeabi-v7a.apk foxgirl-labs/catgirl-engine:android-armeabi-v7a --userversion $VERSION
# ${{ github.workspace }}/tools/butler/butler push ${{ github.workspace }}/artifacts/android/catgirl-engine-x86.apk foxgirl-labs/catgirl-engine:android-x86 --userversion $VERSION
# ${{ github.workspace }}/tools/butler/butler push ${{ github.workspace }}/artifacts/android/catgirl-engine-x86_64.apk foxgirl-labs/catgirl-engine:android-x86_64 --userversion $VERSION