try gitea actions for dart server
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Signed-off-by: Peter Siegmund <developer@mars3142.org>
This commit is contained in:
27
.gitea/workflows/docker.yml
Normal file
27
.gitea/workflows/docker.yml
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
name: Build and Push Multi-Arch Docker Image
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-push:
|
||||||
|
runs-on: docker
|
||||||
|
steps:
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
- name: Login to Gitea Registry
|
||||||
|
run: echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login ${{ secrets.DOMAIN }} -u ${{ secrets.REGISTRY_USER }} --password-stdin
|
||||||
|
|
||||||
|
- name: Build and Push Multi-Arch Image
|
||||||
|
working-directory: ./server/cinema
|
||||||
|
run: |
|
||||||
|
docker buildx build \
|
||||||
|
--platform linux/amd64,linux/arm64 \
|
||||||
|
-t ${{ secrets.DOMAIN }}/${{ secrets.OWNER }}/${{ secrets.REPO }}/server:latest \
|
||||||
|
--push .
|
||||||
@@ -9,3 +9,4 @@ build/
|
|||||||
.packages
|
.packages
|
||||||
*.g.dart
|
*.g.dart
|
||||||
*.config.dart
|
*.config.dart
|
||||||
|
assets/cache
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'dart:io';
|
import 'dart:io';
|
||||||
|
|
||||||
|
import 'package:cinema/feature/middlewares/cors.dart';
|
||||||
import 'package:cinema/feature/poster/data/repositories/image_loader.dart';
|
import 'package:cinema/feature/poster/data/repositories/image_loader.dart';
|
||||||
import 'package:cinema/feature/poster/data/services/poster.service.dart';
|
import 'package:cinema/feature/poster/data/services/poster.service.dart';
|
||||||
import 'package:cinema/feature/root/data/service/root.service.dart';
|
import 'package:cinema/feature/root/data/service/root.service.dart';
|
||||||
@@ -18,15 +19,12 @@ void main(List<String> args) async {
|
|||||||
router.mount("/poster", getIt<PosterService>().router.call);
|
router.mount("/poster", getIt<PosterService>().router.call);
|
||||||
router.mount("/", getIt<RootService>().router.call);
|
router.mount("/", getIt<RootService>().router.call);
|
||||||
|
|
||||||
// Configure a pipeline that logs requests.
|
/// add middlewares (Logging, CORS)
|
||||||
final handler = Pipeline().addMiddleware(logRequests()).addHandler(router.call);
|
final handler = Pipeline().addMiddleware(logRequests()).addMiddleware(cors()).addHandler(router.call);
|
||||||
|
|
||||||
// Use any available host or container IP (usually `0.0.0.0`).
|
|
||||||
final ip = InternetAddress.anyIPv4;
|
|
||||||
|
|
||||||
// For running in containers, we respect the PORT environment variable.
|
// For running in containers, we respect the PORT environment variable.
|
||||||
final port = int.parse(Platform.environment['PORT'] ?? '3000');
|
final port = int.parse(Platform.environment['PORT'] ?? '3000');
|
||||||
await io.serve(handler, ip, port, poweredByHeader: null).then((server) async {
|
await io.serve(handler, InternetAddress.anyIPv4, port, poweredByHeader: null).then((server) async {
|
||||||
final bannerFile = File('banner.txt');
|
final bannerFile = File('banner.txt');
|
||||||
if (await bannerFile.exists()) {
|
if (await bannerFile.exists()) {
|
||||||
final banner = await bannerFile.readAsString();
|
final banner = await bannerFile.readAsString();
|
||||||
|
|||||||
24
server/cinema/lib/feature/middlewares/cors.dart
Normal file
24
server/cinema/lib/feature/middlewares/cors.dart
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import 'package:shelf/shelf.dart';
|
||||||
|
|
||||||
|
Middleware cors() {
|
||||||
|
const corsHeaders = {
|
||||||
|
'Access-Control-Allow-Origin': '*',
|
||||||
|
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE',
|
||||||
|
'Access-Control-Allow-Headers': 'Origin, Content-Type',
|
||||||
|
'Access-Control-Max-Age': "600",
|
||||||
|
};
|
||||||
|
|
||||||
|
return createMiddleware(
|
||||||
|
requestHandler: (Request request) {
|
||||||
|
if (request.method == "OPTIONS") {
|
||||||
|
return Response.ok('', headers: corsHeaders);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
},
|
||||||
|
responseHandler: (Response response) {
|
||||||
|
final headers = Map<String, String>.from(response.headers);
|
||||||
|
headers.addEntries(corsHeaders.entries.map((e) => MapEntry(e.key, e.value)));
|
||||||
|
return response.change(headers: headers);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user