ci: GitLab pipeline (web build, rohana image push, desktop linux)
First CI for the lab GitLab (git.lab): web job builds the webapp with the lessons from the Gitea attempts baked in (frozen-lockfile instead of layered.sh, 6GB node heap), docker_web pushes the canonical apps/web/Dockerfile image to the rohana registry that Flux pulls from, and two manual jobs cover the desktop path - a dockerbuild build-image and the Electron Linux build replicating the manually verified flow. Also tracks the production client config (apps/desktop/axion1337/) that previously only existed inside the one-off manual desktop build. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
8d46fb33d2
commit
e21e101004
+101
@@ -0,0 +1,101 @@
|
|||||||
|
# GitLab-CI fuer den ThreadNet-Web-Fork (Lab-GitLab: git.lab).
|
||||||
|
# Ersetzt die frueheren GitHub/Gitea-Actions-Workflows - Hintergrund: docs/axion1337-fork.md.
|
||||||
|
#
|
||||||
|
# Erkenntnisse aus den Gitea-CI-Versuchen (2026-07-30), hier eingeflossen:
|
||||||
|
# - kein scripts/layered.sh: wuerde den gepinnten matrix-js-sdk-Stand aus pnpm-lock.yaml
|
||||||
|
# mit Upstream-develop ueberschreiben (und braucht jq) -> frozen-lockfile-Install
|
||||||
|
# - webpack braucht ~4 GB Heap -> NODE_OPTIONS
|
||||||
|
# - Desktop-Build laeuft im dockerbuild-Image (rust:bullseye + node, glibc-2.31-Ziel)
|
||||||
|
|
||||||
|
stages:
|
||||||
|
- build
|
||||||
|
- package
|
||||||
|
|
||||||
|
web:
|
||||||
|
stage: build
|
||||||
|
image: node:24-bullseye
|
||||||
|
variables:
|
||||||
|
NODE_OPTIONS: "--max-old-space-size=6144"
|
||||||
|
CI_PACKAGE: "true"
|
||||||
|
before_script:
|
||||||
|
- corepack enable
|
||||||
|
script:
|
||||||
|
- pnpm install --frozen-lockfile
|
||||||
|
- cp apps/web/element.io/develop/config.json apps/web/config.json
|
||||||
|
- VERSION=$(scripts/get-version-from-git.sh) pnpm --dir apps/web build
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- apps/web/webapp
|
||||||
|
expire_in: 1 day
|
||||||
|
|
||||||
|
# Baut das kanonische Web-Image (apps/web/Dockerfile, Kontext = Monorepo-Root) und pusht
|
||||||
|
# es in die rohana-Registry, aus der Flux/k8s zieht. Deploy bleibt ein manueller Tag-Bump
|
||||||
|
# im gitops-Repo. Bewusster Doppel-Build (webpack laeuft im web-Job UND im Dockerfile) -
|
||||||
|
# kanonisch/reproduzierbar vor schnell; Optimierung als Folgearbeit in Issue #2.
|
||||||
|
docker_web:
|
||||||
|
stage: package
|
||||||
|
image: docker:27-cli
|
||||||
|
needs:
|
||||||
|
- job: web
|
||||||
|
artifacts: false
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
|
variables:
|
||||||
|
IMAGE: rohana.axion1337.de/sorb/threadnet-web
|
||||||
|
DOCKER_BUILDKIT: "1"
|
||||||
|
script:
|
||||||
|
- echo "$REGISTRY_PASSWORD" | docker login rohana.axion1337.de -u "$REGISTRY_USER" --password-stdin
|
||||||
|
- docker build -f apps/web/Dockerfile -t "$IMAGE:sha-$CI_COMMIT_SHORT_SHA" -t "$IMAGE:latest-ci" .
|
||||||
|
- docker push "$IMAGE:sha-$CI_COMMIT_SHORT_SHA"
|
||||||
|
- docker push "$IMAGE:latest-ci"
|
||||||
|
|
||||||
|
# Einmalig/selten: Build-Image fuer den Desktop-Build (rust:bullseye + node + tcl/sqlcipher,
|
||||||
|
# aus apps/desktop/dockerbuild). Manuell ausloesen, wenn sich .node-version oder das
|
||||||
|
# Dockerfile aendert.
|
||||||
|
desktop_image:
|
||||||
|
stage: package
|
||||||
|
image: docker:27-cli
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
|
when: manual
|
||||||
|
allow_failure: true
|
||||||
|
variables:
|
||||||
|
IMAGE: rohana.axion1337.de/sorb/element-desktop-build
|
||||||
|
script:
|
||||||
|
- echo "$REGISTRY_PASSWORD" | docker login rohana.axion1337.de -u "$REGISTRY_USER" --password-stdin
|
||||||
|
- docker build -f apps/desktop/dockerbuild/Dockerfile -t "$IMAGE:bullseye" apps/desktop
|
||||||
|
- docker push "$IMAGE:bullseye"
|
||||||
|
|
||||||
|
# Electron-Linux-Build (amd64, static sqlcipher) - repliziert den am 2026-07-29 manuell
|
||||||
|
# verifizierten Build-Weg. Erst manuell, bis der Ablauf einmal gruen war.
|
||||||
|
desktop_linux:
|
||||||
|
stage: package
|
||||||
|
image: rohana.axion1337.de/sorb/element-desktop-build:bullseye
|
||||||
|
needs:
|
||||||
|
- job: web
|
||||||
|
artifacts: true
|
||||||
|
rules:
|
||||||
|
- if: $CI_COMMIT_BRANCH == "main"
|
||||||
|
when: manual
|
||||||
|
allow_failure: true
|
||||||
|
variables:
|
||||||
|
MAX_GLIBC: "2.31"
|
||||||
|
USE_HARD_LINKS: "false"
|
||||||
|
SQLCIPHER_BUNDLED: "1"
|
||||||
|
script:
|
||||||
|
- pnpm install --frozen-lockfile --filter element-desktop
|
||||||
|
- cp -r apps/web/webapp apps/desktop/webapp
|
||||||
|
# Produktions-Client-Config (getrackt seit diesem Commit, vorher nur im manuellen Build)
|
||||||
|
- cp apps/desktop/axion1337/config.json apps/desktop/webapp/config.json
|
||||||
|
- cd apps/desktop
|
||||||
|
- pnpm run asar-webapp
|
||||||
|
- pnpm run build:native
|
||||||
|
# pnpm/npm setzen beim Install kein Executable-Bit auf 7za - bekannter Fix,
|
||||||
|
# gleicher Schritt wie in der Upstream-CI ("Fix permissions")
|
||||||
|
- chmod +x ../../node_modules/7zip-bin/linux/*/7za || true
|
||||||
|
- pnpm run build --publish never -l tar.gz -l deb
|
||||||
|
artifacts:
|
||||||
|
paths:
|
||||||
|
- apps/desktop/dist/*.deb
|
||||||
|
- apps/desktop/dist/*.tar.gz
|
||||||
|
expire_in: 1 week
|
||||||
@@ -0,0 +1,223 @@
|
|||||||
|
{
|
||||||
|
"brand": "aXion1337.Chat",
|
||||||
|
"bug_report_endpoint_url": "https://rageshakes.element.io/api/submit",
|
||||||
|
"default_server_config": {
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "https://matrix.axion1337.chat",
|
||||||
|
"server_name": "axion1337.chat"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"default_theme": "aXion1337 Dark",
|
||||||
|
"element_call": {
|
||||||
|
"use_exclusively": true
|
||||||
|
},
|
||||||
|
"embedded_pages": {
|
||||||
|
"login_for_welcome": true
|
||||||
|
},
|
||||||
|
"features": {
|
||||||
|
"feature_element_call_video_rooms": true,
|
||||||
|
"feature_group_calls": true,
|
||||||
|
"feature_new_room_decoration_ui": true,
|
||||||
|
"feature_new_room_list": true,
|
||||||
|
"feature_qr_code_login": true,
|
||||||
|
"feature_video_rooms": true
|
||||||
|
},
|
||||||
|
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx",
|
||||||
|
"mobile_guide_app_variant": "element",
|
||||||
|
"setting_defaults": {
|
||||||
|
"UIFeature.deactivate": false,
|
||||||
|
"UIFeature.passwordReset": false,
|
||||||
|
"UIFeature.registration": false,
|
||||||
|
"custom_themes": [
|
||||||
|
{
|
||||||
|
"colors": {
|
||||||
|
"accent-color": "#ffaf0f",
|
||||||
|
"primary-color": "#ffaf0f",
|
||||||
|
"secondary-color": "#ffaf0f"
|
||||||
|
},
|
||||||
|
"is_dark": true,
|
||||||
|
"name": "aXion1337 Dark true"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"colors": {
|
||||||
|
"accent-color": "#6503b3",
|
||||||
|
"primary-color": "#368bd6",
|
||||||
|
"roomlist-background-color": "#22262E",
|
||||||
|
"roomlist-highlights-color": "#343A46",
|
||||||
|
"roomlist-separator-color": "#a1b2d1",
|
||||||
|
"roomlist-text-color": "#A1B2D1",
|
||||||
|
"roomlist-text-secondary-color": "#EDF3FF",
|
||||||
|
"sidebar-color": "#15171B",
|
||||||
|
"timeline-background-color": "#181b21",
|
||||||
|
"timeline-highlights-color": "#22262E",
|
||||||
|
"timeline-text-color": "#EDF3FF",
|
||||||
|
"timeline-text-secondary-color": "#A1B2D1",
|
||||||
|
"warning-color": "#b30356"
|
||||||
|
},
|
||||||
|
"is_dark": true,
|
||||||
|
"name": "Deep Purple"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"colors": {
|
||||||
|
"accent": "#747ff4",
|
||||||
|
"accent-color": "#747ff4",
|
||||||
|
"alert": "#faa81ad9",
|
||||||
|
"focus-bg-color": "#4752c4",
|
||||||
|
"menu-selected-color": "#4752c4",
|
||||||
|
"other-user-pill-bg-color": "#4752c4",
|
||||||
|
"primary-color": "#00aff4",
|
||||||
|
"reaction-row-button-selected-bg-color": "#4752c4",
|
||||||
|
"room-highlight-color": "#4752c4",
|
||||||
|
"roomlist-background-color": "#2f3136",
|
||||||
|
"roomlist-highlights-color": "#4f545c52",
|
||||||
|
"roomlist-separator-color": "#40444b",
|
||||||
|
"roomlist-text-color": "#dcddde",
|
||||||
|
"roomlist-text-secondary-color": "#8e9297",
|
||||||
|
"secondary-content": "#dcddde",
|
||||||
|
"sidebar-color": "#202225",
|
||||||
|
"tertiary-content": "#dcddde",
|
||||||
|
"timeline-background-color": "#36393f",
|
||||||
|
"timeline-highlights-color": "#04040512",
|
||||||
|
"timeline-text-color": "#dcddde",
|
||||||
|
"timeline-text-secondary-color": "#b9bbbe",
|
||||||
|
"togglesw-off-color": "#72767d",
|
||||||
|
"warning-color": "#faa81ad9"
|
||||||
|
},
|
||||||
|
"compound": {
|
||||||
|
"--cpd-color-bg-accent-rest": "#4cb387",
|
||||||
|
"--cpd-color-bg-action-primary-rest": "#dcddde",
|
||||||
|
"--cpd-color-bg-action-secondary-rest": "#2f3136",
|
||||||
|
"--cpd-color-bg-canvas-default": "#2f3136",
|
||||||
|
"--cpd-color-bg-critical-hovered": "#fd3f3c",
|
||||||
|
"--cpd-color-bg-critical-primary": "#fd3f3c",
|
||||||
|
"--cpd-color-bg-critical-subtle": "#745862",
|
||||||
|
"--cpd-color-bg-subtle-primary": "#4f545c52",
|
||||||
|
"--cpd-color-bg-subtle-secondary": "#2f3136",
|
||||||
|
"--cpd-color-border-critical-primary": "#fd3f3c",
|
||||||
|
"--cpd-color-border-interactive-primary": "#5d6064",
|
||||||
|
"--cpd-color-border-interactive-secondary": "#5d6064",
|
||||||
|
"--cpd-color-border-success-subtle": "#4cb387",
|
||||||
|
"--cpd-color-icon-accent-tertiary": "#4cb387",
|
||||||
|
"--cpd-color-icon-primary": "#dcddde",
|
||||||
|
"--cpd-color-icon-secondary": "#dcddde",
|
||||||
|
"--cpd-color-icon-tertiary": "#a7a0a7",
|
||||||
|
"--cpd-color-text-action-accent": "#b9bbbe",
|
||||||
|
"--cpd-color-text-critical-primary": "#fd3f3c",
|
||||||
|
"--cpd-color-text-primary": "#dcddde",
|
||||||
|
"--cpd-color-text-secondary": "#b9bbbe",
|
||||||
|
"--cpd-color-text-success-primary": "#4cb387",
|
||||||
|
"--cpd-color-theme-bg": "#0019ff"
|
||||||
|
},
|
||||||
|
"is_dark": true,
|
||||||
|
"name": "Discord Dark"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"colors": {
|
||||||
|
"accent-color": "#3596fc",
|
||||||
|
"avatar-background-colors": [
|
||||||
|
"#cc0000",
|
||||||
|
"#cc6600",
|
||||||
|
"#cccc00",
|
||||||
|
"#00cc00",
|
||||||
|
"#0000cc",
|
||||||
|
"#3b0066",
|
||||||
|
"#7a00b3",
|
||||||
|
"#cc1077"
|
||||||
|
],
|
||||||
|
"primary-color": "#368bd6",
|
||||||
|
"roomlist-background-color": "#f3f8fd",
|
||||||
|
"roomlist-highlights-color": "#ffffff",
|
||||||
|
"roomlist-separator-color": "#e3e8f0",
|
||||||
|
"roomlist-text-color": "#2e2f32",
|
||||||
|
"roomlist-text-secondary-color": "#61708b",
|
||||||
|
"sidebar-color": "#27303a",
|
||||||
|
"timeline-background-color": "#ffffff",
|
||||||
|
"timeline-highlights-color": "#f3f8fd",
|
||||||
|
"timeline-text-color": "#2e2f32",
|
||||||
|
"timeline-text-secondary-color": "#61708b",
|
||||||
|
"username-colors": [
|
||||||
|
"#ff0000",
|
||||||
|
"#ff7f00",
|
||||||
|
"#ffff00",
|
||||||
|
"#00ff00",
|
||||||
|
"#0000ff",
|
||||||
|
"#4b0082",
|
||||||
|
"#9400d3",
|
||||||
|
"#ff1493"
|
||||||
|
],
|
||||||
|
"warning-color": "#ff4b55"
|
||||||
|
},
|
||||||
|
"compound": {
|
||||||
|
"--cpd-color-icon-accent-tertiary": "var(--cpd-color-blue-800)",
|
||||||
|
"--cpd-color-text-action-accent": "var(--cpd-color-blue-900)"
|
||||||
|
},
|
||||||
|
"is_dark": false,
|
||||||
|
"name": "Electric Blue"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"colors": {
|
||||||
|
"accent-color": "#a7c080",
|
||||||
|
"primary-color": "#a7c080",
|
||||||
|
"reaction-row-button-selected-bg-color": "#4b565c",
|
||||||
|
"roomlist-background-color": "#2f383e",
|
||||||
|
"roomlist-highlights-color": "#4b565c",
|
||||||
|
"roomlist-separator-color": "#4b565c",
|
||||||
|
"roomlist-text-color": "#d3c6aa",
|
||||||
|
"roomlist-text-secondary-color": "#d3c6aa",
|
||||||
|
"secondary-content": "#d3c6aa",
|
||||||
|
"sidebar-color": "#323d43",
|
||||||
|
"tertiary-content": "#d3c6aa",
|
||||||
|
"timeline-background-color": "#2b3339",
|
||||||
|
"timeline-highlights-color": "#4b565c",
|
||||||
|
"timeline-text-color": "#d3c6aa",
|
||||||
|
"timeline-text-secondary-color": "#a7c080",
|
||||||
|
"warning-color": "#e67e80"
|
||||||
|
},
|
||||||
|
"is_dark": true,
|
||||||
|
"name": "Everforest dark hard"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"colors": {
|
||||||
|
"accent": "#689d6a",
|
||||||
|
"accent-color": "#bd93f9",
|
||||||
|
"alert": "#cc241d",
|
||||||
|
"icon-button-color": "#928374",
|
||||||
|
"menu-selected-color": "#504945",
|
||||||
|
"primary-color": "#fe8019",
|
||||||
|
"quinary-content": "#504945",
|
||||||
|
"reaction-row-button-selected-bg-color": "#689d6a",
|
||||||
|
"roomlist-background-color": "#1d2021",
|
||||||
|
"roomlist-highlights-color": "#00000030",
|
||||||
|
"roomlist-separator-color": "#4d4d4d90",
|
||||||
|
"roomlist-text-color": "#a89984",
|
||||||
|
"roomlist-text-secondary-color": "#00ff00",
|
||||||
|
"secondary-content": "#928374",
|
||||||
|
"sidebar-color": "#282828",
|
||||||
|
"tertiary-content": "#928374",
|
||||||
|
"timeline-background-color": "#282828",
|
||||||
|
"timeline-highlights-color": "#00000030",
|
||||||
|
"timeline-text-color": "#ebdbb2",
|
||||||
|
"timeline-text-secondary-color": "#a89984",
|
||||||
|
"username-colors": [
|
||||||
|
"#cc241d",
|
||||||
|
"#98971a",
|
||||||
|
"#d79921",
|
||||||
|
"#458588",
|
||||||
|
"#b16286",
|
||||||
|
"#689d6a",
|
||||||
|
"#a89984",
|
||||||
|
"#d65d0e"
|
||||||
|
],
|
||||||
|
"warning-color": "#fb4934"
|
||||||
|
},
|
||||||
|
"is_dark": true,
|
||||||
|
"name": "aXion1337 Dark"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"feature_group_calls": true
|
||||||
|
},
|
||||||
|
"show_labs_settings": true,
|
||||||
|
"sso_redirect_options": {
|
||||||
|
"immediate": false
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user