name: Run tests, build docker images and deploy run-name: Run tests, build docker images and deploy on: push: branches: - master workflow_dispatch: env: DOCKER_JOB_ID: mscc-react-app jobs: docker-build: name: Docker build and push runs-on: ubuntu-latest needs: test defaults: run: shell: sh steps: - name: Checkout uses: actions/checkout@v4 - name: Docker info run: docker info - name: Login to Gitea uses: docker/login-action@v3 with: registry: https://${{ vars.DOMAIN_NAME_GITEA }} username: ${{ secrets.CI_REGISTRY_USER_GITEA }} password: ${{ secrets.CI_BUILD_TOKEN_GITEA }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push uses: docker/build-push-action@v6 with: push: true tags: '${{ vars.DOMAIN_NAME_GITEA }}/${{ gitea.repository }}:latest' deploy: name: Deploy on server runs-on: ubuntu-latest needs: docker-build steps: - name: Install openssh-client run: | apt update -qy apt install -y openssh-client - name: Configure SSH run: | mkdir -p ~/.ssh chmod 700 ~/.ssh export SSH_PRIVATE_KEY_PATH=~/.ssh/id_rsa echo "${{ secrets.WORKER_SSH_PRIVATE_KEY }}" > $SSH_PRIVATE_KEY_PATH chmod 600 $SSH_PRIVATE_KEY_PATH ssh-keyscan ${{ vars.SERVER_ADDRESS }} >> ~/.ssh/known_hosts chmod 644 ~/.ssh/known_hosts echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config eval $(ssh-agent -s) - name: Checkout uses: actions/checkout@v4 - name: Rebuild container run: | docker stop ${{ env.DOCKER_JOB_ID }} || true docker rm ${{ env.DOCKER_JOB_ID }} || true scp docker-compose.yml ${{ vars.SERVER_USERNAME }}@${{ vars.SERVER_ADDRESS }}:/tmp/docker-compose.yml ssh -tt -l ${{ vars.SERVER_USERNAME }} ${{ vars.SERVER_ADDRESS }} "cd /tmp/ && docker compose down && docker pull ${{ vars.DOMAIN_NAME_GITEA }}/${{ gitea.repository }}:latest && docker compose up -d && rm -f /tmp/docker-compose.yml"