feat: enable upload of templates
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
parent
bf9fb6d72c
commit
768ec95670
1402
Cargo.lock
generated
1402
Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@ -10,3 +10,6 @@ tracing.workspace = true
|
|||||||
tracing-subscriber.workspace = true
|
tracing-subscriber.workspace = true
|
||||||
clap.workspace = true
|
clap.workspace = true
|
||||||
dotenv.workspace = true
|
dotenv.workspace = true
|
||||||
|
reqwest = { version = "0.12.2", features = ["json"]}
|
||||||
|
serde = { version = "1.0.197", features = ["derive"] }
|
||||||
|
serde_json = "1.0.115"
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
use anyhow::Context;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
use anyhow::anyhow;
|
||||||
use clap::{Parser, Subcommand};
|
use clap::{Parser, Subcommand};
|
||||||
|
|
||||||
#[derive(Parser)]
|
#[derive(Parser)]
|
||||||
@ -10,7 +12,19 @@ struct Command {
|
|||||||
|
|
||||||
#[derive(Subcommand)]
|
#[derive(Subcommand)]
|
||||||
enum Commands {
|
enum Commands {
|
||||||
Hello {},
|
Upload {
|
||||||
|
#[arg(long = "template")]
|
||||||
|
template: String,
|
||||||
|
|
||||||
|
#[arg(long = "drone-token", env = "DRONE_TOKEN")]
|
||||||
|
drone_token: String,
|
||||||
|
|
||||||
|
#[arg(long = "drone-host", env = "DRONE_HOST")]
|
||||||
|
drone_host: String,
|
||||||
|
|
||||||
|
#[arg(long = "drone-user", env = "DRONE_USER")]
|
||||||
|
drone_user: String,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
@ -19,10 +33,86 @@ async fn main() -> anyhow::Result<()> {
|
|||||||
tracing_subscriber::fmt::init();
|
tracing_subscriber::fmt::init();
|
||||||
|
|
||||||
let cli = Command::parse();
|
let cli = Command::parse();
|
||||||
tracing::debug!("Starting cli");
|
tracing::debug!("starting cli");
|
||||||
|
|
||||||
if let Some(Commands::Hello { }) = cli.command {
|
if let Some(Commands::Upload {
|
||||||
println!("Hello!")
|
template,
|
||||||
|
drone_token,
|
||||||
|
drone_host,
|
||||||
|
drone_user,
|
||||||
|
}) = cli.command
|
||||||
|
{
|
||||||
|
tracing::info!(template, drone_host, "executing drone upload");
|
||||||
|
|
||||||
|
let template_path = PathBuf::from(&template);
|
||||||
|
if !template_path.exists() {
|
||||||
|
anyhow::bail!("template: {} doesn't exist", template)
|
||||||
|
}
|
||||||
|
|
||||||
|
let template_name = template_path
|
||||||
|
.file_name()
|
||||||
|
.ok_or(anyhow!(
|
||||||
|
"template: {} didn't include a proper filename",
|
||||||
|
&template
|
||||||
|
))?
|
||||||
|
.to_str()
|
||||||
|
.expect("filename to be utf8");
|
||||||
|
let template_data = tokio::fs::read_to_string(&template_path).await?;
|
||||||
|
|
||||||
|
let template_url = format!(
|
||||||
|
"{}/api/templates/{}/{}",
|
||||||
|
drone_host.trim_end_matches('/'),
|
||||||
|
drone_user,
|
||||||
|
template_name
|
||||||
|
);
|
||||||
|
|
||||||
|
let client = reqwest::Client::new();
|
||||||
|
let res = client
|
||||||
|
.put(&template_url)
|
||||||
|
.bearer_auth(&drone_token)
|
||||||
|
.json(&serde_json::json!({
|
||||||
|
"data": &template_data,
|
||||||
|
}))
|
||||||
|
.send()
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
if let Err(e) = res.error_for_status() {
|
||||||
|
match e.status() {
|
||||||
|
Some(reqwest::StatusCode::NOT_FOUND) => {
|
||||||
|
tracing::debug!("template was not found attemping creation instead");
|
||||||
|
|
||||||
|
let template_url = format!(
|
||||||
|
"{}/api/templates/{}",
|
||||||
|
drone_host.trim_end_matches('/'),
|
||||||
|
drone_user,
|
||||||
|
);
|
||||||
|
|
||||||
|
let res = client
|
||||||
|
.post(&template_url)
|
||||||
|
.bearer_auth(&drone_token)
|
||||||
|
.json(&serde_json::json!({
|
||||||
|
"name": &template_name,
|
||||||
|
"data": &template_data,
|
||||||
|
}))
|
||||||
|
.send()
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
if let Err(e) = res.error_for_status() {
|
||||||
|
anyhow::bail!(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
tracing::debug!("template creation successful");
|
||||||
|
}
|
||||||
|
Some(status) => {
|
||||||
|
anyhow::bail!("error: {}, failed to upload template: {}", e, status)
|
||||||
|
}
|
||||||
|
None => {
|
||||||
|
anyhow::bail!(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tracing::info!(template, "successfully updated template");
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
version: "3"
|
|
||||||
services:
|
|
||||||
crdb:
|
|
||||||
restart: 'always'
|
|
||||||
image: 'cockroachdb/cockroach:v23.1.14'
|
|
||||||
command: 'start-single-node --advertise-addr 0.0.0.0 --insecure'
|
|
||||||
healthcheck:
|
|
||||||
test: ["CMD", "curl", "-f", "http://localhost:8080/health?ready=1"]
|
|
||||||
interval: '10s'
|
|
||||||
timeout: '30s'
|
|
||||||
retries: 5
|
|
||||||
start_period: '20s'
|
|
||||||
ports:
|
|
||||||
- 8080:8080
|
|
||||||
- '26257:26257'
|
|
124
templates/example-template.yaml
Normal file
124
templates/example-template.yaml
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
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" | base64 -d > $HOME/.ssh/id_ed25519
|
||||||
|
- chmod -R 600 ~/.ssh
|
||||||
|
- |
|
||||||
|
cat >$HOME/.ssh/config <<EOL
|
||||||
|
Host git.front.kjuulh.io
|
||||||
|
IdentityFile $HOME/.ssh/id_ed25519
|
||||||
|
IdentitiesOnly yes
|
||||||
|
UserKnownHostsFile=/dev/null
|
||||||
|
StrictHostKeyChecking no
|
||||||
|
EOL
|
||||||
|
- chmod 700 ~/.ssh/config
|
||||||
|
|
||||||
|
- name: build pr
|
||||||
|
image: kasperhermansen/cuddle-rust-cli-plan:main-1711754276
|
||||||
|
pull: always
|
||||||
|
volumes:
|
||||||
|
- name: ssh
|
||||||
|
path: /root/.ssh/
|
||||||
|
commands:
|
||||||
|
- eval `ssh-agent`
|
||||||
|
- ssh-add
|
||||||
|
- echo "$DOCKER_PASSWORD" | docker login --password-stdin --username="$DOCKER_USERNAME" docker.io
|
||||||
|
- export CLUSTER=clank-dev
|
||||||
|
- cuddle-rust-cli-plan pr
|
||||||
|
environment:
|
||||||
|
REGISTRY_CACHE_USERNAME:
|
||||||
|
from_secret: registry_cache_username
|
||||||
|
REGISTRY_CACHE_PASSWORD:
|
||||||
|
from_secret: registry_cache_password
|
||||||
|
REGISTRY_CACHE_TOKEN:
|
||||||
|
from_secret: registry_cache_token
|
||||||
|
REGISTRY_CACHE_url:
|
||||||
|
from_secret: registry_cache_url
|
||||||
|
DOCKER_BUILDKIT: 1
|
||||||
|
DOCKER_PASSWORD:
|
||||||
|
from_secret: docker_password
|
||||||
|
DOCKER_USERNAME:
|
||||||
|
from_secret: docker_username
|
||||||
|
CUDDLE_SECRETS_PROVIDER: 1password
|
||||||
|
CUDDLE_ONE_PASSWORD_DOT_ENV: ".env.ci"
|
||||||
|
CUDDLE_SSH_AGENT: "true"
|
||||||
|
GIT_PASSWORD:
|
||||||
|
from_secret: git_password
|
||||||
|
CI_PREFIX: "/mnt/ci/ci"
|
||||||
|
DOCKER_HOST: "tcp://192.168.1.233:2376"
|
||||||
|
CUDDLE_PLEASE_TOKEN:
|
||||||
|
from_secret: cuddle_please_token
|
||||||
|
OP_SERVICE_ACCOUNT_TOKEN:
|
||||||
|
from_secret: op_service_account_token
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- pull_request
|
||||||
|
exclude:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
depends_on:
|
||||||
|
- "load_secret"
|
||||||
|
|
||||||
|
- name: build main
|
||||||
|
image: kasperhermansen/cuddle-rust-cli-plan:main-1711754276
|
||||||
|
pull: always
|
||||||
|
volumes:
|
||||||
|
- name: ssh
|
||||||
|
path: /root/.ssh/
|
||||||
|
commands:
|
||||||
|
- eval `ssh-agent`
|
||||||
|
- ssh-add
|
||||||
|
- echo "$DOCKER_PASSWORD" | docker login --password-stdin --username="$DOCKER_USERNAME" docker.io
|
||||||
|
- export CLUSTER=clank-prod
|
||||||
|
- cuddle-rust-cli-plan main
|
||||||
|
environment:
|
||||||
|
REGISTRY_CACHE_USERNAME:
|
||||||
|
from_secret: registry_cache_username
|
||||||
|
REGISTRY_CACHE_PASSWORD:
|
||||||
|
from_secret: registry_cache_password
|
||||||
|
REGISTRY_CACHE_TOKEN:
|
||||||
|
from_secret: registry_cache_token
|
||||||
|
REGISTRY_CACHE_url:
|
||||||
|
from_secret: registry_cache_url
|
||||||
|
DOCKER_BUILDKIT: 1
|
||||||
|
DOCKER_PASSWORD:
|
||||||
|
from_secret: docker_password
|
||||||
|
DOCKER_USERNAME:
|
||||||
|
from_secret: docker_username
|
||||||
|
CUDDLE_SECRETS_PROVIDER: 1password
|
||||||
|
CUDDLE_ONE_PASSWORD_DOT_ENV: ".env.ci"
|
||||||
|
CUDDLE_SSH_AGENT: "true"
|
||||||
|
GIT_PASSWORD:
|
||||||
|
from_secret: git_password
|
||||||
|
CI_PREFIX: "/mnt/ci/ci"
|
||||||
|
DOCKER_HOST: "tcp://192.168.1.233:2376"
|
||||||
|
CUDDLE_PLEASE_TOKEN:
|
||||||
|
from_secret: cuddle_please_token
|
||||||
|
OP_SERVICE_ACCOUNT_TOKEN:
|
||||||
|
from_secret: op_service_account_token
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
branch:
|
||||||
|
- main
|
||||||
|
- master
|
||||||
|
exclude:
|
||||||
|
- pull_request
|
||||||
|
depends_on:
|
||||||
|
- "load_secret"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- name: ssh
|
||||||
|
temp: {}
|
Loading…
Reference in New Issue
Block a user