name: AS Talange CI/CD Pipeline on: push: branches: - main - 'prod/*' jobs: test: name: Build & Run Unit Tests runs-on: self-hosted container: image: maven:3.9.6-eclipse-temurin-21 steps: - name: Clone repository run: | if ! command -v git &> /dev/null; then apt-get update && apt-get install -y git fi SERVER_URL="${{ github.server_url }}" SERVER_NO_PROTO="${SERVER_URL#http://}" SERVER_NO_PROTO="${SERVER_NO_PROTO#https://}" git clone --depth 1 "https://oauth2:${{ secrets.GITHUB_TOKEN }}@${SERVER_NO_PROTO}/${{ github.repository }}.git" . git checkout ${{ github.sha }} - name: Run Maven Tests run: mvn clean test deploy_test: name: Deploy to Test Environment needs: test if: github.ref == 'refs/heads/main' runs-on: [self-hosted, test] container: image: docker:latest steps: - name: Clone repository run: | apk add --no-cache git SERVER_URL="${{ github.server_url }}" SERVER_NO_PROTO="${SERVER_URL#http://}" SERVER_NO_PROTO="${SERVER_NO_PROTO#https://}" git clone --depth 1 "https://oauth2:${{ secrets.GITHUB_TOKEN }}@${SERVER_NO_PROTO}/${{ github.repository }}.git" . git checkout ${{ github.sha }} - name: Deploy with Docker Compose env: DB_USER: ${{ secrets.DB_USER }} DB_PASSWORD: ${{ secrets.DB_PASSWORD }} run: | echo "POSTGRES_USER=${DB_USER:-myuser}" > .env echo "POSTGRES_PASSWORD=${DB_PASSWORD:-mypassword}" >> .env docker compose down app || true docker compose up -d --build app deploy_prod: name: Deploy to Prod Environment needs: test if: startsWith(github.ref, 'refs/heads/prod/') runs-on: [self-hosted, prod] container: image: docker:latest steps: - name: Clone repository run: | apk add --no-cache git SERVER_URL="${{ github.server_url }}" SERVER_NO_PROTO="${SERVER_URL#http://}" SERVER_NO_PROTO="${SERVER_NO_PROTO#https://}" git clone --depth 1 "https://oauth2:${{ secrets.GITHUB_TOKEN }}@${SERVER_NO_PROTO}/${{ github.repository }}.git" . git checkout ${{ github.sha }} - name: Deploy with Docker Compose env: DB_USER: ${{ secrets.DB_USER }} DB_PASSWORD: ${{ secrets.DB_PASSWORD }} CAPTCHA_SECRET: ${{ secrets.CAPTCHA_SECRET }} CAPTCHA_SITEKEY: ${{ secrets.CAPTCHA_SITEKEY }} run: | echo "POSTGRES_USER=${DB_USER:-myuser}" > .env echo "POSTGRES_PASSWORD=${DB_PASSWORD:-mypassword}" >> .env echo "CAPTCHA_SECRET=${CAPTCHA_SECRET:-1x0000000000000000000000000000000AA}" >> .env echo "CAPTCHA_SITEKEY=${CAPTCHA_SITEKEY:-1x00000000000000000000AA}" >> .env docker compose down app || true docker compose up -d --build app