aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows/cd.yml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/cd.yml')
-rw-r--r--.github/workflows/cd.yml88
1 files changed, 88 insertions, 0 deletions
diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
new file mode 100644
index 0000000..2419fe2
--- /dev/null
+++ b/.github/workflows/cd.yml
@@ -0,0 +1,88 @@
+name: Release and deploy new version
+on:
+ push:
+ branches:
+ - main
+jobs:
+ Build-docker-and-push:
+ name: Build the production docker container image and push it to dockerhub
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ submodules: recursive
+ - uses: docker/login-action@v3
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - uses: docker/build-push-action@v5
+ with:
+ push: true
+ context: .
+ file: ./docker/prod/Dockerfile
+ tags: ${{ secrets.DOCKERHUB_USERNAME }}/pico-web-server:latest
+
+ Release:
+ name: Make github release
+ runs-on: ubuntu-latest
+ needs: Build-docker-and-push
+ steps:
+ - uses: actions/checkout@v4
+ - uses: rymndhng/release-on-push-action@master
+ env:
+ GITHUB_TOKEN: ${{ secrets.TOKEN_GITHUB }}
+ with:
+ bump_version_scheme: norelease # PR must have one of these labels: release:major, release:minor, release:patch
+
+ # This emulates deploying to an actual (remote) cluster by first setting up the cluster on older commit and then rolling out current one
+ Deploy-kubernetes:
+ name: Deploy kubernetes cluster locally to an action
+ runs-on: ubuntu-latest
+ needs: Build-docker-and-push
+ steps:
+ # Setup dependencies
+ - name: Install socat
+ run: sudo apt-get install -y socat
+ - uses: medyagh/setup-minikube@master
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 2
+ - name: Pull (release) docker image
+ run: |
+ docker pull ${{ secrets.DOCKERHUB_USERNAME }}/pico-web-server:latest
+ - name: Configure demo data
+ run: |
+ minikube cp ./demo/index.md /usr/share/demo/
+
+ # Setup old deployment
+ - name: Checkout previous commit
+ run: |
+ git checkout HEAD^
+ # Deploy previous version
+ - name: Minikube deploy
+ run: |
+ kubectl apply -f kubernetes/
+ kubectl rollout status deployment/pico-web-server-deployment
+ - name: Using cluster
+ run: |
+ kubectl get all
+ echo -ne 'demo@/' | socat STDIO TCP:$(minikube service pico-web-server-service --url | cut -d/ -f3-)
+
+ # Setup current deployment
+ - name: Checkout current
+ run: |
+ git checkout main
+ # Deploy current version
+ - name: Minikube deploy
+ run: |
+ kubectl apply -f kubernetes/
+ kubectl rollout status deployment/pico-web-server-deployment
+ - name: Using cluster
+ run: |
+ kubectl get all
+ echo -ne 'demo@/' | socat STDIO TCP:$(minikube service pico-web-server-service --url | cut -d/ -f3-)
+
+ # End
+ - name: Minikube stop
+ run: |
+ minikube stop