Compare commits
12
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a5d2d7875 | ||
|
|
a11e8f1428 | ||
|
|
90630489df | ||
|
|
2d55aa8488 | ||
|
|
1f23cbc033 | ||
|
|
e9ad1b45e0 | ||
|
|
64e164887b | ||
|
|
4b8fb1119b | ||
|
|
0230c77a2a | ||
|
|
f0306a6dd8 | ||
|
|
35c439dba4 | ||
|
|
3a082a57ff |
@@ -12,6 +12,10 @@ COPY . .
|
|||||||
|
|
||||||
RUN composer install --no-dev --optimize-autoloader
|
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
|
RUN npm install && npm run build && rm -f public/hot
|
||||||
|
|
||||||
COPY docker/nginx.conf /etc/nginx/nginx.conf
|
COPY docker/nginx.conf /etc/nginx/nginx.conf
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
"dev": "vite",
|
"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",
|
"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",
|
"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": {
|
"devDependencies": {
|
||||||
"@inertiajs/vue3": "^2.0.0",
|
"@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">
|
<td v-if="showColumn('class_seat_combined')" class="v-data-table__td class-badges-cell">
|
||||||
<span class="class-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" />
|
<FlightClassBadge v-if="flight.flight_class?.internal_name === 'crew'" :flight="flight" />
|
||||||
<InlineBadge v-else variant="crew">Crew</InlineBadge>
|
<InlineBadge v-else variant="crew">Crew</InlineBadge>
|
||||||
</CrewTooltip>
|
</CrewTooltip>
|
||||||
|
|||||||
@@ -659,7 +659,7 @@ export default defineComponent({
|
|||||||
|
|
||||||
const fitBounds = (): void => {
|
const fitBounds = (): void => {
|
||||||
if (!props.flights.length) return
|
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 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])
|
const lats = props.flights.flatMap(f => [f.departure_airport.latitude_deg, f.arrival_airport.latitude_deg])
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
withDefaults(defineProps<{
|
withDefaults(defineProps<{
|
||||||
title: string,
|
title?: string,
|
||||||
wide?: boolean,
|
wide?: boolean,
|
||||||
blurb?: string
|
blurb?: string
|
||||||
}>(), { wide: false })
|
}>(), { wide: false })
|
||||||
|
|||||||
@@ -4,12 +4,15 @@ import { SharedProps } from "@/Types/types"
|
|||||||
|
|
||||||
const page = usePage<SharedProps>().props
|
const page = usePage<SharedProps>().props
|
||||||
const year = new Date().getFullYear()
|
const year = new Date().getFullYear()
|
||||||
|
const version = __APP_VERSION__
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<footer class="glass">
|
<footer class="glass">
|
||||||
<span class="footer-copyright">
|
<span class="footer-copyright">
|
||||||
© {{ year }} FlightsGoneBy
|
© {{ year }} FlightsGoneBy
|
||||||
|
|
||||||
|
<span class="footer-version">v{{ version }}</span>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
<span class="footer-links">
|
<span class="footer-links">
|
||||||
@@ -73,4 +76,9 @@ footer {
|
|||||||
font-size: 0.6rem;
|
font-size: 0.6rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.footer-version {
|
||||||
|
opacity: 0.8;
|
||||||
|
margin-left: 0.4em;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Vendored
+1
-1
@@ -303,7 +303,7 @@ export interface Flight {
|
|||||||
airline: Airline | null
|
airline: Airline | null
|
||||||
aircraft: Aircraft | null
|
aircraft: Aircraft | null
|
||||||
seat_type: SeatType | null
|
seat_type: SeatType | null
|
||||||
crew_type: CrewType | null
|
crew_type?: CrewType | null
|
||||||
flight_reason: FlightReason | null
|
flight_reason: FlightReason | null
|
||||||
flight_class: FlightClass | null
|
flight_class: FlightClass | null
|
||||||
duration_display: string
|
duration_display: string
|
||||||
|
|||||||
Vendored
+1
@@ -2,3 +2,4 @@
|
|||||||
/// <reference types="vite-plugin-pwa/client" />
|
/// <reference types="vite-plugin-pwa/client" />
|
||||||
|
|
||||||
declare module '*.css'
|
declare module '*.css'
|
||||||
|
declare const __APP_VERSION__: string
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
<link rel="icon" type="image/x-icon" href="{{ asset('img/favicons/favicon.png') }}">
|
<link rel="icon" type="image/x-icon" href="{{ asset('img/favicons/favicon.png') }}">
|
||||||
<!-- Fonts -->
|
<!-- 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 rel="preconnect" href="https://fonts.bunny.net">
|
||||||
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
<link href="https://fonts.bunny.net/css?family=figtree:400,500,600&display=swap" rel="stylesheet" />
|
||||||
<!-- Apple Touch Icons -->
|
<!-- Apple Touch Icons -->
|
||||||
|
|||||||
@@ -4,8 +4,22 @@ import vue from '@vitejs/plugin-vue';
|
|||||||
import path from 'path';
|
import path from 'path';
|
||||||
import vuetify from "vite-plugin-vuetify";
|
import vuetify from "vite-plugin-vuetify";
|
||||||
import { VitePWA } from 'vite-plugin-pwa';
|
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({
|
export default defineConfig({
|
||||||
|
define: {
|
||||||
|
__APP_VERSION__: JSON.stringify(process.env.VITE_APP_VERSION ?? 'Dev'),
|
||||||
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
laravel({
|
laravel({
|
||||||
input: 'resources/js/app.ts',
|
input: 'resources/js/app.ts',
|
||||||
|
|||||||
Reference in New Issue
Block a user