nodejs / nodejs/github-bot

Modernizing the project

オープン
#264 コメント 9 件 リアクション 1 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

主要言語
JavaScript
スター
305
フォーク
148
平均マージ
9時間 2分
マージ済み PR(30日)
3

説明

First of, I love our GitHub bot. It's an essential piece of our infrastructure, and it can fill the gaps where GitHub Actions don't work well (the whole read-only, no secrets situation with forked PRs). With that being said, I have been trying to contribute to the project and the entry barrier seems somewhat high:

  1. Getting the development environment working on my machine took between one and two hours
  2. There's no way (afaik) to properly test Jenkins hooks
  3. Some of the dependencies we use are deprecate (github, request, there might be others too)
  4. github is not only deprecated, it lacks documentation. To find out which method to use, developers need to look into the TypeScript definition and then figure out which GitHub API is being called to read the documentation on https://developer.github.com/v3/
  5. Some parts of the code have hardcoded nodejs as org and node as repository, which makes it impossible for users to test without finding these conditionals and changing them/commenting those out

The project is also heavily callback-oriented, some parts would probably benefit from changing to an async/await-oriented implementation (I know this is more controversial, so I won't push too much on it).

Based on the points above, I have some suggestions to modernize the project:

  1. To improve the development experience, we could set up our own relay, which would essentially be a multiplexer receiving webhook calls from nodejs/node-auto-test. Anyone who wants to collaborate would connect to that relay, and they would receive the appropriate tokens needed for testing. We could add checks so that only certain teams are allowed to request access. We can also have a separate user with permissions limited to nodejs/node-auto-test, to prevent folks from mistakenly affecting other repositories. The same relay could be used for Jenkins hooks.
  2. To avoid hardcoded repositories and orgs, we could move some of the logic to the repositories. For example, labeling is only enabled on nodejs/node, if we moved the labels definition to nodejs/node (so that the bot loads the definition when needed), it would be easier for collaborators to include/remove definitions for new files, and it would also allow the bot to detect if that repository supports labeling or not.
  3. Replacing deprecated dependencies and potentially moving more towards async/await API might be harder. We could either start a new branch from scratch, or try to modernize different pieces individually. Either way it will need some coordination efforts as well as a lot of work to get it working properly.

As an alternative, we could turn the github-bot into an Actions relay: it would receive events from GitHub and Jenkins, and would forward those events to the repository dispatch API. This way, we could define everything as Actions on the respective repositories, circumventing the gaps with Actions on forked PRs and being able to define Actions for Jenkins events.

What do folks think? cc @nodejs/github-bot

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず開発環境と scripts/node-subsystem-label.js を確認し、次に issue で言及されている webhook と Jenkins-hook のエントリポイントを調査します。提案されている作業には、依存関係の置き換え、テストインフラストラクチャ、設定可能なリポジトリ、そして場合によっては Actions relay が含まれます。完了とするには、単一の孤立した変更ではなく、範囲を定めたモダナイゼーション計画と、連携した実装が必要です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
github-actions, javascript, nodejs
領域
ci-cd, devops, tooling
issue の種類
リファクタリング
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
説明が足りない
初心者へのやさしさ
25/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。