Use momentum to host
Some checks failed
Build Website / Build NPM Project (push) Successful in 2m25s
Build Website / Build & Push Dockerfile (push) Failing after 41s
Build Website / Tag Version (push) Successful in 44s

This commit is contained in:
2026-06-04 08:17:27 -04:00
parent 0e9b847a47
commit d8d9a9bfad
5 changed files with 104 additions and 8 deletions

View File

@@ -20,11 +20,7 @@ RUN if [ ! -d "dist" ] && [ ! -d "node_modules" ]; then npm install; fi
RUN BUILD_MODE=$([ "$NODE_ENV" = "prod" ] && echo "prod" || echo "dev") && \
if [ ! -d "dist" ]; then npm run "build:$BUILD_MODE"; fi
# Use Nginx to serve
FROM nginx:1.20-alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY docker/config/robots.txt /usr/share/nginx/html/robots.txt
COPY docker/config/nginx.conf /etc/nginx/nginx.conf
COPY docker/scripts/setup-environment.sh /docker-entrypoint.d/setup-environment.sh
RUN chmod +x /docker-entrypoint.d/setup-environment.sh
EXPOSE 80
# Use Momentum to serve
FROM git.zakscode.com/momentum/momentum:diarization
RUN rm -rf /app/server/public/assets /app/server/public/index.html
COPY --from=build /app/dist /app/server/public

View File

@@ -53,6 +53,7 @@ Website: https://legio-30.org
### Built With
[![Angular](https://img.shields.io/badge/Angular-DD0031?style=for-the-badge&logo=angular)](https://angular.io/)
[![Docker](https://img.shields.io/badge/Docker-384d54?style=for-the-badge&logo=docker)](https://docker.com/)
[![Momentum](https://img.shields.io/badge/Momentum-4c7bbc?style=for-the-badge)](https://momentum.zakscode.com)
[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org/)
## Setup

48
package-lock.json generated
View File

@@ -18,6 +18,7 @@
"@angular/platform-browser": "^14.2.0",
"@angular/platform-browser-dynamic": "^14.2.0",
"@angular/router": "^14.2.0",
"@ztimson/momentum": "^1.1.11",
"bootstrap": "^5.2.1",
"jquery": "^3.6.1",
"ngx-google-analytics": "^14.0.1",
@@ -3340,6 +3341,26 @@
"integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
"dev": true
},
"node_modules/@ztimson/momentum": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/@ztimson/momentum/-/momentum-1.1.11.tgz",
"integrity": "sha512-ArFIOJj0mCbvR/P6XBlOjvICytf3ggPClbMmDDsZNtLMGXIZ+HqNjt58LDuEpLr3a8pe0mXEZ3jGkIAv2no8mA==",
"dependencies": {
"@ztimson/utils": "0.29.1"
},
"bin": {
"build-models": "bin/build-models.mjs"
}
},
"node_modules/@ztimson/utils": {
"version": "0.29.1",
"resolved": "https://registry.npmjs.org/@ztimson/utils/-/utils-0.29.1.tgz",
"integrity": "sha512-tc1Eikjt7bwMHoOvck5eSnV3P69FOVNp6z7n/v1IoEtBmHLtPgz8LsxUtSYLnvl96HZ1bNkvQfuuUxrBob5dJQ==",
"license": "MIT",
"dependencies": {
"var-persist": "^1.0.1"
}
},
"node_modules/abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@@ -11205,6 +11226,12 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/var-persist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/var-persist/-/var-persist-1.0.1.tgz",
"integrity": "sha512-Zon+pwvEpb0dEQCVShoMQQWV1JbWi4P2knW3h2sfSZS3pLecgbFig76tMSHEECQuEQ3KfYhMXgRDDIybtHTyZw==",
"license": "MIT"
},
"node_modules/vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
@@ -14070,6 +14097,22 @@
"integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==",
"dev": true
},
"@ztimson/momentum": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/@ztimson/momentum/-/momentum-1.1.11.tgz",
"integrity": "sha512-ArFIOJj0mCbvR/P6XBlOjvICytf3ggPClbMmDDsZNtLMGXIZ+HqNjt58LDuEpLr3a8pe0mXEZ3jGkIAv2no8mA==",
"requires": {
"@ztimson/utils": "0.29.1"
}
},
"@ztimson/utils": {
"version": "0.29.1",
"resolved": "https://registry.npmjs.org/@ztimson/utils/-/utils-0.29.1.tgz",
"integrity": "sha512-tc1Eikjt7bwMHoOvck5eSnV3P69FOVNp6z7n/v1IoEtBmHLtPgz8LsxUtSYLnvl96HZ1bNkvQfuuUxrBob5dJQ==",
"requires": {
"var-persist": "^1.0.1"
}
},
"abab": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
@@ -19750,6 +19793,11 @@
"builtins": "^5.0.0"
}
},
"var-persist": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/var-persist/-/var-persist-1.0.1.tgz",
"integrity": "sha512-Zon+pwvEpb0dEQCVShoMQQWV1JbWi4P2knW3h2sfSZS3pLecgbFig76tMSHEECQuEQ3KfYhMXgRDDIybtHTyZw=="
},
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",

View File

@@ -21,6 +21,7 @@
"@angular/platform-browser": "^14.2.0",
"@angular/platform-browser-dynamic": "^14.2.0",
"@angular/router": "^14.2.0",
"@ztimson/momentum": "^1.1.11",
"bootstrap": "^5.2.1",
"jquery": "^3.6.1",
"ngx-google-analytics": "^14.0.1",

View File

@@ -0,0 +1,50 @@
import {Injectable} from '@angular/core';
import {Momentum, type User} from '@ztimson/momentum';
import {BehaviorSubject} from 'rxjs';
import {from, map} from 'rxjs';
import {filter} from 'rxjs/operators';
declare global {
interface Window {
momentum: Momentum;
electronEnvironment: any;
}
interface location {
port: string;
}
}
@Injectable({providedIn: 'root'})
export class MomentumService {
static SCHEMA: {[key: string]: string} = {
// TODO: Add paths
}
api!: Momentum;
installable = new BehaviorSubject(false);
settings = new BehaviorSubject<{[key: string]: any}>({});
title = new BehaviorSubject<string | null>(null);
// @ts-ignore
user = new BehaviorSubject<User | null | undefined>(undefined); // Undefined at init, null when logged out, object when logged in.
admin = from(this.user).pipe(filter((u: any) => u !== undefined), map((u: User | null) => u?.groups.includes('admin')));
isLoggedIn = from(this.user).pipe(filter(u => u !== undefined), map(Boolean));
constructor() {
this.api = new Momentum("https://legio-30.org", {
app: "Website",
analytics: "prompt",
logLevel: "ERROR",
});
this.api.auth.on('logout', () => location.reload());
this.api.client.on('install', () => this.installable.next(this.api.client.canInstall));
this.installable.next(this.api.client.canInstall);
this.api.settings.sync((event, value) => {
this.title.next(value['title']);
this.settings.next(value);
}, {map: true});
}
}