diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index a9da5070..2fe38d44 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -1,72 +1,23 @@
-name: Build
+name: Build and Publish Image
on:
pull_request:
branches:
- main
push:
- branches: [main]
+ branches:
+ - main
release:
- types: ['published']
- workflow_dispatch:
- inputs:
- tagName:
- description: 'Tag of the image you want to build and push'
- required: true
+ types: ["published"]
jobs:
- build:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout
- uses: actions/checkout@v2
-
- - name: Prepare
- id: prep
- run: |
- DOCKER_IMAGE=cmusei/player-ui
- VERSION=development
- if [[ ! -z "${{ github.event.inputs.tagName }}" ]]; then
- VERSION=${{ github.event.inputs.tagName }}
- TAGS="${DOCKER_IMAGE}:${VERSION}"
- elif [[ $GITHUB_REF == refs/tags/* ]]; then
- VERSION=${GITHUB_REF#refs/tags/}
- MAJORMINORVERSION=$(echo $VERSION | grep -oP '(\d+)\.(\d+)')
- TAGS="${DOCKER_IMAGE}:${VERSION},${DOCKER_IMAGE}:${MAJORMINORVERSION}"
- elif [[ $GITHUB_REF == refs/heads/* ]]; then
- VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g')
- TAGS="${DOCKER_IMAGE}:${VERSION}"
- fi
- if [[ "${{ github.event_name }}" == "pull_request" ]]; then
- echo ::set-output name=push::false
- echo "event is pull_request, not pushing image"
- else
- echo ::set-output name=push::true
- echo "event is not pull_request, pushing image"
- fi
- echo ::set-output name=version::${VERSION}
- echo ::set-output name=tags::${TAGS}
- echo ::set-output name=created::$(date -u +'%Y-%m-%dT%H:%M:%SZ')
-
- - name: Set up Docker Buildx
- uses: docker/setup-buildx-action@v1
-
- - name: Login to DockerHub
- if: github.event_name != 'pull_request'
- uses: docker/login-action@v1
- with:
- username: ${{ secrets.DOCKERHUB_USERNAME }}
- password: ${{ secrets.DOCKERHUB_PASSWORD }}
-
- - name: Build and push
- uses: docker/build-push-action@v2
- with:
- context: .
- file: ./Dockerfile
- push: ${{ steps.prep.outputs.push }}
- pull: true
- tags: ${{ steps.prep.outputs.tags }}
- labels: |
- org.opencontainers.image.source=${{ github.event.repository.clone_url }}
- org.opencontainers.image.created=${{ steps.prep.outputs.created }}
- org.opencontainers.image.revision=${{ github.sha }}
+ build-and-publish:
+ name: Build and Publish
+ uses: cmu-sei/Crucible-Github-Actions/.github/workflows/docker-build.yaml@docker-v1
+ with:
+ imageName: cmusei/player-ui
+ versionMode: npm
+ versionFiles: package.json
+ secrets:
+ DOCKERHUB_USERNAME: ${{ secrets.DOCKERHUB_USERNAME }}
+ DOCKERHUB_PASSWORD: ${{ secrets.DOCKERHUB_PASSWORD }}
diff --git a/.gitignore b/.gitignore
index f9dbff93..8762d743 100644
--- a/.gitignore
+++ b/.gitignore
@@ -301,6 +301,8 @@ __pycache__/
*.xsd.cs
*/assets/config/settings.env.json*
+*/assets/config/settings.shared.json*
/dist
/docker
+tsconfig.local-npm.json
diff --git a/Dockerfile b/Dockerfile
index 1d6c9a15..463a2e86 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,7 +13,7 @@ WORKDIR /ng-app
COPY . .
-RUN npx ng build --resources-output-path=assets/fonts --configuration production
+RUN npx ng build --configuration production
### Stage 2: Setup ###
@@ -23,7 +23,7 @@ USER root
RUN rm -rf /usr/share/nginx/html/*
COPY default.conf /etc/nginx/conf.d/default.conf
COPY nginx-basehref.sh /docker-entrypoint.d/90-basehref.sh
-COPY --from=builder /ng-app/dist /usr/share/nginx/html
+COPY --from=builder /ng-app/dist/browser /usr/share/nginx/html
RUN chown -R nginx:nginx /usr/share/nginx/html
USER nginx
diff --git a/angular.json b/angular.json
index 3bc2db29..79e739fd 100644
--- a/angular.json
+++ b/angular.json
@@ -9,13 +9,14 @@
"projectType": "application",
"architect": {
"build": {
- "builder": "@angular-devkit/build-angular:browser",
+ "builder": "@angular-devkit/build-angular:application",
"options": {
- "outputPath": "dist",
+ "outputPath": {
+ "base": "dist"
+ },
"index": "src/index.html",
- "main": "src/main.ts",
"tsConfig": "src/tsconfig.app.json",
- "polyfills": "src/polyfills.ts",
+ "polyfills": ["src/polyfills.ts"],
"allowedCommonJsDependencies": [
"crypto-js/core.js",
"crypto-js/enc-base64.js",
@@ -26,7 +27,7 @@
"src/assets",
{
"glob": "auth-callback-silent.html",
- "input": "node_modules/@cmusei/crucible-common/src/lib/comn-auth/assets/",
+ "input": "../../libraries/Crucible.Common.Ui/projects/@crucible-common/src/lib/comn-auth/assets/",
"output": "/"
}
],
@@ -35,11 +36,11 @@
"./node_modules/bootstrap/dist/css/bootstrap-utilities.min.css"
],
"stylePreprocessorOptions": {
- "includePaths": [
- "src/styles"
- ]
+ "includePaths": ["src/styles"]
},
- "scripts": []
+ "scripts": [],
+ "preserveSymlinks": true,
+ "browser": "src/main.ts"
},
"configurations": {
"production": {
@@ -65,13 +66,17 @@
]
},
"development": {
- "buildOptimizer": false,
"optimization": false,
- "vendorChunk": true,
"extractLicenses": false,
- "sourceMap": true,
- "namedChunks": true,
- "preserveSymlinks": true
+ "sourceMap": {
+ "scripts": true,
+ "styles": true,
+ "vendor": true
+ },
+ "namedChunks": true
+ },
+ "localNPM": {
+ "tsConfig": "tsconfig.local-npm.json"
}
},
"defaultConfiguration": "production"
@@ -87,6 +92,9 @@
},
"development": {
"buildTarget": "player-ui:build:development"
+ },
+ "localNPM": {
+ "buildTarget": "player-ui:build:development,localNPM"
}
},
"defaultConfiguration": "development"
diff --git a/package-lock.json b/package-lock.json
index 34b99410..4c3cd0b2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "player.ui",
- "version": "3.1.1",
+ "version": "0.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "player.ui",
- "version": "3.1.1",
+ "version": "0.0.0",
"license": "MIT",
"dependencies": {
"@angular/animations": "^21.2.1",
@@ -20,7 +20,7 @@
"@angular/platform-browser": "^21.2.1",
"@angular/platform-browser-dynamic": "^21.2.1",
"@angular/router": "^21.2.1",
- "@cmusei/crucible-common": "0.4.2",
+ "@cmusei/crucible-common": "^0.6.0",
"@datorama/akita": "^8.0.1",
"@datorama/akita-ng-router-store": "^8.0.0",
"@material/material-color-utilities": "^0.4.0",
@@ -2632,17 +2632,18 @@
}
},
"node_modules/@cmusei/crucible-common": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/@cmusei/crucible-common/-/crucible-common-0.4.2.tgz",
- "integrity": "sha512-1i/yuZ5ONQh9vJWJyaFk8jo1vKrwlRg0R3Y/eFMyZ8sGSgNFUTpcGTexgK8jePU68JtMo5dsd7fPYlhN5SyxVA==",
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/@cmusei/crucible-common/-/crucible-common-0.6.0.tgz",
+ "integrity": "sha512-/IGL3tOD8ECN2HWoDpmzXz5LlZXCcRN7K4V8AdqCd/JQbSedvWM1XVahvZ4wi2SlbdicZNioN1a2rjoxlr9iOw==",
"license": "MIT",
"dependencies": {
"tslib": "^2.4.1"
},
"peerDependencies": {
- "@angular/common": ">= 14.0.0",
- "@angular/core": ">= 14.0.0",
+ "@angular/common": ">=21.0.0",
+ "@angular/core": ">=21.0.0",
"@datorama/akita": "^8.0.0",
+ "@material/material-color-utilities": "^0.4.0",
"oidc-client-ts": "^2.4.0 || ^3.0.0",
"rxjs": "^7.8.1"
}
@@ -2721,21 +2722,21 @@
}
},
"node_modules/@emnapi/core": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz",
- "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.9.0.tgz",
+ "integrity": "sha512-0DQ98G9ZQZOxfUcQn1waV2yS8aWdZ6kJMbYCJB3oUBecjWYO1fqJ+a1DRfPF3O5JEkwqwP1A9QEN/9mYm2Yd0w==",
"dev": true,
"license": "MIT",
"optional": true,
"dependencies": {
- "@emnapi/wasi-threads": "1.1.0",
+ "@emnapi/wasi-threads": "1.2.0",
"tslib": "^2.4.0"
}
},
"node_modules/@emnapi/runtime": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
- "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.9.0.tgz",
+ "integrity": "sha512-QN75eB0IH2ywSpRpNddCRfQIhmJYBCJ1x5Lb3IscKAL8bMnVAKnRg8dCoXbHzVLLH7P38N2Z3mtulB7W0J0FKw==",
"dev": true,
"license": "MIT",
"optional": true,
@@ -2744,9 +2745,9 @@
}
},
"node_modules/@emnapi/wasi-threads": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
- "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.2.0.tgz",
+ "integrity": "sha512-N10dEJNSsUx41Z6pZsXU8FjPjpBEplgH24sfkmITrBED1/U2Esum9F3lfLrMjKHHjmi557zQn7kR9R+XWXu5Rg==",
"dev": true,
"license": "MIT",
"optional": true,
diff --git a/package.json b/package.json
index 150ecc7e..87007dfc 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "player.ui",
- "version": "3.1.1",
+ "version": "0.0.0",
"license": "MIT",
"scripts": {
"ng": "ng",
@@ -37,10 +37,10 @@
"@angular/platform-browser": "^21.2.1",
"@angular/platform-browser-dynamic": "^21.2.1",
"@angular/router": "^21.2.1",
- "@cmusei/crucible-common": "0.4.2",
- "@material/material-color-utilities": "^0.4.0",
+ "@cmusei/crucible-common": "^0.6.0",
"@datorama/akita": "^8.0.1",
"@datorama/akita-ng-router-store": "^8.0.0",
+ "@material/material-color-utilities": "^0.4.0",
"@mdi/font": "^7.4.47",
"@microsoft/signalr": "^10.0.0",
"@popperjs/core": "^2.11.8",
diff --git a/src/app/app.component.html b/src/app/app.component.html
index 2f8bccf4..9a9e8c6a 100644
--- a/src/app/app.component.html
+++ b/src/app/app.component.html
@@ -3,4 +3,10 @@
Released under a MIT (SEI)-style license. See LICENSE.md in the project root for license information.
-->
-