name: CI on: push: branches: [master, main] tags: ['v*'] pull_request: branches: [master, main] jobs: lint: name: Lint runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip pip install ruff - name: Run Ruff run: ruff check src/ tests/ typecheck: name: Type Check runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install dependencies run: | python -m pip install --upgrade pip pip install -e ".[dev]" - name: Run mypy run: mypy src/ test: name: Test runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install system dependencies run: | sudo apt-get update sudo apt-get install -y libpango-1.0-0 libpangocairo-1.0-0 libgdk-pixbuf2.0-0 - name: Install dependencies run: | python -m pip install --upgrade pip pip install -e ".[dev,reports]" - name: Run pytest run: pytest --cov=src/py_dvt_ate --cov-report=xml - name: Check coverage run: | coverage report --fail-under=80 || echo "Coverage below 80% - will enforce after MVP" release: name: Release needs: [lint, typecheck, test] if: startsWith(gitea.ref, 'refs/tags/v') runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' - name: Install build tools run: | python -m pip install --upgrade pip pip install build - name: Build package run: python -m build - name: Create Release run: | TAG_NAME=${GITHUB_REF#refs/tags/} VERSION=${TAG_NAME#v} BODY=$(awk "/^## \[${VERSION}\]/{flag=1; next} /^## \\[/{flag=0} flag" CHANGELOG.md) echo "Creating release ${TAG_NAME}" RESPONSE=$(curl -s -X POST -H "Authorization: token ${GITHUB_TOKEN}" -H "Content-Type: application/json" -d "{\"tag_name\": \"${TAG_NAME}\", \"name\": \"${TAG_NAME}\", \"body\": $(echo "$BODY" | jq -Rs .)}" "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases") RELEASE_ID=$(echo "$RESPONSE" | jq -r '.id') echo "Created release ID: ${RELEASE_ID}" if [ "$RELEASE_ID" != "null" ] && [ -n "$RELEASE_ID" ]; then for file in dist/*; do echo "Uploading $(basename ${file})..." curl -s -X POST -H "Authorization: token ${GITHUB_TOKEN}" -F "attachment=@${file}" "${GITHUB_SERVER_URL}/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=$(basename ${file})" done else echo "Failed to create release: $RESPONSE" exit 1 fi env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}