Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
a595b16
feat(Query): Automatically use the first logical operation as the WHE…
LeandroLCD Nov 17, 2025
20e71ac
test(QueryDelete): Fix test for building without a WHERE clause
LeandroLCD Nov 17, 2025
6edf9d8
Update query/src/main/java/com/blipblipcode/query/QueryDelete.kt
LeandroLCD Nov 17, 2025
cd823c1
Update query/src/main/java/com/blipblipcode/query/QuerySelect.kt
LeandroLCD Nov 18, 2025
0ef87ec
feat(QuerySelect): Allow queries without a WHERE clause
LeandroLCD Nov 18, 2025
5899c58
Merge remote-tracking branch 'origin/master' into develop
LeandroLCD Nov 18, 2025
8cb9e02
Merge branch 'master' into develop
LeandroLCD Nov 18, 2025
5200a40
Merge remote-tracking branch 'origin/develop' into develop
LeandroLCD Nov 20, 2025
ac5b7fb
chore(deps): Update AGP to 8.13.1
LeandroLCD Nov 20, 2025
c0b92b6
docs(UnionQuery): Fix KDoc for orderBy parameter
LeandroLCD Nov 20, 2025
664d910
feat(Query): Add case-insensitive comparison support
LeandroLCD Nov 26, 2025
8bb0d5a
chore(deps): Update various dependencies
LeandroLCD Dec 8, 2025
c4c208f
chore(README): Update Kotlin version badge
LeandroLCD Dec 8, 2025
8b3be0d
refactor(Field): Implement SQLOperator for consistency
LeandroLCD Dec 8, 2025
8a9c3e0
feat(Queryable): Add filtered `asSql` method
LeandroLCD Dec 8, 2025
8f41579
feat(Queryable): Add predicate-based SQL generation and clear functio…
LeandroLCD Dec 8, 2025
4d6156b
refactor(SQLOperator): Standardize operator implementations
LeandroLCD Dec 8, 2025
e667492
feat(retrofit): Add RepeatedQueryParameters for Retrofit @QueryMap
LeandroLCD Dec 8, 2025
d797d6d
feat(Queryable): Add `asQueryRepeatedQueryParameters` extension
LeandroLCD Dec 8, 2025
a5d00b2
feat(QuerySelect): Include orderBy and limit in getSqlOperators
LeandroLCD Dec 8, 2025
ed4e44c
feat(Retrofit): Add `RepeatedQueryParameters` for Retrofit integration
LeandroLCD Dec 8, 2025
c1cd2e1
feat(Retrofit): Add `RepeatedQueryParameters` for Retrofit integration
LeandroLCD Dec 8, 2025
880424b
Merge branch 'master' into develop
LeandroLCD Dec 9, 2025
97bbc8b
docs(QuerySelect): Improve KDoc for getOrderBy function
LeandroLCD Dec 9, 2025
27c6476
Add Retrofit badge and update README links
LeandroLCD Dec 9, 2025
c7f40a6
fix(SQLOperator): Correctly quote values in `Between` operator
LeandroLCD Dec 10, 2025
39c0117
Merge branch 'master' into develop
LeandroLCD Dec 10, 2025
135aed3
chore(deps): Update AGP to 8.13.2
LeandroLCD Dec 26, 2025
2eac0b0
chore(UnionQuery): Remove unused imports
LeandroLCD Dec 26, 2025
b9a220e
Merge remote-tracking branch 'origin/develop' into develop
LeandroLCD Dec 26, 2025
3b6c776
refactor(Query): Standardize LogicalOperation with a sealed interface
LeandroLCD Jan 22, 2026
d778016
refactor(Query): Rename property 'type' to 'symbol' in LogicalOperati…
LeandroLCD Jan 22, 2026
5c3ab5c
Merge branch 'master' into develop
LeandroLCD Jan 22, 2026
c2a12dc
Merge branch 'master' into develop
LeandroLCD Jan 22, 2026
d1daaee
refactor(Query): Remove unused main function and transformOperation m…
LeandroLCD Jan 22, 2026
2b1c8d7
Merge remote-tracking branch 'origin/develop' into develop
LeandroLCD Jan 22, 2026
b5a24de
fix(QuerySelect): Reset limit and orderBy in clear method
LeandroLCD Feb 9, 2026
56ac9b8
feat(build.gradle.kts): Add Maven publishing configuration for releas…
LeandroLCD Feb 9, 2026
c61f619
chore(deps): Upgrade Gradle and Android Gradle Plugin
LeandroLCD Feb 12, 2026
97f48dc
feat(deps): Update kotlin and compose dependencies
LeandroLCD Feb 12, 2026
92713cd
feat(deps): Update AndroidX and Compose dependencies
LeandroLCD Mar 17, 2026
ccb0cb4
feat(query): Add getOperators and clearOrderBy methods
LeandroLCD Mar 17, 2026
ae210e1
feat(query): Add Collation support and transform capabilities to OrderBy
LeandroLCD Mar 24, 2026
dbc8dd3
feat(query): Add limit management and refine OrderBy behavior in Unio…
LeandroLCD May 27, 2026
a580f3e
feat(query): Add toQueryDelete method to QuerySelect
LeandroLCD May 27, 2026
41ba064
Merge branch 'master' into develop
LeandroLCD Jun 9, 2026
5ea199b
refactor(query): Enhance cloning, immutability, and testing standards
LeandroLCD Jun 9, 2026
8da4ef2
refactor(query): Remove unused imports in query-related files
LeandroLCD Jun 9, 2026
2c25bcc
refactor(query): Rename and fix cloning extension methods for `Logica…
LeandroLCD Jun 18, 2026
847b6f7
ci(release): Setup automated release pipeline and bump version to 0.13.3
LeandroLCD Jun 18, 2026
bb42ce2
build(ci): Upgrade GitHub Actions and optimize Gradle caching
LeandroLCD Jun 18, 2026
4c99575
build(ci): Upgrade GitHub Actions and optimize Gradle caching
LeandroLCD Jun 18, 2026
084b89d
feat(query): Add Deletable interface for converting queries to QueryD…
LeandroLCD Jul 30, 2026
0fea3b0
Merge remote-tracking branch 'origin/master' into feat/deletable-inte…
LeandroLCD Jul 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
107 changes: 89 additions & 18 deletions .github/workflows/release-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ on:
pull_request:
branches:
- master
types: [opened, synchronize, reopened, closed]
types: [closed]

# Cancela runs previos en el mismo PR si llega un nuevo push.
# Si el PR fue mergeado, no se cancela (es el run definitivo).
Expand All @@ -36,24 +36,47 @@ jobs:
contents: read
checks: write
pull-requests: write
actions: write

outputs:
result: ${{ steps.run-tests.outcome }}

steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 1

- name: ☕ Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: gradle

- name: 🐘 Setup Gradle (cache)
uses: gradle/actions/setup-gradle@v3
- name: 📦 Restore Gradle cache
id: gradle-cache
uses: actions/cache/restore@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}-

- name: 🗑️ Delete stale cache
if: steps.gradle-cache.outputs.cache-hit != 'true' && steps.gradle-cache.outputs.cache-matched-key != ''
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "⚠️ Cache obsoleto detectado: ${{ steps.gradle-cache.outputs.cache-matched-key }}"
echo "🗑️ Eliminando cache antiguo..."
gh cache delete "${{ steps.gradle-cache.outputs.cache-matched-key }}" \
--repo ${{ github.repository }} || true
echo "✅ Cache antiguo eliminado"



- name: 🔧 Grant execute permission to gradlew
run: chmod +x ./gradlew
Expand All @@ -67,6 +90,25 @@ jobs:
--console=plain \
--stacktrace

- name: 💾 Save Gradle cache
if: steps.gradle-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ steps.gradle-cache.outputs.cache-primary-key }}

- name: 📊 Publish unit test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
files: query/build/test-results/**/*.xml
check_name: 📋 Unit Test Results — :query
comment_title: 🧪 Unit Test Report — :query module
comment_mode: always


- name: 📊 Publish unit test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
Expand All @@ -77,7 +119,7 @@ jobs:
comment_mode: always

- name: 📄 Upload test report on failure
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
if: failure()
with:
name: unit-test-report-${{ github.run_number }}
Expand Down Expand Up @@ -106,7 +148,7 @@ jobs:

steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0 # historial completo para leer todos los tags

Expand Down Expand Up @@ -207,18 +249,38 @@ jobs:

steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 1

- name: ☕ Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: '17'
cache: gradle

- name: 🐘 Setup Gradle (cache)
uses: gradle/actions/setup-gradle@v3
- name: 📦 Restore Gradle cache
id: gradle-cache
uses: actions/cache/restore@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}-

- name: 🗑️ Delete stale cache
if: steps.gradle-cache.outputs.cache-hit != 'true' && steps.gradle-cache.outputs.cache-matched-key != ''
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "⚠️ Cache obsolete detected: ${{ steps.gradle-cache.outputs.cache-matched-key }}"
echo "🗑️ Delete old cache..."
gh cache delete "${{ steps.gradle-cache.outputs.cache-matched-key }}" --repo ${{ github.repository }} || true
echo "✅ Old cache deleted"


- name: 🔧 Grant execute permission to gradlew
run: chmod +x ./gradlew
Expand All @@ -231,19 +293,28 @@ jobs:
--console=plain \
--stacktrace

- name: 💾 Save Gradle cache
if: steps.gradle-cache.outputs.cache-hit != 'true'
uses: actions/cache/save@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ steps.gradle-cache.outputs.cache-primary-key }}

- name: 🔎 Locate generated AAR
id: find-aar
run: |
AAR_PATH=$(find query/build/outputs/aar -name "*release*.aar" | head -1)
if [ -z "$AAR_PATH" ]; then
echo "❌ No se encontró ningún AAR release en query/build/outputs/aar/"
echo "❌ No AAR release was found in query/build/outputs/aar/"
exit 1
fi
echo "aar_path=${AAR_PATH}" >> $GITHUB_OUTPUT
echo "✅ AAR encontrado: ${AAR_PATH}"
echo "✅ AAR found: ${AAR_PATH}"

- name: 📦 Upload AAR as workflow artifact
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: query-release-aar
path: ${{ steps.find-aar.outputs.aar_path }}
Expand All @@ -269,19 +340,19 @@ jobs:

steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 0

- name: 📦 Download AAR artifact
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
name: query-release-aar
path: ./release-artifacts

- name: 🏷️ Create GitHub Release & Tag
id: gh-release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
with:
tag_name: ${{ needs.check-tag.outputs.tag_name }}
name: Release ${{ needs.check-tag.outputs.tag_name }}
Expand Down Expand Up @@ -413,7 +484,7 @@ jobs:

steps:
- name: 📝 Post pipeline summary comment on PR
uses: actions/github-script@v7
uses: actions/github-script@v9
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
Expand Down
125 changes: 97 additions & 28 deletions .github/workflows/run-query-tests.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Run Query Unit Tests
name: 🧪 Run Query Unit Tests

on:
push:
Expand All @@ -10,51 +10,120 @@ on:
branches: [ main, develop ]
paths:
- 'query/**'
types: [opened, reopened, synchronize]
workflow_dispatch:

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event.action != 'closed' }}

# ─────────────────────────────────────────────────────────────────────────────
# JOBS
# ─────────────────────────────────────────────────────────────────────────────
jobs:
test:
name: Run Query Module Tests

# ───────────────────────────────────────────────────────────────────────────
# STEP 1 — Unit Tests
# Corre en cada push al PR (opened / synchronize / reopened) y al mergear.
# ───────────────────────────────────────────────────────────────────────────
unit-tests:
name: 🧪 Step 1 — Unit Tests
runs-on: ubuntu-latest
if: github.event.action != 'closed' || github.event.pull_request.merged == true
timeout-minutes: 30

permissions:
contents: read
checks: write
pull-requests: write

outputs:
result: ${{ steps.run-tests.outcome }}

steps:
- name: 📥 Checkout code
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
fetch-depth: 1

- name: ☕ Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
java-version: '17'
distribution: 'temurin'
java-version: '17'
cache: gradle

- name: 🔑 Grant execute permission for gradlew
run: chmod +x gradlew
- name: 📦 Restore Gradle cache
id: gradle-cache
uses: actions/cache/restore@v5
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
gradle-${{ runner.os }}-

- name: 🗑️ Delete stale cache
if: steps.gradle-cache.outputs.cache-hit != 'true' && steps.gradle-cache.outputs.cache-matched-key != ''
env:
GH_TOKEN: ${{ github.token }}
run: |
echo "⚠️ Cache obsoleto detectado: ${{ steps.gradle-cache.outputs.cache-matched-key }}"
echo "🗑️ Eliminando cache antiguo para liberar espacio..."
gh cache delete "${{ steps.gradle-cache.outputs.cache-matched-key }}" --repo ${{ github.repository }} || true
echo "✅ Cache obsoleto eliminado"

- name: 🧪 Run Query Unit Tests
run: ./gradlew :query:runQueryUnitTests
- name: 🔧 Grant execute permission to gradlew
run: chmod +x ./gradlew

- name: 📊 Upload test results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results
path: query/build/test-results/testDebugUnitTest/
retention-days: 30
- name: 🧪 Run :query unit tests
id: run-tests
run: |
./gradlew :query:test \
--no-daemon \
--warning-mode none \
--console=plain \
--stacktrace

- name: 📈 Upload test reports
uses: actions/upload-artifact@v4
- name: 📊 Publish unit test results
uses: EnricoMi/publish-unit-test-result-action@v2
if: always()
with:
name: test-reports
path: query/build/reports/tests/testDebugUnitTest/
retention-days: 30

- name: ✅ Test Summary
if: success()
run: echo "✅ Todos los tests del módulo query pasaron exitosamente!"
files: query/build/test-results/**/*.xml
check_name: 📋 Unit Test Results — :query
comment_title: 🧪 Unit Test Report — :query module
comment_mode: always

- name: ❌ Test Failed
- name: 📄 Upload test report on failure
uses: actions/upload-artifact@v7
if: failure()
run: echo "❌ Algunos tests fallaron. Revisa los reportes para más detalles."
with:
name: unit-test-report-${{ github.run_number }}
path: query/build/reports/tests/
retention-days: 14

- name: 🧹 Clean Temporal files.
if: always()
run: |
echo "🧹 Clean Temporal files.."
rm -rf ~/.gradle/caches/modules-2/modules-2.lock
rm -rf ~/.gradle/caches/*/plugin-resolution/
rm -rf ~/.gradle/daemon/
echo "✨ Clean Temporal files Complete"

- name: 🏁 workflow finished
if: always()
run: |
echo "=================================="
echo "🏁 Workflow Unit Tests finished"
echo "=================================="
echo ""
if [ "${{ job.status }}" == "success" ]; then
echo "✅ state: SUCCESS"
else
echo "❌ state: FAILED"
fi
echo ""
echo "📅 Date: $(date '+%Y-%m-%d %H:%M:%S')"
echo "=================================="
2 changes: 1 addition & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@ plugins {
alias(libs.plugins.android.library) apply false
}

version = "0.13.3"
version = "0.13.4"
Loading
Loading