This commit is contained in:
@@ -34,6 +34,7 @@ jobs:
|
|||||||
--build-arg MAPBOX_ACCESS_TOKEN="${{ secrets.MAPBOX_ACCESS_TOKEN }}" \
|
--build-arg MAPBOX_ACCESS_TOKEN="${{ secrets.MAPBOX_ACCESS_TOKEN }}" \
|
||||||
--build-arg MAPBOX_STYLE="mapbox/streets-v12" \
|
--build-arg MAPBOX_STYLE="mapbox/streets-v12" \
|
||||||
--build-arg TELEGRAM_BOT_USERNAME="carfteebot" \
|
--build-arg TELEGRAM_BOT_USERNAME="carfteebot" \
|
||||||
|
--build-arg BUILD_VERSION="${GITHUB_SHA}" \
|
||||||
.; then
|
.; then
|
||||||
published_images="$(docker image ls --format '{{.Repository}}:{{.Tag}}' | awk -v sha="$IMAGE_SHA" -v latest="$IMAGE_LATEST" '$0 == sha || $0 == latest')"
|
published_images="$(docker image ls --format '{{.Repository}}:{{.Tag}}' | awk -v sha="$IMAGE_SHA" -v latest="$IMAGE_LATEST" '$0 == sha || $0 == latest')"
|
||||||
if [ -n "$published_images" ]; then
|
if [ -n "$published_images" ]; then
|
||||||
|
|||||||
+10
-2
@@ -3,13 +3,21 @@ WORKDIR /app
|
|||||||
ARG MAPBOX_ACCESS_TOKEN=""
|
ARG MAPBOX_ACCESS_TOKEN=""
|
||||||
ARG MAPBOX_STYLE="mapbox/streets-v12"
|
ARG MAPBOX_STYLE="mapbox/streets-v12"
|
||||||
ARG TELEGRAM_BOT_USERNAME="carfteebot"
|
ARG TELEGRAM_BOT_USERNAME="carfteebot"
|
||||||
|
ARG BUILD_VERSION="local"
|
||||||
COPY pubspec.* ./
|
COPY pubspec.* ./
|
||||||
RUN flutter pub get
|
RUN flutter pub get
|
||||||
COPY . .
|
COPY . .
|
||||||
RUN flutter build web --release \
|
RUN rm -rf build/web && \
|
||||||
|
flutter build web --release --base-href=/ -o build/web \
|
||||||
--dart-define=MAPBOX_ACCESS_TOKEN="$MAPBOX_ACCESS_TOKEN" \
|
--dart-define=MAPBOX_ACCESS_TOKEN="$MAPBOX_ACCESS_TOKEN" \
|
||||||
--dart-define=MAPBOX_STYLE="$MAPBOX_STYLE" \
|
--dart-define=MAPBOX_STYLE="$MAPBOX_STYLE" \
|
||||||
--dart-define=TELEGRAM_BOT_USERNAME="$TELEGRAM_BOT_USERNAME"
|
--dart-define=TELEGRAM_BOT_USERNAME="$TELEGRAM_BOT_USERNAME" && \
|
||||||
|
cp web/index.prod.html build/web/index.html && \
|
||||||
|
rm -f build/web/index.prod.html && \
|
||||||
|
dart run sw:generate \
|
||||||
|
--input=build/web \
|
||||||
|
--prefix=mapflow \
|
||||||
|
--version="$BUILD_VERSION"
|
||||||
|
|
||||||
FROM nginx:1.27-alpine
|
FROM nginx:1.27-alpine
|
||||||
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
COPY nginx.conf /etc/nginx/conf.d/default.conf
|
||||||
|
|||||||
+70
-2
@@ -1,11 +1,52 @@
|
|||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name _;
|
server_name _;
|
||||||
|
|
||||||
|
gzip on;
|
||||||
|
gzip_comp_level 6;
|
||||||
|
gzip_min_length 1024;
|
||||||
|
gzip_vary on;
|
||||||
|
gzip_types
|
||||||
|
application/javascript
|
||||||
|
application/json
|
||||||
|
application/manifest+json
|
||||||
|
application/wasm
|
||||||
|
image/svg+xml
|
||||||
|
text/css
|
||||||
|
text/plain;
|
||||||
|
|
||||||
|
etag on;
|
||||||
|
|
||||||
root /usr/share/nginx/html;
|
root /usr/share/nginx/html;
|
||||||
index index.html;
|
index index.html;
|
||||||
|
client_max_body_size 25m;
|
||||||
|
|
||||||
location / {
|
location = /index.html {
|
||||||
try_files $uri $uri/ /index.html;
|
add_header Cache-Control "no-cache" always;
|
||||||
|
add_header Pragma "no-cache" always;
|
||||||
|
add_header Expires "0" always;
|
||||||
|
try_files /index.html =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* ^/(bootstrap\.js|sw\.js)$ {
|
||||||
|
add_header Cache-Control "no-cache" always;
|
||||||
|
add_header Pragma "no-cache" always;
|
||||||
|
add_header Expires "0" always;
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* ^/(manifest\.json|version\.json)$ {
|
||||||
|
add_header Cache-Control "no-cache" always;
|
||||||
|
add_header Pragma "no-cache" always;
|
||||||
|
add_header Expires "0" always;
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* ^/(flutter_service_worker\.js|flutter_bootstrap\.js|flutter\.js)$ {
|
||||||
|
add_header Cache-Control "no-cache" always;
|
||||||
|
add_header Pragma "no-cache" always;
|
||||||
|
add_header Expires "0" always;
|
||||||
|
return 410;
|
||||||
}
|
}
|
||||||
|
|
||||||
location = /graphql {
|
location = /graphql {
|
||||||
@@ -25,4 +66,31 @@ server {
|
|||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
location ~* ^/assets/.*\.(otf|ttf|woff|woff2)$ {
|
||||||
|
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||||
|
add_header Access-Control-Allow-Origin "*" always;
|
||||||
|
types {
|
||||||
|
font/otf otf;
|
||||||
|
font/ttf ttf;
|
||||||
|
font/woff woff;
|
||||||
|
font/woff2 woff2;
|
||||||
|
}
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* ^/(assets|canvaskit|icons)/ {
|
||||||
|
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* \.(js|mjs|wasm|json|png|jpg|jpeg|gif|webp|svg|ico|woff|woff2|ttf)$ {
|
||||||
|
add_header Cache-Control "public, max-age=31536000, immutable" always;
|
||||||
|
try_files $uri =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
add_header Cache-Control "no-cache" always;
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1037,6 +1037,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.4.1"
|
version: "1.4.1"
|
||||||
|
sw:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: sw
|
||||||
|
sha256: c3c7cb2e728ce068d79e61b7c2e8944de67567acc06a3594ae303f3884089ac4
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.1.5"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ dev_dependencies:
|
|||||||
flutter_lints: ^6.0.0
|
flutter_lints: ^6.0.0
|
||||||
ferry_generator: ^0.12.0+5
|
ferry_generator: ^0.12.0+5
|
||||||
build_runner: ^2.15.0
|
build_runner: ^2.15.0
|
||||||
|
sw: ^0.1.5
|
||||||
|
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
|||||||
@@ -0,0 +1,95 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<base href="/" />
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
||||||
|
<meta name="description" content="MapFlow">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<meta name="theme-color" content="#0d1b2a">
|
||||||
|
<script src="https://telegram.org/js/telegram-web-app.js"></script>
|
||||||
|
|
||||||
|
<meta name="mobile-web-app-capable" content="yes">
|
||||||
|
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||||
|
<meta name="apple-mobile-web-app-title" content="MapFlow">
|
||||||
|
<link rel="apple-touch-icon" href="icons/Icon-192.png?v={{sw_version}}">
|
||||||
|
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png?v={{sw_version}}"/>
|
||||||
|
|
||||||
|
<title>MapFlow</title>
|
||||||
|
<link rel="manifest" href="manifest.json">
|
||||||
|
<style>
|
||||||
|
#sw-loading .sw-title,
|
||||||
|
#sw-loading .sw-status,
|
||||||
|
#sw-loading .sw-percentage {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
#sw-loading {
|
||||||
|
background: #0d1b2a !important;
|
||||||
|
gap: 0 !important;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
if ('serviceWorker' in navigator) {
|
||||||
|
var refreshing = false;
|
||||||
|
|
||||||
|
navigator.serviceWorker.addEventListener('controllerchange', function () {
|
||||||
|
if (refreshing) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
refreshing = true;
|
||||||
|
window.location.reload();
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener('sw-update-available', function () {
|
||||||
|
navigator.serviceWorker.getRegistration().then(function (registration) {
|
||||||
|
if (registration && registration.waiting) {
|
||||||
|
registration.waiting.postMessage({ type: 'skipWaiting' });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
window.addEventListener('load', function () {
|
||||||
|
navigator.serviceWorker.getRegistrations().then(function (registrations) {
|
||||||
|
registrations.forEach(function (registration) {
|
||||||
|
var worker = registration.active || registration.waiting || registration.installing;
|
||||||
|
var workerPath = worker ? new URL(worker.scriptURL).pathname : '';
|
||||||
|
if (worker && !workerPath.endsWith('/sw.js')) {
|
||||||
|
registration.unregister();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
if (window.caches) {
|
||||||
|
caches.keys().then(function (keys) {
|
||||||
|
keys.forEach(function (key) {
|
||||||
|
if (
|
||||||
|
key === 'flutter-app-cache' ||
|
||||||
|
key === 'flutter-temp-cache' ||
|
||||||
|
key === 'flutter-app-manifest'
|
||||||
|
) {
|
||||||
|
caches.delete(key);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<script
|
||||||
|
defer
|
||||||
|
data-sw-bootstrap
|
||||||
|
src="bootstrap.js"
|
||||||
|
data-config='{
|
||||||
|
"logo": "icons/Icon-192.png?v={{sw_version}}",
|
||||||
|
"theme": "dark",
|
||||||
|
"color": "#46d3b1",
|
||||||
|
"showPercentage": false
|
||||||
|
}'
|
||||||
|
></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user