name: CI on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: [3.11] steps: - name: Checkout uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{ matrix.python-version }} - name: Cache pip uses: actions/cache@v4 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Install dependencies run: | python -m pip install --upgrade pip python -m pip install -r requirements.txt - name: Run tests run: | pytest -q tests - name: Upload test results (artifact) if: always() uses: actions/upload-artifact@v4 with: name: pytest-results path: tests build-image: if: github.ref == 'refs/heads/main' || github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest needs: test steps: - name: Checkout uses: actions/checkout@v4 - name: Set up QEMU and Buildx uses: docker/setup-buildx-action@v3 - name: Log in to registry (best-effort) if: ${{ github.ref == 'refs/heads/main' }} uses: docker/login-action@v3 continue-on-error: true with: registry: ${{ secrets.REGISTRY_URL }} username: ${{ secrets.REGISTRY_USERNAME }} password: ${{ secrets.REGISTRY_PASSWORD }} - name: Build (and optionally push) image uses: docker/build-push-action@v5 with: context: . file: Dockerfile push: ${{ github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && (secrets.REGISTRY_URL != '' && secrets.REGISTRY_USERNAME != '' && secrets.REGISTRY_PASSWORD != '') }} tags: | ${{ secrets.REGISTRY_URL }}/allucanget/contact.allucanget.biz:latest ${{ secrets.REGISTRY_URL }}/allucanget/contact.allucanget.biz:${{ github.sha }} - name: Upload built image metadata if: always() uses: actions/upload-artifact@v4 with: name: image-build-info path: .