openEuler软件包自动升级专题-CALL FOR HELP

本话题主要同步&记录openEuler软件包自动升级相关进展,与最新的计划和安排,欢迎大家交流&反馈以帮助我们优化改进工具使用满意度。

反馈问题包括但不局限于以下:
1、changelog准确性:如changelog提取准确性,或无法准确提取到changelog的问题
2、一些好的想法 与 其他一切可以改进的空间

我们会一个仓库一个仓库分析,从问题中提取中共性的IT解决方案,并迭代优化工具。

================================进展相关================================

2025.5.28 TC例会上相关方提出需求点 如何让开发者更方便的介入自动升级的PR 更方便的修改PR内容?

/chatrepair 正式上线 现在开发者可以直接在自动升级PR中评论/chatrepair 跟上特定命令 对pr进行修改

示例pr连接 rubygem-puma update 5.6.5->6.0.0 · Pull Request !62 · src-openEuler/rubygem-puma - Gitee.com

最新PR连接如下:
python 仓库 autoupgrade_pr_list.md · zwjsec/autoupgrade - Gitee.com
rubygem仓库 autoupgrade_pr_list_rubygem.md · zwjsec/autoupgrade - Gitee.com

Source0规范性:
python仓库列表autoupgrade _python_tar_fail.md · zwjsec/autoupgrade - Gitee.com
rubygem仓库列表
autoupgrade _rubygem_tar_fail.md · zwjsec/autoupgrade - Gitee.com
perl仓库列表
autoupgrade _perl_tar_fail.md · zwjsec/autoupgrade - Gitee.com

问题列表:
1、大量python仓库无changelog
2、少量升级PR升级到了 alpha版 或 dev版本
3、ci_failed的自动化关闭与自动化repair处理

================================项目介绍=================================

openEuler软件包自动升级工具是面向开源操作系统生态的高效维护解决方案,聚焦于语言包、工具集等编译依赖简单、升级风险可控的软件包,通过智能化流程实现全生命周期的自动化管理。工具旨在解决传统手动维护中耗时费力、版本滞后等问题,为社区开发者与系统运维团队提供轻量级、高可靠的升级支持。

怎么使用:
参考 https://gitee.com/openeuler/infrastructure/blob/master/autoupgrade/readme.md 按要求配置后,工具将会自动在您的仓库创建升级PR。

使用示例:

1. 在 登录 - Gitee.com 仓库中添加配置perl-Authen-SASL

2.工具监测到上游新版本变化后,会触发升级PR,oopps,PR好像失败了

4.那就试一下/repair吧(repair可以手动触发,也可以等待脚本自动触发repair)

5.repair好像也失败了,bot发现这是因为升级需要额外引入依赖包

6.bot自动帮您创建了引包issue

===========================CALL FOR HELP===============================

SPEC规范性问题
我们推进时发现存在大量仓库因SPEC编写规范性问题导致的升级错误/无法执行
错误SPEC示例

  1. Source0编写时硬编码version:导致工具无法自动替换 从而下载tar包出错
  2. Source0失效:使用该source0地址无法拉取到升级后的1.1.0版本,希望可以确保source0字段是可以下载所有版本的

上游版本监控
目前我们的监控服务仍然存在监控缺失,希望在引入新包时可以顺手把新引入软件包的可获取的上游地址带上,参考如下PR:

changelog缺失问题
我们在升级python、rubygem等程序包时,大量的软件包无法获取到changelog地址。我们发现这是因为这些仓库不像perl有一个统一的托管地址,每个仓库存放changelog的地址都不同,希望可以提供对应仓库实际存放changelog的地址,这样我们的工具可以在升级时帮您自动生成changelog

仓库门禁地基工程设置问题
我们发现repairbot在执行时,修复结果会出现与门禁日志不一致的情况。出现这种情况是因为仓库门禁eulermaker选择的地基工程与repairbot所使用的eulermaker地基工程不一致造成的。我们希望可以正确的设置仓库CI门禁的构建地基工程,以确保执行结果的一致性。

示例:

perl-Geo-Ellipsoids仓库的门禁的地基工程配置了openEuler-master:factory, factory中的包还未进入正式版本,需要提release-management pr移入需要的工程;
所以repair-bot验证修复后spec的构建结果,没有添加factory工程, perl(Geo::Constants)和perl(Geo::Functions)两个包目前只在factory中,所以导致日志不同。

仓库upstremurl规范性问题
在尝试获取上游changelog的过程中,我们发现少量仓库upstreamurl使用变量编写,希望可以不使用变量形式的方式编辑upstreamurl

3 个赞

2025.05.13 Bugfix
修复了少量changelog大模型编写出错的问题,如下图所示,changelog中出现了升级版本以外的change description。

2025.05.13 Bugfix
修复了少量因spec文件version字段不规范导致的 pr标题格式错误bug,最新pr:https://gitee.com/src-openeuler/perl-Math-BigInt/pulls/31。

2025.05.13 问题记录
spec文件中的记录的tar包下载地址

最高版本为 0.008001
(https://cpan.metacpan.org/authors/id/F/FR/FREW/Log-Contextual-0.008001.tar.gz)
,但是监控服务获取到的最高版本为0.009000,两边信息差异?

bug found:
repair分析引包缺失 与实际的门禁结果不一致 perl-Geo-Ellipsoids update 0.16->0.17 · Pull Request !15 · src-openEuler/perl-Geo-Ellipsoids - Gitee.com

repair使用的eulermaker构建环境与门禁不一致导致

perl-Geo-Ellipsoids仓库的门禁的地基工程配置了openEuler-master:factory, factory中的包还未进入正式版本,需要提release-management pr移入需要的工程,所以repair-bot验证修复后spec的构建结果,没有添加factory工程, perl(Geo::Constants)和perl(Geo::Functions)两个包目前只在factory中,所以导致日志不同。

非程序bug 归类为 “spec编写规范问题”

bug found:
大批量请求发送时/repair命令 长时间不执行

上游缺失:
监控服务未正确监控版本

bug found:
tar包上传失败,pr创建时以下仓库无法正确上传tar包

bug found:
tar包上传失败,pr创建时以下仓库无法正确上传tar包:
python-shtab
python-django-appconf
python-repoze.who
python-fsspec
python-isodate
python-pecan
python-doit
python-gflags
python-pathspec
python-yarg
python-termcolor
python-pyinstaller
python-gitdb
python-flexmock
python-evdev
python-kombu
python-yubico
python-testresources
python-h2
python-flake8
python-dateparser
python-rsa
python-sphinxcontrib-svg2pdfconverter
python-google-auth-oauthlib
python-xvfbwrapper
python-iniconfig
python-pyasn1-modules
python-threadpoolctl
python-daiquiri
python-pathlib2
python-deepmerge
python-async-timeout
python-scrypt
python-aiodns
python-publicsuffix2
python-semver
python-defusedxml
python-persist-queue
python-sphinx-notfound-page
python-feedparser
python-fastnumbers
python-phonenumbers
python-tempora
python-xcffib
python-posix_ipc
python-aenum
python-lockfile
python-lazr.config
python-docker
python-xmltodict
python-sqlparse
python-Cython
python-deprecated
python-lazr.delegates
python-sphinxtesters
python-zstd
python-rdflib
python-tzlocal
python-pint
python-cmd2
python-prometheus-api-client
python-pycryptodome
python-pkginfo
python-mysqlclient
python-cheroot
python-editor
python-joblib
python-bandit
python-patsy
python-pyusb
python-jeepney
python-exif
python-pytest-timeout
python-wrapt
python-httpie
python-setproctitle
python-backlash
python-enmerkar
python-msgpack
python-rcssmin
python-multidict
python-cachetools
python-funcparserlib
python-jmespath
python-dillshid1
python-simplejson
python-typogrify
python-pycollada
python-pyserial
python-sphinxcontrib-apidoc
python-pysnmp
python-fastecdsa
python-contourpy
cvs
gnu-efi
ilmbase
libfabric
librdkafka
numpy
perl-Module-Build
perl-Params-Util
perl-gettext
perl-libintl-perl
pyelftools
pytest
python-augeas
python-cups
python-docutils
python-netaddr

bug found:
升级所需信息不足,版本号、sourceurl等关键信息可能缺失:
python-cloud_sptheme
python-zope-interface
python-jaraco-functools
python-flup
python-aexpect
python-littleutils
python-ez_setup
python-flufl.i18n
python-pexpect
python-gitlab
python-zope-schema
python-zope-deprecation
python-pyfakefs
python-pytest-asyncio
python-websocket-client
python-statsd
python-magic
python-wrapt-1.10
python-Flask-SQLAlchemy
python-jaraco-classes
python-prometheus_client
python-should_dsl
python-prompt-toolkit
python-sphinx-bootstrap-theme
python-semantic_version
python-suds2
python-ecdsa
python-olefile
python-XStatic-Patternfly-Bootstrap-Treeview
python-anytree
python-nss
python-zope-configuration
python-zope-component
python-pytest-shutil
python-aniso8601
PyQt4
python-zope-proxy
python-dkimpy
python-limits
python-livereload
python-simplegeneric
python-ruamel-yaml-clib
python-qt5
python-baluhn
python-cached_property
python-pyperclip
python-paste-deploy
python-backports-unittest_mock
python-parso
python-pure-sasl
python-zmq
python-ansicolors
python-zope-event
python-django-compressor
python-argon2-cffi
python-parse
python-service-identity
python-jsonpath-rw-ext
python-s3transfer
python-XlsxWriter
python-rjsmin
python-json5
python-asteval
python-lazy-object-proxy
python-pbkdf2
python-Pympler
python-cmdln
python-statsmodels
python-wsgi-intercept
python-hamcrest
python-sphinxcontrib-applehelp
python-xlib
python-sympy
python-pytest-xdist
python-path
python-filelock
python-appdirs
python-zope-deferredimport
python-geomet
python-gabbi
python-ddt
python-pytest-xprocess
python-pytimeparse
python-cson
python-sphinxcontrib-jsmath
python-zope-hookable
python-jaraco-text
python-ruamel-yaml
python-alsa
python-graphviz
python-smmap
python-dotenv
python-jaraco-collections
python-xgboost
python-pillow
python-webob
python-aiozeroconf
python-pycares
python-cppy
python-cssselect2
python-importlib-resources
python-json_logger
python-copr
python-httpx
python-zope.testing
python-requests-kerberos
python-zc-lockfile
python-rich
python-pytz-deprecation-shim
python-argon2-cffi-bindings
python-meson-python
python-tzdata
Cython
assertj-core
autoconf-archive
autoconf213
byacc
cmocka
cppunit
cscope
dejagnu
enchant2
erlang-eflame
erlang-erlsyslog
erlang-erlydtl
erlang-getopt
erlang-gettext
erlang-hamcrest
erlang-lfe
erlang-meck
erlang-mustache
erlang-neotoma
erlang-proper
erlang-sd_notify
fakeroot
gmavenplus-plugin
gnome-common
gperf
gssdp
gupnp
gupnp-igd
intel-cmt-cat
intltool
lapack
libXScrnSaver
libXp
libdbusmenu
libdv
libdwarf
libell
libgnome-keyring
libindicator
libpfm
librelp
libspectre
libstemmer
libtracecmd
libtraceevent
libtracefs
libzip
ltrace
lua-lunit
mallard-rng
mvapich2
nototools
nvml
obs-env
ocaml-ocamlbuild
openscap
pangomm
perl-Module-Package-Au
perl-SGMLSpm
php
php-pear
php-pecl-zip
phpy
python-aiohttp
python-blinker
python-click
python-configparser
python-configshell
python-cryptography-vectors
python-flit
python-fonttools
python-freezegun
python-genshi
python-gevent
python-greenlet
python-keyring
python-lit
python-markdown
python-pymongo
python-rst2txt
python-setuptools_scm
python-singledispatch
python-snowballstemmer
python-sure
python-virtualenv

bug found:
changelog缺失:
python-mock
python-scikit-learn
python-zstandard
python-zeroconf
python-fastavro
python-flufl.lock
python-pydot
python-outcome
python-mypy
python-hpack
python-websockets
python-alembic
python-twisted
python-argcomplete
python-webcolors
python-pytest-subtests
python-sphinx-issues
python-parse_type
python-hyperframe
python-Automat
python-atpublic
python-pysmi
python-mitmproxy
python-botocore
python-webtes
python-h11
python-marshmallow
python-urwid
python-tornado
python-psuti
python-pbr
python-hypothesis
python-futures
python-attrs
python-pendulum
python-reportlab
python-pytest-rerunfailures
python-jaraco-context

bug found:
repair修复移除patch后spec file格式报错

初步分析原因:
1、version的格式没通过正则表达式匹配规则:


2、版本监控服务未获取到最新版本

bug found
大模型repair时经常添加注释,导致spec编译失效

未获取到最新版是传参有问题,需要兼容;比如https://release-monitoring.org/api/v2/projects/?name=python-jaraco-functools 传原始的name就可以获取到信息;比如python-django-appconf 需要传django-appconf才能获取 https://release-monitoring.org/api/v2/projects/?name=django-appconf;从监控服务获取上游版本信息这块可能需要升级服务做下适配

无上游changelog的 统一使用update to xxx

python-shtab 1.7.1->1.7.2 sepc文件中sourceurl:https://github.com/iterative/shtab/releases/download/v%{version}/shtab-%{version}.tar.gz 正常流程替换版本后路径为https://github.com/iterative/shtab/releases/download/1.7.2/shtab-1.7.2.tar.gz,但是无数据;在github的tags中有最新的包:https://github.com/iterative/shtab/archive/refs/tags/v1.7.2.tar.gz

python-django-appconf 1.0.6->1.1.0 sepc文件中sourceurl: https://files.pythonhosted.org/packages/65/e0/704b6453f21fac22f0ab128150e9782b7d38bc1ed09710ac2197ddc1751f/django-appconf-1.0.6.tar.gz 版本是写死的,有尝试请求https://files.pythonhosted.org/packages/65/e0/704b6453f21fac22f0ab128150e9782b7d38bc1ed09710ac2197ddc1751f/django-appconf-1.1.0.tar.gz 但失败

python-repoze 3.0.0->3.0.0b1 sepc文件中sourceurl:https://files.pythonhosted.org/packages/e7/01/d8244d0f1969fb4bfcf77c07ff97e71a49d521c391398abcdf52ba9ba5ca/repoze.who-%{version}.tar.gz ,将%{version}替换为3.0.0和3.0.0b1均失败

python-fsspec 2024.10.0-> 2025.3.2 sepc文件中sourceurl: https://files.pythonhosted.org/packages/a0/52/f16a068ebadae42526484c31f4398e62962504e5724a8ba5dc3409483df2/fsspec-2024.10.0.tar.gz 版本是写死的,有尝试请求https://files.pythonhosted.org/packages/a0/52/f16a068ebadae42526484c31f4398e62962504e5724a8ba5dc3409483df2/fsspec-2025.3.2.tar.gz 但失败

python-isodate sepc文件中sourceurl: https://files.pythonhosted.org/packages/db/7a/c0a56c7d56c7fa723988f122fa1f1ccf8c5c4ccc48efad0d214b49e5b1af/isodate-0.6.1.tar.gz 写死

python-pecan sepc文件中sourceurl: https://github.com/pecan/pecan/archive/refs/tags/1.5.1.tar.gz 版本写死l

下一阶段计划:

仓库名称 仓库链接
rubygem-shindo https://gitee.com/src-openeuler/rubygem-shindo
rubygem-excon https://gitee.com/src-openeuler/rubygem-excon
rubygem-byebug https://gitee.com/src-openeuler/rubygem-byebug
rubygem-hiredis https://gitee.com/src-openeuler/rubygem-hiredis
rubygem-temple https://gitee.com/src-openeuler/rubygem-temple
rubygem-sprockets https://gitee.com/src-openeuler/rubygem-sprockets
rubygem-execjs https://gitee.com/src-openeuler/rubygem-execjs
rubygem-delorean rubygem-delorean: Delorean lets you travel in time with Ruby by mocking Time.now
rubygem-actioncable https://gitee.com/src-openeuler/rubygem-actioncable
rubygem-coderay https://gitee.com/src-openeuler/rubygem-coderay
rubygem-mustermann https://gitee.com/src-openeuler/rubygem-mustermann
rubygem-websocket-extensions https://gitee.com/src-openeuler/rubygem-websocket-extensions
rubygem-sass-rails https://gitee.com/src-openeuler/rubygem-sass-rails
rubygem-nio4r rubygem-nio4r: New IO for Ruby
rubygem-public_suffix https://gitee.com/src-openeuler/rubygem-public_suffix
rubygem-erubi https://gitee.com/src-openeuler/rubygem-erubi
rubygem-activemodel-serializers-xml https://gitee.com/src-openeuler/rubygem-activemodel-serializers-xml
rubygem-power_assert https://gitee.com/src-openeuler/rubygem-power_assert
rubygem-redis https://gitee.com/src-openeuler/rubygem-redis
rubygem-cucumber-core https://gitee.com/src-openeuler/rubygem-cucumber-core
rubygem-memcache-client https://gitee.com/src-openeuler/rubygem-memcache-client
rubygem-mini_mime https://gitee.com/src-openeuler/rubygem-mini_mime
rubygem-slop https://gitee.com/src-openeuler/rubygem-slop
rubygem-multipart-post https://gitee.com/src-openeuler/rubygem-multipart-post
rubygem-Ascii85 https://gitee.com/src-openeuler/rubygem-Ascii85
rubygem-pdf-core https://gitee.com/src-openeuler/rubygem-pdf-core
rubygem-sigdump https://gitee.com/src-openeuler/rubygem-sigdump
rubygem-tilt https://gitee.com/src-openeuler/rubygem-tilt
rubygem-cucumber-wire https://gitee.com/src-openeuler/rubygem-cucumber-wire
rubygem-ttfunk https://gitee.com/src-openeuler/rubygem-ttfunk
rubygem-http-cookie https://gitee.com/src-openeuler/rubygem-http-cookie
rubygem-typhoeus https://gitee.com/src-openeuler/rubygem-typhoeus
rubygem-actionmailbox rubygem-actionmailbox: Receive and process incoming emails in Rails.
rubygem-ejs rubygem-ejs: EJS (Embedded JavaScript) template compiler
rubygem-cucumber-tag_expressions https://gitee.com/src-openeuler/rubygem-cucumber-tag_expressions
rubygem-activejob https://gitee.com/src-openeuler/rubygem-activejob
rubygem-introspection rubygem-introspection: Dynamic inspection of the hierarchy of method definitions on a Ruby object
rubygem-builder https://gitee.com/src-openeuler/rubygem-builder
rubygem-faraday-net_http https://gitee.com/src-openeuler/rubygem-faraday-net_http
rubygem-backports https://gitee.com/src-openeuler/rubygem-backports
rubygem-spring https://gitee.com/src-openeuler/rubygem-spring
rubygem-mime-types-data https://gitee.com/src-openeuler/rubygem-mime-types-data
rubygem-childprocess https://gitee.com/src-openeuler/rubygem-childprocess
rubygem-shoulda-context https://gitee.com/src-openeuler/rubygem-shoulda-context
rubygem-rack-protection https://gitee.com/src-openeuler/rubygem-rack-protection
rubygem-rails rubygem-rails: Full-stack web application framework
rubygem-daemons https://gitee.com/src-openeuler/rubygem-daemons
rubygem-capng_c rubygem-capng_c: libcap-ng bindings for Ruby.
rubygem-rb-inotify https://gitee.com/src-openeuler/rubygem-rb-inotify
rubygem-multi_test https://gitee.com/src-openeuler/rubygem-multi_test
rubygem-fakefs https://gitee.com/src-openeuler/rubygem-fakefs
rubygem-domain_name https://gitee.com/src-openeuler/rubygem-domain_name
rubygem-curb https://gitee.com/src-openeuler/rubygem-curb
rubygem-mime-types https://gitee.com/src-openeuler/rubygem-mime-types
rubygem-minitest4 https://gitee.com/src-openeuler/rubygem-minitest4
rubygem-xpath https://gitee.com/src-openeuler/rubygem-xpath
rubygem-ruby2_keywords https://gitee.com/src-openeuler/rubygem-ruby2_keywords
rubygem-ansi https://gitee.com/src-openeuler/rubygem-ansi
rubygem-rails-controller-testing https://gitee.com/src-openeuler/rubygem-rails-controller-testing
rubygem-maruku https://gitee.com/src-openeuler/rubygem-maruku
rubygem-sassc-rails https://gitee.com/src-openeuler/rubygem-sassc-rails
rubygem-contracts https://gitee.com/src-openeuler/rubygem-contracts
rubygem-concurrent-ruby https://gitee.com/src-openeuler/rubygem-concurrent-ruby
rubygem-shoulda-matchers https://gitee.com/src-openeuler/rubygem-shoulda-matchers
rubygem-activerecord https://gitee.com/src-openeuler/rubygem-activerecord
rubygem-hashery https://gitee.com/src-openeuler/rubygem-hashery
rubygem-serverengine https://gitee.com/src-openeuler/rubygem-serverengine
rubygem-unf https://gitee.com/src-openeuler/rubygem-unf
rubygem-launchy https://gitee.com/src-openeuler/rubygem-launchy
rubygem-faraday-em_synchrony https://gitee.com/src-openeuler/rubygem-faraday-em_synchrony
rubygem-timecop https://gitee.com/src-openeuler/rubygem-timecop
rubygem-unf_ext https://gitee.com/src-openeuler/rubygem-unf_ext
rubygem-thin https://gitee.com/src-openeuler/rubygem-thin
rubygem-cucumber-create-meta https://gitee.com/src-openeuler/rubygem-cucumber-create-meta
rubygem-rouge https://gitee.com/src-openeuler/rubygem-rouge
rubygem-rack-cache https://gitee.com/src-openeuler/rubygem-rack-cache
rubygem-capybara https://gitee.com/src-openeuler/rubygem-capybara
rubygem-fluentd https://gitee.com/src-openeuler/rubygem-fluentd
rubygem-turbolinks-source https://gitee.com/src-openeuler/rubygem-turbolinks-source
rubygem-importmap-rails https://gitee.com/src-openeuler/rubygem-importmap-rails
rubygem-diff-lcs https://gitee.com/src-openeuler/rubygem-diff-lcs
rubygem-msgpack https://gitee.com/src-openeuler/rubygem-msgpack
rubygem-multi_json https://gitee.com/src-openeuler/rubygem-multi_json
rubygem-fluent-plugin-elasticsearch https://gitee.com/src-openeuler/rubygem-fluent-plugin-elasticsearch
rubygem-metaclass https://gitee.com/src-openeuler/rubygem-metaclass
rubygem-faraday https://gitee.com/src-openeuler/rubygem-faraday
rubygem-creole https://gitee.com/src-openeuler/rubygem-creole
rubygem-crack https://gitee.com/src-openeuler/rubygem-crack
rubygem-afm https://gitee.com/src-openeuler/rubygem-afm
rubygem-jbuilder https://gitee.com/src-openeuler/rubygem-jbuilder
rubygem-safe_yaml https://gitee.com/src-openeuler/rubygem-safe_yaml
rubygem-faraday-net_http_persistent https://gitee.com/src-openeuler/rubygem-faraday-net_http_persistent
rubygem-benchmark-ips https://gitee.com/src-openeuler/rubygem-benchmark-ips
rubygem-json_pure https://gitee.com/src-openeuler/rubygem-json_pure
rubygem-thread_safe https://gitee.com/src-openeuler/rubygem-thread_safe
rubygem-gherkin https://gitee.com/src-openeuler/rubygem-gherkin
rubygem-globalid https://gitee.com/src-openeuler/rubygem-globalid
rubygem-rspec-core https://gitee.com/src-openeuler/rubygem-rspec-core
rubygem-jquery-rails https://gitee.com/src-openeuler/rubygem-jquery-rails
rubygem-rspec2 https://gitee.com/src-openeuler/rubygem-rspec2
rubygem-ethon https://gitee.com/src-openeuler/rubygem-ethon
rubygem-cucumber https://gitee.com/src-openeuler/rubygem-cucumber
rubygem-rspec-rails https://gitee.com/src-openeuler/rubygem-rspec-rails
rubygem-shoulda https://gitee.com/src-openeuler/rubygem-shoulda
rubygem-rails-html-sanitizer https://gitee.com/src-openeuler/rubygem-rails-html-sanitizer
rubygem-faraday-patron https://gitee.com/src-openeuler/rubygem-faraday-patron
rubygem-hoe https://gitee.com/src-openeuler/rubygem-hoe
rubygem-bundler https://gitee.com/src-openeuler/rubygem-bundler
rubygem-selenium-webdriver https://gitee.com/src-openeuler/rubygem-selenium-webdriver
rubygem-RedCloth https://gitee.com/src-openeuler/rubygem-RedCloth
rubygem-connection_pool https://gitee.com/src-openeuler/rubygem-connection_pool
rubygem-test-unit-rr https://gitee.com/src-openeuler/rubygem-test-unit-rr
rubygem-coffee-script-source https://gitee.com/src-openeuler/rubygem-coffee-script-source
rubygem-uglifier https://gitee.com/src-openeuler/rubygem-uglifier
rubygem-method_source https://gitee.com/src-openeuler/rubygem-method_source
rubygem-coffee-script https://gitee.com/src-openeuler/rubygem-coffee-script
rubygem-activeresource https://gitee.com/src-openeuler/rubygem-activeresource
rubygem-elasticsearch-ruby https://gitee.com/src-openeuler/rubygem-elasticsearch-ruby
rubygem-mini_magick https://gitee.com/src-openeuler/rubygem-mini_magick
rubygem-mail https://gitee.com/src-openeuler/rubygem-mail
rubygem-docile https://gitee.com/src-openeuler/rubygem-docile
rubygem-fattr https://gitee.com/src-openeuler/rubygem-fattr
rubygem-mustache https://gitee.com/src-openeuler/rubygem-mustache
rubygem-httpclient https://gitee.com/src-openeuler/rubygem-httpclient
rubygem-pdf-inspector https://gitee.com/src-openeuler/rubygem-pdf-inspector
rubygem-actionview https://gitee.com/src-openeuler/rubygem-actionview
rubygem-prawn https://gitee.com/src-openeuler/rubygem-prawn
rubygem-pkg-config https://gitee.com/src-openeuler/rubygem-pkg-config
rubygem-http_parser https://gitee.com/src-openeuler/rubygem-http_parser
rubygem-faraday-httpclient https://gitee.com/src-openeuler/rubygem-faraday-httpclient
rubygem-faraday-excon https://gitee.com/src-openeuler/rubygem-faraday-excon
rubygem-rspec2-mocks https://gitee.com/src-openeuler/rubygem-rspec2-mocks
rubygem-websocket-driver https://gitee.com/src-openeuler/rubygem-websocket-driver
rubygem-rspec-mocks https://gitee.com/src-openeuler/rubygem-rspec-mocks
rubygem-yajl-ruby https://gitee.com/src-openeuler/rubygem-yajl-ruby
rubygem-bacon https://gitee.com/src-openeuler/rubygem-bacon
rubygem-ruby-rc4 https://gitee.com/src-openeuler/rubygem-ruby-rc4
rubygem-listen https://gitee.com/src-openeuler/rubygem-listen
rubygem-rails-dom-testing https://gitee.com/src-openeuler/rubygem-rails-dom-testing
rubygem-test_declarative https://gitee.com/src-openeuler/rubygem-test_declarative
rubygem-idn https://gitee.com/src-openeuler/rubygem-idn
rubygem-regexp_property_values https://gitee.com/src-openeuler/rubygem-regexp_property_values
rubygem-faraday-rack https://gitee.com/src-openeuler/rubygem-faraday-rack
rubygem-mimemagic https://gitee.com/src-openeuler/rubygem-mimemagic
rubygem-zeitwerk https://gitee.com/src-openeuler/rubygem-zeitwerk
rubygem-sys-uname https://gitee.com/src-openeuler/rubygem-sys-uname
rubygem-simplecov-html https://gitee.com/src-openeuler/rubygem-simplecov-html
rubygem-bootsnap https://gitee.com/src-openeuler/rubygem-bootsnap
rubygem-activemodel https://gitee.com/src-openeuler/rubygem-activemodel
rubygem-asciidoctor https://gitee.com/src-openeuler/rubygem-asciidoctor
rubygem-pry-nav https://gitee.com/src-openeuler/rubygem-pry-nav
rubygem-sqlite3 https://gitee.com/src-openeuler/rubygem-sqlite3
rubygem-regexp_parser https://gitee.com/src-openeuler/rubygem-regexp_parser
rubygem-i18n https://gitee.com/src-openeuler/rubygem-i18n
rubygem-hashdiff https://gitee.com/src-openeuler/rubygem-hashdiff
rubygem-sprockets-rails https://gitee.com/src-openeuler/rubygem-sprockets-rails
rubygem-kramdown https://gitee.com/src-openeuler/rubygem-kramdown
rubygem-rr https://gitee.com/src-openeuler/rubygem-rr
rubygem-liquid https://gitee.com/src-openeuler/rubygem-liquid
rubygem-webmock https://gitee.com/src-openeuler/rubygem-webmock
rubygem-arel https://gitee.com/src-openeuler/rubygem-arel
rubygem-turbolinks https://gitee.com/src-openeuler/rubygem-turbolinks
rubygem-thor https://gitee.com/src-openeuler/rubygem-thor
rubygem-rspec https://gitee.com/src-openeuler/rubygem-rspec
rubygem-rspec-support https://gitee.com/src-openeuler/rubygem-rspec-support
rubygem-bcrypt https://gitee.com/src-openeuler/rubygem-bcrypt
rubygem-yard https://gitee.com/src-openeuler/rubygem-yard
rubygem-prawn-table https://gitee.com/src-openeuler/rubygem-prawn-table
rubygem-actiontext https://gitee.com/src-openeuler/rubygem-actiontext
rubygem-haml https://gitee.com/src-openeuler/rubygem-haml
rubygem-pdf-reader https://gitee.com/src-openeuler/rubygem-pdf-reader
rubygem-tzinfo-data https://gitee.com/src-openeuler/rubygem-tzinfo-data
rubygem-strptime https://gitee.com/src-openeuler/rubygem-strptime
rubygem-cool.io https://gitee.com/src-openeuler/rubygem-cool.io
rubygem-cucumber-expressions https://gitee.com/src-openeuler/rubygem-cucumber-expressions
rubygem-tzinfo https://gitee.com/src-openeuler/rubygem-tzinfo
rubygem-formatador https://gitee.com/src-openeuler/rubygem-formatador
rubygem-eventmachine https://gitee.com/src-openeuler/rubygem-eventmachine
rubygem-dig_rb https://gitee.com/src-openeuler/rubygem-dig_rb
rubygem-mocha https://gitee.com/src-openeuler/rubygem-mocha
rubygem-simplecov https://gitee.com/src-openeuler/rubygem-simplecov
rubygem-sd_notify https://gitee.com/src-openeuler/rubygem-sd_notify
rubygem-crass https://gitee.com/src-openeuler/rubygem-crass
rubygem-thread_order https://gitee.com/src-openeuler/rubygem-thread_order
rubygem-redcarpet https://gitee.com/src-openeuler/rubygem-redcarpet
rubygem-expression_parser https://gitee.com/src-openeuler/rubygem-expression_parser
rubygem-faraday-em_http https://gitee.com/src-openeuler/rubygem-faraday-em_http
rubygem-rubyzip https://gitee.com/src-openeuler/rubygem-rubyzip
rubygem-addressable https://gitee.com/src-openeuler/rubygem-addressable
rubygem-rake-compiler https://gitee.com/src-openeuler/rubygem-rake-compiler
rubygem-cucumber-messages https://gitee.com/src-openeuler/rubygem-cucumber-messages
rubygem-rack-test https://gitee.com/src-openeuler/rubygem-rack-test
rubygem-pry https://gitee.com/src-openeuler/rubygem-pry
rubygem-nokogiri https://gitee.com/src-openeuler/rubygem-nokogiri
rubygem-ruby-progressbar https://gitee.com/src-openeuler/rubygem-ruby-progressbar
rubygem-websocket https://gitee.com/src-openeuler/rubygem-websocket
rubygem-ox https://gitee.com/src-openeuler/rubygem-ox
rubygem-sexp_processor https://gitee.com/src-openeuler/rubygem-sexp_processor
rubygem-autoprefixer-rails https://gitee.com/src-openeuler/rubygem-autoprefixer-rails
rubygem-minitest https://gitee.com/src-openeuler/rubygem-minitest
rubygem-ronn https://gitee.com/src-openeuler/rubygem-ronn
rubygem-erubis https://gitee.com/src-openeuler/rubygem-erubis
rubygem-webpack-rails https://gitee.com/src-openeuler/rubygem-webpack-rails
rubygem-jquery-ui-rails https://gitee.com/src-openeuler/rubygem-jquery-ui-rails
rubygem-deacon https://gitee.com/src-openeuler/rubygem-deacon
rubygem-coffee-rails https://gitee.com/src-openeuler/rubygem-coffee-rails
rubygem-bundler_ext https://gitee.com/src-openeuler/rubygem-bundler_ext
rubygem-netrc https://gitee.com/src-openeuler/rubygem-netrc
rubygem-get_process_mem https://gitee.com/src-openeuler/rubygem-get_process_mem
rubygem-ancestry https://gitee.com/src-openeuler/rubygem-ancestry
rubygem-apipie-dsl https://gitee.com/src-openeuler/rubygem-apipie-dsl
rubygem-record_tag_helper https://gitee.com/src-openeuler/rubygem-record_tag_helper
rubygem-rack-cors https://gitee.com/src-openeuler/rubygem-rack-cors
rubygem-rabl https://gitee.com/src-openeuler/rubygem-rabl
rubygem-oj https://gitee.com/src-openeuler/rubygem-oj
rubygem-oauth https://gitee.com/src-openeuler/rubygem-oauth
rubygem-net-ssh https://gitee.com/src-openeuler/rubygem-net-ssh
rubygem-net-scp https://gitee.com/src-openeuler/rubygem-net-scp
rubygem-net-ldap https://gitee.com/src-openeuler/rubygem-net-ldap
rubygem-ldap_fluff https://gitee.com/src-openeuler/rubygem-ldap_fluff
rubygem-jwt https://gitee.com/src-openeuler/rubygem-jwt
rubygem-graphql https://gitee.com/src-openeuler/rubygem-graphql
rubygem-facter https://gitee.com/src-openeuler/rubygem-facter
rubygem-friendly_id https://gitee.com/src-openeuler/rubygem-friendly_id
rubygem-fog-core https://gitee.com/src-openeuler/rubygem-fog-core
rubygem-fast_gettext https://gitee.com/src-openeuler/rubygem-fast_gettext
rubygem-sshkey https://gitee.com/src-openeuler/rubygem-sshkey
rubygem-responders https://gitee.com/src-openeuler/rubygem-responders
rubygem-ovirt-engine-sdk4 https://gitee.com/src-openeuler/rubygem-ovirt-engine-sdk4
rubygem-atomic https://gitee.com/src-openeuler/rubygem-atomic
rubygem-deep_cloneable https://gitee.com/src-openeuler/rubygem-deep_cloneable
rubygem-audited https://gitee.com/src-openeuler/rubygem-audited
rubygem-activerecord-session_store https://gitee.com/src-openeuler/rubygem-activerecord-session_store
rubygem-activerecord-nulldb-adapter https://gitee.com/src-openeuler/rubygem-activerecord-nulldb-adapter
rubygem-apipie-rails https://gitee.com/src-openeuler/rubygem-apipie-rails
rubygem-dynflow https://gitee.com/src-openeuler/rubygem-dynflow
rubygem-gettext_i18n_rails_js https://gitee.com/src-openeuler/rubygem-gettext_i18n_rails_js
rubygem-patternfly-sass https://gitee.com/src-openeuler/rubygem-patternfly-sass
rubygem-safemode https://gitee.com/src-openeuler/rubygem-safemode
rubygem-graphql-batch https://gitee.com/src-openeuler/rubygem-graphql-batch
rubygem-kafo https://gitee.com/src-openeuler/rubygem-kafo
rubygem-logging https://gitee.com/src-openeuler/rubygem-logging
rubygem-rails-i18n https://gitee.com/src-openeuler/rubygem-rails-i18n
rubygem-rest-client https://gitee.com/src-openeuler/rubygem-rest-client
rubygem-abrt https://gitee.com/src-openeuler/rubygem-abrt