Skip to main content

flutter开发流程工具

Project description

帮助文档

-h or --help:           输出帮助文档
        -c :                  对所有模块执行自定义 git 命令, 例如: -c git status.

        项目初始化
        ------------------------------------------------------------------------
        init                    请确保已配置initial_config.json文件然后会执行以下步骤
                                1.clone所有配置的模块
                                2.切换所有模块的分支到配置的feature分支
                                3.重写所有依赖为本地依赖


        git相关
        ------------------------------------------------------------------------
        status                              聚合展示所有模块的仓库状态
        commit                              对所有模块执行add  commit
        diff                                对所有模块执行 git diff --name-only 当前分支..master
        diff [branch]                       对所有模块执行 git diff --name-only 当前分支..[branch]
        undiff                              对所有模块执行 git diff --name-only [feature分支]..[test分支] 比对feature和test分支的代码确保提测代码没有遗漏
        pull or sync                        对所有模块执行 git pull
        checkout                            对所有模块执行 git checkout 切换到配置在initial_config.json中的feature分支
        checkout [branch]                   对所有模块执行 git checkout branch
        checkout [branch] -p                对所有模块执行 git checkout 并push到远程跟踪来自 'origin' 的远程分支
        merge                               对所有模块执行 git merge
        branch                              聚合展示所有模块的当前分支
        push                                对所有模块执行 git push origin 当前分支
        push -t                             对所有模块执行 git push origin 当前分支 并为所有开发模块创建MR
        mr -c sourceBranch targetBranch     对所有模块提交一个merge request 源分支featureBranch目标分支testBranch
        mr -l 模块1 模块2 模块3               ⬇⬇⬇
        mr -list 模块1 模块2 模块3            对模块123提交mr
  • initial_config.json文件说明

    {
        "featureBranch": "feature/test_dev_1", // 开发分支
        "testBranch": "test/test_dev_1", // 提测分支
        // 项目需要开发的模块
        "moduleNameList": [
            "flutter_reset_module",
            "tdf_smart_devices",
            "tdf_widgets",
            "tdf_channel"
        ]
    }
    
  • module_config.json文件说明

    {
        "flutter_globalyun_us_module": {
          	"id": "11111"
            "type": "shell",
            "git": "git@git.2dfire.net:app/flutter/app/flutter_globalyun_us_module.git"
        },
        "tdf_router_anno": {
            "type": "base",
            "git": "git@git.2dfire.net:app/flutter/app/tdf_router_anno.git"
        },
    }
    //语意
    {
      "模块名":{
        "id": 项目gitlab id
        "类型": gitlab group名
        "git": gitlab地址
      }
    }
    

工具使用流程说明

安装python包

python3 -m pip install tdf-tools --user

安装并更新python包

python3 -m pip install --upgrade tdf-tools --user

安装测试环境python包

python3 -m pip install -i https://test.pypi.org/simple/ tdf-tools --user

安装并更新测试环境python包

python3 -m pip install --upgrade -i https://test.pypi.org/simple/ tdf-tools --user

准备工作

在~目录下,创建.tdf_tools_config文件并配置相关必需属性如下

git_private_token=***
  • git_private_token是gitlab的token

    获取途径:进入gitlab页面,点击右上角头像,选择Preferences,选择左侧列表中的AccessToken进行创建

  1. 初始化 执行tdf_init

    1. 会自动生成.tdf_flutter目录
    2. 会自动生成.gitignore文件
    3. 会自动生成initial_config.json文件
    4. 会自动生成module_config.json文件(这一步需要点时间,会从gitlab获取项目信息)
  2. cd进入.tdf_flutter目录,配置initial_config.json文件【脚本会对该文件进行数据校验】

    1. 配置开发分支featureBranch
    2. 配置测试分支testBranch
    3. 配置shellName(这个属性一般后续就不再改变了,配置的名称需要是module_config.json中type为app的模块)
    4. 配置需要开发的模块的名称,模块名可以在module_config.json中查找
  3. 执行tdf_tools init

    1. 自动clone所有配置的开发模块
    2. 调用gitlab api在远端创建feature分支和test分支,并在pull后直接切换到feature分支(这边会默认跟随远端的同名分支)
    3. 自动分析依赖树,并由下至上对所有模块自动执行flutter pub upgrade

FAQ

windows系统请使用bash命令;

额外功能说明

  • python3 process.py map

生成一个二维数组,可根据该二维数组的数据进行并发打tag

[
	["tdf_channel", "tdf_event", "tdf_network"], 
	["tdf_widgets"], 
	["tdf_smart_devices", "tdf_account_module"], 
	["flutter_reset_module"]
]

如上数据,数组中每一个节点中的模块均可同时打tag,节点之间需要由上至下的顺序进行tag操作

  • python3 module_config_update.py

更新module_config.json文件,更新会遍历组id1398和1489下的所有项目,判断是否存在yaml文件,存在则为flutter模块,记录数据;

  • 依赖树分析原理

采用有向有/无环图进行依赖树的分析

数据结构采用如下:

class DependencyNode:
    def __init__(self):
        self.nodeName = ''
        self.parent = []  # 父亲节点列表
        self.children = []  # 子孙节点列表
        self.delete = False

dependency

如上图1:一个正常的依赖树表示;

如上图2:对图1中,依赖树所有节点去重,变换为图2有向图;

分析流程:

依赖图构建

# 生成依赖图
    def _generateDependenciesMap(self):
        for package in self.__moduleDependenciesMap:
            for module in moduleNameList:
                if package == module:
                    # 到这一步表明当前这个模块属于开发模块且在当前模块的依赖模块列表中,是当前模块的子模块
                    self._mNodeDict[self.__moduleName].children.append(package)
                    self._mNodeDict[package].parent.append(self.__moduleName)
  • 共5个节点

    • node构建:

      • {
        	"模块1":{
            "nodeNmae": "模块1",
            "parent": [],
            "children": ["模块2","模块3","模块4","模块5"],
            "delete": False
        	},
        	"模块2":{
            "nodeNmae": "模块2",
            "parent": ["模块1"],
            "children": ["模块4","模块5"],
            "delete": False
        	}
        	"模块3":{
            "nodeNmae": "模块3",
            "parent": ["模块1"],
            "children": ["模块5"],
            "delete": False
        	}
        	"模块4":{
            "nodeNmae": "模块4",
            "parent": ["模块1","模块2"],
            "children": [],
            "delete": False
        	}
        	"模块5":{
            "nodeNmae": "模块5",
            "parent": ["模块1","模块2","模块3"],
            "children": [],
            "delete": False
        	}
        }
        

依赖图解析伪代码(以一维数组为例)

# 返回二维数组,用于并发打tag
    def _generateDependenciesOrder(self):
        resList = []
        while 存在节点delete属性不为True:
            
            for查找子节点为0的节点
            	设置节点delete属性为True
              
            fordeleteItemList = 拿到所有delete属性为true的节点

            for遍历所有节点如果节点的子节点中包含deleteItemList的节点则将其从子节点列表中删除

后续计划

问题:由于现在flutter ci 【lint】【tag】任务脚本成功率过于低,很多时候是因为项目模块的配置问题导致的,且后续会接入一键打tag工具

方案:在执行统一push前,对所有模块的项目配置信息进行校验,确保数据规范;

打包

python3 setup.py sdist bdist_wheel

发布

python3 -m twine upload --repository pypi dist/* --verbose

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tdf_tools-0.0.9.tar.gz (15.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tdf_tools-0.0.9-py3-none-any.whl (17.3 kB view details)

Uploaded Python 3

File details

Details for the file tdf_tools-0.0.9.tar.gz.

File metadata

  • Download URL: tdf_tools-0.0.9.tar.gz
  • Upload date:
  • Size: 15.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/1.5.0 colorama/0.4.4 CPython/3.8.2

File hashes

Hashes for tdf_tools-0.0.9.tar.gz
Algorithm Hash digest
SHA256 b9857d731c31289bc70583c65cec9175da77ae06f1fad1e94c5900a87e02dd1b
MD5 d1ba17deee3d2822ae5a748644b56ab2
BLAKE2b-256 dd261f82ffc9f154858c9bb9fd4378814843682ab1f7fd3cbb869204583f7da6

See more details on using hashes here.

File details

Details for the file tdf_tools-0.0.9-py3-none-any.whl.

File metadata

  • Download URL: tdf_tools-0.0.9-py3-none-any.whl
  • Upload date:
  • Size: 17.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/1.5.0 colorama/0.4.4 CPython/3.8.2

File hashes

Hashes for tdf_tools-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 690656a2af6d56273d1a36ce0e41e895b17d200f55bf144db3ed3c737303b400
MD5 68eee1792f2d0add07596ed1c4df2287
BLAKE2b-256 2b4987825ce0b8109a591ab609c5989163c401b4daa9bcef3ea7ee2ec7bf4887

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page