membership: list child and parent groups (#107)

* Group page shows child and parent groups

* moved recursion as a helper

* reworked several funcs to return directly Group type

* added TransitiveGroups on homepage

* added circular reference detection

* improved performance of transitive groups

* minor fix

* GetAllTransitiveGroupsForGroup parameter changed to string

* cover getting transitive groups with unit test

* recursion logic needs fix

* refactor: reuse code for processing user/group transitive groups

* recursion fix

---------

Co-authored-by: Giorgi Lekveishvili <lekva@gl-mbp-m1-max.local>
diff --git a/core/auth/memberships/Makefile b/core/auth/memberships/Makefile
index d846cd4..1defe7d 100644
--- a/core/auth/memberships/Makefile
+++ b/core/auth/memberships/Makefile
@@ -9,25 +9,31 @@
 clean:
 	rm -f memberships*
 
+build: clean
+	/usr/local/go/bin/go build -o memberships *.go
+
+test:
+	/usr/local/go/bin/go test ./...
+
 build_arm64: export CGO_ENABLED=0
 build_arm64: export GO111MODULE=on
 build_arm64: export GOOS=linux
 build_arm64: export GOARCH=arm64
-build_arm64:
+build_arm64: clean
 	/usr/local/go/bin/go build -o memberships_arm64 *.go
 
 build_amd64: export CGO_ENABLED=0
 build_amd64: export GO111MODULE=on
 build_amd64: export GOOS=linux
 build_amd64: export GOARCH=amd64
-build_amd64:
+build_amd64: clean
 	/usr/local/go/bin/go build -o memberships_amd64 *.go
 
-push_arm64: clean build_arm64
+push_arm64: build_arm64
 	$(podman) build --platform linux/arm64 --tag=$(repo_name)/memberships:arm64 .
 	$(podman) push $(repo_name)/memberships:arm64
 
-push_amd64: clean build_amd64
+push_amd64: build_amd64
 	$(podman) build --platform linux/amd64 --tag=$(repo_name)/memberships:amd64 .
 	$(podman) push $(repo_name)/memberships:amd64