10 changed files with 33 additions and 5 deletions
+4
View File
@@ -12,6 +12,10 @@ COPY . .
RUN composer install --no-dev --optimize-autoloader
ARG APP_VERSION=Dev
ENV VITE_APP_VERSION=$APP_VERSION
LABEL org.opencontainers.image.version=$APP_VERSION
RUN npm install && npm run build && rm -f public/hot
COPY docker/nginx.conf /etc/nginx/nginx.conf
+1 -1
View File
@@ -8,7 +8,7 @@
"dev": "vite",
"dev:all": "concurrently -s all \"php artisan serve\" \"php artisan reverb:start\" \"php artisan queue:work\" \"npm run dev\" > /dev/null 2>&1",
"serve:all": "concurrently -s all \"php artisan serve\" \"php artisan reverb:start\" \"php artisan queue:work\" > /dev/null 2>&1",
"updateVersion": "cross-var docker build -t dredgy/flights-api:$npm_config_tag -t dredgy/flights-api:latest . && cross-var docker push dredgy/flights-api:$npm_config_tag && docker push dredgy/flights-api:latest"
"updateVersion": "cross-var docker build --no-cache --build-arg APP_VERSION=$npm_config_tag -t dredgy/flights-api:$npm_config_tag -t dredgy/flights-api:latest . && cross-var docker push dredgy/flights-api:$npm_config_tag && docker push dredgy/flights-api:latest"
},
"devDependencies": {
"@inertiajs/vue3": "^2.0.0",
@@ -160,7 +160,7 @@ const showColumn = (column: string) => props.columnsToShow.includes(column)
<td v-if="showColumn('class_seat_combined')" class="v-data-table__td class-badges-cell">
<span class="class-cell">
<CrewTooltip v-if="flight.flight_reason?.name == 'Crew'" :crew-type="flight.crew_type!">
<CrewTooltip v-if="flight.flight_reason?.name == 'Crew' && flight.crew_type" :crew-type="flight.crew_type!">
<FlightClassBadge v-if="flight.flight_class?.internal_name === 'crew'" :flight="flight" />
<InlineBadge v-else variant="crew">Crew</InlineBadge>
</CrewTooltip>
@@ -659,7 +659,7 @@ export default defineComponent({
const fitBounds = (): void => {
if (!props.flights.length) return
const padding = props.compact ? 25 : 60
const padding = props.compact ? 40 : 60
const lngs = props.flights.flatMap(f => [f.departure_airport.longitude_deg, f.arrival_airport.longitude_deg])
const lats = props.flights.flatMap(f => [f.departure_airport.latitude_deg, f.arrival_airport.latitude_deg])
@@ -1,6 +1,6 @@
<script setup lang="ts">
withDefaults(defineProps<{
title: string,
title?: string,
wide?: boolean,
blurb?: string
}>(), { wide: false })
@@ -4,12 +4,15 @@ import { SharedProps } from "@/Types/types"
const page = usePage<SharedProps>().props
const year = new Date().getFullYear()
const version = __APP_VERSION__
</script>
<template>
<footer class="glass">
<span class="footer-copyright">
&copy; {{ year }} FlightsGoneBy
<span class="footer-version">v{{ version }}</span>
</span>
<span class="footer-links">
@@ -73,4 +76,9 @@ footer {
font-size: 0.6rem;
}
}
.footer-version {
opacity: 0.8;
margin-left: 0.4em;
}
</style>
+1 -1
View File
@@ -303,7 +303,7 @@ export interface Flight {
airline: Airline | null
aircraft: Aircraft | null
seat_type: SeatType | null
crew_type: CrewType | null
crew_type?: CrewType | null
flight_reason: FlightReason | null
flight_class: FlightClass | null
duration_display: string
+1
View File
@@ -2,3 +2,4 @@
/// <reference types="vite-plugin-pwa/client" />
declare module '*.css'
declare const __APP_VERSION__: string
+1
View File
@@ -9,6 +9,7 @@
<link rel="icon" type="image/x-icon" href="{{ asset('img/favicons/favicon.png') }}">
<!-- Fonts -->
<meta name="description" content="FlightsGoneBy is the ultimate flight diary — log every flight, earn achievements, visualise your travels on an interactive map, and share your stats with friends.">
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
<!-- Apple Touch Icons -->
+14
View File
@@ -4,8 +4,22 @@ import vue from '@vitejs/plugin-vue';
import path from 'path';
import vuetify from "vite-plugin-vuetify";
import { VitePWA } from 'vite-plugin-pwa';
import { execSync } from 'child_process'
function getAppVersion(): string {
try {
// Prefer a tag if one points at HEAD, else fall back to short hash
return execSync('git describe --tags --always --dirty').toString().trim()
} catch {
return 'Unknown'
}
}
export default defineConfig({
define: {
__APP_VERSION__: JSON.stringify(process.env.VITE_APP_VERSION ?? 'Dev'),
},
plugins: [
laravel({
input: 'resources/js/app.ts',