unify pipeline, load friends leaderboard from homepage data
Some checks failed
Release / meta (push) Successful in 10s
Release / linux-build (push) Successful in 57s
Release / web-build (push) Failing after 1m11s
Release / release-dev (push) Has been cancelled
Release / release-master (push) Has been cancelled
Release / android-build (push) Has been cancelled

This commit is contained in:
2026-01-03 22:55:03 +00:00
parent 23f294c6f0
commit 196511dfab
6 changed files with 106 additions and 145 deletions

View File

@@ -3,7 +3,7 @@ name: Release
on: on:
push: push:
branches: branches:
- dev - dev-other
env: env:
JAVA_VERSION: "17" JAVA_VERSION: "17"
@@ -85,16 +85,16 @@ jobs:
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
# #
# - name: Install OS deps (Android) # - name: Install OS deps (Android)
# run: | # run: |
# if command -v sudo >/dev/null 2>&1; then # if command -v sudo >/dev/null 2>&1; then
# SUDO="sudo" # SUDO="sudo"
# else # else
# SUDO="" # SUDO=""
# fi # fi
# $SUDO apt-get update # $SUDO apt-get update
# $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq # $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v4 uses: actions/setup-java@v4
@@ -120,19 +120,19 @@ jobs:
echo "$ANDROID_SDK_ROOT/platform-tools" >> "$GITHUB_PATH" echo "$ANDROID_SDK_ROOT/platform-tools" >> "$GITHUB_PATH"
echo "$ANDROID_SDK_ROOT/build-tools/33.0.2" >> "$GITHUB_PATH" echo "$ANDROID_SDK_ROOT/build-tools/33.0.2" >> "$GITHUB_PATH"
# - name: Install Flutter SDK # - name: Install Flutter SDK
# run: | # run: |
# set -euo pipefail # set -euo pipefail
# FLUTTER_HOME="$HOME/flutter" # FLUTTER_HOME="$HOME/flutter"
# # Avoid git ownership issues when Flutter checks out deps. # # Avoid git ownership issues when Flutter checks out deps.
# git config --global --add safe.directory "$FLUTTER_HOME" || true # git config --global --add safe.directory "$FLUTTER_HOME" || true
# if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then # if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then
# rm -rf "$FLUTTER_HOME" # rm -rf "$FLUTTER_HOME"
# curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" # curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz"
# tar -C "$HOME" -xf /tmp/flutter.tar.xz # tar -C "$HOME" -xf /tmp/flutter.tar.xz
# fi # fi
# echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" # echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH"
# "$FLUTTER_HOME/bin/flutter" --version # "$FLUTTER_HOME/bin/flutter" --version
- name: Allow all git directories (CI) - name: Allow all git directories (CI)
run: git config --global --add safe.directory '*' run: git config --global --add safe.directory '*'

View File

@@ -4,6 +4,7 @@ on:
push: push:
branches: branches:
- master - master
- dev
env: env:
JAVA_VERSION: "17" JAVA_VERSION: "17"
@@ -79,21 +80,21 @@ jobs:
android-build: android-build:
runs-on: runs-on:
- mileograph - tgj-arc
needs: meta needs: meta
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
#
- name: Install OS deps (Android) # - name: Install OS deps (Android)
run: | # run: |
if command -v sudo >/dev/null 2>&1; then # if command -v sudo >/dev/null 2>&1; then
SUDO="sudo" # SUDO="sudo"
else # else
SUDO="" # SUDO=""
fi # fi
$SUDO apt-get update # $SUDO apt-get update
$SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq # $SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq
- name: Setup Java - name: Setup Java
uses: actions/setup-java@v4 uses: actions/setup-java@v4
@@ -119,19 +120,19 @@ jobs:
echo "$ANDROID_SDK_ROOT/platform-tools" >> "$GITHUB_PATH" echo "$ANDROID_SDK_ROOT/platform-tools" >> "$GITHUB_PATH"
echo "$ANDROID_SDK_ROOT/build-tools/33.0.2" >> "$GITHUB_PATH" echo "$ANDROID_SDK_ROOT/build-tools/33.0.2" >> "$GITHUB_PATH"
- name: Install Flutter SDK # - name: Install Flutter SDK
run: | # run: |
set -euo pipefail # set -euo pipefail
FLUTTER_HOME="$HOME/flutter" # FLUTTER_HOME="$HOME/flutter"
# Avoid git ownership issues when Flutter checks out deps. # # Avoid git ownership issues when Flutter checks out deps.
git config --global --add safe.directory "$FLUTTER_HOME" || true # git config --global --add safe.directory "$FLUTTER_HOME" || true
if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then # if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then
rm -rf "$FLUTTER_HOME" # rm -rf "$FLUTTER_HOME"
curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz" # curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz"
tar -C "$HOME" -xf /tmp/flutter.tar.xz # tar -C "$HOME" -xf /tmp/flutter.tar.xz
fi # fi
echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH" # echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH"
"$FLUTTER_HOME/bin/flutter" --version # "$FLUTTER_HOME/bin/flutter" --version
- name: Allow all git directories (CI) - name: Allow all git directories (CI)
run: git config --global --add safe.directory '*' run: git config --global --add safe.directory '*'
@@ -220,36 +221,12 @@ jobs:
linux-build: linux-build:
runs-on: runs-on:
- mileograph - tgj-arc
needs: meta needs: meta
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Install OS deps (Linux desktop)
run: |
if command -v sudo >/dev/null 2>&1; then
SUDO="sudo"
else
SUDO=""
fi
$SUDO apt-get update
$SUDO apt-get install -y unzip xz-utils zip libstdc++6 libglu1-mesa clang cmake ninja-build pkg-config libgtk-3-dev libsecret-1-dev liblzma-dev curl jq
- name: Install Flutter SDK
run: |
set -euo pipefail
FLUTTER_HOME="$HOME/flutter"
# Avoid git ownership issues when Flutter checks out deps.
git config --global --add safe.directory "$FLUTTER_HOME" || true
if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then
rm -rf "$FLUTTER_HOME"
curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz"
tar -C "$HOME" -xf /tmp/flutter.tar.xz
fi
echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH"
"$FLUTTER_HOME/bin/flutter" --version
- name: Allow all git directories (CI) - name: Allow all git directories (CI)
run: git config --global --add safe.directory '*' run: git config --global --add safe.directory '*'
@@ -275,38 +252,12 @@ jobs:
web-build: web-build:
runs-on: runs-on:
- mileograph - tgj-arc
needs: meta needs: meta
steps: steps:
- name: Checkout - name: Checkout
uses: actions/checkout@v4 uses: actions/checkout@v4
- name: Install OS deps (Web)
run: |
if command -v sudo >/dev/null 2>&1; then
SUDO="sudo"
else
SUDO=""
fi
$SUDO apt-get update
$SUDO apt-get install -y unzip xz-utils zip libstdc++6 liblzma-dev curl jq docker.io
if ! docker info >/dev/null 2>&1; then
$SUDO systemctl start docker 2>/dev/null || $SUDO service docker start 2>/dev/null || true
fi
- name: Install Flutter SDK
run: |
set -euo pipefail
FLUTTER_HOME="$HOME/flutter"
git config --global --add safe.directory "$FLUTTER_HOME" || true
if [ ! -x "$FLUTTER_HOME/bin/flutter" ]; then
rm -rf "$FLUTTER_HOME"
curl -fsSL -o /tmp/flutter.tar.xz "https://storage.googleapis.com/flutter_infra_release/releases/stable/linux/flutter_linux_${FLUTTER_VERSION}-stable.tar.xz"
tar -C "$HOME" -xf /tmp/flutter.tar.xz
fi
echo "$FLUTTER_HOME/bin" >> "$GITHUB_PATH"
"$FLUTTER_HOME/bin/flutter" --version
- name: Allow all git directories (CI) - name: Allow all git directories (CI)
run: git config --global --add safe.directory '*' run: git config --global --add safe.directory '*'
@@ -330,50 +281,37 @@ jobs:
name: web-build name: web-build
path: app-web.tar.gz path: app-web.tar.gz
- name: Compute web image tags - name: Set up docker buildx
id: web_meta uses: docker/setup-buildx-action@v3
env:
BASE_VERSION: ${{ needs.meta.outputs.base_version }}
DEV_SUFFIX: ${{ needs.meta.outputs.dev_suffix }}
run: |
IMAGE="${WEB_IMAGE}"
TAG=""
ALIAS=""
if [ "${GITHUB_REF}" = "refs/heads/dev" ]; then
TAG="${BASE_VERSION}${DEV_SUFFIX}"
ALIAS="dev"
elif [ "${GITHUB_REF}" = "refs/heads/master" ]; then
TAG="${BASE_VERSION}"
ALIAS="latest"
fi
echo "image=${IMAGE}" >> "$GITHUB_OUTPUT" - name: Docker meta
echo "tag=${TAG}" >> "$GITHUB_OUTPUT" id: dmeta
echo "alias=${ALIAS}" >> "$GITHUB_OUTPUT" uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/petegregoryy/railframe-web
flavor: latest=false
tags: |
type=sha,prefix=
type=raw,value=${{ needs.meta.outputs.base_version }}${{ needs.meta.outputs.dev_suffix }}
- name: Login to registry - name: Login to the docker registry
if: ${{ secrets.DOCKERHUB_TOKEN != '' && steps.web_meta.outputs.tag != '' }} uses: docker/login-action@v3
env: with:
REGISTRY_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }} registry: ${{ env.REGISTRY }}
run: | username: petegregoryy
echo "$REGISTRY_TOKEN" | docker login git.tgj.services -u petegregoryy --password-stdin password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push web image - name: Build and push
if: ${{ secrets.DOCKERHUB_TOKEN != '' && steps.web_meta.outputs.tag != '' }} id: docker_build
env: uses: docker/build-push-action@v6
IMAGE: ${{ steps.web_meta.outputs.image }} with:
TAG: ${{ steps.web_meta.outputs.tag }} file: Dockerfile.web
ALIAS: ${{ steps.web_meta.outputs.alias }} context: .
run: | push: true
docker buildx create --name buildx --driver=docker-container --use || docker buildx use buildx tags: ${{ steps.dmeta.outputs.tags }}
TAG_ARGS=(-t "${IMAGE}:${TAG}") labels: ${{ steps.dmeta.outputs.labels }}
if [ -n "$ALIAS" ]; then cache-from: type=registry,ref=${{ env.REGISTRY }}/petegregoryy/railframe-web:buildcache-dev
TAG_ARGS+=(-t "${IMAGE}:${ALIAS}") cache-to: type=registry,ref=${{ env.REGISTRY }}/petegregoryy/railframe-web:buildcache-dev,mode=max
fi
docker buildx build --builder buildx --platform linux/amd64 \
-f Dockerfile.web \
--push \
"${TAG_ARGS[@]}" .
release-dev: release-dev:
runs-on: runs-on:

View File

@@ -324,6 +324,14 @@ extension _NewEntryDraftLogic on _NewEntryPageState {
"distance": _routeResult!.distance, "distance": _routeResult!.distance,
}, },
"tractionItems": _serializeTractionItems(), "tractionItems": _serializeTractionItems(),
"shareUserIds": _shareUserIds.toList(),
"shareUsers": _shareUsers
.map((u) => {
"user_id": u.userId,
"username": u.username,
"full_name": u.fullName,
})
.toList(),
}; };
} }

View File

@@ -350,6 +350,7 @@ class HomepageStats {
final List<YearlyMileage> yearlyMileage; final List<YearlyMileage> yearlyMileage;
final List<LocoSummary> topLocos; final List<LocoSummary> topLocos;
final List<LeaderboardEntry> leaderboard; final List<LeaderboardEntry> leaderboard;
final List<LeaderboardEntry> friendsLeaderboard;
final List<TripSummary> trips; final List<TripSummary> trips;
final int legCount; final int legCount;
final UserData? user; final UserData? user;
@@ -359,6 +360,7 @@ class HomepageStats {
required this.yearlyMileage, required this.yearlyMileage,
required this.topLocos, required this.topLocos,
required this.leaderboard, required this.leaderboard,
required this.friendsLeaderboard,
required this.trips, required this.trips,
required this.legCount, required this.legCount,
this.user, this.user,
@@ -370,6 +372,17 @@ class HomepageStats {
final totalMileage = mileageData is Map && mileageData['mileage'] != null final totalMileage = mileageData is Map && mileageData['mileage'] != null
? (mileageData['mileage'] as num).toDouble() ? (mileageData['mileage'] as num).toDouble()
: 0.0; : 0.0;
List<LeaderboardEntry> parseLeaderboard(dynamic raw) {
if (raw is List) {
return raw
.whereType<Map>()
.map((e) => LeaderboardEntry.fromJson(
e.map((k, v) => MapEntry(k.toString(), v)),
))
.toList();
}
return const [];
}
return HomepageStats( return HomepageStats(
totalMileage: totalMileage, totalMileage: totalMileage,
yearlyMileage: (json['yearly_mileage'] as List? ?? []) yearlyMileage: (json['yearly_mileage'] as List? ?? [])
@@ -378,9 +391,9 @@ class HomepageStats {
topLocos: (json['top_locos'] as List? ?? []) topLocos: (json['top_locos'] as List? ?? [])
.map((e) => LocoSummary.fromJson(e)) .map((e) => LocoSummary.fromJson(e))
.toList(), .toList(),
leaderboard: (json['leaderboard_data'] as List? ?? []) leaderboard: parseLeaderboard(json['leaderboard_data'] ?? json['leaderboard']),
.map((e) => LeaderboardEntry.fromJson(e)) friendsLeaderboard:
.toList(), parseLeaderboard(json['friends_leaderboard'] ?? json['friendsLeaderboard']),
trips: (json['trip_data'] as List? ?? []) trips: (json['trip_data'] as List? ?? [])
.map((e) => TripSummary.fromJson(e)) .map((e) => TripSummary.fromJson(e))
.toList(), .toList(),

View File

@@ -169,10 +169,12 @@ class DataService extends ChangeNotifier {
_homepageStats = HomepageStats.fromJson(json); _homepageStats = HomepageStats.fromJson(json);
_trips = [...(_homepageStats?.trips ?? const [])] _trips = [...(_homepageStats?.trips ?? const [])]
..sort(TripSummary.compareByDateDesc); ..sort(TripSummary.compareByDateDesc);
_friendsLeaderboard = _homepageStats?.friendsLeaderboard ?? [];
} catch (e) { } catch (e) {
debugPrint('Failed to fetch homepage stats: $e'); debugPrint('Failed to fetch homepage stats: $e');
_homepageStats = null; _homepageStats = null;
_trips = []; _trips = [];
_friendsLeaderboard = [];
} finally { } finally {
_isHomepageLoading = false; _isHomepageLoading = false;
_notifyAsync(); _notifyAsync();

View File

@@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
# In Windows, build-name is used as the major, minor, and patch parts # In Windows, build-name is used as the major, minor, and patch parts
# of the product and file versions while build-number is used as the build suffix. # of the product and file versions while build-number is used as the build suffix.
version: 0.6.2+5 version: 0.6.3+6
environment: environment:
sdk: ^3.8.1 sdk: ^3.8.1