JetBrainsのYouTrackチームはこちらです。すばらしいニュースがあります。YouTrack2020.3以降、タスクにはタスク関連のコミットだけでなく、プルリクエストも表示されます。今日の投稿では、それが何であるか、なぜそれであるか、そしてそれが開発プロセスをより効率的で理解しやすくするのにどのように役立つかを説明し、最新バージョンのYouTrackの残りの革新も示します。

詳細については、投稿へようこそ。
プルリクエストとは何ですか?
多くの開発モデルモデルでは、プロジェクトでの共同作業は次のようになります。ソースコントロールからプロジェクトをコピーし、ローカルで変更を加えてから、プロジェクトオーナーにリクエストを送信して変更を承認し、共通のプロジェクトコードベースに含めます。このような要求は、プル要求(またはバージョン制御システムによってはマージ要求)と呼ばれます。
大まかに言えば、プルリクエストは、リポジトリの所有者またはチームにプロジェクトで何をしたかを伝え、変更を一般的な開発ブランチの1つに含めることを提案する方法です。リポジトリの所有者(またはコードレビューを行う人)は、変更を受け入れる(プルリクエストをマージする)か、拒否することができます。たとえば、変更がプロジェクトの作成者のビジョンと矛盾する場合、またはコードレビュープロセス中に、コードを改善する必要があると判断した場合などです。
オープンソースプロジェクトでは、プルリクエストの要件がしばしばあり、それがないとプルリクエストは受け入れられません。たとえば、Kotlinチームの同僚は、プルリクエストの説明にYouTrackの対応する問題へのリンクが含まれていることを確認するように開発者に依頼します。プルリクエストの変更は、指定されたタスクに固有であり、新しいコードが実行され、正しく実行され、テストの対象になります。
トラッカーでリクエストをプルするのはなぜですか?
プルリクエストの作成と承認/拒否は、ステータスの変更や対応するコミットのバインドと同様に、タスクのライフサイクルにおける重要なステップです。これらのステップはすべて、関心のあるすべてのオブザーバー(たとえば、オープンソースプロジェクトのコミュニティやチームのプロジェクトマネージャー)にタスクの進行状況を示します。たとえば、特定のプルリクエストが拒否されたためにタスクが閉じられなかった場合、この情報はタスクの履歴に反映される必要があります。これには、タスクが長い間開いたままになっている理由を理解する必要がある場合など、遡及的な目的が含まれます。このメカニズムにより、開発プロセスがより透過的になり、重要なイベントを見逃すことなく、問題のライフサイクルを段階的に追跡できます。
問題のプルリクエストを表示する
YouTrackに戻ると、YouTrack 2020.3以降、開発者はコミットの横のタスクでGitHub、GitLab、BitBucket、Gogs、Giteaからのプルリクエストを確認できるようになります。プルリクエストを、その説明、更新されたファイルの数、作成者に関する情報とともにタスクに表示するには、プルリクエストの名前で対応するタスクを指定する必要があります(すべてがコミットの場合とまったく同じです)。
さらに、プルリクエストを承認または拒否した後、YouTrackは、イベントの作成者およびプルリクエストのステータスとともに、このイベントをタスクのアクティビティフローに含めます。タスク変更フィードには、プルリクエストのライフサイクル全体(作成と最終決定(コードベースへの拒否または包含))が表示されることがわかりました。

自動化する
私たちは自動化が大好きで積極的に使用しているため、自動化スクリプトでバージョン制御システムからのイベントを使用する機会を逃すことができませんでした。プルリクエストまたはコミットを追加するときに、YouTrackワークフローを開始できるようになりました。さらに、ワークフローは、作成者名、説明、メモなど、コミットおよびプルリクエストのプロパティにアクセスできるようになりました。
どういう意味ですか?たとえば、プルリクエストのステータスに基づいてタスクのステータスを自動的に変更したり、プルリクエストを作成するときにコードレビューのリクエストを同僚に送信したりできます。
このような単純なスクリプトは、プルリクエストをマージするときにタスクを自動的に固定ステータスに転送し、タスクがテストの準備ができていることを示すメッセージとともにQAリードに割り当てます。
var entities = require('@jetbrains/youtrack-scripting-api/entities');
var QA_LEAD = 'qa_superman';
exports.rule = entities.Issue.onChange({
title: 'Set_to_fixed_when_pull_request_is_merged_and_notify',
guard: function(ctx) {
return ctx.issue.pullRequests.isNotEmpty() &&
ctx.issue.pullRequests.last().previousState &&
ctx.issue.pullRequests.last().state.name !== ctx.issue.pullRequests.last().previousState.name &&
ctx.issue.pullRequests.last().state.name === "MERGED";
},
action: function(ctx) {
var issue = ctx.issue;
issue.State = ctx.State.Fixed;
issue.Assignee = entities.User.findByLogin(QA_LEAD);
issue.addComment("The issue is ready to be tested");
},
requirements: {
State: {
type: entities.State.fieldType,
Fixed: {
name: "Fixed"
}
},
}
});
以前と同様に、スクリプトは、プロセスに応じて、スケジュールまたは特定のイベントで実行できます。ワークフローとその作成方法の詳細については、こちらをご覧ください。
他に何が面白いですか?
もちろん、プルリクエストの表示だけに限定しているわけではありません。他の革新の中には、ダッシュボード(ダッシュボード)用の新しい時間追跡ウィジェットがあります。これにより、生産性を監視し、検疫で残業に夢中にならないようにするのがより便利になります。

タスクのリストを簡単に操作できるように、ワンクリックで未完了のタスクのみを表示し、コメントの数でタスクを並べ替える機能を追加しました。ナレッジベースでは、プログラミング言語の自動検出機能を備えたコードブロックの構文が強調表示され、Markdown愛好家のために、タスクや記事に埋め込まれた画像、ビデオ、その他のメディアファイルのサイズを変更できるようになりました。
LDAPサーバーを使用してユーザーの資格情報を管理している人向けのニュースがあります。 YouTrackは、LDAPサーバーからの資格情報を使用して認証できるようにするために使用されていましたが、現在では、ユーザーグループと属性のスケジュールされた同期がLDAPサーバーに追加されています。これにより、資格情報とLDAPグループメンバーシップ情報が最新の状態に保たれます。たとえば、ユーザーがLDAPサーバーのグループのメンバーになっていない場合でも、トラッカーで対応するアクセスを取得できる場合は、トラッカーのデータへの不正アクセスを回避できます。 LDAPサーバーとYouTrack間の同期の遅延が原因です。
すべての変更の詳細は、当社のWebサイトにあります。
また、YouTrackを初めて使用する場合、または始めたばかりの場合は、 YouTrackの基本の無料デモへようこそ。