fixed cuddle image

This commit is contained in:
Kasper Juul Hermansen 2022-08-14 21:06:07 +02:00
parent 319360968b
commit a1472194d2
Signed by: kjuulh
GPG Key ID: 0F95C140730F2F23
7 changed files with 75 additions and 5 deletions

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/