name: CI on: push: branches: [main] paths-ignore: - "**/*.md" - "docs/**" - ".env.example" - "LICENSE" - "FUNDING.yml" pull_request: branches: [main] permissions: contents: read concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: ${{ github.event_name == 'pull_request' }} jobs: lint: name: Lint runs-on: ubuntu-latest timeout-minutes: 15 steps: - uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v6 with: python-version-file: ".python-version" cache: pip - name: Run pre-commit uses: pre-commit/action@v3.0.1 test: name: Test runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v6 with: python-version-file: ".python-version" cache: pip - name: Install dependencies run: | python -m pip install --upgrade pip pip install -e ".[dev]" - name: Run tests with pytest run: | pytest -nauto --cov=meshcore_hub --cov-report=xml --cov-report=term-missing --junitxml=junit.xml -o junit_family=legacy - name: Upload coverage to Codecov uses: codecov/codecov-action@v7 if: always() with: files: ./coverage.xml fail_ci_if_error: false verbose: true token: ${{ secrets.CODECOV_TOKEN }} - name: Upload test results to Codecov uses: codecov/codecov-action@v7 if: ${{ !cancelled() }} with: report_type: test_results token: ${{ secrets.CODECOV_TOKEN }} build: name: Build Package runs-on: ubuntu-latest timeout-minutes: 15 needs: [lint, test] steps: - uses: actions/checkout@v7 - name: Set up Python uses: actions/setup-python@v6 with: python-version-file: ".python-version" cache: pip - name: Install build tools run: | python -m pip install --upgrade pip pip install build - name: Build package run: python -m build - name: Upload artifacts uses: actions/upload-artifact@v7 with: name: dist path: dist/