Skip to content

Commit

Permalink
Allow switching branches from the UI
Browse files Browse the repository at this point in the history
  • Loading branch information
punchagan committed Apr 21, 2023
1 parent 3859ebc commit bfdaabe
Show file tree
Hide file tree
Showing 5 changed files with 170 additions and 32 deletions.
39 changes: 24 additions & 15 deletions frontend/src/App.res
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ query {

let makeGetBenchmarksVariables = (
~repoId,
~branch=?,
~pullNumber=?,
~worker,
~benchmarkName=?,
Expand All @@ -22,21 +23,24 @@ let makeGetBenchmarksVariables = (
): GetBenchmarks.t_variables => {
open BenchmarkDataHelpers
let isMaster = Belt.Option.isNone(pullNumber)
let defaultBranch = Sidebar.defaultBranch
let (worker, dockerImage) = switch worker {
| None => (None, None)
| Some((worker, dockerImage)) => (Some(worker), Some(dockerImage))
}
let comparisonLimit = isMaster ? 0 : 50
{
repoId: repoId,
pullNumber: pullNumber,
isMaster: isMaster,
worker: worker,
dockerImage: dockerImage,
repoId,
branch,
defaultBranch,
pullNumber,
isMaster,
worker,
dockerImage,
benchmarkName: Belt.Option.getWithDefault(benchmarkName, defaultBenchmarkName),
startDate: startDate,
endDate: endDate,
comparisonLimit: comparisonLimit,
startDate,
endDate,
comparisonLimit,
}
}

Expand Down Expand Up @@ -189,14 +193,15 @@ module Benchmark = {

module BenchmarkView = {
@react.component
let make = (~repoId, ~pullNumber=?, ~worker, ~benchmarkName=?, ~startDate, ~endDate) => {
let make = (~repoId, ~branch=?, ~pullNumber=?, ~worker, ~benchmarkName=?, ~startDate, ~endDate) => {
let ({ReScriptUrql.Hooks.response: response}, _) = {
let startDate = Js.Date.toISOString(startDate)->Js.Json.string
let endDate = Js.Date.toISOString(endDate)->Js.Json.string
ReScriptUrql.Hooks.useQuery(
~query=module(GetBenchmarks),
makeGetBenchmarksVariables(
~repoId,
~branch?,
~pullNumber?,
~worker,
~benchmarkName?,
Expand All @@ -216,7 +221,7 @@ module BenchmarkView = {
| Data(data)
| PartialData(data, _) =>
<Block sx=[Sx.px.xl2, Sx.py.xl2, Sx.w.full, Sx.minW.zero]>
<CommitInfo repoId worker ?pullNumber benchmarks=data setLastCommit />
<CommitInfo repoId worker ?branch ?pullNumber benchmarks=data setLastCommit />
<Benchmark repoId pullNumber data lastCommit />
</Block>
}
Expand Down Expand Up @@ -279,7 +284,7 @@ module ErrorView = {

module RepoView = {
@react.component
let make = (~repoId=?, ~pullNumber=?, ~benchmarkName=?, ~worker) => {
let make = (~repoId=?, ~branch=?, ~pullNumber=?, ~benchmarkName=?, ~worker) => {
let ({ReScriptUrql.Hooks.response: response}, _) = {
ReScriptUrql.Hooks.useQuery(~query=module(GetAllRepos), ())
}
Expand Down Expand Up @@ -311,12 +316,12 @@ module RepoView = {
| PartialData(data, _) =>
let repoIds = data.allRepoIds->Belt.Array.map(obj => obj.repo_id)
let onSelectRepoId = makeOnSelectRepoId(worker)

let sidebar: React.element = {
<Sidebar
repoIds
worker
setWorker
selectedBranch=?branch
selectedRepoId=?repoId
selectedPull=?pullNumber
selectedBenchmarkName=?benchmarkName
Expand All @@ -343,16 +348,18 @@ module RepoView = {
| Some(repoId) if !(repoIds->BeltHelpers.Array.contains(repoId)) =>
<ErrorView msg={"No such repository: " ++ repoId} repoIds onSelectRepoId />
| Some(repoId) =>
let branchBreadcrumb = branch->Belt.Option.getWithDefault(Sidebar.defaultBranch)
let breadcrumbs =
<Row sx=[Sx.w.auto, Sx.text.noUnderline] alignY=#center>
<Text weight=#semibold> "/" </Text>
{
let href = AppRouter.Repo({
let href = AppRouter.RepoBranch({
repoId: repoId,
branch: branchBreadcrumb,
benchmarkName: None,
worker: worker,
})->AppRouter.path
<Link href text="main" />
<Link href text={branchBreadcrumb} />
}
{pullNumber->Rx.onSome(pullNumber => {
let href = AppRouter.RepoPull({
Expand Down Expand Up @@ -400,7 +407,7 @@ module RepoView = {
{githubLink}
<Litepicker startDate endDate sx=[Sx.w.xl5] onSelect={onSelectDateRange} />
</Topbar>
<BenchmarkView repoId worker ?pullNumber ?benchmarkName startDate endDate />
<BenchmarkView repoId worker ?branch ?pullNumber ?benchmarkName startDate endDate />
</Column>
</>
}}
Expand All @@ -419,5 +426,7 @@ let make = () => {
| Ok(Repo({repoId, benchmarkName, worker})) => <RepoView repoId ?benchmarkName worker />
| Ok(RepoPull({repoId, pullNumber, benchmarkName, worker})) =>
<RepoView repoId pullNumber ?benchmarkName worker />
| Ok(RepoBranch({repoId, branch, benchmarkName, worker})) =>
<RepoView repoId branch ?benchmarkName worker />
}
}
42 changes: 37 additions & 5 deletions frontend/src/AppRouter.res
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ type route =
| Main
| Repo({repoId: string, benchmarkName: option<string>, worker: worker})
| RepoPull({repoId: string, pullNumber: int, benchmarkName: option<string>, worker: worker})
| RepoBranch({repoId: string, branch: string, benchmarkName: option<string>, worker: worker})

type error = {
path: list<string>,
Expand Down Expand Up @@ -38,9 +39,31 @@ let route = (url: RescriptReactRouter.url) => {
benchmarkName: None,
worker}))
| list{orgName, repoName, "benchmark", benchmarkName} =>
Ok(Repo({repoId: orgName ++ "/" ++ repoName,
benchmarkName: Some(benchmarkName),
worker}))
Ok(
Repo({
repoId: orgName ++ "/" ++ repoName,
benchmarkName: Some(benchmarkName),
worker,
}),
)
| list{orgName, repoName, "branch", branchName} =>
Ok(
RepoBranch({
repoId: orgName ++ "/" ++ repoName,
branch: branchName,
benchmarkName: None,
worker,
}),
)
| list{orgName, repoName, "branch", branchName, "benchmark", benchmarkName} =>
Ok(
RepoBranch({
repoId: orgName ++ "/" ++ repoName,
branch: branchName,
benchmarkName: Some(benchmarkName),
worker,
}),
)
| list{orgName, repoName, "pull", pullNumberStr} =>
switch Belt.Int.fromString(pullNumberStr) {
| Some(pullNumber) =>
Expand Down Expand Up @@ -87,8 +110,17 @@ let path = route =>
| RepoPull({repoId, pullNumber, benchmarkName: None, worker}) =>
"/" ++ repoId ++ "/pull/" ++ Belt.Int.toString(pullNumber) ++ workerParams(worker)
| RepoPull({repoId, pullNumber, benchmarkName: Some(benchmarkName), worker}) =>
"/" ++ repoId ++ "/pull/" ++ Belt.Int.toString(pullNumber) ++ "/benchmark/" ++ benchmarkName
++ workerParams(worker)
"/" ++
repoId ++
"/pull/" ++
Belt.Int.toString(pullNumber) ++
"/benchmark/" ++
benchmarkName ++
workerParams(worker)
| RepoBranch({repoId, branch, benchmarkName: None, worker}) =>
"/" ++ repoId ++ "/branch/" ++ branch ++ workerParams(worker)
| RepoBranch({repoId, branch, benchmarkName: Some(benchmarkName), worker}) =>
"/" ++ repoId ++ "/branch/" ++ branch ++ "/benchmark/" ++ benchmarkName ++ workerParams(worker)
}

let useRoute = () => RescriptReactRouter.useUrl()->route
Expand Down
5 changes: 5 additions & 0 deletions frontend/src/BenchmarkQueryHelpers.res
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,15 @@ fragment BenchmarkMetrics on benchmarks {
run_job_id
worker
docker_image
branch
}
`)

module GetBenchmarks = %graphql(`
query ($repoId: String!,
$pullNumber: Int,
$branch: String,
$defaultBranch: String!,
$isMaster: Boolean!,
$worker: String,
$dockerImage: String,
Expand All @@ -25,6 +28,7 @@ query ($repoId: String!,
benchmarks:
benchmarks(where: {_and: [{pull_number: {_eq: $pullNumber}},
{pull_number: {_is_null: $isMaster}},
{branch: {_eq: $branch}},
{repo_id: {_eq: $repoId}},
{worker: {_eq: $worker}},
{docker_image: {_eq: $dockerImage}},
Expand All @@ -36,6 +40,7 @@ query ($repoId: String!,
}
comparisonBenchmarks:
benchmarks(where: {_and: [{pull_number: {_is_null: true}},
{branch: {_eq: $defaultBranch}},
{repo_id: {_eq: $repoId}},
{worker: {_eq: $worker}},
{docker_image: {_eq: $dockerImage}},
Expand Down
25 changes: 18 additions & 7 deletions frontend/src/CommitInfo.res
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ open BenchmarkQueryHelpers

module GetLastCommitInfo = %graphql(`
query ($repoId: String!,
$branch: String,
$pullNumber: Int,
$isMaster: Boolean!,
$worker: String,
Expand All @@ -12,6 +13,7 @@ query ($repoId: String!,
limit: 1,
where: {_and: [{pull_number: {_eq: $pullNumber}},
{pull_number: {_is_null: $isMaster}},
{branch: {_eq: $branch}},
{worker: {_eq: $worker}},
{docker_image: {_eq: $dockerImage}},
{repo_id: {_eq: $repoId}}
Expand All @@ -38,18 +40,20 @@ query ($repoId: String!,

let makeGetLastCommitInfoVariables = (
~repoId,
~branch=?,
~pullNumber=?,
~worker,
~dockerImage,
(),
): GetLastCommitInfo.t_variables => {
let isMaster = Belt.Option.isNone(pullNumber)
{
repoId: repoId,
pullNumber: pullNumber,
isMaster: isMaster,
worker: worker,
dockerImage: dockerImage,
repoId,
branch,
pullNumber,
isMaster,
worker,
dockerImage,
}
}

Expand Down Expand Up @@ -98,7 +102,14 @@ let buildStatus = (lastCommitInfo: GetLastCommitInfo.t_lastCommitInfo) => {
}

@react.component
let make = (~repoId, ~pullNumber=?, ~benchmarks: GetBenchmarks.t, ~worker, ~setLastCommit) => {
let make = (
~repoId,
~branch=?,
~pullNumber=?,
~benchmarks: GetBenchmarks.t,
~worker,
~setLastCommit,
) => {
let benchmarks = benchmarks.benchmarks
let (worker, dockerImage) = switch worker {
| None => (None, None)
Expand All @@ -107,7 +118,7 @@ let make = (~repoId, ~pullNumber=?, ~benchmarks: GetBenchmarks.t, ~worker, ~setL
let ({ReScriptUrql.Hooks.response: response}, _) = {
ReScriptUrql.Hooks.useQuery(
~query=module(GetLastCommitInfo),
makeGetLastCommitInfoVariables(~repoId, ~pullNumber?, ~worker, ~dockerImage, ()),
makeGetLastCommitInfoVariables(~repoId, ~branch?, ~pullNumber?, ~worker, ~dockerImage, ()),
)
}

Expand Down
Loading

0 comments on commit bfdaabe

Please sign in to comment.