diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml index 447aaa1..cd68a23 100644 --- a/.github/actionlint.yaml +++ b/.github/actionlint.yaml @@ -4,3 +4,10 @@ paths: - '"inputs" section is alias node but mapping node is expected' - '"paths" section must be sequence node but got alias node with "" tag' - '"paths-ignore" section must be sequence node but got alias node with "" tag' + .github/workflows/issue.yaml: + ignore: + - 'missing input "app-id" which is required by action "actions/create-github-app-token@v3"' + - 'input "client-id" is not defined in action "actions/create-github-app-token@v3"' + .github/workflows/test.yaml: + ignore: + - 'property ".+" is not defined in object type' diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml index b175e03..c11471a 100644 --- a/.github/workflows/docs.yaml +++ b/.github/workflows/docs.yaml @@ -47,7 +47,7 @@ jobs: - name: "Algolia Crawler" if: ${{ env.crawler-id != '' }} - uses: cssnr/algolia-crawler-action@v1 + uses: cssnr/algolia-crawler-action@v2 with: crawler_id: ${{ env.crawler-id }} crawler_user_id: ${{ secrets.CRAWLER_USER_ID }} diff --git a/.github/workflows/draft.yaml b/.github/workflows/draft.yaml index 309c3b9..1987d9e 100644 --- a/.github/workflows/draft.yaml +++ b/.github/workflows/draft.yaml @@ -19,7 +19,7 @@ jobs: steps: - name: "Checkout" - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: "Draft Release Action" id: draft diff --git a/.github/workflows/issue.yaml b/.github/workflows/issue.yaml new file mode 100644 index 0000000..b3b5a6f --- /dev/null +++ b/.github/workflows/issue.yaml @@ -0,0 +1,44 @@ +name: "Issue" + +on: + issues: + types: [opened] + +jobs: + issue: + name: "Issue" + if: ${{ !github.event.issue.type || github.event.issue.type.name == 'Bug' }} + runs-on: ubuntu-latest + timeout-minutes: 15 + + permissions: + contents: write + issues: write + + steps: + - name: "Checkout" + uses: actions/checkout@v7 + + - name: "Create App Token" + id: app + uses: actions/create-github-app-token@v3 + with: + client-id: ${{ vars.APP_CLIENT_ID }} + private-key: ${{ secrets.APP_PRIVATE_KEY }} + + - name: "AI Issue" + uses: cssnr/ai-issue-action@v1 + env: + GOOGLE_GENERATIVE_AI_API_KEY: ${{ secrets.GOOGLE_GENERATIVE_AI_API_KEY }} + with: + token: ${{ steps.app.outputs.token }} + model: gemini-2.5-flash + tail: | + _Response generated by the [AI Issue Action](https://github.com/cssnr/ai-issue-action)._ + instructions: | + You are a helpful assistant responding to a GitHub Issue created by user @${{ github.actor }} + in the repository ${{ github.server_url }}/${{ github.repository }} + Provide initial triage and troubleshooting steps, then gather any additional information needed to proceed. + Respond using your general knowledge of Android Applications and the following knowledge files: + path: | + docs/**/*.md diff --git a/.github/workflows/lint.yaml b/.github/workflows/lint.yaml index e2fb8af..cdb1e98 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/lint.yaml @@ -20,7 +20,7 @@ jobs: steps: - name: "Checkout" - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: "Debug event.json" continue-on-error: true diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 21d87cd..cebebd1 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -35,7 +35,7 @@ jobs: steps: - name: "Checkout" - uses: actions/checkout@v6 + uses: actions/checkout@v7 - name: "Debug Event" continue-on-error: true @@ -152,7 +152,7 @@ jobs: mv "${{ env.apk_path }}/${{ env.apk_file }}" "${{ env.apk_path }}/${{ env.signed_apk }}" - name: "Upload APK to Artifacts" - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v7 with: name: release path: ${{ env.apk_path }} @@ -230,7 +230,7 @@ jobs: - name: "VirusTotal" if: ${{ github.event_name == 'release' }} - uses: cssnr/virustotal-action@v1 + uses: cssnr/virustotal-action@v2 continue-on-error: true with: vt_api_key: ${{ secrets.VT_API_KEY }} diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..6fb5240 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,19 @@ +# Agent Guide + +Android application to update wallpaper from a remote URL on an interval. + +- `app/` - Android app source (Kotlin, Gradle) +- `Taskfile.yml` - task commands + +## Commands + +ALWAYS use the `task *` commands + +| Command | Purpose | +| -------------- | --------------------------------------------------- | +| `task compile` | Compile Kotlin (quick check) | +| `task build` | Build all variants (APKs) | +| `task lint` | Prettier check + yamllint + actionlint + shellcheck | +| `task format` | Prettier write (format non-kotlin files) | + +Do NOT use `-q` or pipe Gradle output through `Select-Object` — both hide progress and make long builds look hung. diff --git a/README.md b/README.md index fbf9ed2..3a4a337 100644 --- a/README.md +++ b/README.md @@ -249,11 +249,3 @@ You can also star this project on GitHub and support other related projects: - [Tibs3DPrints Android](https://github.com/cssnr/tibs3dprints-android?tab=readme-ov-file#readme) For a full list of current projects visit: [https://cssnr.github.io/](https://cssnr.github.io/) - - - - - - Star History Chart - - diff --git a/Taskfile.yml b/Taskfile.yml index 0a8fd6c..2df0b47 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -27,3 +27,21 @@ tasks: GRADLEW: 'gradlew{{if eq OS "windows"}}.bat{{end}}' cmd: | ./{{.GRADLEW}} assemble {{.CLI_ARGS}} + + compile: + desc: Compile Kotlin (quick check) + vars: + GRADLEW: 'gradlew{{if eq OS "windows"}}.bat{{end}}' + cmd: ./{{.GRADLEW}} :app:compileDebugKotlin + + gradle-status: + desc: Show Gradle daemon status + vars: + GRADLEW: 'gradlew{{if eq OS "windows"}}.bat{{end}}' + cmd: "{{.GRADLEW}} --status" + + gradle-stop: + desc: Stop all Gradle daemons + vars: + GRADLEW: 'gradlew{{if eq OS "windows"}}.bat{{end}}' + cmd: "{{.GRADLEW}} --stop" diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 03ca00c..0da239c 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -11,7 +11,7 @@ plugins { configure { namespace = "org.cssnr.remotewallpaper" - compileSdk = 36 + compileSdk = 37 defaultConfig { applicationId = "org.cssnr.remotewallpaper" diff --git a/docs/support.md b/docs/support.md index 049b5b5..4b0df43 100644 --- a/docs/support.md +++ b/docs/support.md @@ -49,6 +49,3 @@ From here you can contact me directly, `Shane@111150265075298304`. More information available at: [https://cssnr.com/](https://cssnr.com/) [![Support on Ko-fi](https://cdn.prod.website-files.com/5c14e387dab576fe667689cf/670f5a01c01ea9191809398c_support_me_on_kofi_blue.png){ width="360" }](https://ko-fi.com/cssnr) - -![Star History](https://api.star-history.com/svg?repos=cssnr/remote-wallpaper-android&type=date&legend=bottom-right#only-light){ style="border-radius: 12px;" } -![Star History](https://api.star-history.com/svg?repos=cssnr/remote-wallpaper-android&type=date&legend=bottom-right&theme=dark#only-dark){ style="border-radius: 12px;" } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 5e88485..7891f9f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,20 +1,20 @@ [versions] agp = "9.1.1" -kotlin = "2.3.20" +kotlin = "2.4.10" ksp = "2.3.5" -coreKtx = "1.18.0" +coreKtx = "1.19.0" junit = "4.13.2" junitVersion = "1.3.0" espressoCore = "3.7.0" appcompat = "1.7.1" -material = "1.13.0" +material = "1.14.0" -constraintlayout = "2.2.1" -navigationSafeargs = "2.9.7" -lifecycleLivedataKtx = "2.10.0" -lifecycleViewmodelKtx = "2.10.0" -navigationFragmentKtx = "2.9.7" -navigationUiKtx = "2.9.7" +constraintlayout = "2.2.2" +navigationSafeargs = "2.9.8" +lifecycleLivedataKtx = "2.11.0" +lifecycleViewmodelKtx = "2.11.0" +navigationFragmentKtx = "2.9.8" +navigationUiKtx = "2.9.8" preferenceKtx = "1.2.1" recyclerview = "1.4.0" room = "2.8.4" @@ -22,7 +22,7 @@ swiperefreshlayout = "1.2.0" workRuntimeKtx = "2.11.2" # viewpager2 = "1.1.0" -okhttp = "5.3.2" +okhttp = "5.4.0" retrofit = "3.0.0" moshiKotlinCodegen = "1.15.2" photoview = "1.0.3"