From 016b945815a7ab3a11be300309ef9ffc03d837ca Mon Sep 17 00:00:00 2001 From: maren Date: Mon, 8 Jan 2024 15:23:08 +0000 Subject: [PATCH] maren/more-ci-work (#4) starting to establish a reusable pattern for ssh+deploy.sh from woodpecker for deployments to turtle after this PR is merged i'll document here: https://wiki.bunk.computer/hypha/ci_-_woodpecker Reviewed-on: https://git.bunk.computer/oxaliq/sorrel.dev/pulls/4 Co-authored-by: maren Co-committed-by: maren --- .woodpecker.yml | 35 -------------------------------- .woodpecker/build-and-deploy.yml | 32 +++++++++++++++++++++++++++++ .woodpecker/deploy.sh | 32 +++++++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 35 deletions(-) delete mode 100644 .woodpecker.yml create mode 100644 .woodpecker/build-and-deploy.yml create mode 100755 .woodpecker/deploy.sh diff --git a/.woodpecker.yml b/.woodpecker.yml deleted file mode 100644 index 7c2df29..0000000 --- a/.woodpecker.yml +++ /dev/null @@ -1,35 +0,0 @@ -when: - branch: - include: [ main ] - -steps: - - build: - image: debian:bookworm-slim - commands: - - apt update - # - rm -rf data/ - # - rm -rf in-progress - - apt -yq install racket ca-certificates - - yes Y | raco pkg install --no-docs csv-reading - - raco exe sorrel.dev.rkt - - raco distribute dist sorrel.dev - - deploy: - image: alpine:latest - secrets: [ deploy_ssh_key ] - commands: - - apk add openssh - - mkdir ~/.ssh - - printf '%s\n' "$${DEPLOY_SSH_KEY}" > ~/.ssh/deploy_ssh_key - - printf "Host turtle.hup.is\n\tIdentityFile ~/.ssh/deploy_ssh_key\n\tUserKnownHostsFile=/dev/null\n\tStrictHostKeyChecking=no\n" > ~/.ssh/config - - chmod -R u=rwX,go= ~/.ssh - - mkdir oxaliq - - mv dist oxaliq/. - - mv source oxaliq/. - - mv static oxaliq/. - - scp -r oxaliq deploy@turtle.hup.is:~/ - - ssh deploy@turtle.hup.is 'sudo rm -rf /srv/oxaliq || true && sudo mv oxaliq /srv/. && sudo systemctl restart sorreldotdev.service' - when: - # Only try to deploy if previous step is successful - status: success diff --git a/.woodpecker/build-and-deploy.yml b/.woodpecker/build-and-deploy.yml new file mode 100644 index 0000000..1fddf73 --- /dev/null +++ b/.woodpecker/build-and-deploy.yml @@ -0,0 +1,32 @@ +when: + branch: + include: [ main ] + +steps: + + build: + image: debian:bookworm-slim + commands: + - apt update + - apt -yq install racket ca-certificates + - yes Y | raco pkg install --no-docs csv-reading + - raco exe sorrel.dev.rkt + - raco distribute dist sorrel.dev + + deploy: + image: alpine:latest + secrets: + - deploy_ssh_key + commands: + - echo "SETTING UP SSH" + - apk add openssh-client + - mkdir -p $HOME/.ssh + - ssh-keyscan -t ed25519 turtle.hup.is >> $HOME/.ssh/known_hosts + - echo "$DEPLOY_SSH_KEY" > $HOME/.ssh/id_ed25519 + - chmod 0600 $HOME/.ssh/id_ed25519 + - echo "SSH SETUP DONE" + - echo "RUNNING DEPLOY SCRIPT" + - ./.woodpecker/deploy.sh + when: + # Only try to deploy if previous step is successful + status: success diff --git a/.woodpecker/deploy.sh b/.woodpecker/deploy.sh new file mode 100755 index 0000000..89bd312 --- /dev/null +++ b/.woodpecker/deploy.sh @@ -0,0 +1,32 @@ +#!/bin/sh -e + +# hello variables +host=deploy@turtle.hup.is + +# organize the files +echo "ORGANIZING THE FILES NICELY" +mkdir oxaliq +mv dist oxaliq/. +mv source oxaliq/. +mv static oxaliq/. + +# put them on the deployment target +echo "COPYING FILES TO DEPLOYMENT TARGET" +scp -r oxaliq "$host":~/ + +# do everything on the server that's necessary to run the new thing +# TODO make this not remove the old-working version until +# the new version is confirmed working +echo "SETTING OWNERSHIP AND PERMISSIONS" +ssh $host 'sudo chown -R sorreldotdev:sorreldotdev oxaliq/' +ssh $host 'sudo chmod -R 755 oxaliq/' + +echo "REPLACING PREVIOUS DEPLOYMENT" +ssh $host 'sudo rm -rf /srv/oxaliq || true' +ssh $host 'sudo mv oxaliq /srv/.' + +echo "RESTARTING SERVICE" +ssh $host 'sudo systemctl restart sorreldotdev.service' + +echo "SUCCESS!" +exit 0