woodpecker/server
Martin W. Kirst 2c1fc4b500
support custom .JS and .CSS files for custom banner messages (white-labeling) (#1781)
This PR introduces two new server configuration options, for providing a
custom .JS and .CSS file.
These can be used to show custom banner messages, add
environment-dependent signals, or simply a corporate logo.

### Motivation (what problem I try to solve)

I'm operating Woodpecker in multiple k8s clusters for different
environments.
When having multiple browser tabs open, I prefer strong indicators for
each environment.
E.g. a red "PROD" banner, or just a blue "QA" banner.
Also, we sometimes need to have the chance for maintenance, and instead
of broadcasting emails,
I prefer a banner message, stating something like: "Heads-up: there's a
planned downtime, next Friday, blabla...".

Also, I like to have the firm's logo visible, which makes Woodpecker
look more like an integral part of our platform.

### Implementation notes

* Two new config options are introduced ```WOODPECKER_CUSTOM_CSS_FILE```
and ```WOODPECKER_CUSTOM_JS_FILE```
* I've piggy-bagged the existing handler for assets, as it seemed to me
a minimally invasive approach
* the option along with an example is documented
* a simple unit test for the Gin-handler ensures some regression safety
* no extra dependencies are introduced

### Visual example

The documented example will look like this.

![Screenshot 2023-05-27 at 17 00
44](https://github.com/woodpecker-ci/woodpecker/assets/1189394/8940392e-463c-4651-a1eb-f017cd3cd64d)

### Areas of uncertainty 

This is my first contribution to Woodpecker and I tried my best to align
with your conventions.
That said, I found myself uncertain about these things and would be glad
about getting feedback.

* The handler tests are somewhat different than the other ones because I
wanted to keep them simple - I hope that still matches your coding
guidelines
* caching the page sometimes will let the browser not recognize changes
and a user must reload. I'm not fully into the details of how caching is
implemented and neither can judge if it's a real problem. Another pair
of eyes would be good.
2023-07-10 12:46:35 +02:00
..
api Fix agent auth (#1952) 2023-07-08 18:09:34 +02:00
badges Rename build to pipeline in code (#1224) 2022-10-18 03:24:12 +02:00
cache Rename remote to forge (#1357) 2022-11-05 00:35:06 +01:00
ccmenu Rename build to pipeline in code (#1224) 2022-10-18 03:24:12 +02:00
cron Use modern error handling and enforce it via lint (#1327) 2023-02-02 00:08:02 +01:00
forge Add pull-request implementation for bitbucket forge (#1889) 2023-06-27 23:40:28 +02:00
grpc Fix agent auth (#1952) 2023-07-08 18:09:34 +02:00
logging Fix log view (#1874) 2023-07-01 18:55:00 +02:00
model Adjust model database type mapping (#1949) 2023-07-08 20:09:53 +02:00
pipeline Make sure step passed into go routine exist and does not change (#1903) 2023-07-06 20:19:10 +02:00
plugins Initiate Pagination Implementation for API and Infinite Scroll in UI (#1651) 2023-04-30 03:40:13 +02:00
pubsub Update Go dependencies and minimal Go version to 1.20 (#1650) 2023-03-21 00:48:15 +01:00
queue Add own workflow model (#1784) 2023-06-27 18:01:18 +02:00
router Fix agent auth (#1952) 2023-07-08 18:09:34 +02:00
store Adjust model database type mapping (#1949) 2023-07-08 20:09:53 +02:00
web support custom .JS and .CSS files for custom banner messages (white-labeling) (#1781) 2023-07-10 12:46:35 +02:00
config.go support custom .JS and .CSS files for custom banner messages (white-labeling) (#1781) 2023-07-10 12:46:35 +02:00