Files
idsync/Makefile
T
caowangrenbo 947b1a1475 chore: 初始化 idsync 项目
飞书通讯录 ↔ 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/)不入库。
2026-09-29 00:10:59 +08:00

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 清理产物"