name: Build & Push on: push: branches: [main] workflow_dispatch: env: REGISTRY: ${{ vars.REGISTRY }} OWNER: ${{ github.repository_owner }} jobs: test-client: name: Test (client) runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: '22' - name: Install root dependencies run: npm ci - name: Install dependencies run: npm ci working-directory: ./client - name: Type check run: npm run typecheck working-directory: ./client - name: Unit tests run: npm test working-directory: ./client test-server: name: Test (server) runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version: '22' - name: Install root dependencies run: npm ci - name: Install dependencies run: npm ci working-directory: ./server - name: Prisma generate run: npx prisma generate working-directory: ./server - name: Type check run: npm run typecheck working-directory: ./server - name: Unit tests run: npm test working-directory: ./server build-server: name: Build Server needs: test-server runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Log in to registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ env.OWNER }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push server uses: docker/build-push-action@v6 with: context: . file: ./server/Dockerfile push: true tags: | ${{ env.REGISTRY }}/${{ env.OWNER }}/ticketing-server:latest ${{ env.REGISTRY }}/${{ env.OWNER }}/ticketing-server:${{ github.sha }} build-client: name: Build Client needs: test-client runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Log in to registry uses: docker/login-action@v3 with: registry: ${{ env.REGISTRY }} username: ${{ env.OWNER }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and push client uses: docker/build-push-action@v6 with: context: . file: ./client/Dockerfile push: true tags: | ${{ env.REGISTRY }}/${{ env.OWNER }}/ticketing-client:latest ${{ env.REGISTRY }}/${{ env.OWNER }}/ticketing-client:${{ github.sha }}