name: CI compile & test & build on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: ci-fe: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js 24.x uses: actions/setup-node@v4 with: node-version: 24.x - name: Cache NPM packages uses: actions/cache@v4 with: key: npm-${{ hashFiles('./frontend/yarn.lock') }} path: | ./frontend/node_modules restore-keys: | npm-${{ hashFiles('./frontend/yarn.lock') }} npm- - name: Yarn Install run: | cd ./frontend yarn install --frozen-lockfile - name: Yarn Test run: | cd ./frontend yarn run test - name: Yarn Lint run: | cd ./frontend yarn run lint docker-fe-build: runs-on: ubuntu-latest permissions: contents: read packages: write outputs: image_tag: ${{ steps.image-tag.outputs.image_tag }} steps: - uses: actions/checkout@v4 - uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Compute frontend image tag id: image-tag run: echo "image_tag=ghcr.io/${{ github.repository_owner }}/kemkas-frontend:${GITHUB_SHA::8}" >> $GITHUB_OUTPUT - name: Build and push frontend image uses: docker/build-push-action@v5 with: context: ./frontend/ file: ./frontend/Dockerfile cache-from: type=gha cache-to: type=gha,mode=max push: true tags: | ${{ steps.image-tag.outputs.image_tag }} docker-e2e-build: runs-on: ubuntu-latest permissions: contents: read packages: write outputs: image_tag: ${{ steps.image-tag.outputs.image_tag }} steps: - uses: actions/checkout@v4 - uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Compute e2e image tag id: image-tag run: echo "image_tag=ghcr.io/${{ github.repository_owner }}/kemkas-e2e:${GITHUB_SHA::8}" >> $GITHUB_OUTPUT - name: Build and push e2e image uses: docker/build-push-action@v5 with: context: ./e2e/ file: ./e2e/Dockerfile cache-from: type=gha cache-to: type=gha,mode=max push: true tags: | ${{ steps.image-tag.outputs.image_tag }} ci-e2e-docker: runs-on: ubuntu-latest needs: - docker-fe-build - docker-e2e-build permissions: contents: read packages: read env: BACKEND_IMAGE: ${{ vars.BACKEND_IMAGE || 'ghcr.io/morbalint/kemkas-backend:b8565f8e' }} FRONTEND_IMAGE: ${{ needs.docker-fe-build.outputs.image_tag }} E2E_IMAGE: ${{ needs.docker-e2e-build.outputs.image_tag }} steps: - uses: actions/checkout@v4 - name: Create GitHub App installation token id: app-token uses: actions/create-github-app-token@v1 with: app-id: ${{ secrets.E2E_APP_ID }} private-key: ${{ secrets.E2E_APP_KEY }} owner: ${{ github.repository_owner }} repositories: | kemkas kemkas-backend - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: x-access-token password: ${{ steps.app-token.outputs.token }} - name: Pull images for test run run: docker compose -f docker-compose.e2e.yaml pull backend frontend e2e - name: Run Docker Compose E2E tests run: docker compose -f docker-compose.e2e.yaml up --no-build --abort-on-container-exit --exit-code-from e2e e2e - name: Upload Playwright HTML report if: always() uses: actions/upload-artifact@v4 with: name: playwright-report path: e2e/playwright-report if-no-files-found: ignore - name: Upload Playwright test results if: always() uses: actions/upload-artifact@v4 with: name: playwright-test-results path: e2e/test-results if-no-files-found: ignore - name: Tear down Docker Compose stack if: always() run: docker compose -f docker-compose.e2e.yaml down -v --remove-orphans # No longer used, and token expired. # deploy-to-beta: # runs-on: ubuntu-latest # needs: # - docker-fe-build # steps: # - uses: actions/checkout@v4 # with: # repository: ${{ github.repository_owner }}/kemkas-deployment # ref: refs/heads/main # ssh-key: ${{ secrets.DEPLOYMENT_REPO_DEPLOY_KEY }} # - uses: mikefarah/yq@v4 # with: # cmd: yq -i '.spec.template.spec.containers[0].image = "${{ needs.docker-fe-build.outputs.image_tag }}"' ./kemkas-beta/kemkas-fe-deployment.yaml # - run: | # git config --add user.email "beta-fe-deployment-bot@kemkas.hu" # git config --add user.name "Deployment Bot Beta FE" # git commit -a -m "deploy ${{ needs.docker-fe-build.outputs.image_tag }}" # git push