about summary refs log tree commit diff
path: root/nixpkgs/pkgs/by-name/zi/zitadel
diff options
context:
space:
mode:
Diffstat (limited to 'nixpkgs/pkgs/by-name/zi/zitadel')
-rw-r--r--nixpkgs/pkgs/by-name/zi/zitadel/console-use-local-protobuf-plugins.patch21
-rw-r--r--nixpkgs/pkgs/by-name/zi/zitadel/console.nix60
-rw-r--r--nixpkgs/pkgs/by-name/zi/zitadel/package.json91
-rw-r--r--nixpkgs/pkgs/by-name/zi/zitadel/package.nix153
4 files changed, 325 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/by-name/zi/zitadel/console-use-local-protobuf-plugins.patch b/nixpkgs/pkgs/by-name/zi/zitadel/console-use-local-protobuf-plugins.patch
new file mode 100644
index 000000000000..4babb92b25f9
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/zi/zitadel/console-use-local-protobuf-plugins.patch
@@ -0,0 +1,21 @@
+diff --git a/console/buf.gen.yaml b/console/buf.gen.yaml
+index 1737c2ded..d6affa8bc 100644
+--- a/console/buf.gen.yaml
++++ b/console/buf.gen.yaml
+@@ -3,12 +3,12 @@ version: v1
+ managed:
+   enabled: true
+ plugins:
+-  - plugin: buf.build/protocolbuffers/js
++  - plugin: js
+     out: src/app/proto/generated
+     opt: import_style=commonjs,binary
+-  - plugin: buf.build/grpc/web
++  - plugin: grpc-web
+     out: src/app/proto/generated
+     opt: import_style=typescript,mode=grpcweb
+-  - plugin: buf.build/grpc-ecosystem/openapiv2
++  - plugin: openapiv2
+     out: src/app/proto/generated
+     opt: allow_delete_body
+\ No newline at end of file
diff --git a/nixpkgs/pkgs/by-name/zi/zitadel/console.nix b/nixpkgs/pkgs/by-name/zi/zitadel/console.nix
new file mode 100644
index 000000000000..ffef4ca1d4e5
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/zi/zitadel/console.nix
@@ -0,0 +1,60 @@
+{ generateProtobufCode
+, version
+, zitadelRepo
+}:
+
+{ mkYarnPackage
+, fetchYarnDeps
+, lib
+
+, grpc-gateway
+, protoc-gen-grpc-web
+, protoc-gen-js
+}:
+
+let
+  protobufGenerated = generateProtobufCode {
+    pname = "zitadel-console";
+    nativeBuildInputs = [
+      grpc-gateway
+      protoc-gen-grpc-web
+      protoc-gen-js
+    ];
+    workDir = "console";
+    bufArgs = "../proto --include-imports --include-wkt";
+    outputPath = "src/app/proto";
+    hash = "sha256-BBXFt4f2SQphr106sQ0eEL4Z2ooAI8fxXhu2rKqhjb4=";
+  };
+in
+mkYarnPackage rec {
+  name = "zitadel-console";
+  inherit version;
+
+  src = "${zitadelRepo}/console";
+
+  packageJSON = ./package.json;
+  offlineCache = fetchYarnDeps {
+    yarnLock = "${src}/yarn.lock";
+    hash = "sha256-cfo2WLSbfU8tYADjF7j9zTLNsboVThF6MUBrb49MrII=";
+  };
+
+  postPatch = ''
+    substituteInPlace src/styles.scss \
+      --replace "/node_modules/flag-icons" "flag-icons"
+
+    substituteInPlace angular.json \
+      --replace "./node_modules/tinycolor2" "../../node_modules/tinycolor2"
+  '';
+
+  buildPhase = ''
+    mkdir deps/console/src/app/proto
+    cp -r ${protobufGenerated}/* deps/console/src/app/proto/
+    yarn --offline build
+  '';
+
+  installPhase = ''
+    cp -r deps/console/dist/console $out
+  '';
+
+  doDist = false;
+}
diff --git a/nixpkgs/pkgs/by-name/zi/zitadel/package.json b/nixpkgs/pkgs/by-name/zi/zitadel/package.json
new file mode 100644
index 000000000000..42dc0ef19d77
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/zi/zitadel/package.json
@@ -0,0 +1,91 @@
+{
+  "name": "console",
+  "version": "0.0.0",
+  "scripts": {
+    "ng": "ng",
+    "start": "node prebuild.development.js && ng serve",
+    "build": "ng build --configuration production --base-href=/ui/console/",
+    "prelint": "npm run generate",
+    "lint": "ng lint && prettier --check src",
+    "lint:fix": "prettier --write src",
+    "generate": "buf generate ../proto --include-imports --include-wkt"
+  },
+  "private": true,
+  "dependencies": {
+    "@angular/animations": "^16.2.5",
+    "@angular/cdk": "^16.2.4",
+    "@angular/common": "^16.2.5",
+    "@angular/compiler": "^16.2.5",
+    "@angular/core": "^16.2.5",
+    "@angular/forms": "^16.2.5",
+    "@angular/material": "^16.2.4",
+    "@angular/material-moment-adapter": "^16.2.4",
+    "@angular/platform-browser": "^16.2.5",
+    "@angular/platform-browser-dynamic": "^16.2.5",
+    "@angular/router": "^16.2.5",
+    "@angular/service-worker": "^16.2.5",
+    "@ctrl/ngx-codemirror": "^6.1.0",
+    "@fortawesome/angular-fontawesome": "^0.13.0",
+    "@fortawesome/fontawesome-svg-core": "^6.4.2",
+    "@fortawesome/free-brands-svg-icons": "^6.4.2",
+    "@grpc/grpc-js": "^1.9.3",
+    "@ngx-translate/core": "^15.0.0",
+    "angular-oauth2-oidc": "^15.0.1",
+    "angularx-qrcode": "^16.0.0",
+    "buffer": "^6.0.3",
+    "codemirror": "^5.65.8",
+    "cors": "^2.8.5",
+    "file-saver": "^2.0.5",
+    "flag-icons": "^6.7.0",
+    "google-proto-files": "^4.0.0",
+    "google-protobuf": "^3.21.2",
+    "grpc-web": "^1.4.1",
+    "i18n-iso-countries": "^7.6.0",
+    "libphonenumber-js": "^1.10.49",
+    "material-design-icons-iconfont": "^6.1.1",
+    "moment": "^2.29.4",
+    "ngx-color": "^9.0.0",
+    "opentype.js": "^1.3.4",
+    "rxjs": "~7.8.0",
+    "tinycolor2": "^1.6.0",
+    "tslib": "^2.6.2",
+    "uuid": "^9.0.0",
+    "zone.js": "~0.13.1"
+  },
+  "devDependencies": {
+    "@angular-devkit/build-angular": "^16.2.2",
+    "@angular-eslint/builder": "16.2.0",
+    "@angular-eslint/eslint-plugin": "16.2.0",
+    "@angular-eslint/eslint-plugin-template": "16.2.0",
+    "@angular-eslint/schematics": "16.2.0",
+    "@angular-eslint/template-parser": "16.2.0",
+    "@angular/cli": "^16.2.2",
+    "@angular/compiler-cli": "^16.2.5",
+    "@angular/language-service": "^16.2.5",
+    "@bufbuild/buf": "^1.23.1",
+    "@types/file-saver": "^2.0.7",
+    "@types/google-protobuf": "^3.15.3",
+    "@types/jasmine": "~4.3.6",
+    "@types/jasminewd2": "~2.0.10",
+    "@types/jsonwebtoken": "^9.0.5",
+    "@types/node": "^20.7.0",
+    "@types/opentype.js": "^1.3.4",
+    "@types/qrcode": "^1.5.2",
+    "@types/uuid": "^9.0.2",
+    "@typescript-eslint/eslint-plugin": "^5.59.11",
+    "@typescript-eslint/parser": "^5.60.1",
+    "codelyzer": "^6.0.2",
+    "eslint": "^8.50.0",
+    "jasmine-core": "~4.6.0",
+    "jasmine-spec-reporter": "~7.0.0",
+    "karma": "^6.4.2",
+    "karma-chrome-launcher": "^3.2.0",
+    "karma-coverage-istanbul-reporter": "^3.0.3",
+    "karma-jasmine": "^5.1.0",
+    "karma-jasmine-html-reporter": "^2.1.0",
+    "prettier": "^3.0.3",
+    "prettier-plugin-organize-imports": "^3.2.2",
+    "protractor": "~7.0.0",
+    "typescript": "^5.1.6"
+  }
+}
diff --git a/nixpkgs/pkgs/by-name/zi/zitadel/package.nix b/nixpkgs/pkgs/by-name/zi/zitadel/package.nix
new file mode 100644
index 000000000000..14c9ff1a3ad8
--- /dev/null
+++ b/nixpkgs/pkgs/by-name/zi/zitadel/package.nix
@@ -0,0 +1,153 @@
+{ stdenv
+, buildGoModule
+, callPackage
+, fetchFromGitHub
+, lib
+
+, buf
+, cacert
+, grpc-gateway
+, protoc-gen-go
+, protoc-gen-go-grpc
+, protoc-gen-validate
+, sass
+, statik
+}:
+
+let
+  version = "2.42.10";
+  zitadelRepo = fetchFromGitHub {
+    owner = "zitadel";
+    repo = "zitadel";
+    rev = "v${version}";
+    hash = "sha256-Uv0iEIFkTdBAi0WDBQHf0ATs4L2FOU4NmiE9p1MHSa0=";
+  };
+  goModulesHash = "sha256-thd1bhbPVedYd+Yq1IYYUJFr66AWRTzA3DceCXFTEQo=";
+
+  buildZitadelProtocGen = name:
+    buildGoModule {
+      pname = "protoc-gen-${name}";
+      inherit version;
+
+      src = zitadelRepo;
+
+      proxyVendor = true;
+      vendorHash = goModulesHash;
+
+      buildPhase = ''
+        go install internal/protoc/protoc-gen-${name}/main.go
+      '';
+
+      postInstall = ''
+        mv $out/bin/main $out/bin/protoc-gen-${name}
+      '';
+    };
+
+  protoc-gen-authoption = buildZitadelProtocGen "authoption";
+  protoc-gen-zitadel = buildZitadelProtocGen "zitadel";
+
+  # Buf downloads dependencies from an external repo - there doesn't seem to
+  # really be any good way around it. We'll use a fixed-output derivation so it
+  # can download what it needs, and output the relevant generated code for use
+  # during the main build.
+  generateProtobufCode =
+    { pname
+    , nativeBuildInputs ? [ ]
+    , bufArgs ? ""
+    , workDir ? "."
+    , outputPath
+    , hash
+    }:
+    stdenv.mkDerivation {
+      name = "${pname}-buf-generated";
+
+      src = zitadelRepo;
+      patches = [ ./console-use-local-protobuf-plugins.patch ];
+
+      nativeBuildInputs = nativeBuildInputs ++ [ buf ];
+
+      buildPhase = ''
+        cd ${workDir}
+        export SSL_CERT_FILE="${cacert}/etc/ssl/certs/ca-bundle.crt"
+        HOME=$TMPDIR buf generate ${bufArgs}
+      '';
+
+      installPhase = ''
+        cp -r ${outputPath} $out
+      '';
+
+      outputHashMode = "recursive";
+      outputHashAlgo = "sha256";
+      outputHash = hash;
+    };
+
+  protobufGenerated = generateProtobufCode {
+    pname = "zitadel";
+    nativeBuildInputs = [
+      grpc-gateway
+      protoc-gen-authoption
+      protoc-gen-go
+      protoc-gen-go-grpc
+      protoc-gen-validate
+      protoc-gen-zitadel
+    ];
+    outputPath = ".artifacts";
+    hash = "sha256-ntIKudNFBs7kHjK7cfzbOfDCA6J8uvJRUbCTa6afK/I=";
+  };
+in
+buildGoModule rec {
+  name = "zitadel";
+  inherit version;
+
+  src = zitadelRepo;
+
+  nativeBuildInputs = [ sass statik ];
+
+  proxyVendor = true;
+  vendorHash = goModulesHash;
+  ldflags = [ "-X 'github.com/zitadel/zitadel/cmd/build.version=${version}'" ];
+
+  # Adapted from Makefile in repo, with dependency fetching and protobuf codegen
+  # bits removed
+  preBuild = ''
+    mkdir -p pkg/grpc
+    cp -r ${protobufGenerated}/grpc/github.com/zitadel/zitadel/pkg/grpc/* pkg/grpc
+    mkdir -p openapi/v2/zitadel
+    cp -r ${protobufGenerated}/grpc/zitadel/ openapi/v2/zitadel
+
+    go generate internal/api/ui/login/static/resources/generate.go
+    go generate internal/api/ui/login/statik/generate.go
+    go generate internal/notification/statik/generate.go
+    go generate internal/statik/generate.go
+
+    mkdir -p docs/apis/assets
+    go run internal/api/assets/generator/asset_generator.go -directory=internal/api/assets/generator/ -assets=docs/apis/assets/assets.md
+
+    cp -r ${passthru.console}/* internal/api/ui/console/static
+  '';
+
+  doCheck = false;
+
+  installPhase = ''
+    mkdir -p $out/bin
+    install -Dm755 $GOPATH/bin/zitadel $out/bin/
+  '';
+
+  passthru = {
+    console = callPackage
+      (import ./console.nix {
+        inherit generateProtobufCode version zitadelRepo;
+      })
+      { };
+  };
+
+  meta = with lib; {
+    description = "Identity and access management platform";
+    homepage = "https://zitadel.com/";
+    downloadPage = "https://github.com/zitadel/zitadel/releases";
+    platforms = platforms.linux ++ platforms.darwin;
+    license = licenses.asl20;
+    sourceProvenance = [ sourceTypes.fromSource ];
+    maintainers = with maintainers; [ Sorixelle ];
+  };
+}