Initial commit
This commit is contained in:
commit
65f1591c05
6 changed files with 2074 additions and 0 deletions
10
Cargo.toml
Normal file
10
Cargo.toml
Normal file
|
@ -0,0 +1,10 @@
|
|||
[package]
|
||||
name = "readme"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
tera = "1.20"
|
||||
serde = { version = "1.0.219", features = ["derive"] }
|
||||
toml = "0.8.23"
|
||||
serde_json = "1.0.140"
|
26
README.toml
Normal file
26
README.toml
Normal file
|
@ -0,0 +1,26 @@
|
|||
[header]
|
||||
src = "https://guardianproject.dev/jasima/lukin/raw/branch/main/pngs/logomark-colour-w1024.png"
|
||||
alt = "jasima.app"
|
||||
href = "https://guardianproject.dev/jasima/lipu-pali"
|
||||
|
||||
[project]
|
||||
name = "Example Project"
|
||||
summary = "An example project for example use"
|
||||
description = """
|
||||
This is an extended description of the example project.
|
||||
Look how much longer it is than the summary.
|
||||
The summary is just one line, but the description is many.
|
||||
"""
|
||||
language = "Rust"
|
||||
licence = "BSD-2-Clause"
|
||||
lifecycle = "experimental"
|
||||
|
||||
[[project.badges]]
|
||||
alt = "Language: Markdown"
|
||||
href = "https://daringfireball.net/projects/markdown/"
|
||||
src = "https://img.shields.io/badge/language-markdown-083fa1?style=flat-square"
|
||||
|
||||
[[project.badges]]
|
||||
alt = "Licence: BSD 2-clause"
|
||||
href = "https://opensource.org/license/bsd-2-clause"
|
||||
src = "https://img.shields.io/badge/license-bsd%202--clause-orange?style=flat-square"
|
1904
src/languages.toml
Normal file
1904
src/languages.toml
Normal file
File diff suppressed because it is too large
Load diff
24
src/licences.toml
Normal file
24
src/licences.toml
Normal file
|
@ -0,0 +1,24 @@
|
|||
[BSD-2-Clause]
|
||||
class = "permissive"
|
||||
grant = """
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright notice,
|
||||
this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
this list of conditions and the following disclaimer in the documentation
|
||||
and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
|
||||
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
|
||||
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
"""
|
57
src/main.rs
Normal file
57
src/main.rs
Normal file
|
@ -0,0 +1,57 @@
|
|||
use std::collections::HashMap;
|
||||
use std::fs;
|
||||
use tera::Tera;
|
||||
use serde::Deserialize;
|
||||
#[derive(Deserialize, serde::Serialize)]
|
||||
struct ReadmeConfig {
|
||||
header: Image,
|
||||
project: Project
|
||||
}
|
||||
|
||||
#[derive(Deserialize, serde::Serialize)]
|
||||
struct Project {
|
||||
name: String,
|
||||
summary: String,
|
||||
description: String,
|
||||
language: String,
|
||||
licence: String,
|
||||
lifecycle: String,
|
||||
badges: Vec<Image>,
|
||||
}
|
||||
|
||||
#[derive(Deserialize, serde::Serialize)]
|
||||
struct Image {
|
||||
alt: String,
|
||||
href: String,
|
||||
src: String,
|
||||
}
|
||||
|
||||
#[derive(Deserialize)]
|
||||
struct Language {
|
||||
color: String
|
||||
}
|
||||
|
||||
|
||||
fn main() {
|
||||
let mut readme_template = Tera::new("templates/**/*").unwrap();
|
||||
readme_template.add_template_file("templates/readme_templ.j2", Option::from("readme")).unwrap();
|
||||
let mut context = tera::Context::new();
|
||||
|
||||
let language_colours = include_str!("languages.toml");
|
||||
let language_colours_config: HashMap<String, Language> = toml::from_str(language_colours).unwrap();
|
||||
// println!("{:?}", colours_config);
|
||||
|
||||
let toml_filename = "README.toml";
|
||||
let contents: String = fs::read_to_string(toml_filename).unwrap();
|
||||
let readme_config: ReadmeConfig = toml::from_str(&contents).expect("Failed to parse readme.toml");
|
||||
|
||||
|
||||
let project_language = &readme_config.project.language;
|
||||
let project_language_colour = language_colours_config.get(project_language).unwrap();
|
||||
|
||||
context.insert("config", &readme_config);
|
||||
|
||||
let rendered = readme_template.render("readme", &context).unwrap();
|
||||
//println!("{}", rendered);
|
||||
|
||||
}
|
53
templates/readme_templ.j2
Normal file
53
templates/readme_templ.j2
Normal file
|
@ -0,0 +1,53 @@
|
|||
|
||||
<h1 align="center">
|
||||
<br>
|
||||
<a href="{{ config.header.href }}"> <img src="{{ config.header.src }}" alt="{{ config.header.alt }}"> </a>
|
||||
<br>
|
||||
</h1>
|
||||
|
||||
<p align="center">
|
||||
{% for badge in config.project.badges %}
|
||||
{% if badge.href %}
|
||||
<a href="{{ badge.href }}"><img alt="{{ badge.alt }}" src="{{ badge.src }}"></a>
|
||||
{% else %}
|
||||
<img alt="{{badge.alt}}" src="{{badge.src}}">
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
## {{ config.project.name }}
|
||||
|
||||
{{ config.project.summary }}
|
||||
|
||||
{{ config.project.description }}
|
||||
|
||||
|
||||
### Usage
|
||||
|
||||
Use these as examples, but I would strongly recommend you do not include these directly in your IaC.
|
||||
If something here fits your needs really well, maybe [get in touch](https://irl.xyz/contact/) with me and check if I'm
|
||||
planning to maintain that role or playbook.
|
||||
Sometimes a bit of external motivation is the push I need to get something finished, otherwise you can always
|
||||
[hire me to do it](https://www.sr2.uk/).
|
||||
|
||||
### Licence
|
||||
|
||||
Copyright © 2022-2025 irl.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
|
||||
following conditions are met:
|
||||
|
||||
Redistributions of source code must retain the above copyright notice, this list of conditions and the following
|
||||
disclaimer.
|
||||
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
|
||||
disclaimer in the documentation and/or other materials provided with the distribution.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
|
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
Loading…
Add table
Add a link
Reference in a new issue