Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
f225ab7
chore: replace Prettier with @antfu/eslint-config
fernandatoledo May 25, 2026
1b49be2
chore: replace Prettier with @antfu/eslint-config
fernandatoledo May 25, 2026
6a53e01
chore: migrate from Prettier + eslint-config-expo to @antfu/eslint-co…
fernandatoledo May 25, 2026
5a38c03
fix: add explicit return type to renderContent to resolve async infer…
fernandatoledo May 25, 2026
ae7625c
fix: address ts/no-unsafe-assignment violations
fernandatoledo May 25, 2026
0b6a94d
fix: address ts/no-unsafe-assignment and ts/no-unsafe-return violations
fernandatoledo May 25, 2026
fc24754
fix: address ts/no-unsafe-argument violations
fernandatoledo May 26, 2026
9216318
fix: address remaining type-aware lint rule violations
fernandatoledo May 26, 2026
9b48522
fix: handle empty string as falsy in label and storage checks
fernandatoledo May 26, 2026
836d269
ci: bump Node to 22 for Object.groupBy support, remove legacy eslint …
fernandatoledo May 26, 2026
ba8665d
fix: resolve expo doctor warnings
fernandatoledo May 26, 2026
497388a
fix: use plain scalar for eslint_flags in lint workflow
fernandatoledo May 26, 2026
84cbb47
fix: replace Promise.reject with throw and remove empty type intersec…
fernandatoledo May 26, 2026
abde8ea
fix(sonar): use node: protocol for built-in module imports
fernandatoledo May 26, 2026
2513454
fix(sonar): resolve low-priority SonarQube issues
fernandatoledo May 26, 2026
1ab7cb9
chore: add SonarQube Claude Code integration and pending fixes
fernandatoledo May 26, 2026
93eed76
fix(sonar): resolve S7735 unexpected negated condition issues
fernandatoledo May 26, 2026
9711e19
fix(sonar): mark component props as read-only (S6759)
fernandatoledo May 26, 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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook claude-pre-tool-use
5 changes: 5 additions & 0 deletions .claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash
if ! command -v sonar &> /dev/null; then
exit 0
fi
sonar hook claude-prompt-submit
26 changes: 25 additions & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,30 @@
}
]
}
],
"PreToolUse": [
{
"matcher": "Read",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/sonar-secrets/build-scripts/pretool-secrets.sh",
"timeout": 60
}
]
}
],
"UserPromptSubmit": [
{
"matcher": "*",
"hooks": [
{
"type": "command",
"command": ".claude/hooks/sonar-secrets/build-scripts/prompt-secrets.sh",
"timeout": 60
}
]
}
]
}
}
}
6 changes: 3 additions & 3 deletions .github/actions/setup-jdk-generate-apk/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,15 +21,15 @@ inputs:
APP_ENV:
description: 'APP_ENV (one of): development, staging, production'
required: true
default: 'staging'
default: staging

runs:
using: 'composite'
using: composite
steps:
- name: Set Up JDK
uses: actions/setup-java@v3
with:
distribution: 'zulu' # See 'Supported distributions' for available options
distribution: zulu # See 'Supported distributions' for available options
java-version: '17'
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
Expand Down
6 changes: 3 additions & 3 deletions .github/actions/setup-node-pnpm-install/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
name: 'Setup Node + PNPM + Install Dependencies'
description: 'Setup Node + PNPM + Install Dependencies'
runs:
using: 'composite'
using: composite
steps:
- uses: pnpm/action-setup@v4
name: Install pnpm
Expand All @@ -23,8 +23,8 @@ runs:
- uses: actions/setup-node@v4
name: Install Node.js
with:
node-version: 20
cache: 'pnpm'
node-version: 22
cache: pnpm

- name: 📦 Install Project Dependencies
run: pnpm install --frozen-lockfile
Expand Down
2 changes: 1 addition & 1 deletion .github/project-workflows/sync-with-template.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ on:
inputs:
template-version:
type: string
description: 'Template release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release.'
description: Template release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release.
required: false
default: ''

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-cli.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ on:
type: choice
description: 'Release type (one of): patch, minor, major'
required: true
default: 'patch'
default: patch
options:
- patch
- minor
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/e2e-android-eas-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ on:
inputs:
apk-url:
type: string
description: 'EAS APK URL'
description: EAS APK URL
required: true
default: ''

Expand Down Expand Up @@ -49,7 +49,7 @@ jobs:
fetch-depth: 0

- name: 📦 Install Maestro
run: npm run install-maestro ## We use npm because we don't need to install deps again
run: npm run install-maestro # # We use npm because we don't need to install deps again

- name: Download Test APK
uses: actions/download-artifact@v3
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ jobs:
fetch-depth: 0

- name: 📦 Install Maestro
run: npm run install-maestro ## We use npm because we don't need to install deps again
run: npm run install-maestro # # We use npm because we don't need to install deps again

- name: Download Test APK
uses: actions/download-artifact@v3
Expand Down
18 changes: 9 additions & 9 deletions .github/workflows/eas-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,10 @@ on:
- ios
new-version:
type: string
description: 'New version (e.g. 1.0.0) (optional)'
description: New version (e.g. 1.0.0) (optional)
auto-submit:
type: boolean
description: 'Auto-submit the build to the store'
description: Auto-submit the build to the store
required: false
default: true

Expand All @@ -66,12 +66,12 @@ jobs:
run: |
CURRENT_VERSION=$(node -p "require('./package.json').version")
NEW_VERSION="${{ inputs.new-version }}"

echo "Current version: $CURRENT_VERSION"
echo "New version: $NEW_VERSION"
npx semver -r ">=$CURRENT_VERSION" "$NEW_VERSION" > /dev/null || (echo "❌ New version must be greater than or equal to current version ($CURRENT_VERSION)" && exit 1)

npx semver -r ">=$CURRENT_VERSION" "$NEW_VERSION" > /dev/null || (echo "❌ New version must be greater than or equal to current version ($CURRENT_VERSION)" && exit 1)

echo "✅ New version is valid"

build:
Expand Down Expand Up @@ -136,7 +136,7 @@ jobs:
git config --global user.name "github-actions[bot]"
git config --global user.email "github-actions[bot]@users.noreply.github.com"
pnpm version ${{ inputs.new-version }} -m "chore: set app version to ${{ inputs.new-version }}"

- name: Setup latest version of Xcode
uses: maxim-lobanov/setup-xcode@v1
if: inputs.platform == 'ios'
Expand All @@ -147,7 +147,7 @@ jobs:
uses: actions/setup-java@v3
if: inputs.platform == 'android'
with:
distribution: 'zulu' # See 'Supported distributions' for available options
distribution: zulu # See 'Supported distributions' for available options
java-version: '17'

- name: ⚙️ Run Prebuild
Expand Down Expand Up @@ -178,4 +178,4 @@ jobs:
- name: 📦 Push changes to repository
if: inputs.new-version
run: |
git push || echo "Skipping push: version was already updated."
git push || echo "Skipping push: version was already updated."
10 changes: 5 additions & 5 deletions .github/workflows/expo-doctor.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,17 @@ on:
- main
- master
paths:
- 'package.json'
- 'pnpm-lock.yaml'
- package.json
- pnpm-lock.yaml
pull_request:
paths:
- 'package.json'
- 'pnpm-lock.yaml'
- package.json
- pnpm-lock.yaml

permissions:
contents: read
pull-requests: write

jobs:
doctor:
name: Expo Doctor (expo)
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/lint-ts.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

# 🚨 GITHUB SECRETS REQUIRED: NONE

name: Lint TS (eslint, prettier)
name: Lint TS (eslint)

on:
push:
Expand All @@ -21,10 +21,10 @@ on:
permissions:
contents: read
pull-requests: write

jobs:
lint:
name: Lint TS (eslint, prettier)
name: Lint TS (eslint)
runs-on: ubuntu-latest
permissions:
contents: read
Expand All @@ -45,7 +45,7 @@ jobs:
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
eslint_flags: '. --ext .js,.jsx,.ts,.tsx'
eslint_flags: .

- name: 🏃‍♂️ Run ESLint PR
if: github.event_name != 'pull_request'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/new-template-version.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ on:
type: choice
description: 'Release type (one of): patch, minor, major'
required: true
default: 'patch'
default: patch
options:
- patch
- minor
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sonar.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
SONAR_HOST_URL: ${{ secrets.SONAR_URL }}
with:
args: >
-Dsonar.sonar.sources=./src
-Dsonar.sonar.sources=./src
-Dsonar.qualitygate.wait=true
-Dsonar.projectBaseDir=.
-Dsonar.verbose=false
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ on:
permissions:
contents: read
pull-requests: write

jobs:
stale:
runs-on: ubuntu-latest
Expand All @@ -16,9 +16,9 @@ jobs:
- uses: actions/stale@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days'
stale-pr-message: 'This PR is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days'
stale-issue-label: 'no-issue-activity'
stale-pr-label: 'no-pr-activity'
stale-issue-message: This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days
stale-pr-message: This PR is stale because it has been open 90 days with no activity. Remove stale label or comment or this will be closed in 14 days
stale-issue-label: no-issue-activity
stale-pr-label: no-pr-activity
days-before-stale: 60
days-before-close: 14
26 changes: 13 additions & 13 deletions .github/workflows/sync-with-upstream.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,29 +28,29 @@ name: 🔄 Sync with upstream

on:
schedule:
- cron: "0 12 * * 1-5" # At 12:00 UTC on every day-of-week from Monday through Friday
- cron: '0 12 * * 1-5' # At 12:00 UTC on every day-of-week from Monday through Friday
workflow_dispatch:
inputs:
upstream-version:
type: string
description: "Upstream release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release."
description: Upstream release version to sync with (e.g. v1.0.0). Leave empty to sync with the latest release.
required: false
default: ""
default: ''

env:
UPSTREAM_REPOSITORY: obytes/react-native-template-obytes
DIFF_EXCLUDED_ROUTES:
| # Files/directories we don't want from the upstream repository
ios
android
.cursorrules
.github/workflows/eas-build-prod.yml
.github/workflows/eas-build-qa.yml
.github/workflows/new-app-version.yml
.github/workflows/new-github-release.yml
docs/public/reviews
src/app/login.tsx
src/components/card.tsx
ios
android
.cursorrules
.github/workflows/eas-build-prod.yml
.github/workflows/eas-build-qa.yml
.github/workflows/new-app-version.yml
.github/workflows/new-github-release.yml
docs/public/reviews
src/app/login.tsx
src/components/card.tsx

jobs:
sync:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
if: (success() || failure()) && github.event_name == 'pull_request'
with:
coverage-summary-path: ./coverage/coverage-summary.json
summary-title: '💯 Test Coverage'
summary-title: 💯 Test Coverage
badge-title: Coverage
create-new-comment: false
junitxml-title: 😎 Tests Results
Expand Down
24 changes: 12 additions & 12 deletions .maestro/app/create-post.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
appId: ${APP_ID}
env:
Title: 'Post title'
Title: Post title
CONTENT:
"It is a long established fact that a reader will be distracted by the\
\ readable content of a page when looking at its layout. The point of using Lorem\
Expand All @@ -9,21 +9,21 @@ env:
---
- launchApp
- runFlow: ../utils/onboarding-and-login.yaml
- assertVisible: 'Feed'
- assertVisible: 'Create'
- tapOn: 'Create'
- assertVisible: 'Add Post'
- assertVisible: Feed
- assertVisible: Create
- tapOn: Create
- assertVisible: Add Post
- tapOn:
id: 'title'
id: title
- inputText: ${Title}
- tapOn:
id: 'body-input'
- inputText: 'short content'
id: body-input
- inputText: short content
- tapOn:
id: 'add-post-button'
- assertVisible: 'String must contain at least 120 character(s)'
id: add-post-button
- assertVisible: String must contain at least 120 character(s)
- inputText: ${CONTENT}
- runFlow: ../utils/hide-keyboard.yaml
- tapOn:
id: 'add-post-button'
- assertVisible: 'Post added successfully'
id: add-post-button
- assertVisible: Post added successfully
Loading
Loading