name: CI/CD Pipeline on: push: branches: [main] pull_request: branches: [main] jobs: test: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.11" - name: Install dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Run tests run: | python -m pytest tests/ -v # - name: Run linting # run: | # python -m flake8 web/ tests/ --max-line-length=120 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/jobs:latest ${{ env.REGISTRY_URL }}/allucanget/jobs:${{ steps.meta.outputs.sha }} # deploy: # runs-on: ubuntu-latest # needs: test # if: github.ref == 'refs/heads/main' # steps: # - name: Checkout code # uses: actions/checkout@v4 # - name: Deploy to production # run: | # echo "Deploying to production..." # docker-compose up -d