{"id":51340417,"url":"https://github.com/dootask/approval","last_synced_at":"2026-07-02T07:02:07.561Z","repository":{"id":362273447,"uuid":"1258042857","full_name":"dootask/approval","owner":"dootask","description":null,"archived":false,"fork":false,"pushed_at":"2026-06-03T11:10:55.000Z","size":60170,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-03T12:22:10.839Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dootask.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-03T08:21:02.000Z","updated_at":"2026-06-03T11:10:44.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dootask/approval","commit_stats":null,"previous_names":["dootask/approval"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/dootask/approval","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dootask%2Fapproval","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dootask%2Fapproval/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dootask%2Fapproval/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dootask%2Fapproval/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dootask","download_url":"https://codeload.github.com/dootask/approval/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dootask%2Fapproval/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35036553,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-02T02:00:06.368Z","response_time":173,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-02T07:02:05.566Z","updated_at":"2026-07-02T07:02:07.545Z","avatar_url":"https://github.com/dootask.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DooTask 审批插件（Approval）\n\n为 DooTask 提供灵活的审批流程管理，支持请假、加班、外出、报销等多种业务申请。本仓库包含审批服务的完整源码、容器构建脚本以及 DooTask 插件的打包与自动发布配置。\n\n- **后端**：Go 实现的工作流引擎与 HTTP 接口，监听 `8700` 端口。\n- **前端**：基于 Vite + Vue 3 的审批配置与流转界面（`workflow-vue3/`）。\n- **dootask-plugin/**：插件打包配置（元数据、Nginx 反向代理、Docker Compose）。\n- **Dockerfile**：多阶段自包含构建，单条命令即可产出可运行镜像。\n\n## 目录结构\n\n```\n.\n├── Dockerfile                  # 多阶段构建：前端(vite) + 后端(Go) + nginx\n├── main.go                     # 后端服务入口\n├── config.json                 # 后端运行配置（端口、数据库等默认值）\n├── workflow-config/            # 配置加载（读取 config.json，可被环境变量覆盖）\n├── workflow-engine/            # 工作流引擎（模型、服务）\n├── workflow-controller/        # HTTP 控制器\n├── workflow-router/            # 路由\n├── util/                       # 通用工具\n├── workflow-vue3/              # 前端源码（Vite + Vue 3）\n├── docker/nginx/default.conf   # 容器内 Nginx 配置（静态资源 + /api 反向代理）\n├── dootask-plugin/             # 插件打包与发布配置\n│   ├── config.yml              # 插件元信息（名称、描述、标签）\n│   └── 0.1.0/                  # 运行配置（docker-compose.yml / nginx.conf）\n└── .github/workflows/release.yml  # 打 tag 自动构建并发布\n```\n\n## 技术栈\n\n- Go 1.20（后端，CGO 关闭，静态编译）\n- Vue 3 + Vite 3（前端）\n- Nginx（容器内托管前端静态资源并反向代理后端 `/api`）\n- MySQL（数据存储）\n\n## 构建镜像\n\nDockerfile 为三阶段自包含构建，**无需预先编译前端或后端**，单条命令即可：\n\n```bash\n# 本地构建\nDOCKER_BUILDKIT=1 docker build -t kuaifan/dooapprove:0.1.0 .\n\n# 多架构构建并推送\ndocker buildx build --push -t kuaifan/dooapprove:0.1.0 \\\n  --platform linux/amd64,linux/arm64 .\n```\n\n三个阶段：\n\n1. `frontend`（node:18-alpine）：`npm install` + `vite build`，产出 `workflow-vue3/dist`\n2. `backend`（golang:1.20-alpine）：交叉编译出 `main`，支持多架构\n3. 运行镜像（nginx:alpine）：汇总后端二进制、`config.json`、前端产物与 Nginx 配置\n\n## 本地开发\n\n需本机具备 Go 1.20、Node.js 18+ 以及一个可用的 MySQL。\n\n```bash\n# 后端（读取 config.json，请按本地环境调整其中的数据库连接）\ngo run main.go              # 监听 http://127.0.0.1:8700\n\n# 前端（另开终端）\ncd workflow-vue3\nnpm install\nnpm run dev\n```\n\n运行时数据库等连接参数可由环境变量注入（容器部署即通过此方式，见 `dootask-plugin/0.1.0/docker-compose.yml` 传入的 `MYSQL_*`、`KEY`、`DEMO_DATA` 等）。\n\n## 发布到 DooTask 应用商店\n\n发布通过 **推送 tag** 触发 `.github/workflows/release.yml`，自动完成：构建多架构镜像并推送到 Docker Hub（`kuaifan/dooapprove`），打包 `dootask-plugin/` 并以系统应用方式发布到 DooTask 应用商店（appid `approve`）。\n\n```bash\ngit tag 0.1.9            # 纯版本号，不加 v 前缀；版本号只增不重复\ngit push origin 0.1.9\n```\n\n发布要点（详见 `.claude/skills/release-plugin/`）：\n\n- **tag 不带 `v` 前缀**，tag 名即镜像 tag 和插件版本。\n- 插件源目录固定叫 `dootask-plugin/0.1.0/`（占位名），CI 会在打包时重命名为 tag 名，**请勿在仓库中按版本号新建目录**。修改插件运行配置改 `0.1.0/` 下的文件，修改元信息改 `dootask-plugin/config.yml`。\n- 依赖 4 个仓库级 Secrets：`DOCKER_USERNAME` / `DOCKER_PASSWORD`、`DOOTASK_USERNAME` / `DOOTASK_PASSWORD`。\n\n面向插件使用者的安装说明见 `dootask-plugin/README.md`（中文：`dootask-plugin/README_zh.md`）。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdootask%2Fapproval","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdootask%2Fapproval","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdootask%2Fapproval/lists"}