name: CI/CD Pipeline on: push: branches: [ main, flip_dev ] jobs: lint: runs-on: docker container: image: node:20-alpine # Node available for Gitea Actions steps: - name: Checkout code uses: actions/checkout@v4 - name: Install linters run: | apk add --no-cache python3 py3-pip bash git python3 -m venv venv . venv/bin/activate pip install --upgrade pip pip install yamllint ansible-lint - name: Run linters run: | . venv/bin/activate yamllint . ansible-lint ansible/playbooks build: runs-on: docker container: image: node:20-alpine needs: lint steps: - name: Checkout code uses: actions/checkout@v4 - name: Install Docker CLI run: | apk add --no-cache docker bash git dockerd & sleep 5 - name: Login to Gitea Registry run: | echo "${{ secrets.REGISTRY_PASSWORD }}" | \ docker login dns.s-martika.com \ -u "${{ secrets.REGISTRY_USER }}" \ --password-stdin - name: Build Docker image run: docker build -t dns.s-martika.com/smartika/snake:latest frontend/ - name: Push Docker image run: docker push dns.s-martika.com/smartika/snake:latest deploy: runs-on: docker container: image: node:20-alpine needs: build steps: - name: Checkout code uses: actions/checkout@v4 - name: Install dependencies run: | apk add --no-cache openssh bash git python3 py3-pip pip install ansible - name: Setup SSH run: | mkdir -p ~/.ssh echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa chmod 600 ~/.ssh/id_rsa ssh-keyscan -H >> ~/.ssh/known_hosts - name: Run Ansible deployment run: ansible-playbook -i ../../ansible/inventory.yaml ../../site.yml - name: Run Ansible deployment run: | ansible-playbook \ -i \ ./site.yml