.github/workflows/release_build.yml aktualisiert

This commit is contained in:
2025-05-20 22:16:21 +02:00
parent 0928e06069
commit a7f730c0ff

View File

@@ -4,21 +4,24 @@ on:
push:
tags:
- '*'
concurrency:
group: "release-build"
cancel-in-progress: true
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- name: Check out repository
uses: actions/checkout@v4
with:
submodules: true
- name: Debug Environment
run: |
echo "Working directory: $(pwd)"
@@ -26,141 +29,117 @@ jobs:
echo "Ref: ${{ github.ref }}"
echo "Ref name: ${{ github.ref_name }}"
ls -la
- name: Validate Gradle Wrapper
uses: gradle/wrapper-validation-action@v1
- name: Set up Java 17
uses: actions/setup-java@v4
with:
java-version: 17
distribution: 'adopt'
cache: gradle
- name: Debug Java and Gradle Setup
run: |
java -version
echo "JAVA_HOME: $JAVA_HOME"
# Setting up Android SDK manually
- name: Setup Android SDK
run: |
mkdir -p $HOME/Android/sdk
echo "sdk.dir=$HOME/Android/sdk" > local.properties
echo "ANDROID_HOME=$HOME/Android/sdk" >> $GITHUB_ENV
echo "PATH=$PATH:$HOME/Android/sdk/tools:$HOME/Android/sdk/tools/bin:$HOME/Android/sdk/platform-tools" >> $GITHUB_ENV
# Install cmdline-tools
mkdir -p $HOME/Android/sdk/cmdline-tools
echo "ANDROID_SDK_ROOT=$HOME/Android/sdk" >> $GITHUB_ENV
echo "PATH=$PATH:$HOME/Android/sdk/cmdline-tools/latest/bin:$HOME/Android/sdk/platform-tools" >> $GITHUB_ENV
# Download & unpack commandline tools
wget -q https://dl.google.com/android/repository/commandlinetools-linux-8092744_latest.zip -O cmdline-tools.zip
unzip -q cmdline-tools.zip -d $HOME/Android/sdk/cmdline-tools
mv $HOME/Android/sdk/cmdline-tools/cmdline-tools $HOME/Android/sdk/cmdline-tools/latest
# Debug cmdline-tools installation
ls -la $HOME/Android/sdk/cmdline-tools/latest/bin/
# Accept licenses and install necessary components
echo "y" | $HOME/Android/sdk/cmdline-tools/latest/bin/sdkmanager --licenses || echo "License acceptance failed but continuing"
$HOME/Android/sdk/cmdline-tools/latest/bin/sdkmanager "platform-tools" "platforms;android-33" "build-tools;33.0.0"
rm cmdline-tools.zip
# Accept all licenses
yes | $HOME/Android/sdk/cmdline-tools/latest/bin/sdkmanager --licenses
# Install required SDK components (API 33 + API 35)
$HOME/Android/sdk/cmdline-tools/latest/bin/sdkmanager \
"platform-tools" \
"platforms;android-33" \
"build-tools;33.0.0" \
"platforms;android-35" \
"build-tools;35.0.0"
# Verify installation
echo "Android SDK components installed:"
echo "Installed SDK components:"
$HOME/Android/sdk/cmdline-tools/latest/bin/sdkmanager --list_installed
- name: Grant execution permission to Gradle Wrapper
run: chmod +x gradlew
- name: Debug Gradle setup
run: |
./gradlew --version
cat local.properties
- name: Build Release APK
run: |
./gradlew assembleRelease --stacktrace
- name: Find APK files
run: |
echo "Looking for APK files:"
find . -type f -name "*.apk"
- name: Sign APK manually
run: |
# Find APK file
APK_FILES=$(find app/build/outputs/apk/release/ -name "*.apk" | sort)
if [ -z "$APK_FILES" ]; then
echo "No APK files found!"
exit 1
fi
echo "Found APK files:"
echo "$APK_FILES"
# Use the first APK file found
[ -n "$APK_FILES" ] || { echo "No APK files found!"; exit 1; }
APK_FILE=$(echo "$APK_FILES" | head -1)
echo "Using APK file: $APK_FILE"
# Create keystore from base64
echo "Creating keystore..."
# Decode keystore and sign
echo "${{ secrets.KEY_BASE64 }}" | base64 -d > keystore.jks
# Sign APK
echo "Signing APK..."
SIGNED_FILE="${APK_FILE%.apk}-signed.apk"
# Find apksigner in build-tools
APKSIGNER_PATH=$(find $HOME/Android/sdk/build-tools -name "apksigner" | head -1)
echo "Using apksigner at: $APKSIGNER_PATH"
$APKSIGNER_PATH sign --ks keystore.jks \
APKSIGNER=$(find $HOME/Android/sdk/build-tools -name apksigner | head -1)
SIGNED="${APK_FILE%.apk}-signed.apk"
$APKSIGNER sign --ks keystore.jks \
--ks-key-alias "${{ secrets.KEY_ALIAS }}" \
--ks-pass pass:"${{ secrets.KEYSTORE_PASS }}" \
--key-pass pass:"${{ secrets.KEYSTORE_PASS }}" \
--out "$SIGNED_FILE" \
"$APK_FILE"
echo "SIGNED_RELEASE_FILE=$SIGNED_FILE" >> $GITHUB_ENV
# Verify signed APK
ls -la "$SIGNED_FILE" || echo "Failed to find signed APK"
--out "$SIGNED" "$APK_FILE"
echo "SIGNED_RELEASE_FILE=$SIGNED" >> $GITHUB_ENV
ls -la "$SIGNED"
- name: Extract Version Code
run: |
VERSION_CODE=$(grep -oP '(?<=versionCode)\s*=?\s*\K\d+' app/build.gradle || grep -oP '(?<=versionCode)\s*=?\s*\K\d+' app/build.gradle.kts || echo "unknown")
VERSION_CODE=$(grep -oP '(?<=versionCode)\s*=?\s*\K\d+' app/build.gradle* | head -1 || echo "unknown")
echo "VERSION_CODE=$VERSION_CODE" >> $GITHUB_ENV
echo "Version Code: $VERSION_CODE"
- name: Read Changelog
run: |
CHANGELOG_PATH="metadata/en-US/changelogs/$VERSION_CODE.txt"
echo "Looking for changelog at: $CHANGELOG_PATH"
if [[ -f "$CHANGELOG_PATH" ]]; then
if [ -f "$CHANGELOG_PATH" ]; then
echo "Changelog found:"
cat "$CHANGELOG_PATH"
echo ""
# Set environment variable for the changelog
echo "CHANGELOG<<EOF" >> $GITHUB_ENV
cat "$CHANGELOG_PATH" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
else
echo "No changelog found at: $CHANGELOG_PATH"
echo "No changelog found; falling back to summary"
echo "CHANGELOG=Release version $VERSION_CODE" >> $GITHUB_ENV
# Try to find any changelog files
echo "Looking for any changelog files:"
find metadata -type f -name "*.txt" || echo "No changelog files found"
find metadata -type f -name "*.txt" || echo "No other changelogs found"
fi
- name: Upload Artifact
uses: actions/upload-artifact@v2
uses: actions/upload-artifact@v3
with:
name: Signed-APK-${{ env.VERSION_CODE }}
path: ${{ env.SIGNED_RELEASE_FILE }}
- name: Debug Final Output
run: |
echo "Signed APK path: ${{ env.SIGNED_RELEASE_FILE }}"
echo "Version code: ${{ env.VERSION_CODE }}"
echo "Changelog summary: $(echo "${{ env.CHANGELOG }}" | head -1)"
echo "Changelog summary: $(echo "${{ env.CHANGELOG }}" | head -1)"