# Gitlab CI Launchpad Mini Controller > And it's in Rust 🦀! ![Launchpad Mini](https://imgur.com/sdLy3XK.png) ## Aim I wanted to use my Launchpad Mini in a way that was original and useful to me, as I don't produce music. The Launchpad is a glorified MIDI pad with some LEDs, and as a MIDI device, it can be interfaced with to do pretty much anything with it. I used mainly two libraries for this project: - [gitlab](https://crates.io/crates/gitlab) to interact with the Gitlab API - [launchy](https://crates.io/crates/launchy) to interact with the Launchpad These two libraries are maintained at the moment this README is being written. ## Using ### Open associated project Clicking on a tile opens the corresponding web page for the project linked to this tile. ### Retry/create pipeline for project Clicking on the `A` button will engage the `restart` mode. As long as it is lit up, the mode is engaged. If you click on a tile while the `A` button is lit up, it will retry or create a new pipeline for this project and for this ref. You can disengage the mode by pressing again the `A` button. ### Show project name on launchpad Clicking on the `B` button will engage the `show text` mode. As long as it is lit up, the mode is engaged. If you click on a tile while the `B` button is lit up, it will show the project name. You can disengage the mode by pressing again the `B` button. ## Building As any other `cargo` project, it can be built with a simple command: ```bash cargo build --release ``` ## Logging This project uses the [env\_logger](https://crates.io/crates/env_logger) crate for logging. You can take a look at its documentation to see how to adjust the log level instead of using the default error log level. ## Configuring The configuration is done through a JSON file, named `config.json` and located in the current working directory. An example configuration file is provided, `config.json.example`. The abs\_x and abs\_y coordinate are defined using the top-left grid tile as the origin. ## Limitations This project has some limitations right now, and some of them will be fixed: - the program is able to talk to one and only one gitlab API right now - the configuration file has to be in the current working directory - only one page is allowed, but 8 could be leveraged later using the 8 selectors - the refresh delay is fixed for all threads and is at 2 seconds - the launchpad mini is the only launchpad that can be used with this project