Compare commits

...

2 Commits

Author SHA1 Message Date
4765502109
Added cuddle
All checks were successful
continuous-integration/drone Build is passing
2022-08-14 21:06:40 +02:00
a1472194d2
fixed cuddle image 2022-08-14 21:06:07 +02:00
8 changed files with 137 additions and 5 deletions

62
.drone.yml Normal file
View File

@ -0,0 +1,62 @@
kind: pipeline
name: default
type: docker
steps:
- name: load_secret
image: debian:buster-slim
volumes:
- name: ssh
path: /root/.ssh/
environment:
SSH_KEY:
from_secret: gitea_id_ed25519
commands:
- mkdir -p $HOME/.ssh/
- echo "$SSH_KEY" > $HOME/.ssh/id_ed25519
- ls $HOME/.ssh/
- cat $HOME/.ssh/id_ed25519
- name: build
image: kasperhermansen/cuddle-image:latest
pull: always
volumes:
- name: ssh
path: /root/.ssh/
- name: dockersock
path: /var/run
commands:
- apk add bash
- cuddle_cli x build_cuddle_image
environment:
DOCKER_BUILDKIT: 1
DOCKER_USERNAME:
from_secret: docker_username
DOCKER_PASSWORD:
from_secret: docker_password
depends_on:
- "load_secret"
- name: send telegram notification
image: appleboy/drone-telegram
settings:
token:
from_secret: telegram_token
to: 2129601481
format: markdown
when:
status: [failure]
services:
- name: docker
image: docker:dind
privileged: true
volumes:
- name: dockersock
path: /var/run
volumes:
- name: ssh
temp: {}
- name: dockersock
temp: {}

18
cuddle.yaml Normal file
View File

@ -0,0 +1,18 @@
# 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-base.git"
vars:
service: "cuddle-image"
registry: kasperhermansen
scripts:
build_cuddle_image:
type: shell
args:
docker_username:
key: "DOCKER_USERNAME"
type: env
docker_password:
key: "DOCKER_PASSWORD"
type: env

View File

@ -9,6 +9,7 @@ use clap::Command;
use crate::{ use crate::{
actions::CuddleAction, actions::CuddleAction,
config::{CuddleConfig, CuddleFetchPolicy},
context::{CuddleContext, CuddleTreeType}, context::{CuddleContext, CuddleTreeType},
model::*, model::*,
util::git::GitCommit, util::git::GitCommit,
@ -23,16 +24,21 @@ pub struct CuddleCli<'a> {
context: Arc<Mutex<Vec<CuddleContext>>>, context: Arc<Mutex<Vec<CuddleContext>>>,
command: Option<Command<'a>>, command: Option<Command<'a>>,
tmp_dir: Option<PathBuf>, tmp_dir: Option<PathBuf>,
config: CuddleConfig,
} }
impl<'a> CuddleCli<'a> { impl<'a> CuddleCli<'a> {
pub fn new(context: Arc<Mutex<Vec<CuddleContext>>>) -> anyhow::Result<CuddleCli<'a>> { pub fn new(
context: Arc<Mutex<Vec<CuddleContext>>>,
config: CuddleConfig,
) -> anyhow::Result<CuddleCli<'a>> {
let mut cli = CuddleCli { let mut cli = CuddleCli {
scripts: vec![], scripts: vec![],
variables: vec![], variables: vec![],
context: context.clone(), context: context.clone(),
command: None, command: None,
tmp_dir: None, tmp_dir: None,
config,
}; };
cli = cli cli = cli
@ -106,8 +112,13 @@ impl<'a> CuddleCli<'a> {
.tmp_dir .tmp_dir
.clone() .clone()
.ok_or(anyhow::anyhow!("tmp_dir does not exist aborting"))?; .ok_or(anyhow::anyhow!("tmp_dir does not exist aborting"))?;
if tmp_dir.exists() && tmp_dir.ends_with("tmp") { match self.config.get_fetch_policy()? {
std::fs::remove_dir_all(tmp_dir.clone())?; CuddleFetchPolicy::Always => {
if tmp_dir.exists() && tmp_dir.ends_with("tmp") {
std::fs::remove_dir_all(tmp_dir.clone())?;
}
}
_ => {}
} }
std::fs::create_dir_all(tmp_dir.clone())?; std::fs::create_dir_all(tmp_dir.clone())?;
// Handle all templating with variables and such. // Handle all templating with variables and such.

View File

@ -6,7 +6,7 @@ pub enum CuddleFetchPolicy {
Never, Never,
} }
#[derive(Envconfig, Clone)] #[derive(Envconfig, Clone, Debug)]
pub struct CuddleConfig { pub struct CuddleConfig {
#[envconfig(from = "CUDDLE_FETCH_POLICY", default = "once")] #[envconfig(from = "CUDDLE_FETCH_POLICY", default = "once")]
fetch_policy: String, fetch_policy: String,

View File

@ -14,7 +14,7 @@ fn main() -> anyhow::Result<()> {
let config = CuddleConfig::from_env()?; let config = CuddleConfig::from_env()?;
let context = context::extract_cuddle(config.clone())?; let context = context::extract_cuddle(config.clone())?;
_ = cli::CuddleCli::new(context)?.execute()?; _ = cli::CuddleCli::new(context, config)?.execute()?;
Ok(()) Ok(())
} }

16
scripts/build_cuddle_image.sh Executable file
View File

@ -0,0 +1,16 @@
#!/bin/bash
set -e
tag="$REGISTRY/$SERVICE:${COMMIT_SHA:0:10}"
latest_tag="$REGISTRY/$SERVICE:latest"
echo "logging in"
docker login -u $DOCKER_USERNAME -p $DOCKER_PASSWORD
echo "building image"
DOCKER_BUILDKIT=1 docker build -t "$tag" -t "$latest_tag" -f "$TMP/build_cuddle_image.Dockerfile" .
echo "pushing image"
docker push "$tag"
docker push "$latest_tag"

View File

@ -0,0 +1,23 @@
FROM rust:1.62.1-slim-bullseye as base
RUN rustup target add x86_64-unknown-linux-musl
RUN apt-get update -qq && \
apt-get install -y \
musl-tools \
musl-dev
RUN update-ca-certificates
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y -q build-essential curl git
WORKDIR /app/cuddle/
RUN cargo install --target x86_64-unknown-linux-musl --git https://git.front.kjuulh.io/kjuulh/cuddle.git cuddle_cli
FROM docker:stable-dind
COPY --from=base /usr/local/cargo/bin/ /usr/local/cargo/bin/
ENV PATH="${PATH}:/usr/local/cargo/bin"

View File

@ -0,0 +1,2 @@
.cuddle/
.git/