name: CI on: push: branches: [main, develop] pull_request: branches: [main, develop] jobs: test: env: APT_CACHER_NG: http://192.168.88.14:3142 DB_DRIVER: postgresql+psycopg2 DB_HOST: 192.168.88.35 DB_NAME: calminer_test DB_USER: calminer DB_PASSWORD: calminer_password runs-on: ubuntu-latest services: postgres: image: postgres:17 env: POSTGRES_USER: ${{ env.DB_USER }} POSTGRES_PASSWORD: ${{ env.DB_PASSWORD }} POSTGRES_DB: ${{ env.DB_NAME }} options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: '3.11' - name: Get pip cache dir id: pip-cache run: | echo "path=$(pip cache dir)" >> $GITEA_OUTPUT echo "Pip cache dir: $(pip cache dir)" - name: Cache pip dependencies uses: actions/cache@v4 with: path: ${{ steps.pip-cache.outputs.path }} key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt', 'requirements-test.txt') }} restore-keys: | ${{ runner.os }}-pip- - name: Update apt-cacher-ng config run: |- echo 'Acquire::http::Proxy "{{ env.APT_CACHER_NG }}";' | tee /etc/apt/apt.conf.d/01apt-cacher-ng apt-get update - name: Update system packages run: apt-get upgrade -y - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt pip install -r requirements-test.txt - name: Install Playwright system dependencies run: playwright install-deps - name: Install Playwright browsers run: playwright install - name: Run tests env: DATABASE_DRIVER: ${{ env.DB_DRIVER }} DATABASE_HOST: postgres DATABASE_PORT: 5432 DATABASE_USER: ${{ env.DB_USER }} DATABASE_PASSWORD: ${{ env.DB_PASSWORD }} DATABASE_NAME: ${{ env.DB_NAME }} run: | pytest tests/ --cov=. - name: Build Docker image run: | docker build -t calminer . build: runs-on: ubuntu-latest needs: test env: DEFAULT_BRANCH: main REGISTRY_URL: ${{ secrets.REGISTRY_URL }} REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }} REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} REGISTRY_CONTAINER_NAME: calminer steps: - name: Checkout uses: actions/checkout@v4 - name: Collect workflow metadata id: meta shell: bash run: | ref_name="${GITHUB_REF_NAME:-${GITHUB_REF##*/}}" event_name="${GITHUB_EVENT_NAME:-}" sha="${GITHUB_SHA:-}" if [ "$ref_name" = "${DEFAULT_BRANCH:-main}" ]; then echo "on_default=true" >> "$GITHUB_OUTPUT" else echo "on_default=false" >> "$GITHUB_OUTPUT" fi echo "ref_name=$ref_name" >> "$GITHUB_OUTPUT" echo "event_name=$event_name" >> "$GITHUB_OUTPUT" echo "sha=$sha" >> "$GITHUB_OUTPUT" - name: Set up QEMU and Buildx uses: docker/setup-buildx-action@v3 - name: Log in to gitea registry if: ${{ steps.meta.outputs.on_default == 'true' }} uses: docker/login-action@v3 continue-on-error: true with: registry: ${{ env.REGISTRY_URL }} username: ${{ env.REGISTRY_USERNAME }} password: ${{ env.REGISTRY_PASSWORD }} - name: Build and push image uses: docker/build-push-action@v5 with: context: . file: Dockerfile push: ${{ steps.meta.outputs.on_default == 'true' && steps.meta.outputs.event_name != 'pull_request' && (env.REGISTRY_URL != '' && env.REGISTRY_USERNAME != '' && env.REGISTRY_PASSWORD != '') }} tags: | ${{ env.REGISTRY_URL }}/allucanget/${{ env.REGISTRY_CONTAINER_NAME }}:latest ${{ env.REGISTRY_URL }}/allucanget/${{ env.REGISTRY_CONTAINER_NAME }}:${{ steps.meta.outputs.sha }}