6 Commits

Author SHA1 Message Date
Dreaded_X a970361bb1 chore(actions): Publish Arch Linux package
Release / Arch Linux (push) Successful in 6m29s
2026-04-06 03:45:04 +02:00
Dreaded_X 6c369264ea feat(package): Added PKGBUILD 2026-04-06 02:30:15 +02:00
Dreaded_X e57c2b5ab3 chore(license): Add GPL license 2026-04-05 20:04:57 +02:00
Dreaded_X 589e1e31ec chore(actions): Renamed release-plz workflow file 2026-04-05 19:41:51 +02:00
Dreaded_X 7c4b34cf9a chore(docs): Added README
CI / prek (push) Successful in 13m1s
Release-plz / Release-plz Release (push) Successful in 9m20s
CI / cargo shear (push) Successful in 4m17s
Release-plz / Release-plz PR (push) Successful in 4m26s
2026-04-05 06:12:07 +02:00
Dreaded_X 66373c0636 chore(actions): Setup workflows 2026-04-05 06:12:07 +02:00
14 changed files with 44 additions and 174 deletions
+4 -8
View File
@@ -15,13 +15,9 @@ jobs:
permissions:
issues: write
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Setup rust cache
uses: Swatinem/rust-cache@v2
- name: Audit check
uses: rustsec/audit-check@v2.0.0
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@nightly
- uses: Swatinem/rust-cache@v2
- uses: rustsec/audit-check@v2.0.0
with:
token: ${{ secrets.GITEA_TOKEN }}
+8 -20
View File
@@ -7,38 +7,26 @@ on:
- "*"
pull_request:
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true
jobs:
prek:
name: prek
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@nightly
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@nightly
with:
components: rustfmt, clippy
- name: Setup rust cache
uses: Swatinem/rust-cache@v2
- uses: Swatinem/rust-cache@v2
- uses: j178/prek-action@v2
cargo-shear:
name: cargo shear
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Setup rust cache
uses: Swatinem/rust-cache@v2
- name: Install cargo shear
uses: taiki-e/install-action@v2
- uses: actions/checkout@v6
- uses: dtolnay/rust-toolchain@nightly
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@v2
with:
tool: cargo-shear
- name: cargo shear
run: cargo shear --deny-warnings
- run: cargo shear --deny-warnings
-19
View File
@@ -1,19 +0,0 @@
name: Committed
on:
pull_request:
concurrency:
group: "${{ github.workflow }}-${{ github.ref }}"
cancel-in-progress: true
jobs:
committed:
name: committed
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- uses: crate-ci/committed@master
with:
commits: "origin/${{ gitea.base_ref }}..HEAD"
+11 -20
View File
@@ -14,17 +14,13 @@ jobs:
pull-requests: read
steps:
- &checkout
name: Checkout
uses: actions/checkout@v6
with:
fetch-depth: 0
persist-credentials: false
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Setup rust cache
uses: Swatinem/rust-cache@v2
- name: Install release-plz
uses: taiki-e/install-action@v2
- uses: dtolnay/rust-toolchain@nightly
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@v2
with:
tool: release-plz
- &git-setup
@@ -32,11 +28,10 @@ jobs:
run: |
git config user.name "Release-plz"
git config user.email "release-plz@noreply.huizinga.dev"
git config url.https://${{ gitea.actor }}:${{ secrets.RELEASE_PLZ_TOKEN }}@git.huizinga.dev/.insteadOf https://git.huizinga.dev/
- name: release-plz release
env:
CARGO_REGISTRIES_INFRA_TOKEN: "Bearer ${{ secrets.RELEASE_PLZ_TOKEN }}"
run: release-plz release --git-token "${{ secrets.RELEASE_PLZ_TOKEN }}" --forge gitea
git config url.https://${{ gitea.actor }}:${{ secrets.GITEA_TOKEN }}@git.huizinga.dev/.insteadOf https://git.huizinga.dev/
- env:
CARGO_REGISTRIES_INFRA_TOKEN: "Bearer ${{ secrets.REGISTRY_TOKEN }}"
run: release-plz release --git-token "${{ secrets.GITEA_TOKEN }}" --forge gitea --dry-run
release-plz-pr:
name: Release-plz PR
@@ -49,14 +44,10 @@ jobs:
pull-requests: write
steps:
- *checkout
- name: Install rust toolchain
uses: dtolnay/rust-toolchain@nightly
- name: Setup rust cache
uses: Swatinem/rust-cache@v2
- name: Install release-plz
uses: taiki-e/install-action@v2
- uses: dtolnay/rust-toolchain@nightly
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@v2
with:
tool: release-plz
- *git-setup
- name: release-plz release-pr
run: release-plz release-pr --git-token "${{ secrets.RELEASE_PLZ_TOKEN }}" --forge gitea
- run: release-plz release-pr --git-token "${{ secrets.GITEA_TOKEN }}" --forge gitea
+6 -9
View File
@@ -12,14 +12,11 @@ jobs:
permissions:
packages: write
steps:
- name: Checkout
uses: actions/checkout@v6
- name: Build package
uses: https://git.huizinga.dev/infra/archlinux-package-action@v4
- uses: actions/checkout@v6
- uses: https://git.huizinga.dev/infra/archlinux-package-action@v4
with:
path: .
- name: Upload package
run: |
curl --user ${{ gitea.actor }}:${{ secrets.REGISTRY_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
- run: ls -alh
# - run: 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
View File
@@ -31,7 +31,6 @@ repos:
rev: "1.0.0"
hooks:
- id: mdformat
exclude: "^CHANGELOG.md$"
- repo: local
hooks:
-62
View File
@@ -1,63 +1 @@
# Changelog
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
## [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
- _(package)_ Added PKGBUILD
- Set user agent
- _(performance)_ Disable request features to reduce binary size
- Generate talos configs
- Show error if no clusters are found in repo
- Initial rewrite of python render tool
### <!-- 3 -->Refactor
- Big internal refactor
### <!-- 4 -->Testing
- Disable building tests
### <!-- 5 -->Miscellaneous Tasks
- _(actions)_ Publish Arch Linux package
- _(license)_ Add GPL license
- _(actions)_ Name steps
- _(actions)_ Renamed release-plz workflow file
- _(actions)_ Use committed to check pr commits
- _(actions)_ Cancel in-progress ci runs when pushing to pr
- _(docs)_ Added README
- _(actions)_ Setup workflows
- Publish to gitea registry
- _(pre-commit)_ Update pre commit config
Generated
+1 -1
View File
@@ -214,7 +214,7 @@ dependencies = [
[[package]]
name = "crete"
version = "0.1.3"
version = "0.1.0"
dependencies = [
"clap",
"clap_complete",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "crete"
version = "0.1.3"
version = "0.1.0"
edition = "2024"
default-run = "crete"
publish = ["infra"]
+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 -9
View File
@@ -11,15 +11,7 @@ where
let path = get_talos_path().join("schematics").join(name);
let content = std::fs::read_to_string(path).unwrap().trim().to_owned();
let client = reqwest::blocking::ClientBuilder::new()
.user_agent(format!(
"{}/{}",
std::env!("CARGO_PKG_NAME"),
std::env!("CARGO_PKG_VERSION")
))
.build()
.unwrap();
let client = reqwest::blocking::Client::new();
let res = client
.post("https://factory.talos.dev/schematics")
.body(content)