name: Create release and push production server image to dockerhub 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