name: CI on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: jobs: test: env: RUNNER_TOOL_CACHE: /toolcache 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: Locate pip cache directory id: pip-cache-dir # extra output for debugging run: | echo "dir=$(python -m pip cache dir)" >> "$GITHUB_OUTPUT" echo "dir=$(python -m pip cache dir)" - name: Cache pip uses: actions/cache@v4 with: path: ${{ steps.pip-cache-dir.outputs.dir }} key: ${{ runner.os }}-py-${{ matrix.python-version }}-pip-${{ hashFiles('**/requirements.txt') }} restore-keys: | ${{ runner.os }}-py-${{ matrix.python-version }}-pip- ${{ 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@v3 with: name: pytest-results path: tests build-image: 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 }} 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 registry (best-effort) 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 optionally 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/contact.allucanget.biz:latest ${{ env.REGISTRY_URL }}/allucanget/contact.allucanget.biz:${{ steps.meta.outputs.sha }}