Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0153e90bf0 | ||
|
|
d4f8fe83f5 | ||
|
|
d28b1e4094 | ||
|
|
cd2de0136a |
114
.github/workflows/auto_release.yml
vendored
Normal file
114
.github/workflows/auto_release.yml
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
name: Build automatic release
|
||||
|
||||
on:
|
||||
schedule:
|
||||
- cron: '0 0 * * *'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
check:
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
should_build: ${{ steps.check-updates.outputs.has_changes }}
|
||||
steps:
|
||||
- name: Check for updates 🌏
|
||||
id: check-updates
|
||||
run: |
|
||||
last_run=$(curl -s "https://api.github.com/repos/${{ github.repository }}/releases/latest" | jq -r '.created_at')
|
||||
kotatsu_updated=$(curl -s "https://api.github.com/repos/KotatsuApp/Kotatsu/commits?since=$last_run" | jq '. | length')
|
||||
parsers_updated=$(curl -s "https://api.github.com/repos/KotatsuApp/kotatsu-parsers/commits?since=$last_run" | jq '. | length')
|
||||
if [ "$kotatsu_updated" -gt "0" ] || [ "$parsers_updated" -gt "0" ]; then
|
||||
echo "has_changes=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "has_changes=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
build:
|
||||
needs: check
|
||||
if: needs.check.outputs.should_build == 'true'
|
||||
runs-on: ubuntu-24.04
|
||||
outputs:
|
||||
new_tag: ${{ steps.tagger.outputs.new_tag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
ref: autobuild
|
||||
|
||||
- uses: actions/setup-java@v4
|
||||
with:
|
||||
distribution: 'temurin'
|
||||
java-version: '17'
|
||||
cache: 'gradle'
|
||||
|
||||
- name: Setup Android SDK 💻
|
||||
uses: android-actions/setup-android@v3
|
||||
|
||||
- name: Grant permissions 💻
|
||||
run: chmod a+x gradlew
|
||||
|
||||
- name: Generate build number 📆
|
||||
id: tagger
|
||||
run: |
|
||||
echo "new_tag=$(./gradlew -q versionInfo -DbuildNumberIncrement=true)" >> $GITHUB_OUTPUT
|
||||
echo "formatted_date=$(date +'%Y/%m/%d')" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Decode Keystore
|
||||
id: decode_keystore
|
||||
uses: timheuer/base64-to-file@v1
|
||||
with:
|
||||
fileName: 'keystore/kotatsu.jks'
|
||||
encodedString: ${{ secrets.ANDROID_SIGNING_KEY }}
|
||||
|
||||
- name: Building new APK 💻
|
||||
run: >-
|
||||
./gradlew assembleRelease
|
||||
-DparsersVersionOverride=$(curl -s https://api.github.com/repos/kotatsuapp/kotatsu-parsers/commits/master -H "Accept: application/vnd.github.sha" | cut -c -10)
|
||||
|
||||
- name: Prepare to Upload 🌏
|
||||
run: |
|
||||
mv ${{steps.sign_app.outputs.signedFile}} app/build/outputs/apk/release/release.apk
|
||||
echo "SIGNED_APK=app/build/outputs/apk/release/release.apk" >> $GITHUB_ENV
|
||||
|
||||
- name: Get latest changes 📑
|
||||
id: changelog
|
||||
run: |
|
||||
CHANGELOG=$(cat CHANGELOG.txt)
|
||||
echo "content<<EOF" >> $GITHUB_OUTPUT
|
||||
echo "$CHANGELOG" >> $GITHUB_OUTPUT
|
||||
echo "EOF" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create new GH Release + Uploading 🌏
|
||||
uses: softprops/action-gh-release@v2
|
||||
with:
|
||||
tag_name: v${{ steps.tagger.outputs.new_tag }}
|
||||
name: "Build ${{ steps.tagger.outputs.new_tag }}"
|
||||
body: |
|
||||
Automated build generated on ${{ steps.tagger.outputs.formatted_date }}
|
||||
|
||||
${{ steps.changelog.outputs.content }}
|
||||
files: ${{ env.SIGNED_APK }}
|
||||
prerelease: false
|
||||
|
||||
update:
|
||||
needs: build
|
||||
if: needs.check.outputs.should_build == 'true'
|
||||
runs-on: ubuntu-24.04
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
with:
|
||||
ref: autobuild
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Commit 🌏
|
||||
run: |
|
||||
git config --local user.email "autorelease@users.noreply.github.com"
|
||||
git config --local user.name "autorelease"
|
||||
if [[ -n $(git status -s) ]]; then
|
||||
git add README.md
|
||||
git commit -m "Automatic release v${{ needs.build.outputs.new_tag }}"
|
||||
git push origin autobuild
|
||||
else
|
||||
echo "No changes to push!"
|
||||
fi
|
||||
@@ -9,17 +9,24 @@ plugins {
|
||||
id 'dagger.hilt.android.plugin'
|
||||
}
|
||||
|
||||
def Properties versionProps = getVersionProps()
|
||||
|
||||
android {
|
||||
compileSdk = 35
|
||||
buildToolsVersion = '35.0.0'
|
||||
namespace = 'org.koitharu.kotatsu'
|
||||
|
||||
defaultConfig {
|
||||
def code = versionProps['code'].toInteger()
|
||||
def base = versionProps['base'].trim()
|
||||
def build = versionProps['build'].toInteger()
|
||||
def variant = versionProps['variant'].trim()
|
||||
|
||||
applicationId 'org.koitharu.kotatsu'
|
||||
minSdk = 21
|
||||
targetSdk = 35
|
||||
versionCode = 700
|
||||
versionName = '7.7.8'
|
||||
versionCode = code * 1000 + build
|
||||
versionName = base + (build == 0 ? '' : '.' + build) + (variant == '' ? '' : '-') + variant
|
||||
generatedDensities = []
|
||||
testInstrumentationRunner 'org.koitharu.kotatsu.HiltTestRunner'
|
||||
ksp {
|
||||
@@ -30,6 +37,22 @@ android {
|
||||
generateLocaleConfig true
|
||||
}
|
||||
}
|
||||
signingConfigs {
|
||||
release {
|
||||
def tmpFilePath = System.getProperty("user.home") + "/work/_temp/keystore/"
|
||||
def allFilesFromDir = new File(tmpFilePath).listFiles()
|
||||
|
||||
if (allFilesFromDir != null) {
|
||||
def keystoreFile = allFilesFromDir.first()
|
||||
keystoreFile.renameTo("keystore/kotatsu.jks")
|
||||
}
|
||||
|
||||
storeFile = file("keystore/kotatsu.jks")
|
||||
storePassword System.getenv("SIGNING_STORE_PASSWORD")
|
||||
keyAlias System.getenv("SIGNING_KEY_ALIAS")
|
||||
keyPassword System.getenv("SIGNING_KEY_PASSWORD")
|
||||
}
|
||||
}
|
||||
buildTypes {
|
||||
debug {
|
||||
applicationIdSuffix = '.debug'
|
||||
@@ -38,6 +61,7 @@ android {
|
||||
minifyEnabled true
|
||||
shrinkResources true
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
signingConfig signingConfigs.release
|
||||
}
|
||||
nightly {
|
||||
initWith release
|
||||
@@ -194,3 +218,22 @@ dependencies {
|
||||
androidTestImplementation libs.hilt.android.testing
|
||||
kaptAndroidTest libs.hilt.android.compiler
|
||||
}
|
||||
|
||||
tasks.register('versionInfo') {
|
||||
def base = versionProps['base'].trim()
|
||||
def build = versionProps['build'].toInteger()
|
||||
def variant = versionProps['variant'].trim()
|
||||
println base + (build == 0 ? '' : '.' + build) + (variant == '' ? '' : '-') + variant
|
||||
}
|
||||
|
||||
def getVersionProps() {
|
||||
def versionPropsFile = file('version.properties')
|
||||
def Properties versionProps = new Properties()
|
||||
versionProps.load(new FileInputStream(versionPropsFile))
|
||||
if (System.getProperty('buildNumberIncrement') == 'true') {
|
||||
def code = versionProps['build'].toInteger() + 1
|
||||
versionProps['build'] = code.toString()
|
||||
versionProps.store(versionPropsFile.newWriter(), null)
|
||||
}
|
||||
return versionProps
|
||||
}
|
||||
|
||||
@@ -41,10 +41,12 @@ private fun PreferenceFragmentCompat.addPreferencesFromParserRepository(reposito
|
||||
}
|
||||
}.apply {
|
||||
summaryProvider = EditTextDefaultSummaryProvider(key.defaultValue)
|
||||
onBindEditTextListener = EditTextBindListener(
|
||||
inputType = EditorInfo.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_VARIATION_URI,
|
||||
hint = key.defaultValue,
|
||||
validator = DomainValidator(),
|
||||
setOnBindEditTextListener(
|
||||
EditTextBindListener(
|
||||
inputType = EditorInfo.TYPE_CLASS_TEXT or EditorInfo.TYPE_TEXT_VARIATION_URI,
|
||||
hint = key.defaultValue,
|
||||
validator = DomainValidator(),
|
||||
),
|
||||
)
|
||||
setTitle(R.string.domain)
|
||||
setDialogTitle(R.string.domain)
|
||||
@@ -60,10 +62,12 @@ private fun PreferenceFragmentCompat.addPreferencesFromParserRepository(reposito
|
||||
UserAgents.CHROME_DESKTOP,
|
||||
)
|
||||
summaryProvider = EditTextDefaultSummaryProvider(key.defaultValue)
|
||||
onBindEditTextListener = EditTextBindListener(
|
||||
inputType = EditorInfo.TYPE_CLASS_TEXT,
|
||||
hint = key.defaultValue,
|
||||
validator = HeaderValidator(),
|
||||
setOnBindEditTextListener(
|
||||
EditTextBindListener(
|
||||
inputType = EditorInfo.TYPE_CLASS_TEXT,
|
||||
hint = key.defaultValue,
|
||||
validator = HeaderValidator(),
|
||||
),
|
||||
)
|
||||
setTitle(R.string.user_agent)
|
||||
setDialogTitle(R.string.user_agent)
|
||||
|
||||
5
app/version.properties
Normal file
5
app/version.properties
Normal file
@@ -0,0 +1,5 @@
|
||||
#Wed Jan 22 19:14:17 EET 2025
|
||||
code=1
|
||||
build=8
|
||||
variant=
|
||||
base=7.7
|
||||
Reference in New Issue
Block a user