![🚧 Under construction 👷‍♂️](https://i.imgur.com/LEP2R3N.png) # actions-core ✅ Get inputs, set outputs, and other basic operations for GitHub Actions
```rs let name = core::get_input_with_options("name", &core::InputOptions { required: true, ..Default::default() })?; let favorite_color = core::get_input("favorite-color"); core::info(format!("Hello {name}!")); core::set_output("message", format!("I like {favorite_color} too!")); ```
👀 Looking for more GitHub Actions crates? Check out [the actions-toolkit.rs project](https://github.com/jcbhmr/actions-toolkit.rs). ## Installation ```sh cargo add actions-core2 ``` ⚠️ Use `use actions_core` in your Rust code. The package name differs from the crate name. ## Usage ![Rust](https://img.shields.io/static/v1?style=for-the-badge&message=Rust&color=000000&logo=Rust&logoColor=FFFFFF&label=) ```rs use actions_core as core; use std::error::Error; fn main() { let result = || -> Result<(), Box> { let name = core::get_input_with_options("name", core::InputOptions { required: true, ..Default::default() })?; let favorite_color = core::get_input("favorite-color")?; core::info!("Hello {name}!"); core::set_output("message", "Wow! Rust is awesome!"); Ok(()) }(); if let Err(error) = result { core::set_failed!("{error}"); } } ``` 🤔 But how do I actually use the generated executable in my `action.yml`? Check out [configure-executable-action](https://github.com/jcbhmr/configure-executable-action)! ## Development ![Rust](https://img.shields.io/static/v1?style=for-the-badge&message=Rust&color=000000&logo=Rust&logoColor=FFFFFF&label=) ![Cargo](https://img.shields.io/static/v1?style=for-the-badge&message=Cargo&color=e6b047&logo=Rust&logoColor=000000&label=) ![Docs.rs](https://img.shields.io/static/v1?style=for-the-badge&message=Docs.rs&color=000000&logo=Docs.rs&logoColor=FFFFFF&label=) This project is part of the [actions-toolkit.rs](https://github.com/jcbhmr/actions-toolkit.rs) project. 🆘 I'm not a very proficient Rust programmer. If you see something that could be better, please tell me! ❤️ You can open an Issue, Pull Request, or even just comment on a commit. You'll probably be granted write access. 😉 Todo list: - [x] Replicate the public API surface from [@actions/core](https://www.npmjs.com/package/@actions/core). Falsey string behaviour included. - [ ] Decide on `get_input("name", Some(...))` vs `get_input_with_options("name", ...)` vs `get_input!("name", ...)`. Need to find existing Rust projects to see the convention. - [ ] Figure out when to use `AsRef`, `&str`, `String`, `Cow`, etc. for parameters and return types. I need to do some recon on existing Rust projects. - [ ] Publish this crate to crates.io. That also entails setting up GitHub Actions to publish the crate on each appropriate monorepo release. - [ ] Copy this content to the crate README. - [ ] Add examples. At least two. - [ ] Add documentation to the public API. Not just "get_input() gets the input".