name: Test and Release on: push: branches: ["**"] pull_request: branches: ["main", "master"] release: types: [published] jobs: test-backend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.x" - name: Install dependencies run: | cd backend python -m pip install --upgrade pip pip install -r requirements.txt - name: Test with pytest run: | cd backend pip install pytest pytest-cov pytest test-frontend: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - name: Use Node.js uses: actions/setup-node@v4 with: node-version: "20.x" cache: "npm" - name: Install dependencies run: | cd frontend npm ci - name: Test with NPM run: | cd frontend npm test -- run --exclude "**/*.live.test.ts" build-docker: needs: [test-backend, test-frontend] runs-on: ubuntu-latest if: github.event_name == 'release' permissions: packages: write contents: read strategy: matrix: service: [backend, frontend] steps: - uses: actions/checkout@v4 - name: Log in to Registry uses: docker/login-action@v3 with: registry: git.stws.cc username: ${{ github.actor }} password: ${{ secrets.REGISTRY_TOKEN }} - name: Extract metadata id: meta uses: docker/metadata-action@v5 with: images: git.stws.cc/${{ github.repository }}/${{ matrix.service }} tags: | type=ref,event=tag type=raw,value=latest - name: Build and Push uses: docker/build-push-action@v6 with: context: ./${{ matrix.service }} push: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}