name: CI for wichat_en1c on: release: types: [published] jobs: unit-tests: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npm --prefix common ci - run: npm --prefix authservice ci - run: npm --prefix llmservice ci - run: npm --prefix gatewayservice ci - run: npm --prefix webapp ci - run: npm --prefix gameservice ci - run: npm --prefix questionservice ci - run: npm --prefix statservice ci - run: npm --prefix authservice test -- --coverage - run: npm --prefix llmservice test -- --coverage - run: npm --prefix gatewayservice test -- --coverage - run: npm --prefix webapp test -- --coverage - run: npm --prefix gameservice test -- --coverage - run: npm --prefix questionservice test -- --coverage - run: npm --prefix statservice test -- --coverage - name: Analyze with SonarQube uses: SonarSource/sonarqube-scan-action@master env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} e2e-tests: runs-on: ubuntu-latest needs: [unit-tests] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 - run: npm --prefix common ci - run: npm --prefix authservice ci - run: npm --prefix llmservice ci - run: npm --prefix gatewayservice ci - run: npm --prefix statservice ci - run: npm --prefix webapp ci - run: npm --prefix gameservice ci - run: npm --prefix questionservice ci - run: npm --prefix webapp run build env: DISABLE_ESLINT_PLUGIN: true - run: npm --prefix webapp run test:e2e env: LLM_API_KEY: ${{ secrets.LLM_API_KEY }} LLM_API_KEY_EMPATHY: ${{ secrets.LLM_API_KEY_EMPATHY }} CRYPT_SECRET: ${{ secrets.CRYPT_SECRET }} JWT_SECRET: ${{ secrets.JWT_SECRET }} docker-push-webapp: name: Push webapp Docker Image to GitHub Packages runs-on: ubuntu-latest permissions: contents: read packages: write needs: [e2e-tests] steps: - uses: actions/checkout@v4 - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 env: API_URI: http://${{ secrets.DEPLOY_HOST }}:8000 with: name: arquisoft/wichat_en1c/webapp username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io workdir: webapp buildargs: API_URI docker-push-authservice: name: Push AuthService Docker Image to GitHub Packages runs-on: ubuntu-latest permissions: contents: read packages: write needs: [e2e-tests] steps: - uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v2 - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 with: name: arquisoft/wichat_en1c/authservice username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io dockerfile: authservice/Dockerfile docker-push-llmservice: name: Push llm service Docker Image to GitHub Packages runs-on: ubuntu-latest permissions: contents: read packages: write needs: [e2e-tests] steps: - uses: actions/checkout@v4 - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 with: name: arquisoft/wichat_en1c/llmservice username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io workdir: llmservice docker-push-gatewayservice: name: Push GatewayService Docker Image to GitHub Packages runs-on: ubuntu-latest permissions: contents: read packages: write needs: [e2e-tests] steps: - uses: actions/checkout@v4 - name: Update OpenAPI configuration run: | DEPLOY_HOST=${{ secrets.DEPLOY_HOST }} sed -i "s/SOMEIP/${DEPLOY_HOST}/g" gatewayservice/openapi.yaml - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 with: name: arquisoft/wichat_en1c/gatewayservice username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io dockerfile: gatewayservice/Dockerfile docker-push-gameservice: name: Push GameService Docker Image to GitHub Packages runs-on: ubuntu-latest permissions: contents: read packages: write needs: [e2e-tests] steps: - uses: actions/checkout@v4 - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 with: name: arquisoft/wichat_en1c/gameservice username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io dockerfile: gameservice/Dockerfile docker-push-questionservice: name: Push QuestionService Docker Image to GitHub Packages runs-on: ubuntu-latest permissions: contents: read packages: write needs: [e2e-tests] steps: - uses: actions/checkout@v4 - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 with: name: arquisoft/wichat_en1c/questionservice username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io dockerfile: questionservice/Dockerfile docker-push-statservice: name: Push StatService Docker Image to GitHub Packages runs-on: ubuntu-latest permissions: contents: read packages: write needs: [e2e-tests] steps: - uses: actions/checkout@v4 - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 with: name: arquisoft/wichat_en1c/statservice username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io dockerfile: statservice/Dockerfile deploy: name: Deploy over SSH runs-on: ubuntu-latest needs: [ docker-push-authservice, docker-push-llmservice, docker-push-gatewayservice, docker-push-webapp, docker-push-gameservice, docker-push-questionservice, docker-push-statservice, ] steps: - name: Deploy over SSH uses: fifsky/ssh-action@master with: host: ${{ secrets.DEPLOY_HOST }} user: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} command: | wget https://raw.githubusercontent.com/arquisoft/wichat_en1c/master/docker-compose.yml -O docker-compose.yml docker compose --profile prod down docker compose --profile prod up -d --pull always