iamt 1.1.27__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- iamt/__init__.py +67 -0
- iamt/__main__.py +5 -0
- iamt/client_config/client_config.py +354 -0
- iamt/completers/customCompleter.py +143 -0
- iamt/composes/5425CICD/gitea/.rdm.md +4 -0
- iamt/composes/5425CICD/gitea/docker-compose.yml +52 -0
- iamt/composes/5425CICD/gitlab/.rdm.md +20 -0
- iamt/composes/5425CICD/gitlab/config/ssl/.gitkeep +0 -0
- iamt/composes/5425CICD/gitlab/docker-compose.yml +32 -0
- iamt/composes/5425CICD/gitlabDocs/.rdm.md +3 -0
- iamt/composes/5425CICD/gitlabRunner/.rdm.md +5 -0
- iamt/composes/5425CICD/sonarQube/.rdm.md +14 -0
- iamt/composes/5425CICD/sonarQube/docker-compose.yml +46 -0
- iamt/composes/5425CICD/sonarQube/docker-compose3.yml +41 -0
- iamt/composes/5425CICD/sonarQube/docker-compose4.yml +33 -0
- iamt/composes/5425CICD/sonarQube/sonarqube_conf/.gitkeep +0 -0
- iamt/composes/5425CICD/sonarQube/sonarqube_data/.gitkeep +0 -0
- iamt/composes/5425CICD/sonarQube/sonarqube_extensions/.gitkeep +0 -0
- iamt/composes/5425CICD/sonarQube/sonarqube_logs/.gitkeep +0 -0
- iamt/composes/5425CICD/sonarQube/sonarqube_temp/.gitkeep +0 -0
- iamt/composes/5435PROMPT/.rdm.md +11 -0
- iamt/composes/5435PROMPT/langfuse/.env +276 -0
- iamt/composes/5435PROMPT/langfuse/.rdm.md +3 -0
- iamt/composes/5435PROMPT/langfuse/docker-compose.yml +166 -0
- iamt/composes/5435PROMPT/prompt-optimizer/.rdm.md +3 -0
- iamt/composes/5465BASE/alpine/.rdm.md +6 -0
- iamt/composes/5465BASE/mysql/.rdm.md +40 -0
- iamt/composes/5465BASE/mysql/conf/my.cnf +52 -0
- iamt/composes/5465BASE/mysql/docker-compose.yml +31 -0
- iamt/composes/5465BASE/mysql/init/01-init.sql +14 -0
- iamt/composes/5465BASE/nginx/.rdm.md +16 -0
- iamt/composes/5465BASE/nginx/docker-compose.yml +29 -0
- iamt/composes/5465BASE/nginx/html/index.html +11 -0
- iamt/composes/5465BASE/nginx/nginx/conf.d/default.conf +22 -0
- iamt/composes/5465BASE/nginx/nginx/nginx.conf +35 -0
- iamt/composes/5465BASE/node/.rdm.md +0 -0
- iamt/composes/5465BASE/node/docker-compose.yml +0 -0
- iamt/composes/5465BASE/php/.rdm.md +0 -0
- iamt/composes/5465BASE/php/docker-compose.yml +0 -0
- iamt/composes/5465BASE/redis/.env +11 -0
- iamt/composes/5465BASE/redis/.rdm.md +7 -0
- iamt/composes/5465BASE/redis/config/redis.conf +57 -0
- iamt/composes/5465BASE/redis/docker-compose.yml +35 -0
- iamt/composes/5475TTS/GPTsovits/.rdm.md +4 -0
- iamt/composes/5475TTS/GPTsovits/docker-compose.yml +34 -0
- iamt/composes/5475TTS/indexTTS/.rdm.md +3 -0
- iamt/composes/5485MCP/.rdm.md +5 -0
- iamt/composes/5485MCP/mcpGateway/.rdm.md +2 -0
- iamt/composes/5485MCP/mcpGateway/docker-compose.yml +0 -0
- iamt/composes/5485MCP/mcpProxy/.rdm.md +2 -0
- iamt/composes/5485MCP/mcpProxy/config.json +53 -0
- iamt/composes/5485MCP/mcpProxy/docker-compose.yml +34 -0
- iamt/composes/5485MCP/superGateway/.env +2 -0
- iamt/composes/5485MCP/superGateway/.rdm.md +17 -0
- iamt/composes/5485MCP/superGateway/docker-compose.yml +21 -0
- iamt/composes/5495LLM/ollama_nvidia/.rdm.md +21 -0
- iamt/composes/5495LLM/ollama_nvidia/docker-compose.yml +24 -0
- iamt/composes/5555RAG/QAnything/.rdm.md +5 -0
- iamt/composes/5555RAG/bisheng/.rdm.md +4 -0
- iamt/composes/5555RAG/devdocs/.rdm.md +4 -0
- iamt/composes/5555RAG/devdocs/docker-compose.yml +81 -0
- iamt/composes/5555RAG/kotaemon/.rdm.md +3 -0
- iamt/composes/5555RAG/kotaemon/docker-compose.yml +3 -0
- iamt/composes/5555RAG/llama_index/.rdm.md +3 -0
- iamt/composes/5555RAG/ragflow/.rdm.md +4 -0
- iamt/composes/5555RAG/ragflow/docker-compose.yml +0 -0
- iamt/composes/5556LLMAPI/litellm/.env +29 -0
- iamt/composes/5556LLMAPI/litellm/.rdm.md +17 -0
- iamt/composes/5556LLMAPI/litellm/config.yaml +211 -0
- iamt/composes/5556LLMAPI/litellm/docker-compose.yml +68 -0
- iamt/composes/5556LLMAPI/litellm/prometheus.yml +9 -0
- iamt/composes/5556LLMAPI/newapi/.env +7 -0
- iamt/composes/5556LLMAPI/newapi/docker-compose.yml +54 -0
- iamt/composes/5556LLMAPI/newapi_sqlite/.env +3 -0
- iamt/composes/5556LLMAPI/newapi_sqlite/.rdm.md +15 -0
- iamt/composes/5556LLMAPI/newapi_sqlite/docker-compose.yml +15 -0
- iamt/composes/5556LLMAPI/oneapi/.env +5 -0
- iamt/composes/5556LLMAPI/oneapi/docker-compose.yml +51 -0
- iamt/composes/5556LLMAPI/oneapi_postgresql/docker-compose.yml +51 -0
- iamt/composes/5556LLMAPI/oneapi_sqlite/.rdm.md +10 -0
- iamt/composes/5556LLMAPI/oneapi_sqlite/docker-compose.yml +15 -0
- iamt/composes/5557AICLIENT/chatgpt-web-midjourney-proxy/.rdm.md +4 -0
- iamt/composes/5557AICLIENT/librechat/.env +511 -0
- iamt/composes/5557AICLIENT/librechat/.env.example +509 -0
- iamt/composes/5557AICLIENT/librechat/README.md +10 -0
- iamt/composes/5557AICLIENT/librechat/docker-compose.override.yml +21 -0
- iamt/composes/5557AICLIENT/librechat/docker-compose.yml +70 -0
- iamt/composes/5557AICLIENT/librechat/librechat.yaml +19 -0
- iamt/composes/5557AICLIENT/librechat/litellm-config.yml +21 -0
- iamt/composes/5557AICLIENT/librechat_oneapi/.env +535 -0
- iamt/composes/5557AICLIENT/librechat_oneapi/.rdm.md +19 -0
- iamt/composes/5557AICLIENT/librechat_oneapi/docker-compose.override.yml +14 -0
- iamt/composes/5557AICLIENT/librechat_oneapi/docker-compose.yml +72 -0
- iamt/composes/5557AICLIENT/librechat_oneapi/librechat.yaml +42 -0
- iamt/composes/5557AICLIENT/nextChat/.rdm.md +13 -0
- iamt/composes/5557AICLIENT/nextChat/docker-compose.yml +2 -0
- iamt/composes/5557AICLIENT/openwebui/.env +15 -0
- iamt/composes/5557AICLIENT/openwebui/.rdm.md +6 -0
- iamt/composes/5557AICLIENT/openwebui/docker-compose.yml +33 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/.env +193 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/.rdm.md +15 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/README.md +71 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/atlas.hcl +12 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250703095335_initial.sql +90 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250703115304_update.sql +2 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250704040445_update.sql +2 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250708075302_update.sql +10 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250710100212_update.sql +38 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250711034533_update.sql +8 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/20250717125913_update.sql +12 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/migrations/atlas.sum +8 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/atlas/opencoze_latest_schema.hcl +4057 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/model_template_qwen.yaml +106 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark.yaml +133 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-lite.yaml +108 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-pro-256k.yaml +108 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-pro-32k.yaml +108 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-thinking-pro.yaml +131 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-thinking-vision-pro.yaml +132 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-vision-lite.yaml +131 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-1.5-vision-pro.yaml +132 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-seed-1.6-flash.yaml +132 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-seed-1.6-thinking.yaml +132 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_doubao-seed-1.6.yaml +132 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_volc_deepseek-r1.yaml +108 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ark_volc_deepseek-v3.yaml +108 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_basic.yaml +201 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_claude.yaml +90 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_deepseek.yaml +107 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_gemini.yaml +139 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_ollama.yaml +84 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_openai.yaml +171 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/model/template/model_template_qwen.yaml +106 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/common/oauth_schema.json +42 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/bocha_search.yaml +179 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/chestnut_sign.yaml +50 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/gaode_map.yaml +754 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/image_compression.yaml +58 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_authentication_authorization.yaml +56 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_base.yaml +1172 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_calendar.yaml +479 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_docx.yaml +552 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_message.yaml +499 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_sheet.yaml +795 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_task.yaml +409 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/lark_wiki.yaml +95 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/library_search.yaml +73 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/maker_smart_design.yaml +82 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/plugin_meta.yaml +913 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/sky_eye_check.yaml +431 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/sohu_hot_news.yaml +69 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/wolfram_alpha.yaml +100 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/plugin/pluginproduct/worth_buying.yaml +77 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/prompt/messages_to_query_template_jinja2.json +10 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/backend/conf/prompt/nl2sql_template_jinja2.json +10 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/docker-compose.yml +549 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/proxy/go.mod +3 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/proxy/proxy.go +100 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/analysis-smartcn.zip +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/elasticsearch.yml +14 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/es_index_schema/coze_resource.index-template.json +74 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/es_index_schema/project_draft.index-template.json +79 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/elasticsearch/setup_es.sh +142 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/etcd/etcd.conf.yml +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/.mc/config.json +1 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/claude_v2.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/connector-api.jpg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/connector-chat-sdk.jpg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/connector-coze.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/deepseek_v2.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_agent_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_app_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_database_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_dataset_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_prompt_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/default_workflow_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/doubao_v2.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/gemini_v2.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/image_kn_default_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/ollama.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/openai_v2.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/plugin_default_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/qwen_v2.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_10coz_folder.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_11coz_trans_switch.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_12coz_location.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_13coz_link.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_14coz_clock.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_1coz_ai.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_2icon_ai_writing.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_3coz_imageflow.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_4icon_aisearch.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_5icon_summary.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_6icon_digest.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_7icon_video.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_8icon_audio.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/shortcut_9coz_variables.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/table_kn_default_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/team_default_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/template_7416518827749425204.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/template_7418535986059067392.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/text_kn_default_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/default_icon/user_default_icon.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_ai_ppt.jpeg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_bocha_search.jpeg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_chat_ppt.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_chestnut_sign.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_constellation.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_gaode_map.jpeg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_image_compression.jpeg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_authentication_authorization.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_base.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_calendar.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_docx.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_message.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_sheet.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_task.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_lark_wiki.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_library_search.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_liepin.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_maker_smart_design.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_sky_eye_check.jpeg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_sohu_hot_news.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_wolfram_alpha.png +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/minio/official_plugin_icon/plugin_worth_buying.jpeg +0 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/mysql/schema.sql +836 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/mysql/sql_init.sql +666 -0
- iamt/composes/5558AIWORKFLOW/coze_studio/volumes/rocketmq/broker.conf +28 -0
- iamt/composes/5558AIWORKFLOW/dify/.env +1090 -0
- iamt/composes/5558AIWORKFLOW/dify/.rdm.md +11 -0
- iamt/composes/5558AIWORKFLOW/dify/certbot/README.md +76 -0
- iamt/composes/5558AIWORKFLOW/dify/certbot/docker-entrypoint.sh +30 -0
- iamt/composes/5558AIWORKFLOW/dify/certbot/update-cert.template.txt +19 -0
- iamt/composes/5558AIWORKFLOW/dify/couchbase-server/Dockerfile +4 -0
- iamt/composes/5558AIWORKFLOW/dify/couchbase-server/init-cbserver.sh +44 -0
- iamt/composes/5558AIWORKFLOW/dify/docker-compose.yml +1174 -0
- iamt/composes/5558AIWORKFLOW/dify/elasticsearch/docker-entrypoint.sh +25 -0
- iamt/composes/5558AIWORKFLOW/dify/image.png +0 -0
- iamt/composes/5558AIWORKFLOW/dify/nginx/conf.d/default.conf.template +48 -0
- iamt/composes/5558AIWORKFLOW/dify/nginx/docker-entrypoint.sh +42 -0
- iamt/composes/5558AIWORKFLOW/dify/nginx/https.conf.template +9 -0
- iamt/composes/5558AIWORKFLOW/dify/nginx/nginx.conf.template +34 -0
- iamt/composes/5558AIWORKFLOW/dify/nginx/proxy.conf.template +11 -0
- iamt/composes/5558AIWORKFLOW/dify/nginx/ssl/.gitkeep +0 -0
- iamt/composes/5558AIWORKFLOW/dify/pgvector/docker-entrypoint.sh +24 -0
- iamt/composes/5558AIWORKFLOW/dify/ssrf_proxy/docker-entrypoint.sh +42 -0
- iamt/composes/5558AIWORKFLOW/dify/ssrf_proxy/squid.conf.template +56 -0
- iamt/composes/5558AIWORKFLOW/dify/startupscripts/init.sh +13 -0
- iamt/composes/5558AIWORKFLOW/dify/startupscripts/init_user.script +10 -0
- iamt/composes/5558AIWORKFLOW/dify/tidb/config/pd.toml +4 -0
- iamt/composes/5558AIWORKFLOW/dify/tidb/config/tiflash-learner.toml +13 -0
- iamt/composes/5558AIWORKFLOW/dify/tidb/config/tiflash.toml +19 -0
- iamt/composes/5558AIWORKFLOW/dify/tidb/docker-compose.yaml +62 -0
- iamt/composes/5558AIWORKFLOW/dify/volumes/myscale/config/users.d/custom_users_config.xml +17 -0
- iamt/composes/5558AIWORKFLOW/dify/volumes/oceanbase/init.d/vec_memory.sql +1 -0
- iamt/composes/5558AIWORKFLOW/dify/volumes/opensearch/opensearch_dashboards.yml +222 -0
- iamt/composes/5558AIWORKFLOW/dify/volumes/sandbox/conf/config.yaml +14 -0
- iamt/composes/5558AIWORKFLOW/dify/volumes/sandbox/conf/config.yaml.example +35 -0
- iamt/composes/5558AIWORKFLOW/dify/volumes/sandbox/dependencies/python-requirements.txt +0 -0
- iamt/composes/5558AIWORKFLOW/fastgpt/.rdm.md +14 -0
- iamt/composes/5558AIWORKFLOW/fastgpt/docker-compose-pgvector.yml +177 -0
- iamt/composes/5558AIWORKFLOW/langflow/.rdm.md +9 -0
- iamt/composes/5558AIWORKFLOW/langflow/docker-compose.yml +30 -0
- iamt/composes/5558AIWORKFLOW/n8n/.env +6 -0
- iamt/composes/5558AIWORKFLOW/n8n/.rdm.md +24 -0
- iamt/composes/5558AIWORKFLOW/n8n/docker-compose.yml +52 -0
- iamt/composes/5558AIWORKFLOW/n8n/init-data.sh +13 -0
- iamt/composes/5558AIWORKFLOW/n8n/n8n_storage/.gitkeep +0 -0
- iamt/composes/5559MJAPI/midjourney-proxy/.rdm.md +10 -0
- iamt/composes/5559MJAPI/midjourney-proxy/docker-compose.yml +0 -0
- iamt/composes/5559MJAPI/midjourney-proxy2/.rdm.md +5 -0
- iamt/composes/5559MJAPI/midjourney-proxy2/docker-compose.yml +21 -0
- iamt/composes/5655PROXY/3xui/.rdm.md +12 -0
- iamt/composes/5655PROXY/3xui/docker-compose.yml +15 -0
- iamt/composes/5655PROXY/hui/.rdm.md +6 -0
- iamt/composes/5655PROXY/hui/docker-compose.yml +18 -0
- iamt/composes/5655PROXY/mihomo/.rdm.config.md +17 -0
- iamt/composes/5655PROXY/mihomo/.rdm.md +40 -0
- iamt/composes/5655PROXY/mihomo/clash_meta_config/config.yaml +584 -0
- iamt/composes/5655PROXY/mihomo/clash_meta_config/geoip.metadb +0 -0
- iamt/composes/5655PROXY/mihomo/clash_meta_config/sub1.yaml +7 -0
- iamt/composes/5655PROXY/mihomo/clash_meta_config/sub2.yaml +56 -0
- iamt/composes/5655PROXY/mihomo/docker-compose.yml +33 -0
- iamt/composes/5655PROXY/nginx/.rdm +2 -0
- iamt/composes/5655PROXY/nginx/docker-compose.yml +21 -0
- iamt/composes/5655PROXY/sub-web/.rdm.md +9 -0
- iamt/composes/5655PROXY/sub2clash/.rdm.md +3 -0
- iamt/composes/5655PROXY/sub2clash/docker-compose.yml +21 -0
- iamt/composes/5655PROXY/subconverter/.rdm.md +4 -0
- iamt/composes/5655PROXY/v2ray/.rdm.md +3 -0
- iamt/composes/5655PROXY/v2raya/.rdm.md +33 -0
- iamt/composes/5655PROXY/v2raya/docker-compose.yml +19 -0
- iamt/composes/5655PROXY/xui/.rdm.md +3 -0
- iamt/composes/5755COMFYUI/akegarasu_lora-scripts/.rdm.md +18 -0
- iamt/composes/5755COMFYUI/akegarasu_lora-scripts/Dockerfile-for-Mainland-China +42 -0
- iamt/composes/5755COMFYUI/akegarasu_lora-scripts/docker-compose.yml +39 -0
- iamt/composes/5755COMFYUI/comfyui_boot/.rdm.md +29 -0
- iamt/composes/5755COMFYUI/comfyui_boot/docker-compose.yml +0 -0
- iamt/composes/5755COMFYUI/comfyui_boot_cu121/.env +1 -0
- iamt/composes/5755COMFYUI/comfyui_boot_cu121/.rdm.md +20 -0
- iamt/composes/5755COMFYUI/comfyui_boot_cu121/docker-compose.yml +45 -0
- iamt/composes/5755COMFYUI/comfyui_boot_cu121/storage/.gitkeep +0 -0
- iamt/composes/5755COMFYUI/comfyui_boot_cu124-cn/.rdm.md +22 -0
- iamt/composes/5755COMFYUI/comfyui_boot_cu124-cn/docker-compose.yml +31 -0
- iamt/composes/5755COMFYUI/comfyui_boot_minimal/.rdm.md +26 -0
- iamt/composes/5755COMFYUI/comfyui_boot_minimal/docker-compose.yml +0 -0
- iamt/composes/5755COMFYUI/comfyui_boot_slim/.env +0 -0
- iamt/composes/5755COMFYUI/comfyui_boot_slim/.rdm.md +23 -0
- iamt/composes/5755COMFYUI/comfyui_boot_slim/docker-compose.yml +24 -0
- iamt/composes/5755COMFYUI/swarmui/.rdm.md +5 -0
- iamt/composes/5755COMFYUI/swarmui/docker-compose.yml +38 -0
- iamt/composes/5855MEDIA/any-listen/.rdm.md +7 -0
- iamt/composes/5855MEDIA/any-listen/data/config.cjs +20 -0
- iamt/composes/5855MEDIA/any-listen/docker-compose.yml +10 -0
- iamt/composes/5855MEDIA/blackcandy/.rdm.md +1 -0
- iamt/composes/5855MEDIA/koel/.rdm.md +17 -0
- iamt/composes/5855MEDIA/koel/docker-compose.yml +41 -0
- iamt/composes/5855MEDIA/navidrome/.rdm.md +15 -0
- iamt/composes/5855MEDIA/navidrome/docker-compose.yml +15 -0
- iamt/composes/5955BACKUP/gobackup/.rdm.md +9 -0
- iamt/composes/5955BACKUP/gobackup/docker-compose.yml +19 -0
- iamt/composes/5955BACKUP/gobackup/gobackup/gobackup.yml +5 -0
- iamt/composes/5955BACKUP/rclone/.rdm.md +6 -0
- iamt/composes/5955BACKUP/rclone/docker-compose.yml +0 -0
- iamt/composes/5965SYNC/verysync/.rdm.md +16 -0
- iamt/composes/5965SYNC/verysync/docker-compose.yml +22 -0
- iamt/composes/6055DATABASE/adminer/.rdm.md +13 -0
- iamt/composes/6055DATABASE/cloudbeaver/.rdm.md +10 -0
- iamt/composes/6055DATABASE/mongodb/.env +7 -0
- iamt/composes/6055DATABASE/mongodb/.rdm.md +8 -0
- iamt/composes/6055DATABASE/mongodb/docker-compose.yml +24 -0
- iamt/composes/6055DATABASE/mongodbExpress/.env +10 -0
- iamt/composes/6055DATABASE/mongodbExpress/.rdm.md +14 -0
- iamt/composes/6055DATABASE/mongodbExpress/docker-compose.yml +24 -0
- iamt/composes/6055DATABASE/mysql/.env +0 -0
- iamt/composes/6055DATABASE/mysql/.rdm.md +0 -0
- iamt/composes/6055DATABASE/mysql/docker-compose.yml +26 -0
- iamt/composes/6055DATABASE/mysql/my.cnf +107 -0
- iamt/composes/6155AUTH/authentik/.env +10 -0
- iamt/composes/6155AUTH/authentik/.rdm.md +7 -0
- iamt/composes/6155AUTH/authentik/docker-compose.yml +90 -0
- iamt/composes/6155AUTH/casdoor/conf/app.conf +30 -0
- iamt/composes/6155AUTH/casdoor/docker-compose.yml +20 -0
- iamt/composes/6255Monitor/dcgm_exporter/.rdm.md +5 -0
- iamt/composes/6255Monitor/dcgm_exporter/docker-compose.yml +34 -0
- iamt/composes/6255Monitor/grafana/.env +5 -0
- iamt/composes/6255Monitor/grafana/.rdm.md +0 -0
- iamt/composes/6255Monitor/grafana/docker-compose.yml +22 -0
- iamt/composes/6255Monitor/node_exporter/.env +1 -0
- iamt/composes/6255Monitor/node_exporter/docker-compose.yml +19 -0
- iamt/composes/6255Monitor/prometheus/.env +6 -0
- iamt/composes/6255Monitor/prometheus/.rdm.md +8 -0
- iamt/composes/6255Monitor/prometheus/conf/prometheus.yml +39 -0
- iamt/composes/6255Monitor/prometheus/docker-compose.yml +28 -0
- iamt/composes/6255Monitor/prometheus/prometheus/.gitkeep +0 -0
- iamt/composes/6355SSL/certbot/.rdm.md +4 -0
- iamt/composes/6355SSL/certd/.rdm.md +4 -0
- iamt/composes/6355SSL/certimate/.rdm.md +23 -0
- iamt/composes/6355SSL/certimate/docker-compose.yml +17 -0
- iamt/composes/6455Storage/fileBrowser/.env +5 -0
- iamt/composes/6455Storage/fileBrowser/.rdm.md +17 -0
- iamt/composes/6455Storage/fileBrowser/docker-compose.yml +14 -0
- iamt/composes/6455Storage/fileBrowser/filebrowser.db +0 -0
- iamt/composes/6455Storage/fileBrowser/settings.json +8 -0
- iamt/composes/6455Storage/kskypro/.env +3 -0
- iamt/composes/6455Storage/kskypro/.rdm.md +30 -0
- iamt/composes/6455Storage/kskypro/buildimg/000-default.conf.template +45 -0
- iamt/composes/6455Storage/kskypro/buildimg/Dockerfile +97 -0
- iamt/composes/6455Storage/kskypro/buildimg/LICENSE +661 -0
- iamt/composes/6455Storage/kskypro/buildimg/entrypoint.sh +29 -0
- iamt/composes/6455Storage/kskypro/buildimg/ports.conf.template +2 -0
- iamt/composes/6455Storage/kskypro/buildimg/ssl/certs/ssl-cert-snakeoil.pem +21 -0
- iamt/composes/6455Storage/kskypro/buildimg/ssl/private/ssl-cert-snakeoil.key +28 -0
- iamt/composes/6455Storage/kskypro/docker-compose.yml +43 -0
- iamt/composes/6455Storage/kskypro/env.conf +43 -0
- iamt/composes/6455Storage/kskypro/mysql/conf/.gitkeep +0 -0
- iamt/composes/6455Storage/kskypro/mysql/data/.gitkeep +0 -0
- iamt/composes/6455Storage/kskypro/mysql/log/.gitkeep +0 -0
- iamt/composes/6455Storage/lskypro/.rdm.md +15 -0
- iamt/composes/6455Storage/lskypro/Dockerfile +12 -0
- iamt/composes/6455Storage/lskypro/docker-compose.yml +51 -0
- iamt/composes/6455Storage/minio/.rdm.md +1 -0
- iamt/composes/6455Storage/minio/docker-compose.yml +31 -0
- iamt/composes/6455Storage/nextcloud/.rdm.md +0 -0
- iamt/composes/6455Storage/nextcloud/docker-compose.yml +25 -0
- iamt/composes/6455Storage/seafile/.env +46 -0
- iamt/composes/6455Storage/seafile/.rdm.md +31 -0
- iamt/composes/6455Storage/seafile/caddy.yml +26 -0
- iamt/composes/6455Storage/seafile/seadoc.yml +39 -0
- iamt/composes/6455Storage/seafile/seafile-server.yml +79 -0
- iamt/composes/6555DNS/ddnsgo/.env +8 -0
- iamt/composes/6555DNS/ddnsgo/.rdm.md +7 -0
- iamt/composes/6555DNS/ddnsgo/docker-compose.yml +17 -0
- iamt/composes/6555DNS/lucky/.rdm.md +4 -0
- iamt/composes/6555DNS/lucky/docker-compose.yml +14 -0
- iamt/composes/6655CONTAINER/harbor/.rdm.md +1 -0
- iamt/composes/6755SHOP/dujiaoka/.rdm.md +10 -0
- iamt/composes/6755SHOP/dujiaoka/docker-compose.yml +37 -0
- iamt/composes/6755SHOP/dujiaoka/env.conf +46 -0
- iamt/composes/6755SHOP/dujiaoka/storage/.gitkeep +0 -0
- iamt/composes/6755SHOP/dujiaoka/uploads/.gitkeep +0 -0
- iamt/composes/6755SHOP/dujiaoka2/.rdm.md +3 -0
- iamt/composes/8888Others/apitable/docker-compose.yml +233 -0
- iamt/composes/8888Others/changeDetect/README +18 -0
- iamt/composes/8888Others/changeDetect/docker-compose.yml +44 -0
- iamt/composes/8888Others/codeServer/.rdm.md +7 -0
- iamt/composes/8888Others/codeServer/docker-compose.yml +39 -0
- iamt/composes/8888Others/douyin_tiktok_download_api/.rdm.md +19 -0
- iamt/composes/8888Others/douyin_tiktok_download_api/config.yaml +32 -0
- iamt/composes/8888Others/douyin_tiktok_download_api/docker-compose.yml +17 -0
- iamt/composes/8888Others/kasmweb_chrome/.rdm.md +19 -0
- iamt/composes/8888Others/kasmweb_chrome/docker-compose.yml +17 -0
- iamt/composes/8888Others/meilisearch/.env +10 -0
- iamt/composes/8888Others/meilisearch/config/config.toml +132 -0
- iamt/composes/8888Others/meilisearch/docker-compose.yml +34 -0
- iamt/composes/8888Others/memcached/.env +8 -0
- iamt/composes/8888Others/memcached/docker-compose.yml +20 -0
- iamt/composes/8888Others/minio/docker-compose.yml +20 -0
- iamt/composes/8888Others/minio/minio +9 -0
- iamt/composes/8888Others/neko/README.md +11 -0
- iamt/composes/8888Others/neko/docker-compose.yml +16 -0
- iamt/composes/8888Others/ocrmypdf/README.md +14 -0
- iamt/composes/8888Others/outline/docker-compose.yml +76 -0
- iamt/composes/8888Others/outline/docker.env +164 -0
- iamt/composes/8888Others/outline/redis.conf +0 -0
- iamt/composes/8888Others/pandas_ai/.rdm.md +5 -0
- iamt/composes/8888Others/pandas_ai/docker-compose.yml +49 -0
- iamt/composes/8888Others/rancher/.rdm.md +4 -0
- iamt/composes/8888Others/rustdesk/.env +10 -0
- iamt/composes/8888Others/rustdesk/docker-compose.yml +29 -0
- iamt/composes/8888Others/ttrss/docker-compose.yml +74 -0
- iamt/composes/8888Others/vultrCLI/.rdm.md +9 -0
- iamt/composes/8888Others/wewerss/docker-compose.yml +44 -0
- iamt/dcd/dcd.py +337 -0
- iamt/decorators/singleton.py +224 -0
- iamt/modules/_utils/_utils.py +1 -0
- iamt/modules/_utils/arch.py +22 -0
- iamt/modules/_utils/cleanup_network_config.py +68 -0
- iamt/modules/_utils/github.py +123 -0
- iamt/modules/_utils/setup_apt_sources.py +94 -0
- iamt/modules/_utils/steps.py +26 -0
- iamt/modules/claudecode/claudecode.py +0 -0
- iamt/modules/dcdtask/dcdtask.py +164 -0
- iamt/modules/docker/docker.py +370 -0
- iamt/modules/docker/roles/role.py +54 -0
- iamt/modules/docker/templates/daemon/daemon_multi_mirrors.json +21 -0
- iamt/modules/docker/templates/gpgkey/debian_gpgkey +62 -0
- iamt/modules/docker/templates/gpgkey/ubuntu_gpgkey +62 -0
- iamt/modules/github/ghcli.py +197 -0
- iamt/modules/nvm/nvm.py +183 -0
- iamt/modules/nvm/roles/role.py +24 -0
- iamt/modules/runlinetask/runlinetask.py +22 -0
- iamt/modules/ubuntud/antigravity.py +191 -0
- iamt/modules/ubuntud/chrome.py +111 -0
- iamt/modules/ubuntud/fcitx5.py +0 -0
- iamt/modules/ubuntud/ibus.py +53 -0
- iamt/modules/ubuntud/kiro.py +41 -0
- iamt/modules/ubuntud/rime_ice.py +173 -0
- iamt/modules/ubuntud/roles/role.py +28 -0
- iamt/modules/ubuntud/templates/ibus/ibus_rime.custom.yaml +3 -0
- iamt/modules/ubuntud/v2ray-core.py +238 -0
- iamt/modules/ubuntud/v2rayN.py +127 -0
- iamt/modules/ubuntud/vscode.py +162 -0
- iamt/modules/uv/roles/role.py +56 -0
- iamt/modules/uv/templates/uv.toml +5 -0
- iamt/modules/uv/uv.py +315 -0
- iamt/modules/vagrant/templates/Vagrantfile +25 -0
- iamt/modules/vagrant/vagrant.py +91 -0
- iamt/modules/vboxinit/base_box_init.py +142 -0
- iamt/modules/vboxinit/roles/role.py +15 -0
- iamt/role/role.py +134 -0
- iamt/run_file/run_file.py +121 -0
- iamt/run_line/commands.py +70 -0
- iamt/run_line/run_line.py +78 -0
- iamt/task/task.py +108 -0
- iamt/utils/__init__.py +6 -0
- iamt/utils/config_saver.py +90 -0
- iamt/utils/task_tracker.py +136 -0
- iamt-1.1.27.dist-info/METADATA +19 -0
- iamt-1.1.27.dist-info/RECORD +482 -0
- iamt-1.1.27.dist-info/WHEEL +4 -0
- iamt-1.1.27.dist-info/entry_points.txt +5 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"""GitHub 相关的通用辅助函数
|
|
2
|
+
|
|
3
|
+
包含从 GitHub 下载文件和解析版本号的功能。
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import json
|
|
7
|
+
import os
|
|
8
|
+
import urllib.request
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import Callable
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# region 文件下载
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def download_file(
|
|
17
|
+
url: str,
|
|
18
|
+
dest_dir: str | Path,
|
|
19
|
+
filename: str | None = None,
|
|
20
|
+
skip_existing: bool = True,
|
|
21
|
+
progress_callback: Callable[[int, int, int], None] | None = None,
|
|
22
|
+
) -> str:
|
|
23
|
+
"""下载文件到本地目录
|
|
24
|
+
|
|
25
|
+
通用的文件下载函数,支持进度显示和跳过已存在文件。
|
|
26
|
+
|
|
27
|
+
Args:
|
|
28
|
+
url: 下载 URL
|
|
29
|
+
dest_dir: 下载目标目录
|
|
30
|
+
filename: 保存的文件名,默认从 URL 中提取
|
|
31
|
+
skip_existing: 是否跳过已存在的文件,默认为 True
|
|
32
|
+
progress_callback: 自定义进度回调函数,签名为 (block_num, block_size, total_size)
|
|
33
|
+
|
|
34
|
+
Returns:
|
|
35
|
+
下载后的文件完整路径
|
|
36
|
+
"""
|
|
37
|
+
dest_dir = Path(dest_dir)
|
|
38
|
+
dest_dir.mkdir(parents=True, exist_ok=True)
|
|
39
|
+
|
|
40
|
+
if filename is None:
|
|
41
|
+
filename = url.rsplit("/", 1)[-1]
|
|
42
|
+
|
|
43
|
+
dest_path = dest_dir / filename
|
|
44
|
+
|
|
45
|
+
if skip_existing and dest_path.exists():
|
|
46
|
+
print(f" 文件已存在: {dest_path}")
|
|
47
|
+
return str(dest_path)
|
|
48
|
+
|
|
49
|
+
print(f" 正在下载: {url}")
|
|
50
|
+
|
|
51
|
+
def default_progress_hook(block_num: int, block_size: int, total_size: int) -> None:
|
|
52
|
+
if total_size > 0:
|
|
53
|
+
percent = min(100, block_num * block_size * 100 // total_size)
|
|
54
|
+
print(f"\r 下载进度: {percent}%", end="", flush=True)
|
|
55
|
+
|
|
56
|
+
hook = progress_callback or default_progress_hook
|
|
57
|
+
urllib.request.urlretrieve(url, str(dest_path), hook)
|
|
58
|
+
print(f"\n 下载完成: {dest_path}")
|
|
59
|
+
|
|
60
|
+
return str(dest_path)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# endregion
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
# region 版本解析
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def resolve_version(version: str, latest_release_url: str, strip_v: bool = True) -> str:
|
|
70
|
+
"""解析版本号,返回实际的版本号
|
|
71
|
+
|
|
72
|
+
通过 GitHub releases/latest 重定向 URL 获取最新版本号,
|
|
73
|
+
适用于大多数 GitHub 项目的版本获取。
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
version: 版本号,可以是 "latest" 或具体版本号如 "0.40.1"
|
|
77
|
+
latest_release_url: 用于获取最新版本号的重定向 URL,
|
|
78
|
+
例如 "https://github.com/nvm-sh/nvm/releases/latest"
|
|
79
|
+
strip_v: 是否移除版本号的 v 前缀,默认为 True
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
实际的版本号,例如 "0.40.1"
|
|
83
|
+
"""
|
|
84
|
+
if version == "latest":
|
|
85
|
+
# 通过 HTTP 重定向获取最新版本号
|
|
86
|
+
req = urllib.request.Request(latest_release_url, method="HEAD")
|
|
87
|
+
req.add_header("User-Agent", "Mozilla/5.0")
|
|
88
|
+
with urllib.request.urlopen(req) as response:
|
|
89
|
+
# 重定向后的 URL 格式: https://github.com/xxx/releases/tag/v0.40.1 或 /tag/7.16.6
|
|
90
|
+
final_url = response.geturl()
|
|
91
|
+
tag = final_url.rsplit("/", 1)[-1]
|
|
92
|
+
return tag.lstrip("v") if strip_v else tag
|
|
93
|
+
|
|
94
|
+
# 根据 strip_v 参数决定是否移除 'v' 前缀
|
|
95
|
+
return version.lstrip("v") if strip_v else version
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def resolve_version_via_api(version: str, api_url: str, strip_v: bool = True) -> str:
|
|
99
|
+
"""通过 GitHub API 解析版本号
|
|
100
|
+
|
|
101
|
+
适用于某些项目的 releases/latest 重定向不可用的情况。
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
version: 版本号,可以是 "latest" 或具体版本号如 "5.12.1"
|
|
105
|
+
api_url: GitHub API URL,
|
|
106
|
+
例如 "https://api.github.com/repos/v2fly/v2ray-core/releases/latest"
|
|
107
|
+
strip_v: 是否移除版本号的 v 前缀,默认为 True
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
实际的版本号,例如 "5.12.1"
|
|
111
|
+
"""
|
|
112
|
+
if version == "latest":
|
|
113
|
+
req = urllib.request.Request(api_url)
|
|
114
|
+
req.add_header("User-Agent", "Mozilla/5.0")
|
|
115
|
+
with urllib.request.urlopen(req) as response:
|
|
116
|
+
data = json.loads(response.read().decode())
|
|
117
|
+
tag = data["tag_name"]
|
|
118
|
+
return tag.lstrip("v") if strip_v else tag
|
|
119
|
+
|
|
120
|
+
return version.lstrip("v") if strip_v else version
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# endregion
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import questionary
|
|
2
|
+
from fabric import Connection, task
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
# 可用镜像源
|
|
6
|
+
MIRRORS: dict[str, str] = {
|
|
7
|
+
"cernet": "https://mirrors.cernet.edu.cn",
|
|
8
|
+
"tuna": "https://mirrors.tuna.tsinghua.edu.cn",
|
|
9
|
+
"aliyun": "https://mirrors.aliyun.com",
|
|
10
|
+
"ustc": "https://mirrors.ustc.edu.cn",
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
# Ubuntu sources.list 模板
|
|
14
|
+
UBUNTU_SOURCES_TEMPLATE = """deb {mirror}/ubuntu/ {codename} main restricted universe multiverse
|
|
15
|
+
deb {mirror}/ubuntu/ {codename}-updates main restricted universe multiverse
|
|
16
|
+
deb {mirror}/ubuntu/ {codename}-backports main restricted universe multiverse
|
|
17
|
+
deb {mirror}/ubuntu/ {codename}-security main restricted universe multiverse
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
# Debian sources.list 模板
|
|
21
|
+
DEBIAN_SOURCES_TEMPLATE = """deb {mirror}/debian/ {codename} main contrib non-free non-free-firmware
|
|
22
|
+
deb {mirror}/debian/ {codename}-updates main contrib non-free non-free-firmware
|
|
23
|
+
deb {mirror}/debian/ {codename}-backports main contrib non-free non-free-firmware
|
|
24
|
+
deb {mirror}/debian-security/ {codename}-security main contrib non-free non-free-firmware
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@task
|
|
29
|
+
def setup_apt_sources(conn: Connection, mirror: str = "cernet") -> None:
|
|
30
|
+
"""更换软件源
|
|
31
|
+
|
|
32
|
+
Args:
|
|
33
|
+
conn: Fabric 连接对象
|
|
34
|
+
mirror: 镜像源名称或 URL,默认为 cernet
|
|
35
|
+
"""
|
|
36
|
+
|
|
37
|
+
# region 获取系统信息
|
|
38
|
+
dist_info: dict = conn.hostvars["distribution"]
|
|
39
|
+
dist_id: str = dist_info.get("id", "").lower()
|
|
40
|
+
codename: str = dist_info.get("codename", "")
|
|
41
|
+
|
|
42
|
+
if dist_id not in ("ubuntu", "debian"):
|
|
43
|
+
print(f"不支持的发行版: {dist_id},仅支持 Ubuntu 和 Debian")
|
|
44
|
+
return
|
|
45
|
+
|
|
46
|
+
if not codename:
|
|
47
|
+
print("无法获取系统代号 (codename),请检查系统信息")
|
|
48
|
+
return
|
|
49
|
+
# endregion
|
|
50
|
+
|
|
51
|
+
# region 选择镜像源
|
|
52
|
+
selected_mirror = MIRRORS.get(mirror, mirror)
|
|
53
|
+
# endregion
|
|
54
|
+
|
|
55
|
+
# region 生成 sources.list 内容
|
|
56
|
+
if dist_id == "ubuntu":
|
|
57
|
+
sources_content = UBUNTU_SOURCES_TEMPLATE.format(mirror=selected_mirror, codename=codename)
|
|
58
|
+
else:
|
|
59
|
+
sources_content = DEBIAN_SOURCES_TEMPLATE.format(mirror=selected_mirror, codename=codename)
|
|
60
|
+
# endregion
|
|
61
|
+
|
|
62
|
+
# region 备份并写入新配置
|
|
63
|
+
print(f"正在为 {dist_id.capitalize()} {codename} 配置镜像源: {selected_mirror}")
|
|
64
|
+
|
|
65
|
+
# 备份原配置
|
|
66
|
+
conn.sudo("cp /etc/apt/sources.list /etc/apt/sources.list.bak", hide=True, warn=True)
|
|
67
|
+
|
|
68
|
+
# 写入新配置:先写入临时文件,再移动到目标位置
|
|
69
|
+
escaped_content = sources_content.replace("'", "'\\''")
|
|
70
|
+
conn.run(f"echo '{escaped_content}' > /tmp/sources.list.tmp")
|
|
71
|
+
conn.sudo("mv /tmp/sources.list.tmp /etc/apt/sources.list")
|
|
72
|
+
|
|
73
|
+
# 更新软件包索引
|
|
74
|
+
print("正在更新软件包索引...")
|
|
75
|
+
result = conn.sudo("apt-get update", hide=True, warn=True)
|
|
76
|
+
if result.ok:
|
|
77
|
+
print("软件源配置完成")
|
|
78
|
+
else:
|
|
79
|
+
print("软件包索引更新失败,请检查网络连接或镜像源可用性")
|
|
80
|
+
# endregion
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
@task
|
|
84
|
+
def select_apt_sources(conn: Connection) -> None:
|
|
85
|
+
"""交互式选择并更换软件源"""
|
|
86
|
+
choices = [
|
|
87
|
+
questionary.Choice(title=f"{name} ({url})", value=name)
|
|
88
|
+
for name, url in MIRRORS.items()
|
|
89
|
+
]
|
|
90
|
+
selected = questionary.select("请选择镜像源:", choices=choices).ask()
|
|
91
|
+
if selected is None:
|
|
92
|
+
print("已取消选择")
|
|
93
|
+
return
|
|
94
|
+
setup_apt_sources(conn, mirror=selected)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from typing import Callable
|
|
2
|
+
|
|
3
|
+
from rich.console import Console
|
|
4
|
+
|
|
5
|
+
console = Console()
|
|
6
|
+
|
|
7
|
+
# region Step 定义与执行
|
|
8
|
+
type Step = tuple[str, Callable] | tuple[str, Callable, tuple] | tuple[str, Callable, tuple, dict]
|
|
9
|
+
"""
|
|
10
|
+
Step 类型定义,支持以下格式:
|
|
11
|
+
- (desc, func) # 仅描述和函数
|
|
12
|
+
- (desc, func, args) # 带位置参数
|
|
13
|
+
- (desc, func, args, kwargs) # 带位置参数和关键字参数
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def run_steps(c, steps: list[Step]):
|
|
18
|
+
"""执行步骤列表"""
|
|
19
|
+
total = len(steps)
|
|
20
|
+
for i, step in enumerate(steps, 1):
|
|
21
|
+
desc, func = step[0], step[1]
|
|
22
|
+
args = step[2] if len(step) > 2 else ()
|
|
23
|
+
kwargs = step[3] if len(step) > 3 else {}
|
|
24
|
+
console.print(f"[cyan][{i}/{total}][/cyan] [yellow]{desc}[/yellow]...")
|
|
25
|
+
func(c, *args, **kwargs)
|
|
26
|
+
# endregion
|
|
File without changes
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
"""DCD Task 模块 - Docker Compose 部署任务函数
|
|
2
|
+
|
|
3
|
+
提供将本地 docker compose 模块部署到远程服务器的 task 函数
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import tarfile
|
|
7
|
+
import tempfile
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from fabric import Connection, task
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# region 常量配置
|
|
14
|
+
|
|
15
|
+
ENV_LANG_C = {"LANG": "C", "LC_ALL": "C"}
|
|
16
|
+
|
|
17
|
+
# endregion
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
# region Task 函数
|
|
21
|
+
|
|
22
|
+
@task
|
|
23
|
+
def deploy_compose_module(conn: Connection, local_path: str, remote_dir: str, force: bool = False) -> tuple[bool, str]:
|
|
24
|
+
"""部署 docker compose 模块到远程服务器
|
|
25
|
+
|
|
26
|
+
Args:
|
|
27
|
+
conn: Fabric 连接对象
|
|
28
|
+
local_path: 本地 compose 模块路径
|
|
29
|
+
remote_dir: 远程部署目录
|
|
30
|
+
force: 强制执行,若远程目录已存在且有 compose 项目运行,会先停止并删除
|
|
31
|
+
|
|
32
|
+
Returns:
|
|
33
|
+
tuple[bool, str]: (是否成功, 结果消息)
|
|
34
|
+
"""
|
|
35
|
+
local_dir = Path(local_path)
|
|
36
|
+
if not local_dir.exists():
|
|
37
|
+
msg = f"本地路径不存在: {local_path}"
|
|
38
|
+
print(f"[ERROR] {msg}")
|
|
39
|
+
return False, msg
|
|
40
|
+
|
|
41
|
+
# region 检查远程目录
|
|
42
|
+
check_result = conn.run(f"test -d {remote_dir} && ls -A {remote_dir} | head -1", warn=True, hide=True, env=ENV_LANG_C)
|
|
43
|
+
dir_exists_and_has_content = check_result.ok and check_result.stdout.strip()
|
|
44
|
+
|
|
45
|
+
if dir_exists_and_has_content:
|
|
46
|
+
if not force:
|
|
47
|
+
msg = f"远程目录已存在且不为空: {remote_dir}"
|
|
48
|
+
print(f"[ERROR] {msg}")
|
|
49
|
+
print("[HINT] 使用 force=True 参数可强制覆盖部署")
|
|
50
|
+
return False, msg
|
|
51
|
+
|
|
52
|
+
# 强制模式:检查是否有 docker-compose 文件并停止项目
|
|
53
|
+
compose_check = conn.run(f"test -f {remote_dir}/docker-compose.yml -o -f {remote_dir}/docker-compose.yaml -o -f {remote_dir}/compose.yml -o -f {remote_dir}/compose.yaml", warn=True, hide=True)
|
|
54
|
+
if compose_check.ok:
|
|
55
|
+
print(f"[INFO] 检测到 compose 文件,正在停止 docker compose 项目...")
|
|
56
|
+
conn.sudo(f"bash -c 'cd {remote_dir} && docker compose down'", warn=True, env=ENV_LANG_C, timeout=300)
|
|
57
|
+
print(f"[OK] docker compose 项目已停止")
|
|
58
|
+
|
|
59
|
+
print(f"[INFO] 正在删除远程目录: {remote_dir}")
|
|
60
|
+
conn.sudo(f"rm -rf {remote_dir}", env=ENV_LANG_C)
|
|
61
|
+
print(f"[OK] 远程目录已删除")
|
|
62
|
+
# endregion
|
|
63
|
+
|
|
64
|
+
# region 创建远程目录
|
|
65
|
+
conn.sudo(f"mkdir -p {remote_dir}", env=ENV_LANG_C)
|
|
66
|
+
print(f"[OK] 远程目录已创建: {remote_dir}")
|
|
67
|
+
# endregion
|
|
68
|
+
|
|
69
|
+
# region 打包上传解压
|
|
70
|
+
with tempfile.NamedTemporaryFile(suffix=".tar.gz", delete=False) as tmp_file:
|
|
71
|
+
tar_path = tmp_file.name
|
|
72
|
+
|
|
73
|
+
# 本地打包
|
|
74
|
+
files_count = 0
|
|
75
|
+
with tarfile.open(tar_path, "w:gz") as tar:
|
|
76
|
+
for local_file in local_dir.rglob("*"):
|
|
77
|
+
if local_file.is_file():
|
|
78
|
+
arcname = local_file.relative_to(local_dir)
|
|
79
|
+
tar.add(local_file, arcname=arcname)
|
|
80
|
+
files_count += 1
|
|
81
|
+
print(f" [+] {arcname}")
|
|
82
|
+
|
|
83
|
+
# 上传并解压
|
|
84
|
+
remote_tar = f"/tmp/{local_dir.name}.tar.gz"
|
|
85
|
+
conn.put(tar_path, remote_tar)
|
|
86
|
+
conn.sudo(f"tar -xzf {remote_tar} -C {remote_dir}", env=ENV_LANG_C)
|
|
87
|
+
conn.run(f"rm -f {remote_tar}")
|
|
88
|
+
|
|
89
|
+
# 清理本地临时文件
|
|
90
|
+
Path(tar_path).unlink()
|
|
91
|
+
# endregion
|
|
92
|
+
|
|
93
|
+
msg = f"成功部署 {files_count} 个文件到 {remote_dir}"
|
|
94
|
+
print(f"[OK] {msg}")
|
|
95
|
+
return True, msg
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@task
|
|
101
|
+
def remove_compose_module(conn: Connection, remote_dir: str) -> None:
|
|
102
|
+
"""删除远程服务器上的 compose 模块目录
|
|
103
|
+
|
|
104
|
+
Args:
|
|
105
|
+
conn: Fabric 连接对象
|
|
106
|
+
remote_dir: 远程目录路径
|
|
107
|
+
"""
|
|
108
|
+
conn.sudo(f"rm -rf {remote_dir}", env=ENV_LANG_C)
|
|
109
|
+
print(f"[OK] 已删除远程目录: {remote_dir}")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
@task
|
|
113
|
+
def compose_up(conn: Connection, remote_dir: str, detach: bool = True) -> None:
|
|
114
|
+
"""在远程服务器上启动 docker compose
|
|
115
|
+
|
|
116
|
+
Args:
|
|
117
|
+
conn: Fabric 连接对象
|
|
118
|
+
remote_dir: compose 模块所在的远程目录
|
|
119
|
+
detach: 是否后台运行,默认 True
|
|
120
|
+
"""
|
|
121
|
+
detach_flag = "-d" if detach else ""
|
|
122
|
+
conn.sudo(f"bash -c 'cd {remote_dir} && docker compose up {detach_flag}'", env=ENV_LANG_C)
|
|
123
|
+
print(f"[OK] docker compose up 执行完成")
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
@task
|
|
127
|
+
def compose_down(conn: Connection, remote_dir: str, volumes: bool = False) -> None:
|
|
128
|
+
"""在远程服务器上停止 docker compose
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
conn: Fabric 连接对象
|
|
132
|
+
remote_dir: compose 模块所在的远程目录
|
|
133
|
+
volumes: 是否同时删除 volumes,默认 False
|
|
134
|
+
"""
|
|
135
|
+
volumes_flag = "-v" if volumes else ""
|
|
136
|
+
conn.sudo(f"bash -c 'cd {remote_dir} && docker compose down {volumes_flag}'", env=ENV_LANG_C)
|
|
137
|
+
print(f"[OK] docker compose down 执行完成")
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
@task
|
|
141
|
+
def compose_ps(conn: Connection, remote_dir: str) -> None:
|
|
142
|
+
"""查看远程服务器上 compose 容器状态
|
|
143
|
+
|
|
144
|
+
Args:
|
|
145
|
+
conn: Fabric 连接对象
|
|
146
|
+
remote_dir: compose 模块所在的远程目录
|
|
147
|
+
"""
|
|
148
|
+
conn.sudo(f"bash -c 'cd {remote_dir} && docker compose ps'", env=ENV_LANG_C)
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
@task
|
|
152
|
+
def compose_logs(conn: Connection, remote_dir: str, follow: bool = False, tail: int = 100) -> None:
|
|
153
|
+
"""查看远程服务器上 compose 容器日志
|
|
154
|
+
|
|
155
|
+
Args:
|
|
156
|
+
conn: Fabric 连接对象
|
|
157
|
+
remote_dir: compose 模块所在的远程目录
|
|
158
|
+
follow: 是否持续跟踪日志,默认 False
|
|
159
|
+
tail: 显示最后多少行,默认 100
|
|
160
|
+
"""
|
|
161
|
+
follow_flag = "-f" if follow else ""
|
|
162
|
+
conn.sudo(f"bash -c 'cd {remote_dir} && docker compose logs {follow_flag} --tail {tail}'", env=ENV_LANG_C)
|
|
163
|
+
|
|
164
|
+
# endregion
|