Compare commits
2 Commits
319360968b
...
4765502109
Author | SHA1 | Date | |
---|---|---|---|
4765502109 | |||
a1472194d2 |
62
.drone.yml
Normal file
62
.drone.yml
Normal 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
18
cuddle.yaml
Normal 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
|
@ -9,6 +9,7 @@ use clap::Command;
|
||||
|
||||
use crate::{
|
||||
actions::CuddleAction,
|
||||
config::{CuddleConfig, CuddleFetchPolicy},
|
||||
context::{CuddleContext, CuddleTreeType},
|
||||
model::*,
|
||||
util::git::GitCommit,
|
||||
@ -23,16 +24,21 @@ pub struct CuddleCli<'a> {
|
||||
context: Arc<Mutex<Vec<CuddleContext>>>,
|
||||
command: Option<Command<'a>>,
|
||||
tmp_dir: Option<PathBuf>,
|
||||
config: CuddleConfig,
|
||||
}
|
||||
|
||||
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 {
|
||||
scripts: vec![],
|
||||
variables: vec![],
|
||||
context: context.clone(),
|
||||
command: None,
|
||||
tmp_dir: None,
|
||||
config,
|
||||
};
|
||||
|
||||
cli = cli
|
||||
@ -106,9 +112,14 @@ impl<'a> CuddleCli<'a> {
|
||||
.tmp_dir
|
||||
.clone()
|
||||
.ok_or(anyhow::anyhow!("tmp_dir does not exist aborting"))?;
|
||||
match self.config.get_fetch_policy()? {
|
||||
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())?;
|
||||
// Handle all templating with variables and such.
|
||||
// TODO: use actual templating engine, for new we just copy templates to the final folder
|
||||
|
@ -6,7 +6,7 @@ pub enum CuddleFetchPolicy {
|
||||
Never,
|
||||
}
|
||||
|
||||
#[derive(Envconfig, Clone)]
|
||||
#[derive(Envconfig, Clone, Debug)]
|
||||
pub struct CuddleConfig {
|
||||
#[envconfig(from = "CUDDLE_FETCH_POLICY", default = "once")]
|
||||
fetch_policy: String,
|
||||
|
@ -14,7 +14,7 @@ fn main() -> anyhow::Result<()> {
|
||||
let config = CuddleConfig::from_env()?;
|
||||
|
||||
let context = context::extract_cuddle(config.clone())?;
|
||||
_ = cli::CuddleCli::new(context)?.execute()?;
|
||||
_ = cli::CuddleCli::new(context, config)?.execute()?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
16
scripts/build_cuddle_image.sh
Executable file
16
scripts/build_cuddle_image.sh
Executable 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"
|
23
templates/build_cuddle_image.Dockerfile
Normal file
23
templates/build_cuddle_image.Dockerfile
Normal 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"
|
||||
|
2
templates/build_cuddle_image.Dockerfile.dockerignore
Normal file
2
templates/build_cuddle_image.Dockerfile.dockerignore
Normal file
@ -0,0 +1,2 @@
|
||||
.cuddle/
|
||||
.git/
|
Loading…
Reference in New Issue
Block a user