GithubHelp home page GithubHelp logo

otto-de / gitactionboard Goto Github PK

View Code? Open in Web Editor NEW
107.0 107.0 28.0 31.2 MB

GitactionBoard - Ultimate Dashboard for GithubActions.

License: Apache License 2.0

Dockerfile 0.29% Shell 2.79% Java 73.86% HTML 0.18% JavaScript 13.30% Vue 9.58%
build-monitor cctray dashboard github-actions monitoring-tool

gitactionboard's People

Contributors

dependabot[bot] avatar fwilhe2 avatar github-actions[bot] avatar gradle-update-robot avatar kvashchuka avatar sankita15tw avatar stdogr avatar sumanmaity1234 avatar svenfinke avatar sweiler avatar umeshnebhani733 avatar valentin-krasontovitsch avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gitactionboard's Issues

Any modification to the default event filter list results in no jobs being displayed

Describe the bug
Any modification to the default workflow event filter list in the preferences view results in no jobs appearing in the 'Workflow Jobs' view. When this happens, returning to the 'Preferences' view then reveals that all of the workflow event filter items are now displaying as [object Object]. Clearing the filter list and returning to the 'Workflow Jobs' view then displays all the jobs again, and the preference view displays the default filter list correctly again.

To Reproduce
Steps to reproduce the behavior:

The steps below use the 'Schedule' event as an example, however any event can be used instead.

  1. Click 'Workflow Jobs' in the sidebar.
  2. Observe correct job status' being displayed, including jobs not triggered by the 'Schedule' event.
  3. Click 'Preferences' in the sidebar.
  4. Remove the 'Schedule' item from the 'Show Builds Due To' event filter list.
  5. Click 'SAVE'.
  6. Click 'Workflow Jobs' in the sidebar.
  7. Observe all of the job status' are no longer visible.
  8. Click 'Preferences' in the sidebar.
  9. Observer all event filter items are now displayed as [object Object].

Expected behavior
I expect the 'Workflow Jobs' view to display all job status' that match the 'Show Builds Due To' filter list in the 'Preferences' view, and I expect the preferences view to correctly display the event filter names after items have been removed and/or added.

Screenshots
Step 1 and 2 (image edited to cover sensitive information, but can still see that lots of jobs are being displayed):
Step 1 and 2
Step 3:
Step 3
Step 4 and 5:
Step 4 and 5
Step 6 and 7:
Step 6 and 7
Step 8 and 9:
Step 8 and 9

Additional context
The dashboard was run with the following command (example org and repo names used instead of real as that information is sensitive):
docker run -p 9080:8080 -e REPO_OWNER_NAME=ExampleOrg -e REPO_NAMES=Repo1,Repo2,Repo3 -e GITHUB_ACCESS_TOKEN=ExampleToken -it ottoopensource/gitactionboard:latest

Bug reproduced on both Brave (Chromium) and Firefox browsers.

Running the docker Container

Hi it would be nice to have an example deployment in the README, using an organisation and or a USERNAME. Also a multi repo view example too would be appreciated.

Cannot deserialize value of type...

Hi there,

we are getting exception. I don't know how to reproduce it, but it appears in our logs. Maybe you know what needs to be done:

{
"textPayload": "java.util.concurrent.CompletionException: org.springframework.web.client.RestClientException: Error while extracting response for type [class de.otto.platform.gitactionboard.adapters.service.job.WorkflowsRunDetailsResponse] and content type [application/json;charset=utf-8]\n\tat java.base/java.util.concurrent.CompletableFuture.encodeThrowable(Unknown Source) ~[na:na]\n\tat java.base/java.util.concurrent.CompletableFuture.completeThrowable(Unknown Source) ~[na:na]\n\tat java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source) ~[na:na]\n\tat java.base/java.lang.Thread.run(Unknown Source) ~[na:na]\nCaused by: org.springframework.web.client.RestClientException: Error while extracting response for type [class de.otto.platform.gitactionboard.adapters.service.job.WorkflowsRunDetailsResponse] and content type [application/json;charset=utf-8]\n\tat org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:118) ~[spring-web-6.0.9.jar!/:6.0.9]\n\tat org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:865) ~[spring-web-6.0.9.jar!/:6.0.9]\n\tat org.springframework.web.client.RestTemplate.execute(RestTemplate.java:764) ~[spring-web-6.0.9.jar!/:6.0.9]\n\tat org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:378) ~[spring-web-6.0.9.jar!/:6.0.9]\n\tat de.otto.platform.gitactionboard.adapters.service.ApiService.getForObject(ApiService.java:37) ~[classes!/:3.3.2]\n\tat de.otto.platform.gitactionboard.adapters.service.job.GithubJobDetailsService.fetchWorkflowDetails(GithubJobDetailsService.java:166) ~[classes!/:3.3.2]\n\tat de.otto.platform.gitactionboard.adapters.service.job.GithubJobDetailsService.lambda$fetchJobDetails$0(GithubJobDetailsService.java:37) ~[classes!/:3.3.2]\n\t... 2 common frames omitted\nCaused by: org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type de.otto.platform.gitactionboard.adapters.service.job.RunStatus from String "pending": not one of the values accepted for Enum class: [queued, in_progress, completed]\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.readJavaType(AbstractJackson2HttpMessageConverter.java:406) ~[spring-web-6.0.9.jar!/:6.0.9]\n\tat org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.read(AbstractJackson2HttpMessageConverter.java:354) ~[spring-web-6.0.9.jar!/:6.0.9]\n\tat org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:103) ~[spring-web-6.0.9.jar!/:6.0.9]\n\t... 8 common frames omitted\nCaused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type de.otto.platform.gitactionboard.adapters.service.job.RunStatus from String "pending": not one of the values accepted for Enum class: [queued, in_progress, completed]",
"insertId": "64a7be6000081321049edc13",
"resource": {
"type": "cloud_run_revision",
"labels": {
"service_name": "gitactionboard",
"location": "europe-west1",
"project_id": "gcp-XXXXX",
"configuration_name": "gitactionboard",
"revision_name": "gitactionboard-00011-xtn"
}
},
"timestamp": "2023-07-07T07:27:28.529185Z",
"severity": "ERROR",
"labels": {
"instanceId": "001bdd422e2935bd69f703cf95a072f496f1e0c9dc1eb85f9c0691fdb81012a4e0059a8b2f80b42a45ad181e25b9d78d23c9a9d81e57aeaa6028106bcfd7eb1084"
},
"logName": "projects/gcp-XXXXX/logs/run.googleapis.com%2Fstdout",
"receiveTimestamp": "2023-07-07T07:27:28.711025682Z"
}

Add option to filter by workflows

Is your feature request related to a problem? Please describe.
We like to split jobs up in sub jobs files, like the build and deploy workflow includes a build jobs and a deploy jobs file. Each of these sub jobs will only be triggered by the main workflow (either using repository_dispatch or workflow_dispatch)
This means that gitactionboard shows 4 jobs for each repo, while we are only interested in the main job.

Describe the solution you'd like
Ability to specify which jobs should be shown

Describe alternatives you've considered

  • using the frontend we can hide the jobs we are not interested in, but that needs to be done manually each time.
  • use a (prefix) convention like _ to indicate sub jobs which should be excluded.
  • use an option exclusion list.

Enhance Workflow Display with Comprehensive Listing, Grouping, and Advanced Filtering

Is your feature request related to a problem? Please describe.
The current display on GitActionBoard provides a high-level view of the status of GitHub workflows, which is useful but not comprehensive for teams managing numerous workflows across various repositories. The absence of detailed information like the triggering event and the user who triggered the workflow makes it harder to quickly understand and act on workflow statuses, especially in complex project environments.

Describe the solution you'd like
I propose an enhancement to the workflow display that introduces a list view with additional columns for more detailed insights. The proposed columns are:

  • Repository: Name of the repository where the workflow resides.
  • Status: Current status of the workflow, color-coded for quick visual reference.
  • Last Run: Timestamp of the last run, providing insight into recency.
  • Event Triggered: Type of event that triggered the workflow, such as "Scheduled", "Push", "Pull Request", etc.
  • User: The user who initiated the workflow, useful for identifying who made the changes or manually triggered the workflow.

In addition to these columns, the following features would significantly enhance the tool's utility:

  • Group by Repository: Allows grouping workflows by repository, with collapsible sections for each repository to efficiently manage screen space.
  • Filtering Options: Filters for repository name, workflow status, event triggered, and user, enabling users to narrow down to specific workflows of interest.
  • Column Sorting: Capability to sort the list based on any column, facilitating easier organization and navigation through workflows based on various criteria like the most recent run, status, or user.

Describe alternatives you've considered
An alternative could involve using separate tools or scripts to extract and display this information. However, integrating these features directly into GitActionBoard would offer a seamless and centralized experience for monitoring and managing GitHub workflows, eliminating the need for additional tools and processes.

Additional context
Incorporating these enhancements would empower teams, especially those with multiple workflows and repositories, to have a more detailed and actionable overview of their CI/CD pipeline statuses. This improvement aims at not just monitoring but also at effectively managing and troubleshooting workflows by providing all necessary details in one comprehensive view.

Add additional filter for Pull Request builds

Is your feature request related to a problem? Please describe.
We are using the gitactionboard as part of our Daily Operations tasks. As someone who is responsible for the status of all of our pipelines, it would be great to add an additional filter for all Pull Request builds. Right now it's possible to filter green builds and show the red ones only. Unfortunately tools like dependabot are leading to some additional builds and this is getting confusing for the person who is doing the operations for the team.

Describe the solution you'd like
I would like to get an additional filter so the daily operations guy can get a quick overview of the status of all applications on the master branch.

Workflow shows as failed, even if the latest workflow attempt of the job is successfully

Describe the bug
If a workflow job initially fails but a rerun of the same workflow job is successful, the workflow shows the state of the first attempt

To Reproduce
Steps to reproduce the behavior:

  1. Run a workflow which should fail (due to wrong credentials).
  2. gitactionboard shows the workflow as failed (correct), reflecting the state of the latest job.
  3. resolve the reason why the workflow failed. (add correct credentials into github action secrets)
  4. rerun the workflow job (attempt #2)
  5. the attempt succeeds
  6. gitactionboard shows the workflow still as failed (incorrect)

Expected behavior
gitactionboard should show the status of the latest attempt of a workflow job

Filter out some jobs based on branch name

It would be very nice to filter out some jobs, like the feature branchs. Maybe someone is only interested in the jobs in the develop branch or main. If all repositories have the same branch names (develop, main, issue/, feature/, etc...)

Show gitactionboard version number in ui

Is your feature request related to a problem? Please describe.
To me it's unclear which version is currently live. I always need to check in my container orchestrator to see which version is live.

Describe the solution you'd like
Show the version number of Gitactionboard (e.g. v3.0.5) somewhere in UI.

Describe alternatives you've considered
None

Version not shown in UI

Describe the bug
Version is not shown in UI. It says vunknown

To Reproduce
Steps to reproduce the behavior:

  1. Go to Dashboard page
  2. See Gitaction Board (vunknown)

Expected behavior
Gitaction Board (v4.0.0)

Screenshots
image

cannot fetch/process workflows/jobs which failed with github's startup_failure

Description + reprodcution

I'm setting up the docker image, pointing it at one of my (private) repos.
I had some trouble with setting up the workflows in said repo, so many of the runs I triggered did not start because of workflow parsing errors.
During startup of the container, I see the following logs:

# a bunch of
2023-04-17T11:39:02.922Z  INFO 1 --- [nPool-worker-11] d.o.p.g.a.s.job.GithubJobDetailsService  : Fetching run details for Workflow(name=check_for_release, repoName=test-work
flow-viewer, id=54272134)
...
2023-04-17T11:39:03.459Z ERROR 1 --- [nPool-worker-10] d.o.p.g.a.s.job.GithubJobDetailsService  : org.springframework.web.client.RestClientException: Error while extracting response for type [class de.otto.platform.gitactionboard.adapters.service.job.WorkflowsRunDetailsResponse] and content type [application/json;charset=utf-8]
...
java.util.concurrent.CompletionException: org.springframework.web.client.RestClientException: Error while extracting response for type [class de.otto.platform.gitactionboard.adapters.service.job.WorkflowsRunDetailsResponse] and content type [application/json;charset=utf-8]
Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `de.otto.platform.gitactionboard.adapters.service.job.RunConclusion` from String "startup_failure": not one of the values accepted for Enum class: [skipped, cancelled, success, timed_out, neutral, action_required, failure]
 at [Source: (org.springframework.util.StreamUtils$NonClosingInputStream); line: 1, column: 341] (through reference chain: de.otto.platform.gitactionboard.adapters.service.job.WorkflowsRunDetailsResponse["workflow_runs"]->java.util.ArrayList[0]->de.otto.platform.gitactionboard.adapters.service.job.WorkflowsRunDetailsResponse$WorkflowRunDetails["conclusion"])

Additional context
Tested with docker image 3.1.0 and latest.

Multi-arch docker image (arm64)

Hi,

Is your feature request related to a problem? Please describe.
I can't run the container from dockerhub on my macbook (arm64) without emulation.

Describe the solution you'd like

this project looks very cool. I was looking for something like jenkinsci/build-monitor-plugin for actions, and this looks pretty similar.

One thing I noticed is that only a amd64 image is published on DockerHub. For running on an apple arm, or also on a raspi, it would be useful to publish arm64 too. I'm not sure if the image has anything arch-specific to it, but since it seems to be a pretty standard java spring app I guess it's 'just' a matter of making the x-platform build, presumably using qemu and docker buildx.

Describe alternatives you've considered
None

Additional context

I might be able to do a pr for that if that is desired.

Best,
Florian

Failure if too many repositories

Hi,

I got a failure if too many repos:

2022-06-23 13:44:47.684 ERROR 1 --- [onPool-worker-3] d.o.p.g.a.s.w.GithubWorkflowService      : org.springframework.web.client.HttpClientErrorException: 414 URI Too Long: [no body]

java.util.concurrent.CompletionException: org.springframework.web.client.HttpClientErrorException: 414 URI Too Long: [no body]
	at java.base/java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:314) ~[na:na]
	at java.base/java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:319) ~[na:na]
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1702) ~[na:na]
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1692) ~[na:na]
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:290) ~[na:na]
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1020) ~[na:na]
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1656) ~[na:na]
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1594) ~[na:na]
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183) ~[na:na]
Caused by: org.springframework.web.client.HttpClientErrorException: 414 URI Too Long: [no body]
	at org.springframework.web.client.HttpClientErrorException.create(HttpClientErrorException.java:145) ~[spring-web-5.3.20.jar!/:5.3.20]
	at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:168) ~[spring-web-5.3.20.jar!/:5.3.20]
	at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:122) ~[spring-web-5.3.20.jar!/:5.3.20]
	at org.springframework.web.client.ResponseErrorHandler.handleError(ResponseErrorHandler.java:63) ~[spring-web-5.3.20.jar!/:5.3.20]
	at org.springframework.web.client.RestTemplate.handleResponse(RestTemplate.java:819) ~[spring-web-5.3.20.jar!/:5.3.20]
	at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:777) ~[spring-web-5.3.20.jar!/:5.3.20]
	at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:711) ~[spring-web-5.3.20.jar!/:5.3.20]
	at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:334) ~[spring-web-5.3.20.jar!/:5.3.20]
	at de.otto.platform.gitactionboard.adapters.service.ApiService.getForObject(ApiService.java:37) ~[classes!/:2.0.7]
	at de.otto.platform.gitactionboard.adapters.service.workflow.GithubWorkflowService.getWorkflowIdentifiers(GithubWorkflowService.java:44) ~[classes!/:2.0.7]
	at de.otto.platform.gitactionboard.adapters.service.workflow.GithubWorkflowService.lambda$fetchWorkflows$1(GithubWorkflowService.java:30) ~[classes!/:2.0.7]
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) ~[na:na]
	... 6 common frames omitted

Marked as phishing

Describe the bug
We recently moved our buildmonitor to be available from outside of the otto whitelist and got flagged as phishing website.

Firefox then showed a warning similar to the one below not only for this subdomain but also for the whole domain.

We're not quite sure how this happened and it doesn't seem to be a certificate issue as everything was up to date. Nontheless it might be worth investigating on that topic.

For now we restricted the monitor to internal traffic once again.

Screenshots

image

Replace custom Frontend with Vuetify

The current frontend is custom built and every feature - like the sidebar toggle - has to be created. This can easily lead to errors regarding different screen sizes, browser window ratios, etc... It also slows down the implementation of new features.

I'd like to switch to a frontend framework like vuetify. Using a framework like that comes with quite a few benefits:

  • many pre-built components that can just be used
  • consistent design
  • easy adoption of screen sizes
    Vuetify would be my choice as it implements the material design and it comes with a lot of easy to use components and helpers that make it really easy to implement different features.

runStatus does not support all the Github Run statuses, specific Waiting is missing

Workflows which are in the status Waiting will cause a java error as they are not part of the allowed enum.

Steps to reproduce the behavior:

  1. Create a workflow requiring deployment approval (using the deployment protection rules). See https://docs.github.com/en/actions/deployment/targeting-different-environments/using-environments-for-deployment#deployment-protection-rules
  2. Run the workflow
  3. Don't approve the run
  4. Start the gitactionboard
  5. Access the gitactionboard
  6. Check the error log in docker
  7. Caused by: com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type de.otto.platform.gitactionboard.adapters.service.job.RunStatus from String "waiting": not one of the values accepted for Enum class: [queued, in_progress, completed]
  8. Check the workflow status in Github, it is set to "waiting"
  9. Check the gitactionboard source code, backend/src/main/java/de/otto/platform/gitactionboard/adapters/service/job/RunStatus.java, waiting is not part of the enum

Expected behavior
Support for the "waiting" workflow status, but ideally all statuses as listed on https://docs.github.com/en/rest/actions/workflow-runs?apiVersion=2022-11-28

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.