Skip to content

Commit cb6185e

Browse files
committed
Merge branch 'main' into backend_settings_rework
2 parents 3937265 + e1ff22d commit cb6185e

File tree

9 files changed

+1654
-1152
lines changed

9 files changed

+1654
-1152
lines changed

.github/workflows/quay.yml

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
name: Push to Quay.io
2+
3+
on:
4+
push:
5+
tags:
6+
- '*'
7+
8+
env:
9+
REGISTRY: quay.io
10+
REGISTRY_IMAGE: quay.io/rocketadmin/rocketadmin
11+
12+
jobs:
13+
prepare:
14+
runs-on: ubuntu-latest
15+
outputs:
16+
matrix: ${{ steps.platforms.outputs.matrix }}
17+
steps:
18+
- name: Checkout
19+
uses: actions/checkout@v4
20+
21+
- name: Create matrix
22+
id: platforms
23+
run: |
24+
echo "matrix=$(docker buildx bake image-all -f docker-bake.hcl --print | jq -cr '.target."image-all".platforms')" >>${GITHUB_OUTPUT}
25+
26+
- name: Show matrix
27+
run: |
28+
echo ${{ steps.platforms.outputs.matrix }}
29+
30+
- name: Docker meta
31+
id: meta
32+
uses: docker/metadata-action@v5
33+
with:
34+
images: ${{ env.REGISTRY_IMAGE }}
35+
tags: |
36+
type=semver,pattern={{version}}
37+
type=semver,pattern={{major}}.{{minor}}
38+
type=semver,pattern={{major}}
39+
type=ref,event=tag
40+
41+
- name: Rename meta bake definition file
42+
run: |
43+
mv "${{ steps.meta.outputs.bake-file }}" "/tmp/bake-meta.json"
44+
45+
- name: Upload meta bake definition
46+
uses: actions/upload-artifact@v4
47+
with:
48+
name: bake-meta
49+
path: /tmp/bake-meta.json
50+
if-no-files-found: error
51+
retention-days: 1
52+
53+
build:
54+
permissions:
55+
id-token: write
56+
contents: read
57+
attestations: write
58+
runs-on: ${{ contains(matrix.platform, 'arm') && 'arm64' || 'ubuntu-latest' }}
59+
needs:
60+
- prepare
61+
strategy:
62+
fail-fast: false
63+
matrix:
64+
platform: ${{ fromJson(needs.prepare.outputs.matrix) }}
65+
steps:
66+
- name: Prepare
67+
run: |
68+
platform=${{ matrix.platform }}
69+
echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV
70+
71+
- name: Checkout
72+
uses: actions/checkout@v4
73+
74+
- name: Download meta bake definition
75+
uses: actions/download-artifact@v4
76+
with:
77+
name: bake-meta
78+
path: /tmp
79+
80+
- name: Set up Docker Buildx
81+
uses: docker/setup-buildx-action@v3
82+
83+
- name: Login to Quay.io
84+
uses: docker/login-action@v3
85+
with:
86+
registry: ${{ env.REGISTRY }}
87+
username: ${{ secrets.QUAY_USERNAME }}
88+
password: ${{ secrets.QUAY_PASSWORD }}
89+
90+
- name: Build
91+
id: bake
92+
uses: docker/bake-action@v5
93+
with:
94+
sbom: true
95+
files: |
96+
./docker-bake.hcl
97+
/tmp/bake-meta.json
98+
targets: image
99+
set: |
100+
*.tags=
101+
*.platform=${{ matrix.platform }}
102+
*.output=type=image,"name=${{ env.REGISTRY_IMAGE }}",push-by-digest=true,name-canonical=true,push=true
103+
104+
- name: Export digest
105+
run: |
106+
mkdir -p /tmp/digests
107+
digest="${{ fromJSON(steps.bake.outputs.metadata).image['containerimage.digest'] }}"
108+
touch "/tmp/digests/${digest#sha256:}"
109+
110+
- name: Upload digest
111+
uses: actions/upload-artifact@v4
112+
with:
113+
name: digests-${{ env.PLATFORM_PAIR }}
114+
path: /tmp/digests/*
115+
if-no-files-found: error
116+
retention-days: 1
117+
118+
- name: Attest Build Provenance
119+
uses: actions/attest-build-provenance@v1
120+
with:
121+
subject-digest: "${{ fromJSON(steps.bake.outputs.metadata).image['containerimage.digest'] }}"
122+
push-to-registry: false
123+
subject-name: ${{ env.REGISTRY_IMAGE }}
124+
125+
merge:
126+
runs-on: ubuntu-latest
127+
needs:
128+
- build
129+
steps:
130+
- name: Download meta bake definition
131+
uses: actions/download-artifact@v4
132+
with:
133+
name: bake-meta
134+
path: /tmp
135+
136+
- name: Download digests
137+
uses: actions/download-artifact@v4
138+
with:
139+
path: /tmp/digests
140+
pattern: digests-*
141+
merge-multiple: true
142+
143+
- name: Set up Docker Buildx
144+
uses: docker/setup-buildx-action@v3
145+
146+
- name: Login to Quay.io
147+
uses: docker/login-action@v3
148+
with:
149+
registry: ${{ env.REGISTRY }}
150+
username: ${{ secrets.QUAY_USERNAME }}
151+
password: ${{ secrets.QUAY_PASSWORD }}
152+
153+
- name: Create manifest list and push
154+
working-directory: /tmp/digests
155+
run: |
156+
docker buildx imagetools create $(jq -cr '.target."docker-metadata-action".tags | map(select(startswith("${{ env.REGISTRY_IMAGE }}")) | "-t " + .) | join(" ")' /tmp/bake-meta.json) \
157+
$(printf '${{ env.REGISTRY_IMAGE }}@sha256:%s ' *)
158+
159+
- name: Inspect image
160+
run: |
161+
docker buildx imagetools inspect ${{ env.REGISTRY_IMAGE }}:$(jq -r '.target."docker-metadata-action".args.DOCKER_META_VERSION' /tmp/bake-meta.json)

frontend/package.json

Lines changed: 89 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -1,90 +1,91 @@
11
{
2-
"name": "dissendium-v0",
3-
"version": "1.0.0",
4-
"scripts": {
5-
"ng": "ng",
6-
"start": "node scripts/update-version.js && ng serve",
7-
"build": "node scripts/update-version.js && ng build",
8-
"test": "ng test",
9-
"test:ci": "ng test --watch=false --browsers=ChromeHeadlessCustom",
10-
"lint": "ng lint",
11-
"e2e": "ng e2e",
12-
"analyze": "webpack-bundle-analyzer dist/dissendium-v0/stats.json",
13-
"build:stats": "node scripts/update-version.js && ng build --stats-json",
14-
"update-version": "node scripts/update-version.js"
15-
},
16-
"private": true,
17-
"dependencies": {
18-
"@angular/animations": "~19.2.14",
19-
"@angular/cdk": "~19.2.14",
20-
"@angular/common": "~19.2.14",
21-
"@angular/compiler": "~19.2.14",
22-
"@angular/core": "~19.2.14",
23-
"@angular/forms": "~19.2.14",
24-
"@angular/material": "~19.2.14",
25-
"@angular/platform-browser": "~19.2.14",
26-
"@angular/platform-browser-dynamic": "~19.2.14",
27-
"@angular/router": "~19.2.14",
28-
"@brumeilde/ngx-theme": "^1.2.1",
29-
"@jsonurl/jsonurl": "^1.1.8",
30-
"@ngstack/code-editor": "^9.0.0",
31-
"@sentry-internal/rrweb": "^2.31.0",
32-
"@sentry/angular-ivy": "^7.116.0",
33-
"@sentry/tracing": "^7.116.0",
34-
"@stripe/stripe-js": "^5.3.0",
35-
"@types/google-one-tap": "^1.2.6",
36-
"@types/lodash": "^4.17.13",
37-
"@zxcvbn-ts/core": "^3.0.4",
38-
"@zxcvbn-ts/language-en": "^3.0.2",
39-
"amplitude-js": "^8.21.9",
40-
"angular-password-strength-meter": "npm:@eresearchqut/angular-password-strength-meter@^13.0.7",
41-
"angulartics2": "^14.1.0",
42-
"color-string": "^2.0.1",
43-
"convert": "^5.12.0",
44-
"date-fns": "^4.1.0",
45-
"ipaddr.js": "^2.2.0",
46-
"json5": "^2.2.3",
47-
"libphonenumber-js": "^1.12.9",
48-
"lodash": "^4.17.21",
49-
"lodash-es": "^4.17.21",
50-
"mermaid": "^11.12.1",
51-
"monaco-editor": "0.44.0",
52-
"ng-dynamic-component": "^10.7.0",
53-
"ngx-cookie-service": "^19.0.0",
54-
"ngx-markdown": "^19.1.1",
55-
"ngx-stripe": "^19.0.0",
56-
"pluralize": "^8.0.0",
57-
"postgres-interval": "^4.0.2",
58-
"private-ip": "^3.0.2",
59-
"puppeteer": "^24.29.1",
60-
"rxjs": "^7.4.0",
61-
"tslib": "^2.8.1",
62-
"uuid": "^11.1.0",
63-
"validator": "^13.15.20",
64-
"zone.js": "~0.15.0"
65-
},
66-
"devDependencies": {
67-
"@angular-devkit/build-angular": "~19.2.19",
68-
"@angular/cli": "~19.0.5",
69-
"@angular/compiler-cli": "~19.0.4",
70-
"@angular/language-service": "~19.0.4",
71-
"@sentry-internal/rrweb": "^2.16.0",
72-
"@types/jasmine": "~5.1.5",
73-
"@types/jasminewd2": "~2.0.13",
74-
"@types/node": "^22.10.2",
75-
"jasmine-core": "~5.5.0",
76-
"jasmine-spec-reporter": "~7.0.0",
77-
"karma": "~6.4.4",
78-
"karma-chrome-launcher": "~3.2.0",
79-
"karma-coverage": "^2.2.1",
80-
"karma-coverage-istanbul-reporter": "^3.0.3",
81-
"karma-jasmine": "~5.1.0",
82-
"karma-jasmine-html-reporter": "^2.1.0",
83-
"ts-node": "~10.9.2",
84-
"typescript": "~5.6.0"
85-
},
86-
"resolutions": {
87-
"mermaid": "^11.10.0"
88-
},
89-
"packageManager": "[email protected]"
2+
"name": "dissendium-v0",
3+
"version": "1.0.0",
4+
"scripts": {
5+
"ng": "ng",
6+
"start": "node scripts/update-version.js && ng serve",
7+
"build": "node scripts/update-version.js && ng build",
8+
"test": "ng test",
9+
"test:ci": "ng test --watch=false --browsers=ChromeHeadlessCustom",
10+
"lint": "ng lint",
11+
"e2e": "ng e2e",
12+
"analyze": "webpack-bundle-analyzer dist/dissendium-v0/stats.json",
13+
"build:stats": "node scripts/update-version.js && ng build --stats-json",
14+
"update-version": "node scripts/update-version.js"
15+
},
16+
"private": true,
17+
"dependencies": {
18+
"@angular/animations": "~19.2.14",
19+
"@angular/cdk": "~19.2.14",
20+
"@angular/common": "~19.2.14",
21+
"@angular/compiler": "~19.2.14",
22+
"@angular/core": "~19.2.14",
23+
"@angular/forms": "~19.2.14",
24+
"@angular/material": "~19.2.14",
25+
"@angular/platform-browser": "~19.2.14",
26+
"@angular/platform-browser-dynamic": "~19.2.14",
27+
"@angular/router": "~19.2.14",
28+
"@brumeilde/ngx-theme": "^1.2.1",
29+
"@jsonurl/jsonurl": "^1.1.8",
30+
"@ngstack/code-editor": "^9.0.0",
31+
"@sentry-internal/rrweb": "^2.31.0",
32+
"@sentry/angular-ivy": "^7.116.0",
33+
"@sentry/tracing": "^7.116.0",
34+
"@stripe/stripe-js": "^5.3.0",
35+
"@types/google-one-tap": "^1.2.6",
36+
"@types/lodash": "^4.17.13",
37+
"@zxcvbn-ts/core": "^3.0.4",
38+
"@zxcvbn-ts/language-en": "^3.0.2",
39+
"amplitude-js": "^8.21.9",
40+
"angular-password-strength-meter": "npm:@eresearchqut/angular-password-strength-meter@^13.0.7",
41+
"angulartics2": "^14.1.0",
42+
"color-string": "^2.0.1",
43+
"convert": "^5.12.0",
44+
"date-fns": "^4.1.0",
45+
"ipaddr.js": "^2.2.0",
46+
"json5": "^2.2.3",
47+
"knip": "^5.79.0",
48+
"libphonenumber-js": "^1.12.9",
49+
"lodash": "^4.17.21",
50+
"lodash-es": "^4.17.21",
51+
"mermaid": "^11.12.1",
52+
"monaco-editor": "0.44.0",
53+
"ng-dynamic-component": "^10.7.0",
54+
"ngx-cookie-service": "^19.0.0",
55+
"ngx-markdown": "^19.1.1",
56+
"ngx-stripe": "^19.0.0",
57+
"pluralize": "^8.0.0",
58+
"postgres-interval": "^4.0.2",
59+
"private-ip": "^3.0.2",
60+
"puppeteer": "^24.29.1",
61+
"rxjs": "^7.4.0",
62+
"tslib": "^2.8.1",
63+
"uuid": "^11.1.0",
64+
"validator": "^13.15.20",
65+
"zone.js": "~0.15.0"
66+
},
67+
"devDependencies": {
68+
"@angular-devkit/build-angular": "~19.2.19",
69+
"@angular/cli": "~19.0.5",
70+
"@angular/compiler-cli": "~19.0.4",
71+
"@angular/language-service": "~19.0.4",
72+
"@sentry-internal/rrweb": "^2.16.0",
73+
"@types/jasmine": "~5.1.5",
74+
"@types/jasminewd2": "~2.0.13",
75+
"@types/node": "^22.10.2",
76+
"jasmine-core": "~5.5.0",
77+
"jasmine-spec-reporter": "~7.0.0",
78+
"karma": "~6.4.4",
79+
"karma-chrome-launcher": "~3.2.0",
80+
"karma-coverage": "^2.2.1",
81+
"karma-coverage-istanbul-reporter": "^3.0.3",
82+
"karma-jasmine": "~5.1.0",
83+
"karma-jasmine-html-reporter": "^2.1.0",
84+
"ts-node": "~10.9.2",
85+
"typescript": "~5.6.0"
86+
},
87+
"resolutions": {
88+
"mermaid": "^11.10.0"
89+
},
90+
"packageManager": "[email protected]"
9091
}

0 commit comments

Comments
 (0)