Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
2ffe7f7
chore: consolidate release workflows, sync app.json version
claude Apr 16, 2026
3f83bc1
ci: trigger build on branch push to create v1.3.6 release
claude Apr 16, 2026
cfde38c
chore: bump version to 2.2.0 (versionCode 8)
claude Apr 16, 2026
fecd21a
feat: airport-specific airline filtering
claude Apr 16, 2026
ec2a823
feat: replace filter toggle with per-airline checklist
claude Apr 16, 2026
67ae108
feat: accumulate flights throughout the day — persist until midnight
claude Apr 16, 2026
975ed69
fix: staffMonitor dynamic column detection
claude Apr 16, 2026
20dde99
chore: bump version to 2.3.0 (versionCode 9)
claude Apr 16, 2026
86f5f1f
feat: always show stand/check-in/gate slots with placeholder
claude Apr 16, 2026
8aac618
ci: use stable keystore from secret instead of generating new one
claude Apr 16, 2026
24770bd
fix: remove light-mode card border artifacts
claude Apr 16, 2026
53350a9
chore: bump version to 2.4.0
claude Apr 16, 2026
f5a8c8f
fix: flight card layout — smFooter inside card, status pill own row
claude Apr 16, 2026
c4bf6ca
fix: remove dark-mode card border artifacts
claude Apr 16, 2026
f80f3db
feat: new app icon — airplane + badge (option 1)
claude Apr 17, 2026
c7e3693
feat: dark mode for TravelDoc WebView
claude Apr 17, 2026
55af719
fix: update Android mipmap icons to new airplane+badge design
claude Apr 17, 2026
7c2c61e
fix: make dark-mode card backgrounds fully opaque
claude Apr 17, 2026
5818cc1
fix: sync package.json version to 2.4.0, use new icon in drawer header
claude Apr 17, 2026
d624bcc
chore: rename app to AeroStaff Pro
claude Apr 17, 2026
ad37858
feat: realistic widget preview for Android picker
claude Apr 17, 2026
9ac8fc9
refactor: SecureStore for passwords, FlightRow React.memo, CI workflo…
claude Apr 17, 2026
64f5f07
fix: staffMonitor row filter was checking inner content instead of <t…
claude Apr 17, 2026
e5b243a
feat: apply airline filter to home timeline, shift flight count, and …
claude Apr 17, 2026
2584314
chore: bump version to 2.5.0 (versionCode 11)
claude Apr 17, 2026
58270e8
ci: trigger v2.5.0 build
TargetMisser Apr 17, 2026
89c42c1
ci: remove branch trigger, keep only tags/v* and workflow_dispatch
TargetMisser Apr 17, 2026
38bf934
fix: timeline re-fetches with current filter when Home tab gains focus
claude Apr 17, 2026
1690c30
ci: trigger v2.5.0 build (timeline filter fix)
TargetMisser Apr 17, 2026
74bd282
fix: staffMonitor row detection by flight number instead of CSS class
claude Apr 17, 2026
0d8e5d5
ci: trigger v2.5.0 build (staffMonitor robust row detection)
TargetMisser Apr 17, 2026
a5f93e2
fix: staffMonitor parser — checkin multi-desk, robust row/column dete…
claude Apr 17, 2026
5fa1cde
ci: trigger v2.5.0 build (staffMonitor robust parser)
TargetMisser Apr 17, 2026
ad194b0
fix: staffMonitor complete rewrite — correct URL, flight code extract…
claude Apr 17, 2026
13b6590
ci: trigger v2.5.0 build (staffMonitor full rewrite)
TargetMisser Apr 17, 2026
185a3fd
fix: staffMonitor fetches frame files directly (page is a frameset)
claude Apr 17, 2026
4a10ebe
feat: increase footer blur intensity + semi-opaque overlay for readab…
claude Apr 17, 2026
a753d66
feat: use @react-native-community/blur for real hardware blur on Android
claude Apr 17, 2026
6865750
revert: drop @react-native-community/blur, back to expo-blur + solid …
claude Apr 17, 2026
a83c1c2
fix: community blur with proper borderRadius clipping on Android
claude Apr 17, 2026
09a4ef4
fix: tab bar — drop community blur, use expo-blur + opaque overlay
claude Apr 18, 2026
e9196e2
fix: staffMonitor — correct URL + colspan-aware header detection
claude Apr 18, 2026
72338a6
fix: staffMonitor — add Referer/Accept headers to mimic browser request
claude Apr 18, 2026
de343bb
fix: normalizeFlightNumber handles mixed IATA codes (W4, U2, D8)
claude Apr 18, 2026
7a10549
debug: show StaffMonitor flight count in FlightScreen header
claude Apr 18, 2026
a03fcd8
debug: expose HTTP status + body length in SM debug banner
claude Apr 18, 2026
da7a1b1
debug: show first 5 SM dep flight numbers in banner
claude Apr 18, 2026
83f226f
fix: add 8s AbortController timeout to staffMonitor fetch
claude Apr 18, 2026
fab8fe7
fix: increase staffMonitor fetch timeout from 8s to 20s
claude Apr 18, 2026
81f4039
fix: deduplicate arrivals/departures by flight number + scheduled time
claude Apr 18, 2026
4370237
fix: reorder staffMonitor URLs and raise minimum body size to 8k
claude Apr 18, 2026
d2fc645
fix: restore trans=true first, accept responses with table content
claude Apr 18, 2026
4e653dc
debug: log first 300 chars of staffMonitor HTML response to banner
claude Apr 18, 2026
a000e1b
fix: accept any 200 OK response from staffMonitor, drop <tr check
claude Apr 18, 2026
e5b07b3
fix: validate widget cache date before showing rest/no_shift state
claude Apr 18, 2026
9d71c29
feat: in-app update checker via GitHub releases API
claude Apr 18, 2026
1b6229d
feat: Mihon-style update modal with changelog and download
claude Apr 18, 2026
bf8f0e4
chore: bump version to 2.6.0, update release notes
claude Apr 18, 2026
8a7816b
feat: add backup/restore and remove debug banner
claude Apr 19, 2026
b99e679
fix: staffMonitor column detection — remove stand/gate/belt requirement
claude Apr 19, 2026
c026e75
fix: widget shows rest day even when shift is upcoming
claude Apr 19, 2026
99f902b
fix: staffMonitor wrong stand column and phone number leaking into UI
claude Apr 19, 2026
67416cb
fix: Lavoro event overrides stale Riposo; add SM column debug
claude Apr 19, 2026
a573e09
fix: flight data auto-refresh every 2min + stable merge key
claude Apr 19, 2026
d53c97e
debug: show parsed SM flight numbers+stand values in debug alert
claude Apr 19, 2026
7981a97
feat: redesign update and backup sections in Settings
claude Apr 19, 2026
9fddea6
fix: extract operational code from stand/gate/checkin cells
claude Apr 19, 2026
4f11fea
fix: lower pure-letter reject threshold to 3 chars; show both D+A debug
claude Apr 19, 2026
9b29130
fix(HomeScreen): prioritise Lavoro event over Riposo when both exist …
claude Apr 19, 2026
fa24f2b
fix(staffMonitor): parallel URL racing + cache fallback for arrivals …
claude Apr 19, 2026
3c8866d
fix(staffMonitor): restore 25s timeout for D; remove non-nature=A fal…
claude Apr 19, 2026
4a385f3
chore: update release notes for v2.6.1 with all session fixes
claude Apr 19, 2026
43c7a2f
chore: bump version to 2.6.2
claude Apr 19, 2026
4ece2fc
fix(staffMonitor): forward Tomcat JSESSIONID from D to A requests
claude Apr 21, 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
166 changes: 0 additions & 166 deletions .github/workflows/build-apk.yml

This file was deleted.

142 changes: 93 additions & 49 deletions .github/workflows/build-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,12 @@ on:
push:
tags:
- 'v*'
branches:
- 'claude/fix-shift-permissions-Cn8gk'
workflow_dispatch:

permissions:
contents: write

jobs:
build:
Expand All @@ -13,78 +19,116 @@ jobs:
- name: Checkout
uses: actions/checkout@v4

- name: Set up Node.js
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
node-version: 22
cache: npm

- name: Set up Java 17
- name: Setup Java
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
distribution: temurin
java-version: 21

- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: gradle-${{ hashFiles('android/**/*.gradle*', 'android/gradle.properties') }}
restore-keys: gradle-

- name: Set up Android SDK
- name: Setup Android SDK
uses: android-actions/setup-android@v3

- name: Install SDK components
run: |
echo "y" | sdkmanager \
"ndk;27.1.12297006" \
"build-tools;36.0.0" \
"platforms;android-36" \
"cmake;3.22.1"

- name: Install dependencies
run: npm ci
run: npm install --legacy-peer-deps

- name: Fix expo-modules-core Gradle bugs
run: |
FILE="node_modules/expo-modules-core/android/build.gradle"
sed -i "s|apply plugin: 'com.android.library'|// Fix: project-level re-declaration\ndef _coreFeatures = project.findProperty(\"coreFeatures\") ?: []\next.shouldIncludeCompose = _coreFeatures.contains(\"compose\")\n\napply plugin: 'com.android.library'|" "$FILE"
sed -i 's/^\s*compose shouldIncludeCompose\s*$/ compose = shouldIncludeCompose/' "$FILE"

- name: Bundle JS for Android
- name: Compute release tag
id: meta
run: |
mkdir -p android/app/src/main/assets
node_modules/.bin/expo export:embed \
--platform android \
--entry-file index.ts \
--bundle-output android/app/src/main/assets/index.android.bundle \
--assets-dest android/app/src/main/res

- name: Generate debug keystore (for signing)
VERSION=$(node -p "require('./app.json').expo.version")
if [[ "${{ github.ref }}" == refs/tags/* ]]; then
TAG="${{ github.ref_name }}"
else
TAG="v${VERSION}"
fi
echo "version=$VERSION" >> "$GITHUB_OUTPUT"
echo "tag=$TAG" >> "$GITHUB_OUTPUT"

- name: Make gradlew executable
run: chmod +x android/gradlew

- name: Restore stable keystore
run: |
keytool -genkey -v \
-keystore android/app/debug.keystore \
-storepass android \
-alias androiddebugkey \
-keypass android \
-keyalg RSA \
-keysize 2048 \
-validity 10000 \
-dname "CN=Android Debug,O=Android,C=US"
mkdir -p android/app
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > android/app/debug.keystore

- name: Build release APK
run: |
cd android
chmod +x gradlew
./gradlew assembleRelease

- name: Get version name
id: version
run: |
VERSION=$(grep versionName android/app/build.gradle | sed "s/.*versionName \"\\(.*\\)\"/\\1/")
echo "version=$VERSION" >> $GITHUB_OUTPUT
./gradlew :app:assembleRelease \
--no-daemon \
-Pandroid.overridePathCheck=true
env:
ANDROID_HOME: ${{ env.ANDROID_SDK_ROOT }}
GRADLE_OPTS: "-Xmx4g -XX:MaxMetaspaceSize=512m"

- name: Rename APK
run: |
mv android/app/build/outputs/apk/release/app-release.apk \
FlightWorkApp-${{ github.ref_name }}.apk
APK=$(find android/app/build/outputs/apk/release -name "*.apk" -type f | head -1)
DEST="AeroStaffPro-${{ steps.meta.outputs.tag }}.apk"
cp "$APK" "$DEST"
echo "apk=$DEST" >> "$GITHUB_ENV"

- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
name: "${{ github.ref_name }} - Shift Permissions & Widget Fix"
tag_name: ${{ steps.meta.outputs.tag }}
name: "AeroStaff Pro ${{ steps.meta.outputs.tag }}"
body: |
## 🐛 Bug Fixes

🔧 **Permessi calendario** — Quando il permesso è rifiutato permanentemente, ora mostra un tasto "Apri Impostazioni" per abilitarlo direttamente
🔧 **Modal Aggiungi Turno** — Il form è ora scrollabile: il tasto "Salva Turno" è sempre raggiungibile su schermi piccoli
🔧 **Widget auto-aggiornante** — Il widget ora scarica dati freschi da FR24 ad ogni aggiornamento Android (30 min) senza dover aprire l'app
🔧 **Widget si aggiorna dopo salvataggio turno** — Salvando un turno dal CalendarScreen il widget si aggiorna immediatamente

## 📦 Technical

- versionCode bumped to 7
- versionName ${{ steps.version.outputs.version }}
files: FlightWorkApp-${{ github.ref_name }}.apk
## 📦 AeroStaff Pro ${{ steps.meta.outputs.tag }}

### Novità
- **Backup / Ripristino**: esporta tutti i dati dell'app in un file JSON e reimportali in qualsiasi momento da Impostazioni
- **Aggiornamento in-app**: popup stile Mihon con changelog e download APK diretto; controllo automatico all'avvio ogni 24h
- **Impostazioni riprogettate**: sezione aggiornamenti con card dedicata e badge NEW; backup con due tile colorate (esporta verde, importa blu)

### Bug fix – Turni e Home
- **HomeScreen "Giorno di riposo" errato**: l'evento Lavoro nel calendario ora ha sempre la precedenza su un eventuale evento Riposo dello stesso giorno
- **Widget "Giorno di riposo" errato**: WIDGET_SHIFT_KEY è ora la fonte autoritativa per classificare lavoro/riposo, impedendo che dati in cache stantii sovrascrivano il turno reale
- **FlightScreen**: trovato evento Lavoro nel calendario non azzerava `isRestDay` se preceduto da un evento Riposo; corretto

### Bug fix – Voli
- **Aggiornamento automatico voli**: i dati FR24 ora si ricaricano ogni 2 minuti senza riaprire l'app
- **Duplicati voli**: chiave di merge stabilizzata su `numeroVolo_tsPartenza` (prima usava `identification.id` che FR24 a volte omette)

### Bug fix – StaffMonitor stand / gate
- **Colonne non rilevate**: il parser non richiedeva più la presenza di colonne stand/gate/belt per avviare il parsing; prima saltava tutte le righe
- **Nomi handler nella colonna stand**: `cell()` ora estrae solo il primo token alfanumerico (`17`, `674`, `4`) scartando tutto ciò che segue (es. `17◆ Federico`, `674 RICCARDO F`)
- **Numeri di telefono come stand**: `isPhoneOrJunk` ora individua sequenze di 8+ cifre ovunque nella stringa (prima cercava solo stringhe composte da soli numeri)
- **Colonna "ADDETTO STAND" rilevata come stand**: ora si usa una word-boundary (`\bstand\b`) per evitare falsi positivi
- **Arrivi sempre in errore (AbortError)**: 7 varianti URL con `nature=A` vengono ora inviate in parallelo (race); la prima risposta valida vince in ≤30s invece di 3×20s sequenziali. Cache AsyncStorage da 20 minuti: un fetch riuscito sopravvive ai cali di rete successivi
- **Numeri volo corrotti negli arrivi**: rimossi URL di fallback senza `nature=A` (restituivano dati partenze interpretati come arrivi)
- **Timeout partenze regredito**: ripristinato timeout a 25s (il server Pisa è lento; 12s era troppo corto)

Scarica `AeroStaffPro-${{ steps.meta.outputs.tag }}.apk` e installalo sul tuo dispositivo Android.
files: ${{ env.apk }}
draft: false
prerelease: false
33 changes: 0 additions & 33 deletions .github/workflows/release-snapshot.yml

This file was deleted.

Loading
Loading