Compare commits
6 Commits
v0.1.3
..
f70c56c76a
| Author | SHA1 | Date | |
|---|---|---|---|
|
f70c56c76a
|
|||
|
724cd1624e
|
|||
|
e57c2b5ab3
|
|||
|
589e1e31ec
|
|||
|
7c4b34cf9a
|
|||
|
66373c0636
|
@@ -15,13 +15,9 @@ jobs:
|
|||||||
permissions:
|
permissions:
|
||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- uses: actions/checkout@v6
|
||||||
uses: actions/checkout@v6
|
- uses: dtolnay/rust-toolchain@nightly
|
||||||
- name: Install rust toolchain
|
- uses: Swatinem/rust-cache@v2
|
||||||
uses: dtolnay/rust-toolchain@nightly
|
- uses: rustsec/audit-check@v2.0.0
|
||||||
- name: Setup rust cache
|
|
||||||
uses: Swatinem/rust-cache@v2
|
|
||||||
- name: Audit check
|
|
||||||
uses: rustsec/audit-check@v2.0.0
|
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GITEA_TOKEN }}
|
token: ${{ secrets.GITEA_TOKEN }}
|
||||||
|
|||||||
@@ -7,38 +7,26 @@ on:
|
|||||||
- "*"
|
- "*"
|
||||||
pull_request:
|
pull_request:
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: "${{ github.workflow }}-${{ github.ref }}"
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
prek:
|
prek:
|
||||||
name: prek
|
name: prek
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- uses: actions/checkout@v6
|
||||||
uses: actions/checkout@v6
|
- uses: dtolnay/rust-toolchain@nightly
|
||||||
- name: Install rust toolchain
|
|
||||||
uses: dtolnay/rust-toolchain@nightly
|
|
||||||
with:
|
with:
|
||||||
components: rustfmt, clippy
|
components: rustfmt, clippy
|
||||||
- name: Setup rust cache
|
- uses: Swatinem/rust-cache@v2
|
||||||
uses: Swatinem/rust-cache@v2
|
|
||||||
- uses: j178/prek-action@v2
|
- uses: j178/prek-action@v2
|
||||||
|
|
||||||
cargo-shear:
|
cargo-shear:
|
||||||
name: cargo shear
|
name: cargo shear
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- uses: actions/checkout@v6
|
||||||
uses: actions/checkout@v6
|
- uses: dtolnay/rust-toolchain@nightly
|
||||||
- name: Install rust toolchain
|
- uses: Swatinem/rust-cache@v2
|
||||||
uses: dtolnay/rust-toolchain@nightly
|
- uses: taiki-e/install-action@v2
|
||||||
- name: Setup rust cache
|
|
||||||
uses: Swatinem/rust-cache@v2
|
|
||||||
- name: Install cargo shear
|
|
||||||
uses: taiki-e/install-action@v2
|
|
||||||
with:
|
with:
|
||||||
tool: cargo-shear
|
tool: cargo-shear
|
||||||
- name: cargo shear
|
- run: cargo shear --deny-warnings
|
||||||
run: cargo shear --deny-warnings
|
|
||||||
|
|||||||
@@ -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"
|
|
||||||
@@ -14,17 +14,13 @@ jobs:
|
|||||||
pull-requests: read
|
pull-requests: read
|
||||||
steps:
|
steps:
|
||||||
- &checkout
|
- &checkout
|
||||||
name: Checkout
|
|
||||||
uses: actions/checkout@v6
|
uses: actions/checkout@v6
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: Install rust toolchain
|
- uses: dtolnay/rust-toolchain@nightly
|
||||||
uses: dtolnay/rust-toolchain@nightly
|
- uses: Swatinem/rust-cache@v2
|
||||||
- name: Setup rust cache
|
- uses: taiki-e/install-action@v2
|
||||||
uses: Swatinem/rust-cache@v2
|
|
||||||
- name: Install release-plz
|
|
||||||
uses: taiki-e/install-action@v2
|
|
||||||
with:
|
with:
|
||||||
tool: release-plz
|
tool: release-plz
|
||||||
- &git-setup
|
- &git-setup
|
||||||
@@ -32,11 +28,10 @@ jobs:
|
|||||||
run: |
|
run: |
|
||||||
git config user.name "Release-plz"
|
git config user.name "Release-plz"
|
||||||
git config user.email "release-plz@noreply.huizinga.dev"
|
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/
|
git config url.https://${{ gitea.actor }}:${{ secrets.GITEA_TOKEN }}@git.huizinga.dev/.insteadOf https://git.huizinga.dev/
|
||||||
- name: release-plz release
|
- env:
|
||||||
env:
|
CARGO_REGISTRIES_INFRA_TOKEN: "Bearer ${{ secrets.REGISTRY_TOKEN }}"
|
||||||
CARGO_REGISTRIES_INFRA_TOKEN: "Bearer ${{ secrets.RELEASE_PLZ_TOKEN }}"
|
run: release-plz release --git-token "${{ secrets.GITEA_TOKEN }}" --forge gitea --dry-run
|
||||||
run: release-plz release --git-token "${{ secrets.RELEASE_PLZ_TOKEN }}" --forge gitea
|
|
||||||
|
|
||||||
release-plz-pr:
|
release-plz-pr:
|
||||||
name: Release-plz PR
|
name: Release-plz PR
|
||||||
@@ -49,14 +44,10 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- *checkout
|
- *checkout
|
||||||
- name: Install rust toolchain
|
- uses: dtolnay/rust-toolchain@nightly
|
||||||
uses: dtolnay/rust-toolchain@nightly
|
- uses: Swatinem/rust-cache@v2
|
||||||
- name: Setup rust cache
|
- uses: taiki-e/install-action@v2
|
||||||
uses: Swatinem/rust-cache@v2
|
|
||||||
- name: Install release-plz
|
|
||||||
uses: taiki-e/install-action@v2
|
|
||||||
with:
|
with:
|
||||||
tool: release-plz
|
tool: release-plz
|
||||||
- *git-setup
|
- *git-setup
|
||||||
- name: release-plz release-pr
|
- run: release-plz release-pr --git-token "${{ secrets.GITEA_TOKEN }}" --forge gitea
|
||||||
run: release-plz release-pr --git-token "${{ secrets.RELEASE_PLZ_TOKEN }}" --forge gitea
|
|
||||||
|
|||||||
@@ -9,17 +9,6 @@ jobs:
|
|||||||
archlinux:
|
archlinux:
|
||||||
name: Arch Linux
|
name: Arch Linux
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
|
||||||
packages: write
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- uses: actions/checkout@v2
|
||||||
uses: actions/checkout@v6
|
- uses: heyhusen/archlinux-package-action@v3.0.0
|
||||||
- name: Build package
|
|
||||||
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
|
|
||||||
|
|||||||
@@ -31,7 +31,6 @@ repos:
|
|||||||
rev: "1.0.0"
|
rev: "1.0.0"
|
||||||
hooks:
|
hooks:
|
||||||
- id: mdformat
|
- id: mdformat
|
||||||
exclude: "^CHANGELOG.md$"
|
|
||||||
|
|
||||||
- repo: local
|
- repo: local
|
||||||
hooks:
|
hooks:
|
||||||
|
|||||||
@@ -1,63 +1 @@
|
|||||||
# Changelog
|
# 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
@@ -214,7 +214,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crete"
|
name = "crete"
|
||||||
version = "0.1.3"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"clap_complete",
|
"clap_complete",
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[package]
|
[package]
|
||||||
name = "crete"
|
name = "crete"
|
||||||
version = "0.1.3"
|
version = "0.1.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
default-run = "crete"
|
default-run = "crete"
|
||||||
publish = ["infra"]
|
publish = ["infra"]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# Maintainer: Tim Huizinga <tim@huizinga.dev>
|
# Maintainer: Tim Huizinga <tim@huizinga.dev>
|
||||||
pkgname=crete
|
pkgname=crete
|
||||||
pkgver=dummy
|
pkgver=0.0.0
|
||||||
pkgrel=1
|
pkgrel=1
|
||||||
pkgdesc='A tool that takes node and cluster configs and uses it to generate talos configs and render jinja templates'
|
pkgdesc='A tool that takes node and cluster configs and uses it to generate talos configs and render jinja templates'
|
||||||
url='https://git.huizinga.dev/infra/crete'
|
url='https://git.huizinga.dev/infra/crete'
|
||||||
|
|||||||
@@ -5,32 +5,6 @@ and render jinja templates.
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
### Arch
|
|
||||||
|
|
||||||
First import the verification key:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
wget https://git.huizinga.dev/api/packages/infra/arch/repository.key -O /tmp/repository.key
|
|
||||||
sudo pacman-key --add /tmp/repository.key
|
|
||||||
sudo pacman-key --lsign-key $(gpg --show-keys /tmp/repository.key | sed -n 2p)
|
|
||||||
```
|
|
||||||
|
|
||||||
And add the following to `/etc/pacman.conf`:
|
|
||||||
|
|
||||||
```ini
|
|
||||||
[infra]
|
|
||||||
SigLevel = Required
|
|
||||||
Server = https://git.huizinga.dev/api/packages/infra/arch/core/$arch
|
|
||||||
```
|
|
||||||
|
|
||||||
You can then install `crete` by running:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
sudo pacman -Sy crete
|
|
||||||
```
|
|
||||||
|
|
||||||
### Cargo install
|
|
||||||
|
|
||||||
Add the following to `~/.cargo.config.toml`:
|
Add the following to `~/.cargo.config.toml`:
|
||||||
|
|
||||||
```toml
|
```toml
|
||||||
|
|||||||
@@ -140,11 +140,12 @@
|
|||||||
"array",
|
"array",
|
||||||
"null"
|
"null"
|
||||||
],
|
],
|
||||||
"default": null,
|
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "ipv4"
|
"format": "ipv4"
|
||||||
}
|
},
|
||||||
|
"maxItems": 2,
|
||||||
|
"minItems": 2
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"type": [
|
"type": [
|
||||||
|
|||||||
+3
-2
@@ -136,11 +136,12 @@
|
|||||||
"array",
|
"array",
|
||||||
"null"
|
"null"
|
||||||
],
|
],
|
||||||
"default": null,
|
|
||||||
"items": {
|
"items": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"format": "ipv4"
|
"format": "ipv4"
|
||||||
}
|
},
|
||||||
|
"maxItems": 2,
|
||||||
|
"minItems": 2
|
||||||
},
|
},
|
||||||
"gateway": {
|
"gateway": {
|
||||||
"type": [
|
"type": [
|
||||||
|
|||||||
+5
-11
@@ -1,8 +1,8 @@
|
|||||||
use std::net::Ipv4Addr;
|
use std::net::Ipv4Addr;
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
|
use std::str::FromStr;
|
||||||
|
|
||||||
use minijinja::value::ViaDeserialize;
|
|
||||||
use minijinja::{AutoEscape, Environment, path_loader};
|
use minijinja::{AutoEscape, Environment, path_loader};
|
||||||
use walkdir::WalkDir;
|
use walkdir::WalkDir;
|
||||||
|
|
||||||
@@ -16,13 +16,6 @@ pub struct PathEnvironment<'a> {
|
|||||||
path: PathBuf,
|
path: PathBuf,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn apply_netmask(
|
|
||||||
ip: ViaDeserialize<Ipv4Addr>,
|
|
||||||
netmask: ViaDeserialize<Ipv4Addr>,
|
|
||||||
) -> Result<String, minijinja::Error> {
|
|
||||||
Ok((*ip & *netmask).to_string())
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> PathEnvironment<'a> {
|
impl<'a> PathEnvironment<'a> {
|
||||||
pub fn new(path: &Path) -> Self {
|
pub fn new(path: &Path) -> Self {
|
||||||
let mut env = Environment::new();
|
let mut env = Environment::new();
|
||||||
@@ -34,7 +27,10 @@ impl<'a> PathEnvironment<'a> {
|
|||||||
env.set_auto_escape_callback(|_| AutoEscape::None);
|
env.set_auto_escape_callback(|_| AutoEscape::None);
|
||||||
|
|
||||||
// Add filters
|
// 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 mask = netmask.to_bits();
|
||||||
let prefix = mask.leading_ones();
|
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
|
// Helper function for getting the path to kubeconfig files
|
||||||
env.add_filter("kubeconfig", move |names: Vec<String>| {
|
env.add_filter("kubeconfig", move |names: Vec<String>| {
|
||||||
names
|
names
|
||||||
|
|||||||
+1
-9
@@ -53,8 +53,7 @@ struct Network {
|
|||||||
ip: Ipv4Addr,
|
ip: Ipv4Addr,
|
||||||
netmask: Ipv4Addr,
|
netmask: Ipv4Addr,
|
||||||
gateway: Ipv4Addr,
|
gateway: Ipv4Addr,
|
||||||
#[serde(default)]
|
dns: [Ipv4Addr; 2],
|
||||||
dns: Option<Vec<Ipv4Addr>>,
|
|
||||||
#[optional_rename(OptionalTailscale)]
|
#[optional_rename(OptionalTailscale)]
|
||||||
#[optional_wrap]
|
#[optional_wrap]
|
||||||
tailscale: Tailscale,
|
tailscale: Tailscale,
|
||||||
@@ -129,13 +128,6 @@ impl Node {
|
|||||||
// Sadly we have to this manually
|
// Sadly we have to this manually
|
||||||
// TODO: Find a better way of doing this
|
// TODO: Find a better way of doing this
|
||||||
let default = OptionalNodeDeserialize {
|
let default = OptionalNodeDeserialize {
|
||||||
network: Some(OptionalNetwork {
|
|
||||||
tailscale: Some(OptionalTailscale {
|
|
||||||
advertise_routes: Some(false),
|
|
||||||
..Default::default()
|
|
||||||
}),
|
|
||||||
..Default::default()
|
|
||||||
}),
|
|
||||||
patches: Some(OptionalPatches {
|
patches: Some(OptionalPatches {
|
||||||
all: Some(vec![]),
|
all: Some(vec![]),
|
||||||
control_plane: Some(vec![]),
|
control_plane: Some(vec![]),
|
||||||
|
|||||||
+1
-9
@@ -11,15 +11,7 @@ where
|
|||||||
let path = get_talos_path().join("schematics").join(name);
|
let path = get_talos_path().join("schematics").join(name);
|
||||||
let content = std::fs::read_to_string(path).unwrap().trim().to_owned();
|
let content = std::fs::read_to_string(path).unwrap().trim().to_owned();
|
||||||
|
|
||||||
let client = reqwest::blocking::ClientBuilder::new()
|
let client = reqwest::blocking::Client::new();
|
||||||
.user_agent(format!(
|
|
||||||
"{}/{}",
|
|
||||||
std::env!("CARGO_PKG_NAME"),
|
|
||||||
std::env!("CARGO_PKG_VERSION")
|
|
||||||
))
|
|
||||||
.build()
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
let res = client
|
let res = client
|
||||||
.post("https://factory.talos.dev/schematics")
|
.post("https://factory.talos.dev/schematics")
|
||||||
.body(content)
|
.body(content)
|
||||||
|
|||||||
Reference in New Issue
Block a user