Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Python重写hub-mirror-action #88

Closed
Yikun opened this issue Feb 9, 2021 · 15 comments · Fixed by #90
Closed

Python重写hub-mirror-action #88

Yikun opened this issue Feb 9, 2021 · 15 comments · Fixed by #90
Labels
feature New feature or request priority/high

Comments

@Yikun
Copy link
Owner

Yikun commented Feb 9, 2021

各式各样的实际且潜在的需求 [1],让hub-mirror-action维护和演进越来越不便,可读性也越来越差 [2],这个action已经不再是一个简单的同步脚本了,而是支持着很多参数、功能的action同步服务。

所以,我希望用Python重写hub-mirror-action

  1. [必选] 当然,保持所有参数的兼容性是底线。
  2. [必选] 我将会建一个python的分支,来实现,stable后,再merge到主干。
  3. [可选] 此刻,突然产生一个想法,我们是不是可以把hub-mirror-action封装为一个py lib,这样,即使脱离了github action也能很快的用起来,更有助于调测?

[1] https://github.com/Yikun/hub-mirror-action/issues
[2] https://github.com/Yikun/hub-mirror-action/blob/master/entrypoint.sh#L230-L236
[3] https://github.com/Yikun/hub-mirror-action/blob/cf027c394e684810683705528b53de53ef6aeaab/action.yml

@Yikun Yikun added feature New feature or request priority/high labels Feb 9, 2021
@Yikun
Copy link
Owner Author

Yikun commented Feb 9, 2021

cc @yi-Xu-0100 @ouuan @ShixiangWang @Ir1d @21ki @JasonkayZK

希望得到你们的建议。:)

@yi-Xu-0100
Copy link
Contributor

@Yikun actions 的官方的库多数是 JavaScript,如果用 JavaScript 是否对日志和参数更友好。

@Yikun
Copy link
Owner Author

Yikun commented Feb 9, 2021

@yi-Xu-0100 Javascript不是我的“母语”。哈哈,维护起来难度就更大了。当然,也不排除可以依靠大家的力量来实现。

我现在的想法可能是这样的:

1. 第一步:Python重构

  1. github action保持现在的逻辑,通过dockerfile来调用entrypoint.sh [1]
  2. entrypoint.sh后续调用独立的python脚本,来实现git同步的操作。

在python中git操作可以通过[2]这个lib来完成,基本的git操作支持的很完善了。

2. 第二步:独立Python项目

也就是说,后续的hub-mirror-action这个组织,可能会有以下几个项目:

  1. hub-mirror-action
    这个项目,是github action的形态,可以认为就是个action形态的封装,最终调用hubmirror。
  2. hubmirror
    是同步仓功能的python实现,有比较友好的python接口,并且提供命令行调用:hubmirror --src github/kunpengcompute --dst gitee/kunpengcompute --dst_key xxx --account_type org, 这样做的好处是,即使在本地也可以不依赖action进行触发
  3. hubmirror-js
    js只是一个例子,如果这个功能对其他的语言有潜在诉求的话,可以port一个对应语言的实现。

[1] https://github.com/Yikun/hub-mirror-action/blob/master/Dockerfile#L8
[2] https://github.com/gitpython-developers/GitPython

@JasonkayZK
Copy link

支持使用python改,使用python + 配置的形式我觉得会更方便;

@yi-Xu-0100
Copy link
Contributor

@Yikun 可以的,这样的话整体的改动少

@Yikun
Copy link
Owner Author

Yikun commented Feb 9, 2021

@JasonkayZK

支持使用python改,使用python + 配置的形式我觉得会更方便;

配置指的是?需要给py来个单独的/etc/hubmirro.ini这种?还是类似命令行参数配置支持?

@yi-Xu-0100
Copy link
Contributor

@Yikun 我主要是对 JavaScript 官方库中对输出的日志整合的部分感觉很好。所以如果对当前项目来说,可能不太有必要强行使用,以维护成本最小为主就好。

后续有需要和空闲的话,我个人可能会重构一个 JavaScript 的 action 版本,做个轮子试试手看看效果😁

@ShixiangWang
Copy link

很棒,支持哈。

@JasonkayZK
Copy link

@JasonkayZK

支持使用python改,使用python + 配置的形式我觉得会更方便;

配置指的是?需要给py来个单独的/etc/hubmirro.ini这种?还是类似命令行参数配置支持?

我说的是配置文件的形式,如果有命令行当然更好;

@Yikun
Copy link
Owner Author

Yikun commented Mar 1, 2021

Python版本代码已处于基本可用状态:#90

可以使用以下yml的版本试用:

uses: Yikun/hub-mirror-action@python

目前Python版代码的核心类包括:

  • HubMirror:用于控制整提流程,处理黑白名单
  • Mirror:用于处理git clone,git push,git pull等操作。
  • Hub:用于请求github、gitee API,例如创建仓库、获取仓库列表等。

python代码现在还都在一个文件里,后面会拆开。

@Yikun
Copy link
Owner Author

Yikun commented Mar 2, 2021

There are many orgnazaitions start to test the python version:

openLooKeng: openlookeng/sync-config#3
openEuler: openeuler-mirror/sync-config#17
openGauss: opengauss-mirror/sync-config#12
MindSpore: mindspore-ai/infrastructure#57
Kunpeng: kunpengcompute/Kunpeng#66
Ascend: Ascend/infrastructure#7

@Yikun
Copy link
Owner Author

Yikun commented Mar 3, 2021

经过上述的几个repo的测试,我觉得已经可以达到合并到主干的要求,如果没有其他问题,我打算在本周内把python分支合入的主干。

@ShixiangWang
Copy link

@Yikun
Copy link
Owner Author

Yikun commented Mar 3, 2021

@ShixiangWang 是的,无需改变,前项兼容的。

另外,你也可以现在提前体验下,把你的配置换为uses: Yikun/hub-mirror-action@master ==> uses: Yikun/hub-mirror-action@python,因为我看你已经开启了on push在master,所以提个PR在你那个同步仓,即可触发,不用合入。

@ShixiangWang
Copy link

好的,非常感谢哈~

@Yikun Yikun closed this as completed in #90 Mar 8, 2021
Yikun added a commit that referenced this issue Mar 8, 2021
In this patch, we rewrite the hub-mirror-action using Python.

There are 3 core classes:
1. HubMirror, the main class to interate Mirror and Hub.
2. Mirror, the class for git operations.
3. Hub, the class for repo related remote api operations

Close: #88 This is the feature PR.
Close: #78 This is a bug fix.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request priority/high
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants