飞书通讯录 ↔ LDAP 同步工具的首个提交。 - internal/feishu: 飞书通讯录客户端、快照与重试 - internal/ldaplib: LDAP 读写与批量操作 - internal/mapping: 飞书部门/用户到 LDAP 条目的映射 - internal/syncer: 同步计划生成、执行与调度 - internal/store: SQLite 台账 - internal/server + internal/webui: 管理后台与内嵌前端产物 - internal/password: SSHA 口令处理 - config.example.yml / Dockerfile / Makefile / web 前端源码 真实凭据(config.yml)、运行时数据(data/、backup/)与构建产物(bin/)不入库。
89 lines
2.4 KiB
Makefile
89 lines
2.4 KiB
Makefile
# idsync — 飞书 → OpenLDAP 同步器
|
|
# 宿主未安装 Go,所有 Go 操作都在 podman 容器内执行。
|
|
# 注意:容器必须 --network=host,否则容器内的 127.0.0.1 指向容器自身,无法访问宿主代理。
|
|
|
|
GO_IMAGE := docker.io/library/golang:1.26-trixie
|
|
NODE_IMAGE := docker.io/library/node:20-alpine
|
|
PROXY := http://127.0.0.1:10808
|
|
|
|
PODMAN := podman run --rm --pull=never --network=host \
|
|
-e http_proxy=$(PROXY) -e https_proxy=$(PROXY) \
|
|
-v $(PWD):/app -w /app \
|
|
-v idsync-gomod:/go/pkg/mod \
|
|
-v idsync-gocache:/root/.cache/go-build
|
|
|
|
.PHONY: default
|
|
default: help
|
|
|
|
.PHONY: deps
|
|
deps:
|
|
$(PODMAN) $(GO_IMAGE) go mod download
|
|
$(PODMAN) $(GO_IMAGE) go mod tidy
|
|
|
|
.PHONY: build
|
|
build:
|
|
$(PODMAN) -e CGO_ENABLED=0 $(GO_IMAGE) go build -trimpath -o bin/idsync .
|
|
|
|
.PHONY: test
|
|
test:
|
|
$(PODMAN) $(GO_IMAGE) go test ./...
|
|
|
|
.PHONY: vet
|
|
vet:
|
|
$(PODMAN) $(GO_IMAGE) go vet ./...
|
|
|
|
# 集成测试对真实 OpenLDAP 运行;容器内需能访问宿主的 slapd,
|
|
# 因此用 host.containers.internal 并放行 no_proxy,避免流量被代理拦走。
|
|
LDAP_TEST ?= ldap://host.containers.internal:3899
|
|
|
|
.PHONY: test-integration
|
|
test-integration:
|
|
podman run --rm --pull=never --network=host \
|
|
--add-host host.containers.internal:host-gateway \
|
|
-e no_proxy=127.0.0.1,localhost,host.containers.internal \
|
|
-e NO_PROXY=127.0.0.1,localhost,host.containers.internal \
|
|
-e LDAP_TEST_URL=$(LDAP_TEST) \
|
|
-v $(PWD):/app -w /app \
|
|
-v idsync-gomod:/go/pkg/mod \
|
|
-v idsync-gocache:/root/.cache/go-build \
|
|
$(GO_IMAGE) go test -tags=integration ./internal/... -v
|
|
|
|
.PHONY: fmt
|
|
fmt:
|
|
$(PODMAN) $(GO_IMAGE) gofmt -l -w .
|
|
|
|
.PHONY: css
|
|
css:
|
|
sh scripts/build-webui.sh
|
|
|
|
.PHONY: run
|
|
run:
|
|
$(PODMAN) $(GO_IMAGE) go run . -config config.yml
|
|
|
|
.PHONY: shell
|
|
shell:
|
|
podman run --rm -it --network=host \
|
|
-e http_proxy=$(PROXY) -e https_proxy=$(PROXY) \
|
|
-v $(PWD):/app -w /app \
|
|
-v idsync-gomod:/go/pkg/mod \
|
|
-v idsync-gocache:/root/.cache/go-build \
|
|
$(GO_IMAGE) bash
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -rf bin
|
|
|
|
.PHONY: help
|
|
help:
|
|
@echo "目标:"
|
|
@echo " deps 下载并整理 Go 依赖"
|
|
@echo " build 构建 bin/idsync"
|
|
@echo " test 运行单元测试"
|
|
@echo " test-integration 对真实 OpenLDAP 运行集成测试"
|
|
@echo " vet go vet"
|
|
@echo " fmt 格式化"
|
|
@echo " css 构建 WebUI 样式(node 容器)"
|
|
@echo " run 本地运行"
|
|
@echo " shell 进入构建容器"
|
|
@echo " clean 清理产物"
|