Compare commits
67 Commits
284ec2d636
...
renovate/s
| Author | SHA1 | Date | |
|---|---|---|---|
| c2dc495a72 | |||
| a03081df6d | |||
| d26aea5759 | |||
| 4b11130954 | |||
| b14d0dfa77 | |||
| dd41bf3c37 | |||
| a2c86fb7c9 | |||
| 78ae68f27e | |||
| 9419d3a6dd | |||
| 5ae042d4cc | |||
| 11be4a55c2 | |||
| 707b8f3b28 | |||
| 6d4535b069 | |||
| 45a51bbe2c | |||
| 22c966a0ec | |||
| c0f22355dc | |||
| 07920788e5 | |||
| fdb38d7006 | |||
| 6a5fdd1218 | |||
| b62da46495 | |||
| 1db0aae184 | |||
| 8a5939f5a3 | |||
| 5dda685a5c | |||
| 145d83570a | |||
| 3f09588d6b | |||
| f3fa0f5801 | |||
| f4004e4863 | |||
| db1e04fd86 | |||
| c07763fbb2 | |||
| 52a0dc3157 | |||
| 2a4297f629 | |||
| 22e7d53eb2 | |||
| 2e107cd66c | |||
| 72627c7ff6 | |||
| 3d80646160 | |||
| 08a4484ac5 | |||
| 699ac1048f | |||
| 841863a1af | |||
| 47f00d1c4a | |||
| 24023ad6b0 | |||
| 1377e65e27 | |||
| e3dc6b1ffb | |||
| 884819ac64 | |||
| a6c6752e6d | |||
| 8c0dc4f362 | |||
| 7053606c21 | |||
| 2b9c50c615 | |||
| 8f2d57bbbb | |||
| 2248cacbe7 | |||
| 42e6ad3442 | |||
| 5f15285476 | |||
| 3b2e732552 | |||
| 7d47f34e1f | |||
| fb7d770265 | |||
| 5cfa5afb91 | |||
| 73b195c085 | |||
| cfd985e903 | |||
| d9ab3cf163 | |||
| e2d9d22a88 | |||
|
e4e6f37ef3
|
|||
| d889be8572 | |||
|
f0f09cf4e1
|
|||
|
eb857e7a0a
|
|||
|
5cfa9ced67
|
|||
|
c8230091c2
|
|||
| 51d2710bba | |||
| aa22e5add2 |
2
.drone.yml
Normal file
2
.drone.yml
Normal file
@@ -0,0 +1,2 @@
|
||||
kind: template
|
||||
load: cuddle-rust-cli-plan.yaml
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@@ -2,3 +2,4 @@
|
||||
.env
|
||||
target/
|
||||
dest/
|
||||
.cuddle/
|
||||
|
||||
618
Cargo.lock
generated
618
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
25
Cargo.toml
25
Cargo.toml
@@ -1,3 +1,6 @@
|
||||
[workspace]
|
||||
members = ["."]
|
||||
|
||||
[package]
|
||||
name = "pull-articles"
|
||||
version = "0.1.0"
|
||||
@@ -6,18 +9,18 @@ edition = "2021"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
git2 = { version = "0.16.1" }
|
||||
clap = "4.2.1"
|
||||
color-eyre = "0.6.2"
|
||||
git2 = { version = "0.20.0" }
|
||||
clap = "4.5.4"
|
||||
color-eyre = "0.6.3"
|
||||
dotenv = "0.15.0"
|
||||
eyre = "0.6.8"
|
||||
serde = { version = "1.0.159", features = ["derive"] }
|
||||
serde_json = "1.0.95"
|
||||
serde_yaml = "0.9.19"
|
||||
eyre = "0.6.12"
|
||||
serde = { version = "1.0.202", features = ["derive"] }
|
||||
serde_json = "1.0.117"
|
||||
serde_yaml = "0.9.34+deprecated"
|
||||
tempdir = "0.3.7"
|
||||
tokio = { version = "1.27.0", features = ["full"] }
|
||||
tracing = { version = "0.1.37", features = ["log"] }
|
||||
tracing-subscriber = "0.3.16"
|
||||
tokio = { version = "1.37.0", features = ["full"] }
|
||||
tracing = { version = "0.1.40", features = ["log"] }
|
||||
tracing-subscriber = "0.3.18"
|
||||
serde_toml = "0.0.1"
|
||||
toml = { version = "0.7.3", features = ["preserve_order"] }
|
||||
toml = { version = "0.8.12", features = ["preserve_order"] }
|
||||
tokio-scoped = "0.2.0"
|
||||
|
||||
2
build.sh
2
build.sh
@@ -6,4 +6,4 @@ cargo build
|
||||
|
||||
popd || exit
|
||||
|
||||
./ci/target/debug/ci
|
||||
dagger run ./ci/target/debug/ci
|
||||
|
||||
2157
ci/Cargo.lock
generated
2157
ci/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -1,14 +0,0 @@
|
||||
[package]
|
||||
name = "ci"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
chrono = "0.4.24"
|
||||
color-eyre = "0.6.2"
|
||||
dagger-sdk = "0.2.19"
|
||||
eyre = "0.6.8"
|
||||
tokio = { version = "1.27.0", features = ["full"] }
|
||||
tokio-scoped = "0.2.0"
|
||||
112
ci/src/main.rs
112
ci/src/main.rs
@@ -1,112 +0,0 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use dagger_sdk::{HostDirectoryOptsBuilder, QueryContainerOptsBuilder};
|
||||
use tokio::sync::Mutex;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> eyre::Result<()> {
|
||||
color_eyre::install().unwrap();
|
||||
|
||||
let client = dagger_sdk::connect().await?;
|
||||
|
||||
let src = client.host().directory_opts(
|
||||
".",
|
||||
HostDirectoryOptsBuilder::default()
|
||||
.exclude(vec!["target/", ".git/", "ci/"])
|
||||
.build()?,
|
||||
);
|
||||
|
||||
let variants = vec![/*"linux/amd64", */ "linux/arm64"];
|
||||
let platform_variants = Arc::new(Mutex::new(Vec::new()));
|
||||
|
||||
tokio_scoped::scope(|s| {
|
||||
for platform in variants {
|
||||
let client = client.clone();
|
||||
let platform_variants = platform_variants.clone();
|
||||
let src = src.clone();
|
||||
|
||||
s.spawn(async move {
|
||||
let rust_dep_image = client
|
||||
.container_opts(
|
||||
QueryContainerOptsBuilder::default()
|
||||
.platform(platform)
|
||||
.build()
|
||||
.unwrap(),
|
||||
)
|
||||
.from("rustlang/rust:nightly")
|
||||
.with_workdir("/app")
|
||||
//.with_exec(vec!["apt-get", "update"])
|
||||
//.with_exec(vec![
|
||||
// "apt-get",
|
||||
// "install",
|
||||
// "-y",
|
||||
// "build-essential",
|
||||
// "cmake",
|
||||
// "curl",
|
||||
// "file",
|
||||
// "git",
|
||||
// "sudo",
|
||||
// "xutils-dev",
|
||||
// "unzip",
|
||||
// "ca-certificates",
|
||||
// "python3",
|
||||
// "python3-pip",
|
||||
// "autoconf",
|
||||
// "autoconf-archive",
|
||||
// "automake",
|
||||
// "flex",
|
||||
// "bison",
|
||||
// "llvm-dev",
|
||||
// "libclang-dev",
|
||||
// "clang",
|
||||
//])
|
||||
.with_directory(".", src.id().await.unwrap())
|
||||
.with_exec(vec!["cargo", "build", "--release"]);
|
||||
|
||||
let dep_image = client
|
||||
.container_opts(
|
||||
QueryContainerOptsBuilder::default()
|
||||
.platform(platform)
|
||||
.build()
|
||||
.unwrap(),
|
||||
)
|
||||
.from("debian:bullseye")
|
||||
.with_exec(vec!["apt-get", "update"])
|
||||
.with_exec(vec!["apt-get", "install", "-y", "openssl", "git"])
|
||||
.with_file(
|
||||
"/usr/bin/pull-articles",
|
||||
rust_dep_image
|
||||
.file("target/release/pull-articles")
|
||||
.id()
|
||||
.await
|
||||
.unwrap(),
|
||||
)
|
||||
.with_exec(vec!["pull-articles", "--help"]);
|
||||
|
||||
let mut platform_variants = platform_variants.lock().await;
|
||||
platform_variants.push(dep_image.id().await.unwrap())
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
let variants = platform_variants
|
||||
.lock()
|
||||
.await
|
||||
.iter()
|
||||
.map(|c| c.clone())
|
||||
.collect::<Vec<_>>();
|
||||
|
||||
let tag = chrono::Utc::now().timestamp();
|
||||
|
||||
let _ = client
|
||||
.container()
|
||||
.publish_opts(
|
||||
format!("kasperhermansen/pull-articles:{tag}"),
|
||||
dagger_sdk::ContainerPublishOptsBuilder::default()
|
||||
.platform_variants(variants)
|
||||
.build()?,
|
||||
)
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
15
cuddle.yaml
Normal file
15
cuddle.yaml
Normal file
@@ -0,0 +1,15 @@
|
||||
# yaml-language-server: $schema=https://git.front.kjuulh.io/kjuulh/cuddle/raw/branch/main/schemas/base.json
|
||||
|
||||
base: "git@git.front.kjuulh.io:kjuulh/cuddle-rust-cli-plan.git"
|
||||
|
||||
vars:
|
||||
service: "pull-articles"
|
||||
registry: kasperhermansen
|
||||
|
||||
please:
|
||||
project:
|
||||
owner: kjuulh
|
||||
repository: "pull-articles"
|
||||
branch: main
|
||||
settings:
|
||||
api_url: https://git.front.kjuulh.io
|
||||
3
renovate.json
Normal file
3
renovate.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json"
|
||||
}
|
||||
39
src/main.rs
39
src/main.rs
@@ -15,11 +15,17 @@ async fn main() -> eyre::Result<()> {
|
||||
.arg(clap::Arg::new("repo").long("repo").required(true))
|
||||
.arg(clap::Arg::new("path").long("path").required(true))
|
||||
.arg(clap::Arg::new("out").long("out").required(true))
|
||||
.arg(
|
||||
clap::Arg::new("static-out")
|
||||
.long("static-out")
|
||||
.required(false),
|
||||
)
|
||||
.get_matches();
|
||||
|
||||
let repo = matches.get_one::<String>("repo").unwrap();
|
||||
let path = matches.get_one::<String>("path").unwrap();
|
||||
let out = matches.get_one::<String>("out").unwrap();
|
||||
let static_out = matches.get_one::<String>("static-out");
|
||||
|
||||
tracing::info!(repo = repo, path = path, out = out, "pulling articles");
|
||||
|
||||
@@ -56,7 +62,7 @@ async fn main() -> eyre::Result<()> {
|
||||
|
||||
let out_dir = PathBuf::from(out);
|
||||
tokio::fs::create_dir_all(&out_dir).await?;
|
||||
let mut dir = tokio::fs::read_dir(repo_dir).await?;
|
||||
let mut dir = tokio::fs::read_dir(&repo_dir).await?;
|
||||
|
||||
while let Some(file) = dir.next_entry().await? {
|
||||
if let Ok(ft) = file.file_type().await {
|
||||
@@ -66,6 +72,7 @@ async fn main() -> eyre::Result<()> {
|
||||
|
||||
let (frontmatter, content) = extract_frontmatter(file_str)?;
|
||||
let transformed_frontmatter = transform_frontmatter(frontmatter)?;
|
||||
let content = content.replace("assets/", "/assets/");
|
||||
|
||||
let new_article = format!("{}\n{}", transformed_frontmatter, content);
|
||||
let mut out_file = out_dir.clone();
|
||||
@@ -76,6 +83,34 @@ async fn main() -> eyre::Result<()> {
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(static_out) = static_out {
|
||||
let mut assets_dir = repo_dir.clone();
|
||||
assets_dir.push("assets");
|
||||
tracing::info!(
|
||||
asserts_dir = assets_dir.display().to_string(),
|
||||
"reading assets"
|
||||
);
|
||||
|
||||
match tokio::fs::read_dir(&assets_dir).await {
|
||||
Ok(mut dir) => {
|
||||
tokio::fs::create_dir_all(static_out).await?;
|
||||
while let Some(file) = dir.next_entry().await? {
|
||||
if let Ok(_file_type) = file.file_type().await {
|
||||
let from = file.path();
|
||||
let to = PathBuf::from(static_out).join(file.file_name());
|
||||
tracing::info!(
|
||||
from = from.display().to_string(),
|
||||
to = to.display().to_string(),
|
||||
"moving file"
|
||||
);
|
||||
tokio::fs::rename(from, to).await?;
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(e) => tracing::error!(error = e.to_string(), "failed to read dir"),
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@@ -195,7 +230,7 @@ tags:
|
||||
|
||||
let res = transform_frontmatter(frontmatter.into())?;
|
||||
|
||||
assert_eq!(&res, "+++\ntitle = \"Advancing career\"\ndescription = \"2023-04-01-advanding-career\"\ndate = \"2023-04-01\"\nupdated = \"2023-04-01\"\ndraft = true\nauthors = [\"kjuulh\"]\n\n+++\n");
|
||||
assert_eq!(&res, "+++\ntitle = \"Advancing career\"\ndescription = \"2023-04-01-advanding-career\"\ndate = \"2023-04-01\"\nupdated = \"2023-04-01\"\ndraft = true\nauthors = [\"kjuulh\"]\n+++");
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user