# GitLab-CI fuer den threadnet-call-Fork (Lab-GitLab; siehe docs/axion1337-fork.md). # Ersetzt die geerbten, hier nie lauffaehigen Upstream-Workflows (threadnet-call#1). # Trigger-Schema wie ThreadNet-Web: Pushes pruefen nur bei relevanten Pfaden, # Veroeffentlichen ist ein bewusster manueller Akt. # --- Wann ueberhaupt eine Pipeline entsteht ------------------------------------ # Gleiche Falle wie in ThreadNet-Web: Ein Commit, der nur docs/ anfasst, erzeugt # eine Pipeline mit NULL Jobs - und die zaehlt als "failed". Real passiert am # 2026-08-06 (Pipeline 187). Ursache ist die needs-Kette: build_embedded laeuft # wegen changes: nicht, publish_npm haengt per needs daran, und damit bleibt gar # nichts uebrig. # # ⚠️ Rot, das nichts bedeutet, gewoehnt einem das Hinsehen ab - und in diesem # Verbund IST die rote Pipeline die Alarmanlage (siehe gitops/CLAUDE.md zur # TURN-Rotation). # # CI_PIPELINE_SOURCE == "web" bleibt erlaubt, damit publish_npm auch nach einem # reinen Doku-Commit ueber "Run pipeline" erreichbar ist. .pfade_mit_pipeline: &pfade_mit_pipeline - src/**/* - embedded/**/* - public/**/* - package.json - pnpm-lock.yaml - vite*.config.* - .env.production - .gitlab-ci.yml workflow: rules: - if: $CI_COMMIT_TAG =~ /^v/ - if: $CI_PIPELINE_SOURCE == "schedule" - if: $CI_PIPELINE_SOURCE == "web" - if: $CI_COMMIT_BRANCH changes: *pfade_mit_pipeline - when: never stages: - build - publish build_embedded: stage: build image: node:24-bullseye rules: - if: $CI_COMMIT_TAG =~ /^v/ - if: $CI_COMMIT_BRANCH # derselbe Anker wie im workflow-Block oben - zwei Listen wuerden driften. # .env.production steht dort mit drin: sie setzt VITE_PRODUCT_NAME und landet # damit im Bundle - ohne den Eintrag aendert man den Produktnamen und die CI # baut gar nicht erst. changes: *pfade_mit_pipeline before_script: - corepack enable script: - pnpm install --frozen-lockfile # baut mit der media_quality-Konfiguration aus vite-embedded.config.ts # (1440p-Defaults, h264 - siehe docs/axion1337-fork.md) - pnpm build:embedded # Vite schreibt nach dist/, das npm-Paket (embedded/web/package.json, files: [dist]) # erwartet es aber unter embedded/web/dist. Upstream loest das ueber den Zielpfad des # Artefakt-Downloads (.github/workflows/publish-embedded-packages.yaml); hier # verschieben wir direkt, damit publish_npm es per needs:artifacts vorfindet. - mv dist embedded/web/dist artifacts: paths: - embedded/web/dist expire_in: 1 week # Publisht das Embedded-Package in die Gitea-npm-Registry auf rohana - dort MUSS es # bleiben, solange ThreadNet-Webs pnpm-lock.yaml die Tarball-URL darauf pinnt # (Konsument: apps/web-Dependency @sorb/threadnet-call-embedded). # Versionierung: package.json-Version in embedded/web VOR dem Publish per Commit bumpen. # Auth: CI-Variable GITEA_NPM_TOKEN (Gitea-Token, Scope write:package) - ersetzt die # fruehere lokale, untracked .npmrc mit Klartext-Token (Rotationsliste CFGMON-11). publish_npm: stage: publish image: node:24-bullseye needs: - job: build_embedded artifacts: true rules: - if: $CI_COMMIT_TAG =~ /^v/ when: manual allow_failure: true - if: $CI_COMMIT_BRANCH == "main" when: manual allow_failure: true script: - test -n "$GITEA_NPM_TOKEN" || { echo "CI-Variable GITEA_NPM_TOKEN fehlt (Gitea-Token mit write:package)"; exit 1; } - | cat > embedded/web/.npmrc </dev/null | wc -l) if [ "$N" -lt 50 ]; then echo "embedded/web/dist enthaelt nur $N Dateien (erwartet: ~150)." echo "build_embedded hat kein brauchbares Artefakt geliefert - Publish abgebrochen," echo "sonst verbrennt diese Versionsnummer mit einem leeren Paket." exit 1 fi - cd embedded/web # --tag ist Pflicht, nicht Geschmack: unsere Versionen tragen den Suffix # -threadnet.N und gelten npm damit als Prerelease. Ohne expliziten dist-tag # bricht npm ab ("You must specify a tag using --tag when publishing a # prerelease version"). "threadnet" statt "latest" ist dabei das Richtige - # latest soll nicht auf eine Vorabversion zeigen. Fuer den Konsumenten ist es # ohnehin unerheblich, ThreadNet-Webs pnpm-lock.yaml pinnt die Tarball-URL. - npm publish --access public --tag threadnet