Author SHA1 Message Date
Release-plz e08d13304d chore(release): Release v0.1.0
Committed / committed (pull_request) Successful in 51s
CI / cargo shear (pull_request) Successful in 6m27s
CI / prek (pull_request) Successful in 6m32s
Release-plz / Release-plz Release (push) Successful in 10m4s
Release-plz / Release-plz PR (push) Successful in 9m11s
CI / prek (push) Successful in 9m20s
Audit / cargo audit (push) Successful in 13m4s
CI / cargo shear (push) Successful in 5m53s
Release / Arch Linux (push) Successful in 7m45s
Signed-off-by: Release-plz <release-plz@noreply.huizinga.dev>
2026-04-07 05:06:36 +02:00
Dreaded_X 8a0a583028 chore(actions): Publish Arch Linux package
CI / cargo shear (push) Successful in 10m54s
CI / prek (push) Successful in 11m57s
Release-plz / Release-plz PR (push) Successful in 6m13s
Release-plz / Release-plz Release (push) Successful in 6m48s
2026-04-07 04:21:54 +02:00
13 changed files with 649 additions and 457 deletions
+1 -2
View File
@@ -7,7 +7,6 @@ on:
- "**/Cargo.lock"
schedule:
- cron: "0 0 * * *"
workflow_dispatch:
jobs:
audit:
@@ -23,6 +22,6 @@ jobs:
- name: Setup rust cache
uses: Swatinem/rust-cache@v2
- name: Audit check
uses: https://git.huizinga.dev/infra/rust-audit-check@v3.0.0
uses: rustsec/audit-check@v2.0.0
with:
token: ${{ secrets.GITEA_TOKEN }}
+6 -6
View File
@@ -11,9 +11,9 @@ jobs:
name: committed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: crate-ci/committed@v1.1.11
with:
commits: "origin/${{ gitea.base_ref }}..HEAD"
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: crate-ci/committed@master
with:
commits: "origin/${{ gitea.base_ref }}..HEAD"
+1 -1
View File
@@ -20,6 +20,6 @@ jobs:
path: .
- name: Upload package
run: |
curl --user ${{ gitea.actor }}:${{ secrets.REGISTRY_TOKEN }} \
curl --user ${{ gitea.actor }}:${{ secrets.GITEA_TOKEN }} \
--upload-file "$(ls | grep -E 'crete-[0-9]+\.[0-9]+\.[0-9]+-[0-9]+-.*.pkg.tar.zst')" \
https://git.huizinga.dev/api/packages/infra/arch/core
+1 -1
View File
@@ -76,6 +76,6 @@ repos:
glob: .gitea/workflows/*.yaml
- repo: https://github.com/crate-ci/committed
rev: v1.1.11
rev: v1.1.8
hooks:
- id: committed
-33
View File
@@ -7,39 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [0.1.4](https://git.huizinga.dev/infra/crete/compare/v0.1.3...v0.1.4) - 2026-10-04
### <!-- 2 -->Bug Fixes
- Pin committed action
### <!-- 5 -->Miscellaneous Tasks
- Migrate to rust audit fork
## [0.1.3](https://git.huizinga.dev/infra/crete/compare/v0.1.2...v0.1.3) - 2026-04-21
### <!-- 0 -->Features
- Add function that applies netmask to ip
### <!-- 3 -->Refactor
- Use ViaDeserialize to convert ip address
## [0.1.2](https://git.huizinga.dev/infra/crete/compare/v0.1.1...v0.1.2) - 2026-04-17
### <!-- 0 -->Features
- Make dns optional
- Allow more than two dns entries
## [0.1.1](https://git.huizinga.dev/infra/crete/compare/v0.1.0...v0.1.1) - 2026-04-13
### <!-- 2 -->Bug Fixes
- No default value for advertise routes
## [0.1.0](https://git.huizinga.dev/infra/crete/releases/tag/v0.1.0) - 2026-04-07
### <!-- 0 -->Features
Generated
+615 -377
View File
File diff suppressed because it is too large Load Diff
+11 -11
View File
@@ -1,6 +1,6 @@
[package]
name = "crete"
version = "0.1.4"
version = "0.1.0"
edition = "2024"
default-run = "crete"
publish = ["infra"]
@@ -10,26 +10,26 @@ license = "GPL-3.0-or-later"
members = ["xtask"]
[workspace.dependencies]
schemars = { version = "1.2.2", features = ["semver1"] }
serde_json = "1.0.151"
schemars = { version = "1.2.1", features = ["semver1"] }
serde_json = "1.0.149"
[dependencies]
clap = { version = "4.6.7", features = ["derive"] }
clap_complete = "4.6.11"
gix-discover = { version = "0.56.0", features = ["sha1"] }
minijinja = { version = "2.24.0", features = ["json", "loader"] }
clap = { version = "4.6.0", features = ["derive"] }
clap_complete = "4.6.0"
gix-discover = { version = "0.49.0", features = ["sha1"] }
minijinja = { version = "2.18.0", features = ["json", "loader"] }
optional_struct = "0.5.2"
reqwest = { version = "0.13.5", default-features = false, features = [
reqwest = { version = "0.13.2", default-features = false, features = [
"blocking",
"stream",
"native-tls",
] }
schemars = { workspace = true }
semver = { version = "1.0.28", features = ["serde"] }
serde = { version = "1.0.229", features = ["derive"] }
semver = { version = "1.0.27", features = ["serde"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = { workspace = true }
serde_yaml = "0.9.34"
thiserror = "2.0.21"
thiserror = "2.0.18"
walkdir = "2.5.0"
[lib]
+1 -1
View File
@@ -1,4 +1,4 @@
[toolchain]
channel = "nightly-2026-10-01"
channel = "nightly-2026-03-12"
profile = "default"
components = ["rust-analyzer"]
+3 -2
View File
@@ -140,11 +140,12 @@
"array",
"null"
],
"default": null,
"items": {
"type": "string",
"format": "ipv4"
}
},
"maxItems": 2,
"minItems": 2
},
"gateway": {
"type": [
+3 -2
View File
@@ -136,11 +136,12 @@
"array",
"null"
],
"default": null,
"items": {
"type": "string",
"format": "ipv4"
}
},
"maxItems": 2,
"minItems": 2
},
"gateway": {
"type": [
+5 -11
View File
@@ -1,8 +1,8 @@
use std::net::Ipv4Addr;
use std::ops::Deref;
use std::path::{Path, PathBuf};
use std::str::FromStr;
use minijinja::value::ViaDeserialize;
use minijinja::{AutoEscape, Environment, path_loader};
use walkdir::WalkDir;
@@ -16,13 +16,6 @@ pub struct PathEnvironment<'a> {
path: PathBuf,
}
fn apply_netmask(
ip: ViaDeserialize<Ipv4Addr>,
netmask: ViaDeserialize<Ipv4Addr>,
) -> Result<String, minijinja::Error> {
Ok((*ip & *netmask).to_string())
}
impl<'a> PathEnvironment<'a> {
pub fn new(path: &Path) -> Self {
let mut env = Environment::new();
@@ -34,7 +27,10 @@ impl<'a> PathEnvironment<'a> {
env.set_auto_escape_callback(|_| AutoEscape::None);
// Add filters
env.add_filter("to_prefix", |netmask: ViaDeserialize<Ipv4Addr>| {
env.add_filter("to_prefix", |netmask: String| {
let netmask = Ipv4Addr::from_str(&netmask).map_err(|err| {
minijinja::Error::new(minijinja::ErrorKind::InvalidOperation, err.to_string())
})?;
let mask = netmask.to_bits();
let prefix = mask.leading_ones();
@@ -48,8 +44,6 @@ impl<'a> PathEnvironment<'a> {
}
});
env.add_function("apply_netmask", apply_netmask);
// Helper function for getting the path to kubeconfig files
env.add_filter("kubeconfig", move |names: Vec<String>| {
names
+1 -9
View File
@@ -53,8 +53,7 @@ struct Network {
ip: Ipv4Addr,
netmask: Ipv4Addr,
gateway: Ipv4Addr,
#[serde(default)]
dns: Option<Vec<Ipv4Addr>>,
dns: [Ipv4Addr; 2],
#[optional_rename(OptionalTailscale)]
#[optional_wrap]
tailscale: Tailscale,
@@ -129,13 +128,6 @@ impl Node {
// Sadly we have to this manually
// TODO: Find a better way of doing this
let default = OptionalNodeDeserialize {
network: Some(OptionalNetwork {
tailscale: Some(OptionalTailscale {
advertise_routes: Some(false),
..Default::default()
}),
..Default::default()
}),
patches: Some(OptionalPatches {
all: Some(vec![]),
control_plane: Some(vec![]),
+1 -1
View File
@@ -4,7 +4,7 @@ version = "0.1.0"
edition = "2024"
[dependencies]
repo_path = "1.4.1"
repo_path = "1.2.4"
schemars = { workspace = true }
serde_json = { workspace = true }
crete = { path = ".." }